{
  "id": "1064988292ef214bb3d193943152e1cd",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.8.7",
  "solcLongVersion": "0.8.7+commit.e28d00a7",
  "input": {
    "language": "Solidity",
    "sources": {
      "solidity/contracts/Keep3r.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\n/*\n\nCoded for The Keep3r Network with ♥ by\n\n██████╗░███████╗███████╗██╗  ░██╗░░░░░░░██╗░█████╗░███╗░░██╗██████╗░███████╗██████╗░██╗░░░░░░█████╗░███╗░░██╗██████╗░\n██╔══██╗██╔════╝██╔════╝██║  ░██║░░██╗░░██║██╔══██╗████╗░██║██╔══██╗██╔════╝██╔══██╗██║░░░░░██╔══██╗████╗░██║██╔══██╗\n██║░░██║█████╗░░█████╗░░██║  ░╚██╗████╗██╔╝██║░░██║██╔██╗██║██║░░██║█████╗░░██████╔╝██║░░░░░███████║██╔██╗██║██║░░██║\n██║░░██║██╔══╝░░██╔══╝░░██║  ░░████╔═████║░██║░░██║██║╚████║██║░░██║██╔══╝░░██╔══██╗██║░░░░░██╔══██║██║╚████║██║░░██║\n██████╔╝███████╗██║░░░░░██║  ░░╚██╔╝░╚██╔╝░╚█████╔╝██║░╚███║██████╔╝███████╗██║░░██║███████╗██║░░██║██║░╚███║██████╔╝\n╚═════╝░╚══════╝╚═╝░░░░░╚═╝  ░░░╚═╝░░░╚═╝░░░╚════╝░╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚══╝╚═════╝░\n\nhttps://defi.sucks\n\n*/\n\npragma solidity >=0.8.4 <0.9.0;\n\nimport './peripherals/jobs/Keep3rJobs.sol';\nimport './peripherals/keepers/Keep3rKeepers.sol';\nimport './peripherals/Keep3rAccountance.sol';\nimport './peripherals/Keep3rRoles.sol';\nimport './peripherals/Keep3rParameters.sol';\nimport './peripherals/DustCollector.sol';\n\ncontract Keep3r is DustCollector, Keep3rJobs, Keep3rKeepers {\n  constructor(\n    address _governance,\n    address _keep3rHelper,\n    address _keep3rV1,\n    address _keep3rV1Proxy,\n    address _kp3rWethPool\n  ) Keep3rParameters(_keep3rHelper, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(_governance) DustCollector() {}\n}\n"
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobs.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './Keep3rJobDisputable.sol';\nimport './Keep3rJobWorkable.sol';\nimport './Keep3rJobManager.sol';\n\nabstract contract Keep3rJobs is Keep3rJobDisputable, Keep3rJobManager, Keep3rJobWorkable {}\n"
      },
      "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './Keep3rKeeperDisputable.sol';\n\nabstract contract Keep3rKeepers is Keep3rKeeperDisputable {}\n"
      },
      "solidity/contracts/peripherals/Keep3rAccountance.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\n\nabstract contract Keep3rAccountance is IKeep3rAccountance {\n  using EnumerableSet for EnumerableSet.AddressSet;\n\n  /// @notice List of all enabled keepers\n  EnumerableSet.AddressSet internal _keepers;\n\n  /// @inheritdoc IKeep3rAccountance\n  mapping(address => uint256) public override workCompleted;\n\n  /// @inheritdoc IKeep3rAccountance\n  mapping(address => uint256) public override firstSeen;\n\n  /// @inheritdoc IKeep3rAccountance\n  mapping(address => bool) public override disputes;\n\n  /// @inheritdoc IKeep3rAccountance\n  /// @notice Mapping (job => bonding => amount)\n  mapping(address => mapping(address => uint256)) public override bonds;\n\n  /// @inheritdoc IKeep3rAccountance\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\n\n  /// @notice The current liquidity credits available for a job\n  mapping(address => uint256) internal _jobLiquidityCredits;\n\n  /// @notice Map the address of a job to its correspondent periodCredits\n  mapping(address => uint256) internal _jobPeriodCredits;\n\n  /// @notice Enumerable array of Job Tokens for Credits\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\n\n  /// @notice List of liquidities that a job has (job => liquidities)\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\n\n  /// @notice Liquidity pool to observe\n  mapping(address => address) internal _liquidityPool;\n\n  /// @notice Tracks if a pool has KP3R as token0\n  mapping(address => bool) internal _isKP3RToken0;\n\n  /// @inheritdoc IKeep3rAccountance\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\n\n  /// @inheritdoc IKeep3rAccountance\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\n\n  /// @inheritdoc IKeep3rAccountance\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\n\n  /// @inheritdoc IKeep3rAccountance\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\n\n  /// @inheritdoc IKeep3rAccountance\n  mapping(address => bool) public override hasBonded;\n\n  /// @notice List of all enabled jobs\n  EnumerableSet.AddressSet internal _jobs;\n\n  /// @inheritdoc IKeep3rAccountance\n  function jobs() external view override returns (address[] memory _list) {\n    _list = _jobs.values();\n  }\n\n  /// @inheritdoc IKeep3rAccountance\n  function keepers() external view override returns (address[] memory _list) {\n    _list = _keepers.values();\n  }\n}\n"
      },
      "solidity/contracts/peripherals/Keep3rRoles.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\nimport './Governable.sol';\n\ncontract Keep3rRoles is IKeep3rRoles, Governable {\n  /// @inheritdoc IKeep3rRoles\n  mapping(address => bool) public override slashers;\n\n  /// @inheritdoc IKeep3rRoles\n  mapping(address => bool) public override disputers;\n\n  constructor(address _governance) Governable(_governance) {}\n\n  /// @inheritdoc IKeep3rRoles\n  function addSlasher(address _slasher) external override onlyGovernance {\n    if (slashers[_slasher]) revert SlasherExistent();\n    slashers[_slasher] = true;\n    emit SlasherAdded(_slasher);\n  }\n\n  /// @inheritdoc IKeep3rRoles\n  function removeSlasher(address _slasher) external override onlyGovernance {\n    if (!slashers[_slasher]) revert SlasherUnexistent();\n    delete slashers[_slasher];\n    emit SlasherRemoved(_slasher);\n  }\n\n  /// @inheritdoc IKeep3rRoles\n  function addDisputer(address _disputer) external override onlyGovernance {\n    if (disputers[_disputer]) revert DisputerExistent();\n    disputers[_disputer] = true;\n    emit DisputerAdded(_disputer);\n  }\n\n  /// @inheritdoc IKeep3rRoles\n  function removeDisputer(address _disputer) external override onlyGovernance {\n    if (!disputers[_disputer]) revert DisputerUnexistent();\n    delete disputers[_disputer];\n    emit DisputerRemoved(_disputer);\n  }\n\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\n  modifier onlySlasher {\n    if (!slashers[msg.sender]) revert OnlySlasher();\n    _;\n  }\n\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\n  modifier onlyDisputer {\n    if (!disputers[msg.sender]) revert OnlyDisputer();\n    _;\n  }\n}\n"
      },
      "solidity/contracts/peripherals/Keep3rParameters.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../interfaces/IKeep3rHelper.sol';\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\nimport './Keep3rAccountance.sol';\nimport './Keep3rRoles.sol';\n\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\n  /// @inheritdoc IKeep3rParameters\n  address public override keep3rV1;\n\n  /// @inheritdoc IKeep3rParameters\n  address public override keep3rV1Proxy;\n\n  /// @inheritdoc IKeep3rParameters\n  address public override keep3rHelper;\n\n  /// @inheritdoc IKeep3rParameters\n  address public override kp3rWethPool;\n\n  /// @inheritdoc IKeep3rParameters\n  uint256 public override bondTime = 3 days;\n\n  /// @inheritdoc IKeep3rParameters\n  uint256 public override unbondTime = 14 days;\n\n  /// @inheritdoc IKeep3rParameters\n  uint256 public override liquidityMinimum = 3 ether;\n\n  /// @inheritdoc IKeep3rParameters\n  uint256 public override rewardPeriodTime = 5 days;\n\n  /// @inheritdoc IKeep3rParameters\n  uint256 public override inflationPeriod = 34 days;\n\n  /// @inheritdoc IKeep3rParameters\n  uint256 public override fee = 30;\n\n  /// @notice The base that will be used to calculate the fee\n  uint256 internal constant _BASE = 10_000;\n\n  /// @notice The minimum reward period\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\n\n  constructor(\n    address _keep3rHelper,\n    address _keep3rV1,\n    address _keep3rV1Proxy,\n    address _kp3rWethPool\n  ) {\n    keep3rHelper = _keep3rHelper;\n    keep3rV1 = _keep3rV1;\n    keep3rV1Proxy = _keep3rV1Proxy;\n    kp3rWethPool = _kp3rWethPool;\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\n  }\n\n  /// @inheritdoc IKeep3rParameters\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\n    keep3rHelper = _keep3rHelper;\n    emit Keep3rHelperChange(_keep3rHelper);\n  }\n\n  /// @inheritdoc IKeep3rParameters\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\n    keep3rV1 = _keep3rV1;\n    emit Keep3rV1Change(_keep3rV1);\n  }\n\n  /// @inheritdoc IKeep3rParameters\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\n    keep3rV1Proxy = _keep3rV1Proxy;\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\n  }\n\n  /// @inheritdoc IKeep3rParameters\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\n    kp3rWethPool = _kp3rWethPool;\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\n    emit Kp3rWethPoolChange(_kp3rWethPool);\n  }\n\n  /// @inheritdoc IKeep3rParameters\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\n    bondTime = _bondTime;\n    emit BondTimeChange(_bondTime);\n  }\n\n  /// @inheritdoc IKeep3rParameters\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\n    unbondTime = _unbondTime;\n    emit UnbondTimeChange(_unbondTime);\n  }\n\n  /// @inheritdoc IKeep3rParameters\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\n    liquidityMinimum = _liquidityMinimum;\n    emit LiquidityMinimumChange(_liquidityMinimum);\n  }\n\n  /// @inheritdoc IKeep3rParameters\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\n    rewardPeriodTime = _rewardPeriodTime;\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\n  }\n\n  /// @inheritdoc IKeep3rParameters\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\n    inflationPeriod = _inflationPeriod;\n    emit InflationPeriodChange(_inflationPeriod);\n  }\n\n  /// @inheritdoc IKeep3rParameters\n  function setFee(uint256 _fee) external override onlyGovernance {\n    fee = _fee;\n    emit FeeChange(_fee);\n  }\n}\n"
      },
      "solidity/contracts/peripherals/DustCollector.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.4 <0.9.0;\n\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\nimport '../../contracts/peripherals/Governable.sol';\nimport '../../interfaces/peripherals/IDustCollector.sol';\n\nabstract contract DustCollector is IDustCollector, Governable {\n  using SafeERC20 for IERC20;\n\n  address internal constant _ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\n\n  function sendDust(\n    address _token,\n    uint256 _amount,\n    address _to\n  ) external override onlyGovernance {\n    if (_to == address(0)) revert ZeroAddress();\n    if (_token == _ETH_ADDRESS) {\n      payable(_to).transfer(_amount);\n    } else {\n      IERC20(_token).safeTransfer(_to, _amount);\n    }\n    emit DustSent(_token, _amount, _to);\n  }\n}\n"
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './Keep3rJobFundableCredits.sol';\nimport './Keep3rJobFundableLiquidity.sol';\nimport '../Keep3rDisputable.sol';\n\nabstract contract Keep3rJobDisputable is IKeep3rJobDisputable, Keep3rDisputable, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\n  using EnumerableSet for EnumerableSet.AddressSet;\n  using SafeERC20 for IERC20;\n\n  /// @inheritdoc IKeep3rJobDisputable\n  function slashTokenFromJob(\n    address _job,\n    address _token,\n    uint256 _amount\n  ) external override onlySlasher {\n    if (!disputes[_job]) revert NotDisputed();\n    if (!_jobTokens[_job].contains(_token)) revert JobTokenUnexistent();\n    if (jobTokenCredits[_job][_token] < _amount) revert JobTokenInsufficient();\n\n    try IERC20(_token).transfer(governance, _amount) {} catch {}\n    jobTokenCredits[_job][_token] -= _amount;\n    if (jobTokenCredits[_job][_token] == 0) {\n      _jobTokens[_job].remove(_token);\n    }\n\n    emit JobSlashToken(_job, _token, msg.sender, _amount);\n  }\n\n  /// @inheritdoc IKeep3rJobDisputable\n  function slashLiquidityFromJob(\n    address _job,\n    address _liquidity,\n    uint256 _amount\n  ) external override onlySlasher {\n    if (!disputes[_job]) revert NotDisputed();\n\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\n    try IERC20(_liquidity).transfer(governance, _amount) {} catch {}\n    emit JobSlashLiquidity(_job, _liquidity, msg.sender, _amount);\n  }\n}\n"
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './Keep3rJobMigration.sol';\nimport '../../../interfaces/IKeep3rHelper.sol';\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\n\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\n\nabstract contract Keep3rJobWorkable is IKeep3rJobWorkable, Keep3rJobMigration {\n  using EnumerableSet for EnumerableSet.AddressSet;\n  using SafeERC20 for IERC20;\n\n  uint256 internal _initialGas;\n\n  /// @inheritdoc IKeep3rJobWorkable\n  function isKeeper(address _keeper) external override returns (bool _isKeeper) {\n    _initialGas = _getGasLeft();\n    if (_keepers.contains(_keeper)) {\n      emit KeeperValidation(_initialGas);\n      return true;\n    }\n  }\n\n  /// @inheritdoc IKeep3rJobWorkable\n  function isBondedKeeper(\n    address _keeper,\n    address _bond,\n    uint256 _minBond,\n    uint256 _earned,\n    uint256 _age\n  ) public override returns (bool _isBondedKeeper) {\n    _initialGas = _getGasLeft();\n    if (\n      _keepers.contains(_keeper) &&\n      bonds[_keeper][_bond] >= _minBond &&\n      workCompleted[_keeper] >= _earned &&\n      block.timestamp - firstSeen[_keeper] >= _age\n    ) {\n      emit KeeperValidation(_initialGas);\n      return true;\n    }\n  }\n\n  /// @inheritdoc IKeep3rJobWorkable\n  function worked(address _keeper) external virtual override {\n    address _job = msg.sender;\n    if (disputes[_job]) revert JobDisputed();\n    if (!_jobs.contains(_job)) revert JobUnapproved();\n\n    if (_updateJobCreditsIfNeeded(_job)) {\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\n    }\n\n    (uint256 _boost, uint256 _oneEthQuote, uint256 _extraGas) = IKeep3rHelper(keep3rHelper).getPaymentParams(bonds[_keeper][keep3rV1]);\n\n    uint256 _gasLeft = _getGasLeft();\n    uint256 _payment = _calculatePayment(_gasLeft, _extraGas, _oneEthQuote, _boost);\n\n    if (_payment > _jobLiquidityCredits[_job]) {\n      _rewardJobCredits(_job);\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\n\n      _gasLeft = _getGasLeft();\n      _payment = _calculatePayment(_gasLeft, _extraGas, _oneEthQuote, _boost);\n    }\n\n    _bondedPayment(_job, _keeper, _payment);\n    emit KeeperWork(keep3rV1, _job, _keeper, _payment, _gasLeft);\n  }\n\n  /// @inheritdoc IKeep3rJobWorkable\n  function bondedPayment(address _keeper, uint256 _payment) public override {\n    address _job = msg.sender;\n\n    if (disputes[_job]) revert JobDisputed();\n    if (!_jobs.contains(_job)) revert JobUnapproved();\n\n    if (_updateJobCreditsIfNeeded(_job)) {\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\n    }\n\n    if (_payment > _jobLiquidityCredits[_job]) {\n      _rewardJobCredits(_job);\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\n    }\n\n    _bondedPayment(_job, _keeper, _payment);\n    emit KeeperWork(keep3rV1, _job, _keeper, _payment, _getGasLeft());\n  }\n\n  /// @inheritdoc IKeep3rJobWorkable\n  function directTokenPayment(\n    address _token,\n    address _keeper,\n    uint256 _amount\n  ) external override {\n    address _job = msg.sender;\n\n    if (disputes[_job]) revert JobDisputed();\n    if (disputes[_keeper]) revert Disputed();\n    if (!_jobs.contains(_job)) revert JobUnapproved();\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientFunds();\n    jobTokenCredits[_job][_token] -= _amount;\n    IERC20(_token).safeTransfer(_keeper, _amount);\n    emit KeeperWork(_token, _job, _keeper, _amount, _getGasLeft());\n  }\n\n  function _bondedPayment(\n    address _job,\n    address _keeper,\n    uint256 _payment\n  ) internal {\n    if (_payment > _jobLiquidityCredits[_job]) revert InsufficientFunds();\n\n    workedAt[_job] = block.timestamp;\n    _jobLiquidityCredits[_job] -= _payment;\n    bonds[_keeper][keep3rV1] += _payment;\n    workCompleted[_keeper] += _payment;\n  }\n\n  /// @notice Calculate amount to be payed in KP3R, taking into account multiple parameters\n  /// @param _gasLeft Amount of gas left after working the job\n  /// @param _extraGas Amount of expected unaccounted gas\n  /// @param _oneEthQuote Amount of KP3R equivalent to 1 ETH\n  /// @param _boost Reward given to the keeper for having bonded KP3R tokens\n  /// @return _payment Amount to be payed in KP3R tokens\n  function _calculatePayment(\n    uint256 _gasLeft,\n    uint256 _extraGas,\n    uint256 _oneEthQuote,\n    uint256 _boost\n  ) internal view returns (uint256 _payment) {\n    uint256 _accountedGas = _initialGas - _gasLeft + _extraGas;\n    _payment = (((_accountedGas * _boost) / _BASE) * _oneEthQuote) / 1 ether;\n  }\n\n  /// @notice Return the gas left and add 1/64 in order to match real gas left at first level of depth (EIP-150)\n  /// @return _gasLeft Amount of gas left recording taking into account EIP-150\n  function _getGasLeft() internal view returns (uint256 _gasLeft) {\n    _gasLeft = (gasleft() * 64) / 63;\n  }\n}\n"
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './Keep3rJobOwnership.sol';\nimport '../Keep3rRoles.sol';\nimport '../Keep3rParameters.sol';\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\n\nabstract contract Keep3rJobManager is IKeep3rJobManager, Keep3rJobOwnership, Keep3rRoles, Keep3rParameters {\n  using EnumerableSet for EnumerableSet.AddressSet;\n\n  /// @inheritdoc IKeep3rJobManager\n  function addJob(address _job) external override {\n    if (_jobs.contains(_job)) revert JobAlreadyAdded();\n    if (hasBonded[_job]) revert AlreadyAKeeper();\n    _jobs.add(_job);\n    jobOwner[_job] = msg.sender;\n    emit JobAddition(msg.sender, _job);\n  }\n}\n"
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './Keep3rJobOwnership.sol';\nimport '../Keep3rAccountance.sol';\nimport '../Keep3rParameters.sol';\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\n\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\nimport '@openzeppelin/contracts/utils/math/Math.sol';\n\nabstract contract Keep3rJobFundableCredits is IKeep3rJobFundableCredits, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\n  using EnumerableSet for EnumerableSet.AddressSet;\n  using SafeERC20 for IERC20;\n\n  /// @notice Cooldown between withdrawals\n  uint256 internal constant _WITHDRAW_TOKENS_COOLDOWN = 1 minutes;\n\n  /// @inheritdoc IKeep3rJobFundableCredits\n  mapping(address => mapping(address => uint256)) public override jobTokenCreditsAddedAt;\n\n  /// @inheritdoc IKeep3rJobFundableCredits\n  function addTokenCreditsToJob(\n    address _job,\n    address _token,\n    uint256 _amount\n  ) external override nonReentrant {\n    if (!_jobs.contains(_job)) revert JobUnavailable();\n    // KP3R shouldn't be used for direct token payments\n    if (_token == keep3rV1) revert TokenUnallowed();\n    uint256 _before = IERC20(_token).balanceOf(address(this));\n    IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\n    uint256 _received = IERC20(_token).balanceOf(address(this)) - _before;\n    uint256 _tokenFee = (_received * fee) / _BASE;\n    jobTokenCredits[_job][_token] += _received - _tokenFee;\n    jobTokenCreditsAddedAt[_job][_token] = block.timestamp;\n    IERC20(_token).safeTransfer(governance, _tokenFee);\n    _jobTokens[_job].add(_token);\n\n    emit TokenCreditAddition(_job, _token, msg.sender, _received);\n  }\n\n  /// @inheritdoc IKeep3rJobFundableCredits\n  function withdrawTokenCreditsFromJob(\n    address _job,\n    address _token,\n    uint256 _amount,\n    address _receiver\n  ) external override nonReentrant onlyJobOwner(_job) {\n    if (block.timestamp <= jobTokenCreditsAddedAt[_job][_token] + _WITHDRAW_TOKENS_COOLDOWN) revert JobTokenCreditsLocked();\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientJobTokenCredits();\n    if (disputes[_job]) revert JobDisputed();\n\n    jobTokenCredits[_job][_token] -= _amount;\n    IERC20(_token).safeTransfer(_receiver, _amount);\n\n    if (jobTokenCredits[_job][_token] == 0) {\n      _jobTokens[_job].remove(_token);\n    }\n\n    emit TokenCreditWithdrawal(_job, _token, _receiver, _amount);\n  }\n}\n"
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './Keep3rJobOwnership.sol';\nimport '../Keep3rAccountance.sol';\nimport '../Keep3rParameters.sol';\nimport '../../../interfaces/IPairManager.sol';\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\n\nimport '../../libraries/FullMath.sol';\n\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\nimport '@openzeppelin/contracts/utils/math/Math.sol';\n\nabstract contract Keep3rJobFundableLiquidity is IKeep3rJobFundableLiquidity, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\n  using EnumerableSet for EnumerableSet.AddressSet;\n  using SafeERC20 for IERC20;\n\n  /// @notice List of liquidities that are accepted in the system\n  EnumerableSet.AddressSet internal _approvedLiquidities;\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  mapping(address => mapping(address => uint256)) public override liquidityAmount;\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  mapping(address => uint256) public override rewardedAt;\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  mapping(address => uint256) public override workedAt;\n\n  /// @notice Tracks an address and returns its TickCache\n  mapping(address => TickCache) internal _tick;\n\n  // Views\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  function approvedLiquidities() external view override returns (address[] memory _list) {\n    _list = _approvedLiquidities.values();\n  }\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  function jobPeriodCredits(address _job) public view override returns (uint256 _periodCredits) {\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\n      address _liquidity = _jobLiquidities[_job].at(i);\n      if (_approvedLiquidities.contains(_liquidity)) {\n        TickCache memory _tickCache = observeLiquidity(_liquidity);\n        if (_tickCache.period != 0) {\n          int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\n          _periodCredits += _getReward(\n            IKeep3rHelper(keep3rHelper).getKP3RsAtTick(liquidityAmount[_job][_liquidity], _tickDifference, rewardPeriodTime)\n          );\n        }\n      }\n    }\n  }\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  function jobLiquidityCredits(address _job) public view override returns (uint256 _liquidityCredits) {\n    uint256 _periodCredits = jobPeriodCredits(_job);\n\n    // If the job was rewarded in the past 1 period time\n    if ((block.timestamp - rewardedAt[_job]) < rewardPeriodTime) {\n      // If the job has period credits, update minted job credits to new twap\n      _liquidityCredits = _periodCredits > 0\n        ? (_jobLiquidityCredits[_job] * _periodCredits) / _jobPeriodCredits[_job] // If the job has period credits, return remaining job credits updated to new twap\n        : _jobLiquidityCredits[_job]; // If not, return remaining credits, forced credits should not be updated\n    } else {\n      // Else return a full period worth of credits if current credits have expired\n      _liquidityCredits = _periodCredits;\n    }\n  }\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  function totalJobCredits(address _job) external view override returns (uint256 _credits) {\n    uint256 _periodCredits = jobPeriodCredits(_job);\n    uint256 _cooldown = block.timestamp;\n\n    if ((rewardedAt[_job] > _period(block.timestamp - rewardPeriodTime))) {\n      // Will calculate cooldown if it outdated\n      if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\n        // Will calculate cooldown from last reward reference in this period\n        _cooldown -= (rewardedAt[_job] + rewardPeriodTime);\n      } else {\n        // Will calculate cooldown from last reward timestamp\n        _cooldown -= rewardedAt[_job];\n      }\n    } else {\n      // Will calculate cooldown from period start if expired\n      _cooldown -= _period(block.timestamp);\n    }\n    _credits = jobLiquidityCredits(_job) + _phase(_cooldown, _periodCredits);\n  }\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view override returns (uint256 _periodCredits) {\n    if (_approvedLiquidities.contains(_liquidity)) {\n      TickCache memory _tickCache = observeLiquidity(_liquidity);\n      if (_tickCache.period != 0) {\n        int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\n        return _getReward(IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime));\n      }\n    }\n  }\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  function observeLiquidity(address _liquidity) public view virtual override returns (TickCache memory _tickCache) {\n    if (_tick[_liquidity].period == _period(block.timestamp)) {\n      // Will return cached twaps if liquidity is updated\n      _tickCache = _tick[_liquidity];\n    } else {\n      bool success;\n      uint256 lastPeriod = _period(block.timestamp - rewardPeriodTime);\n\n      if (_tick[_liquidity].period == lastPeriod) {\n        // Will only ask for current period accumulator if liquidity is outdated\n        uint32[] memory _secondsAgo = new uint32[](1);\n        int56 previousTick = _tick[_liquidity].current;\n\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\n\n        (_tickCache.current, , success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\n\n        _tickCache.difference = _tickCache.current - previousTick;\n      } else if (_tick[_liquidity].period < lastPeriod) {\n        // Will ask for 2 accumulators if liquidity is expired\n        uint32[] memory _secondsAgo = new uint32[](2);\n\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\n        _secondsAgo[1] = uint32(block.timestamp - _period(block.timestamp) + rewardPeriodTime);\n\n        int56 _tickCumulative2;\n        (_tickCache.current, _tickCumulative2, success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\n\n        _tickCache.difference = _tickCache.current - _tickCumulative2;\n      }\n      if (success) {\n        _tickCache.period = _period(block.timestamp);\n      } else {\n        delete _tickCache.period;\n      }\n    }\n  }\n\n  // Methods\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external override onlyGovernance {\n    if (!_jobs.contains(_job)) revert JobUnavailable();\n    _settleJobAccountance(_job);\n    _jobLiquidityCredits[_job] += _amount;\n    emit LiquidityCreditsForced(_job, rewardedAt[_job], _jobLiquidityCredits[_job]);\n  }\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  function approveLiquidity(address _liquidity) external virtual override onlyGovernance {\n    if (!_approvedLiquidities.add(_liquidity)) revert LiquidityPairApproved();\n    _liquidityPool[_liquidity] = IPairManager(_liquidity).pool();\n    _isKP3RToken0[_liquidity] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_liquidityPool[_liquidity]);\n    _tick[_liquidity] = observeLiquidity(_liquidity);\n    emit LiquidityApproval(_liquidity);\n  }\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  function revokeLiquidity(address _liquidity) external override onlyGovernance {\n    if (!_approvedLiquidities.remove(_liquidity)) revert LiquidityPairUnexistent();\n    emit LiquidityRevocation(_liquidity);\n  }\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  function addLiquidityToJob(\n    address _job,\n    address _liquidity,\n    uint256 _amount\n  ) external override nonReentrant {\n    if (!_approvedLiquidities.contains(_liquidity)) revert LiquidityPairUnapproved();\n    if (!_jobs.contains(_job)) revert JobUnavailable();\n\n    _jobLiquidities[_job].add(_liquidity);\n\n    _settleJobAccountance(_job);\n\n    if (_quoteLiquidity(liquidityAmount[_job][_liquidity] + _amount, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\n\n    emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\n\n    IERC20(_liquidity).safeTransferFrom(msg.sender, address(this), _amount);\n    liquidityAmount[_job][_liquidity] += _amount;\n    _jobPeriodCredits[_job] += _getReward(_quoteLiquidity(_amount, _liquidity));\n    emit LiquidityAddition(_job, _liquidity, msg.sender, _amount);\n  }\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  function unbondLiquidityFromJob(\n    address _job,\n    address _liquidity,\n    uint256 _amount\n  ) external override onlyJobOwner(_job) {\n    canWithdrawAfter[_job][_liquidity] = block.timestamp + unbondTime;\n    pendingUnbonds[_job][_liquidity] += _amount;\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\n\n    uint256 _remainingLiquidity = liquidityAmount[_job][_liquidity];\n    if (_remainingLiquidity > 0 && _quoteLiquidity(_remainingLiquidity, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\n\n    emit Unbonding(_job, _liquidity, _amount);\n  }\n\n  /// @inheritdoc IKeep3rJobFundableLiquidity\n  function withdrawLiquidityFromJob(\n    address _job,\n    address _liquidity,\n    address _receiver\n  ) external override onlyJobOwner(_job) {\n    if (_receiver == address(0)) revert ZeroAddress();\n    if (pendingUnbonds[_job][_liquidity] == 0) revert UnbondsUnexistent();\n    if (canWithdrawAfter[_job][_liquidity] >= block.timestamp) revert UnbondsLocked();\n    if (disputes[_job]) revert Disputed();\n\n    uint256 _amount = pendingUnbonds[_job][_liquidity];\n\n    delete pendingUnbonds[_job][_liquidity];\n    delete canWithdrawAfter[_job][_liquidity];\n\n    IERC20(_liquidity).safeTransfer(_receiver, _amount);\n    emit LiquidityWithdrawal(_job, _liquidity, _receiver, _amount);\n  }\n\n  // Internal functions\n\n  /// @notice Updates or rewards job liquidity credits depending on time since last job reward\n  function _updateJobCreditsIfNeeded(address _job) internal returns (bool _rewarded) {\n    if (rewardedAt[_job] < _period(block.timestamp)) {\n      // Will exit function if job has been rewarded in current period\n      if (rewardedAt[_job] <= _period(block.timestamp - rewardPeriodTime)) {\n        // Will reset job to period syncronicity if a full period passed without rewards\n        _updateJobPeriod(_job);\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\n        rewardedAt[_job] = _period(block.timestamp);\n        _rewarded = true;\n      } else if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\n        // Will reset job's syncronicity if last reward was more than epoch ago\n        _updateJobPeriod(_job);\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\n        rewardedAt[_job] += rewardPeriodTime;\n        _rewarded = true;\n      } else if (workedAt[_job] < _period(block.timestamp)) {\n        // First keeper on period has to update job accountance to current twaps\n        uint256 previousPeriodCredits = _jobPeriodCredits[_job];\n        _updateJobPeriod(_job);\n        _jobLiquidityCredits[_job] = (_jobLiquidityCredits[_job] * _jobPeriodCredits[_job]) / previousPeriodCredits;\n        // Updating job accountance does not reward job\n      }\n    }\n  }\n\n  /// @notice Only called if _jobLiquidityCredits < payment\n  function _rewardJobCredits(address _job) internal {\n    /// @notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)\n    /* WARNING: this allows to top up _jobLiquidityCredits to a max of 1.99 but have to spend at least 1 */\n    _jobLiquidityCredits[_job] += _phase(block.timestamp - rewardedAt[_job], _jobPeriodCredits[_job]);\n    rewardedAt[_job] = block.timestamp;\n  }\n\n  /// @notice Updates accountance for _jobPeriodCredits\n  function _updateJobPeriod(address _job) internal {\n    _jobPeriodCredits[_job] = _calculateJobPeriodCredits(_job);\n  }\n\n  /// @notice Quotes the outdated job liquidities and calculates _periodCredits\n  /// @dev This function is also responsible for keeping the KP3R/WETH quote updated\n  function _calculateJobPeriodCredits(address _job) internal returns (uint256 _periodCredits) {\n    if (_tick[kp3rWethPool].period != _period(block.timestamp)) {\n      // Updates KP3R/WETH quote if needed\n      _tick[kp3rWethPool] = observeLiquidity(kp3rWethPool);\n    }\n\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\n      address _liquidity = _jobLiquidities[_job].at(i);\n      if (_approvedLiquidities.contains(_liquidity)) {\n        if (_tick[_liquidity].period != _period(block.timestamp)) {\n          // Updates liquidity cache only if needed\n          _tick[_liquidity] = observeLiquidity(_liquidity);\n        }\n        _periodCredits += _getReward(_quoteLiquidity(liquidityAmount[_job][_liquidity], _liquidity));\n      }\n    }\n  }\n\n  /// @notice Updates job accountance calculating the impact of the unbonded liquidity amount\n  function _unbondLiquidityFromJob(\n    address _job,\n    address _liquidity,\n    uint256 _amount\n  ) internal nonReentrant {\n    if (!_jobLiquidities[_job].contains(_liquidity)) revert JobLiquidityUnexistent();\n    if (liquidityAmount[_job][_liquidity] < _amount) revert JobLiquidityInsufficient();\n\n    // Ensures current twaps in job liquidities\n    _updateJobPeriod(_job);\n    uint256 _periodCreditsToRemove = _getReward(_quoteLiquidity(_amount, _liquidity));\n\n    // A liquidity can be revoked causing a job to have 0 periodCredits\n    if (_jobPeriodCredits[_job] > 0) {\n      // Removes a % correspondant to a full rewardPeriodTime for the liquidity withdrawn vs all of the liquidities\n      _jobLiquidityCredits[_job] -= (_jobLiquidityCredits[_job] * _periodCreditsToRemove) / _jobPeriodCredits[_job];\n      _jobPeriodCredits[_job] -= _periodCreditsToRemove;\n    }\n\n    liquidityAmount[_job][_liquidity] -= _amount;\n    if (liquidityAmount[_job][_liquidity] == 0) {\n      _jobLiquidities[_job].remove(_liquidity);\n    }\n  }\n\n  /// @notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed\n  function _phase(uint256 _timePassed, uint256 _multiplier) internal view returns (uint256 _result) {\n    if (_timePassed < rewardPeriodTime) {\n      _result = (_timePassed * _multiplier) / rewardPeriodTime;\n    } else _result = _multiplier;\n  }\n\n  /// @notice Returns the start of the period of the provided timestamp\n  function _period(uint256 _timestamp) internal view returns (uint256 _periodTimestamp) {\n    return _timestamp - (_timestamp % rewardPeriodTime);\n  }\n\n  /// @notice Calculates relation between rewardPeriod and inflationPeriod\n  function _getReward(uint256 _baseAmount) internal view returns (uint256 _credits) {\n    return FullMath.mulDiv(_baseAmount, rewardPeriodTime, inflationPeriod);\n  }\n\n  /// @notice Returns underlying KP3R amount for a given liquidity amount\n  function _quoteLiquidity(uint256 _amount, address _liquidity) internal view virtual returns (uint256 _quote) {\n    if (_tick[_liquidity].period != 0) {\n      int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tick[_liquidity].difference : -_tick[_liquidity].difference;\n      _quote = IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime);\n    }\n  }\n\n  /// @notice Updates job credits to current quotes and rewards job's pending minted credits\n  /// @dev Ensures a maximum of 1 period of credits\n  function _settleJobAccountance(address _job) internal virtual {\n    _updateJobCreditsIfNeeded(_job);\n    _rewardJobCredits(_job);\n    _jobLiquidityCredits[_job] = Math.min(_jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\n  }\n}\n"
      },
      "solidity/contracts/peripherals/Keep3rDisputable.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './Keep3rParameters.sol';\nimport './Keep3rRoles.sol';\nimport '../../interfaces/peripherals/IKeep3rDisputable.sol';\n\nabstract contract Keep3rDisputable is IKeep3rDisputable, Keep3rAccountance, Keep3rRoles {\n  /// @inheritdoc IKeep3rDisputable\n  function dispute(address _jobOrKeeper) external override onlyDisputer {\n    if (disputes[_jobOrKeeper]) revert AlreadyDisputed();\n    disputes[_jobOrKeeper] = true;\n    emit Dispute(_jobOrKeeper, msg.sender);\n  }\n\n  /// @inheritdoc IKeep3rDisputable\n  function resolve(address _jobOrKeeper) external override onlyDisputer {\n    if (!disputes[_jobOrKeeper]) revert NotDisputed();\n    disputes[_jobOrKeeper] = false;\n    emit Resolve(_jobOrKeeper, msg.sender);\n  }\n}\n"
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\n\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\n  /// @inheritdoc IKeep3rJobOwnership\n  mapping(address => address) public override jobOwner;\n\n  /// @inheritdoc IKeep3rJobOwnership\n  mapping(address => address) public override jobPendingOwner;\n\n  /// @inheritdoc IKeep3rJobOwnership\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\n    jobPendingOwner[_job] = _newOwner;\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\n  }\n\n  /// @inheritdoc IKeep3rJobOwnership\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\n    address _previousOwner = jobOwner[_job];\n\n    jobOwner[_job] = jobPendingOwner[_job];\n    delete jobPendingOwner[_job];\n\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\n  }\n\n  modifier onlyJobOwner(address _job) {\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\n    _;\n  }\n\n  modifier onlyPendingJobOwner(address _job) {\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\n    _;\n  }\n}\n"
      },
      "solidity/interfaces/peripherals/IKeep3rJobs.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\n/// @title Keep3rJobFundableCredits contract\n/// @notice Handles the addition and withdrawal of credits from a job\ninterface IKeep3rJobFundableCredits {\n  // Events\n\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\n  /// @param _job The address of the job being credited\n  /// @param _token The address of the token being provided\n  /// @param _provider The user that calls the function\n  /// @param _amount The amount of credit being added to the job\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\n\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\n  /// @param _job The address of the job from which the credits are withdrawn\n  /// @param _token The credit being withdrawn from the job\n  /// @param _receiver The user that receives the tokens\n  /// @param _amount The amount of credit withdrawn\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\n\n  // Errors\n\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\n  error TokenUnallowed();\n\n  /// @notice Throws when the token withdraw cooldown has not yet passed\n  error JobTokenCreditsLocked();\n\n  /// @notice Throws when the user tries to withdraw more tokens than it has\n  error InsufficientJobTokenCredits();\n\n  // Variables\n\n  /// @notice Last block where tokens were added to the job\n  /// @param _job The address of the job credited\n  /// @param _token The address of the token credited\n  /// @return _timestamp The last block where tokens were added to the job\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\n\n  // Methods\n\n  /// @notice Add credit to a job to be paid out for work\n  /// @param _job The address of the job being credited\n  /// @param _token The address of the token being credited\n  /// @param _amount The amount of credit being added\n  function addTokenCreditsToJob(\n    address _job,\n    address _token,\n    uint256 _amount\n  ) external;\n\n  /// @notice Withdraw credit from a job\n  /// @param _job The address of the job from which the credits are withdrawn\n  /// @param _token The address of the token being withdrawn\n  /// @param _amount The amount of token to be withdrawn\n  /// @param _receiver The user that will receive tokens\n  function withdrawTokenCreditsFromJob(\n    address _job,\n    address _token,\n    uint256 _amount,\n    address _receiver\n  ) external;\n}\n\n/// @title  Keep3rJobFundableLiquidity contract\n/// @notice Handles the funding of jobs through specific liquidity pairs\ninterface IKeep3rJobFundableLiquidity {\n  // Events\n\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\n  /// @param _liquidity The address of the liquidity pair being approved\n  event LiquidityApproval(address _liquidity);\n\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\n  /// @param _liquidity The address of the liquidity pair being revoked\n  event LiquidityRevocation(address _liquidity);\n\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\n  /// @param _job The address of the job to which liquidity will be added\n  /// @param _liquidity The address of the liquidity being added\n  /// @param _provider The user that calls the function\n  /// @param _amount The amount of liquidity being added\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\n\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\n  /// @param _job The address of the job of which liquidity will be withdrawn from\n  /// @param _liquidity The address of the liquidity being withdrawn\n  /// @param _receiver The receiver of the liquidity tokens\n  /// @param _amount The amount of liquidity being withdrawn from the job\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\n\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\n  /// @param _job The address of the job whose credits will be updated\n  /// @param _rewardedAt The time at which the job was last rewarded\n  /// @param _currentCredits The current credits of the job\n  /// @param _periodCredits The credits of the job for the current period\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\n\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\n  /// @param _job The address of the job whose credits will be updated\n  /// @param _rewardedAt The time at which the job was last rewarded\n  /// @param _currentCredits The current credits of the job\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\n\n  // Errors\n\n  /// @notice Throws when the liquidity being approved has already been approved\n  error LiquidityPairApproved();\n\n  /// @notice Throws when the liquidity being removed has not been approved\n  error LiquidityPairUnexistent();\n\n  /// @notice Throws when trying to add liquidity to an unapproved pool\n  error LiquidityPairUnapproved();\n\n  /// @notice Throws when the job doesn't have the requested liquidity\n  error JobLiquidityUnexistent();\n\n  /// @notice Throws when trying to remove more liquidity than the job has\n  error JobLiquidityInsufficient();\n\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\n  error JobLiquidityLessThanMin();\n\n  // Structs\n\n  /// @notice Stores the tick information of the different liquidity pairs\n  struct TickCache {\n    int56 current; // Tracks the current tick\n    int56 difference; // Stores the difference between the current tick and the last tick\n    uint256 period; // Stores the period at which the last observation was made\n  }\n\n  // Variables\n\n  /// @notice Lists liquidity pairs\n  /// @return _list An array of addresses with all the approved liquidity pairs\n  function approvedLiquidities() external view returns (address[] memory _list);\n\n  /// @notice Amount of liquidity in a specified job\n  /// @param _job The address of the job being checked\n  /// @param _liquidity The address of the liquidity we are checking\n  /// @return _amount Amount of liquidity in the specified job\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\n\n  /// @notice Last time the job was rewarded liquidity credits\n  /// @param _job The address of the job being checked\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\n\n  /// @notice Last time the job was worked\n  /// @param _job The address of the job being checked\n  /// @return _timestamp Timestamp of the last time the job was worked\n  function workedAt(address _job) external view returns (uint256 _timestamp);\n\n  // Methods\n\n  /// @notice Returns the liquidity credits of a given job\n  /// @param _job The address of the job of which we want to know the liquidity credits\n  /// @return _amount The liquidity credits of a given job\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\n\n  /// @notice Returns the credits of a given job for the current period\n  /// @param _job The address of the job of which we want to know the period credits\n  /// @return _amount The credits the given job has at the current period\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\n\n  /// @notice Calculates the total credits of a given job\n  /// @param _job The address of the job of which we want to know the total credits\n  /// @return _amount The total credits of the given job\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\n\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\n  /// @param _liquidity The address of the liquidity to provide\n  /// @param _amount The amount of liquidity to provide\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\n\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\n  /// @param _liquidity The address of the liquidity pair being observed\n  /// @return _tickCache The updated TickCache\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\n\n  /// @notice Gifts liquidity credits to the specified job\n  /// @param _job The address of the job being credited\n  /// @param _amount The amount of liquidity credits to gift\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\n\n  /// @notice Approve a liquidity pair for being accepted in future\n  /// @param _liquidity The address of the liquidity accepted\n  function approveLiquidity(address _liquidity) external;\n\n  /// @notice Revoke a liquidity pair from being accepted in future\n  /// @param _liquidity The liquidity no longer accepted\n  function revokeLiquidity(address _liquidity) external;\n\n  /// @notice Allows anyone to fund a job with liquidity\n  /// @param _job The address of the job to assign liquidity to\n  /// @param _liquidity The liquidity being added\n  /// @param _amount The amount of liquidity tokens to add\n  function addLiquidityToJob(\n    address _job,\n    address _liquidity,\n    uint256 _amount\n  ) external;\n\n  /// @notice Unbond liquidity for a job\n  /// @dev Can only be called by the job's owner\n  /// @param _job The address of the job being unbonded from\n  /// @param _liquidity The liquidity being unbonded\n  /// @param _amount The amount of liquidity being removed\n  function unbondLiquidityFromJob(\n    address _job,\n    address _liquidity,\n    uint256 _amount\n  ) external;\n\n  /// @notice Withdraw liquidity from a job\n  /// @param _job The address of the job being withdrawn from\n  /// @param _liquidity The liquidity being withdrawn\n  /// @param _receiver The address that will receive the withdrawn liquidity\n  function withdrawLiquidityFromJob(\n    address _job,\n    address _liquidity,\n    address _receiver\n  ) external;\n}\n\n/// @title Keep3rJobManager contract\n/// @notice Handles the addition and withdrawal of credits from a job\ninterface IKeep3rJobManager {\n  // Events\n\n  /// @notice Emitted when Keep3rJobManager#addJob is called\n  /// @param _job The address of the job to add\n  /// @param _jobOwner The job's owner\n  event JobAddition(address indexed _job, address indexed _jobOwner);\n\n  // Errors\n\n  /// @notice Throws when trying to add a job that has already been added\n  error JobAlreadyAdded();\n\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\n  error AlreadyAKeeper();\n\n  // Methods\n\n  /// @notice Allows any caller to add a new job\n  /// @param _job Address of the contract for which work should be performed\n  function addJob(address _job) external;\n}\n\n/// @title Keep3rJobWorkable contract\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\ninterface IKeep3rJobWorkable {\n  // Events\n\n  /// @notice Emitted when a keeper is validated before a job\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\n  event KeeperValidation(uint256 _gasLeft);\n\n  /// @notice Emitted when a keeper works a job\n  /// @param _credit The address of the asset in which the keeper is paid\n  /// @param _job The address of the job the keeper has worked\n  /// @param _keeper The address of the keeper that has worked the job\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\n\n  // Errors\n\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\n  error JobUnapproved();\n\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\n  error InsufficientFunds();\n\n  // Methods\n\n  /// @notice Confirms if the current keeper is registered\n  /// @dev Can be used for general (non critical) functions\n  /// @param _keeper The keeper being investigated\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\n\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\n  /// @dev Should be used for protected functions\n  /// @param _keeper The keeper to check\n  /// @param _bond The bond token being evaluated\n  /// @param _minBond The minimum amount of bonded tokens\n  /// @param _earned The minimum funds earned in the keepers lifetime\n  /// @param _age The minimum keeper age required\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\n  function isBondedKeeper(\n    address _keeper,\n    address _bond,\n    uint256 _minBond,\n    uint256 _earned,\n    uint256 _age\n  ) external returns (bool _isBondedKeeper);\n\n  /// @notice Implemented by jobs to show that a keeper performed work\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\n  /// @param _keeper Address of the keeper that performed the work\n  function worked(address _keeper) external;\n\n  /// @notice Implemented by jobs to show that a keeper performed work\n  /// @dev Pays the keeper that performs the work with KP3R\n  /// @param _keeper Address of the keeper that performed the work\n  /// @param _payment The reward that should be allocated for the job\n  function bondedPayment(address _keeper, uint256 _payment) external;\n\n  /// @notice Implemented by jobs to show that a keeper performed work\n  /// @dev Pays the keeper that performs the work with a specific token\n  /// @param _token The asset being awarded to the keeper\n  /// @param _keeper Address of the keeper that performed the work\n  /// @param _amount The reward that should be allocated\n  function directTokenPayment(\n    address _token,\n    address _keeper,\n    uint256 _amount\n  ) external;\n}\n\n/// @title Keep3rJobOwnership contract\n/// @notice Handles the ownership of the jobs\ninterface IKeep3rJobOwnership {\n  // Events\n\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\n  /// @param _job The address of the job proposed to have a change of owner\n  /// @param _owner The current owner of the job\n  /// @param _pendingOwner The new address proposed to be the owner of the job\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\n\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\n  /// @param _job The address of the job which the proposed owner will now own\n  /// @param _previousOwner The previous owner of the job\n  /// @param _newOwner The new owner of the job\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\n\n  // Errors\n\n  /// @notice Throws when the caller of the function is not the job owner\n  error OnlyJobOwner();\n\n  /// @notice Throws when the caller of the function is not the pending job owner\n  error OnlyPendingJobOwner();\n\n  // Variables\n\n  /// @notice Maps the job to the owner of the job\n  /// @param _job The address of the job\n  /// @return _owner The address of the owner of the job\n  function jobOwner(address _job) external view returns (address _owner);\n\n  /// @notice Maps the job to its pending owner\n  /// @param _job The address of the job\n  /// @return _pendingOwner The address of the pending owner of the job\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\n\n  // Methods\n\n  /// @notice Proposes a new address to be the owner of the job\n  /// @param _job The address of the job\n  /// @param _newOwner The address of the proposed new owner\n  function changeJobOwnership(address _job, address _newOwner) external;\n\n  /// @notice The proposed address accepts to be the owner of the job\n  /// @param _job The address of the job\n  function acceptJobOwnership(address _job) external;\n}\n\n/// @title Keep3rJobMigration contract\n/// @notice Handles the migration process of jobs to different addresses\ninterface IKeep3rJobMigration {\n  // Events\n\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\n  /// @param _fromJob The address of the job that requests to migrate\n  /// @param _toJob The address at which the job requests to migrate\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\n\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\n  /// @param _fromJob The address of the job that requested to migrate\n  /// @param _toJob The address at which the job had requested to migrate\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\n\n  // Errors\n\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\n  error JobMigrationImpossible();\n\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\n  error JobMigrationUnavailable();\n\n  /// @notice Throws when cooldown between migrations has not yet passed\n  error JobMigrationLocked();\n\n  // Variables\n\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\n  /// @return _toJob The address to which the job has requested to migrate to\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\n\n  // Methods\n\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\n  /// @param _fromJob The address of the job that is requesting to migrate\n  /// @param _toJob The address at which the job is requesting to migrate\n  function migrateJob(address _fromJob, address _toJob) external;\n\n  /// @notice Completes the migration process for a job\n  /// @dev Unbond/withdraw process doesn't get migrated\n  /// @param _fromJob The address of the job that requested to migrate\n  /// @param _toJob The address to which the job wants to migrate to\n  function acceptJobMigration(address _fromJob, address _toJob) external;\n}\n\n/// @title Keep3rJobDisputable contract\n/// @notice Handles the actions that can be taken on a disputed job\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\n  // Events\n\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\n  /// @param _job The address of the job from which the token will be slashed\n  /// @param _token The address of the token being slashed\n  /// @param _slasher The user that slashes the token\n  /// @param _amount The amount of the token being slashed\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\n\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\n  /// @param _job The address of the job from which the liquidity will be slashed\n  /// @param _liquidity The address of the liquidity being slashed\n  /// @param _slasher The user that slashes the liquidity\n  /// @param _amount The amount of the liquidity being slashed\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\n\n  // Errors\n\n  /// @notice Throws when the token trying to be slashed doesn't exist\n  error JobTokenUnexistent();\n\n  /// @notice Throws when someone tries to slash more tokens than the job has\n  error JobTokenInsufficient();\n\n  // Methods\n\n  /// @notice Allows governance or slasher to slash a job specific token\n  /// @param _job The address of the job from which the token will be slashed\n  /// @param _token The address of the token that will be slashed\n  /// @param _amount The amount of the token that will be slashed\n  function slashTokenFromJob(\n    address _job,\n    address _token,\n    uint256 _amount\n  ) external;\n\n  /// @notice Allows governance or a slasher to slash liquidity from a job\n  /// @param _job The address being slashed\n  /// @param _liquidity The address of the liquidity that will be slashed\n  /// @param _amount The amount of liquidity that will be slashed\n  function slashLiquidityFromJob(\n    address _job,\n    address _liquidity,\n    uint256 _amount\n  ) external;\n}\n\n// solhint-disable-next-line no-empty-blocks\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\n\n}\n"
      },
      "@openzeppelin/contracts/security/ReentrancyGuard.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n    // Booleans are more expensive than uint256 or any type that takes up a full\n    // word because each write operation emits an extra SLOAD to first read the\n    // slot's contents, replace the bits taken up by the boolean, and then write\n    // back. This is the compiler's defense against contract upgrades and\n    // pointer aliasing, and it cannot be disabled.\n\n    // The values being non-zero value makes deployment a bit more expensive,\n    // but in exchange the refund on every call to nonReentrant will be lower in\n    // amount. Since refunds are capped to a percentage of the total\n    // transaction's gas, it is best to keep them low in cases like this one, to\n    // increase the likelihood of the full refund coming into effect.\n    uint256 private constant _NOT_ENTERED = 1;\n    uint256 private constant _ENTERED = 2;\n\n    uint256 private _status;\n\n    constructor() {\n        _status = _NOT_ENTERED;\n    }\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     * Calling a `nonReentrant` function from another `nonReentrant`\n     * function is not supported. It is possible to prevent this from happening\n     * by making the `nonReentrant` function external, and make it call a\n     * `private` function that does the actual work.\n     */\n    modifier nonReentrant() {\n        // On the first call to nonReentrant, _notEntered will be true\n        require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n        // Any calls to nonReentrant after this point will fail\n        _status = _ENTERED;\n\n        _;\n\n        // By storing the original value once again, a refund is triggered (see\n        // https://eips.ethereum.org/EIPS/eip-2200)\n        _status = _NOT_ENTERED;\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC20/IERC20.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) external returns (bool);\n\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\nimport \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n    using Address for address;\n\n    function safeTransfer(\n        IERC20 token,\n        address to,\n        uint256 value\n    ) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n    }\n\n    function safeTransferFrom(\n        IERC20 token,\n        address from,\n        address to,\n        uint256 value\n    ) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n    }\n\n    /**\n     * @dev Deprecated. This function has issues similar to the ones found in\n     * {IERC20-approve}, and its usage is discouraged.\n     *\n     * Whenever possible, use {safeIncreaseAllowance} and\n     * {safeDecreaseAllowance} instead.\n     */\n    function safeApprove(\n        IERC20 token,\n        address spender,\n        uint256 value\n    ) internal {\n        // safeApprove should only be called when setting an initial allowance,\n        // or when resetting it to zero. To increase and decrease it, use\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n        require(\n            (value == 0) || (token.allowance(address(this), spender) == 0),\n            \"SafeERC20: approve from non-zero to non-zero allowance\"\n        );\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n    }\n\n    function safeIncreaseAllowance(\n        IERC20 token,\n        address spender,\n        uint256 value\n    ) internal {\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n    }\n\n    function safeDecreaseAllowance(\n        IERC20 token,\n        address spender,\n        uint256 value\n    ) internal {\n        unchecked {\n            uint256 oldAllowance = token.allowance(address(this), spender);\n            require(oldAllowance >= value, \"SafeERC20: decreased allowance below zero\");\n            uint256 newAllowance = oldAllowance - value;\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n        }\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     */\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\n        // the target address contains contract code and also asserts for success in the low-level call.\n\n        bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\");\n        if (returndata.length > 0) {\n            // Return data is optional\n            require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n    /**\n     * @dev Returns the largest of two numbers.\n     */\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a >= b ? a : b;\n    }\n\n    /**\n     * @dev Returns the smallest of two numbers.\n     */\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a < b ? a : b;\n    }\n\n    /**\n     * @dev Returns the average of two numbers. The result is rounded towards\n     * zero.\n     */\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\n        // (a + b) / 2 can overflow.\n        return (a & b) + (a ^ b) / 2;\n    }\n\n    /**\n     * @dev Returns the ceiling of the division of two numbers.\n     *\n     * This differs from standard division with `/` in that it rounds up instead\n     * of rounding down.\n     */\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n        // (a + b - 1) / b can overflow on addition, so we distribute.\n        return a / b + (a % b == 0 ? 0 : 1);\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/structs/EnumerableSet.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n *     // Add the library methods\n *     using EnumerableSet for EnumerableSet.AddressSet;\n *\n *     // Declare a set state variable\n *     EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSet {\n    // To implement this library for multiple types with as little code\n    // repetition as possible, we write it in terms of a generic Set type with\n    // bytes32 values.\n    // The Set implementation uses private functions, and user-facing\n    // implementations (such as AddressSet) are just wrappers around the\n    // underlying Set.\n    // This means that we can only create new EnumerableSets for types that fit\n    // in bytes32.\n\n    struct Set {\n        // Storage of set values\n        bytes32[] _values;\n        // Position of the value in the `values` array, plus 1 because index 0\n        // means a value is not in the set.\n        mapping(bytes32 => uint256) _indexes;\n    }\n\n    /**\n     * @dev Add a value to a set. O(1).\n     *\n     * Returns true if the value was added to the set, that is if it was not\n     * already present.\n     */\n    function _add(Set storage set, bytes32 value) private returns (bool) {\n        if (!_contains(set, value)) {\n            set._values.push(value);\n            // The value is stored at length-1, but we add 1 to all indexes\n            // and use 0 as a sentinel value\n            set._indexes[value] = set._values.length;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * @dev Removes a value from a set. O(1).\n     *\n     * Returns true if the value was removed from the set, that is if it was\n     * present.\n     */\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\n        // We read and store the value's index to prevent multiple reads from the same storage slot\n        uint256 valueIndex = set._indexes[value];\n\n        if (valueIndex != 0) {\n            // Equivalent to contains(set, value)\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\n            // This modifies the order of the array, as noted in {at}.\n\n            uint256 toDeleteIndex = valueIndex - 1;\n            uint256 lastIndex = set._values.length - 1;\n\n            if (lastIndex != toDeleteIndex) {\n                bytes32 lastvalue = set._values[lastIndex];\n\n                // Move the last value to the index where the value to delete is\n                set._values[toDeleteIndex] = lastvalue;\n                // Update the index for the moved value\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\n            }\n\n            // Delete the slot where the moved value was stored\n            set._values.pop();\n\n            // Delete the index for the deleted slot\n            delete set._indexes[value];\n\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * @dev Returns true if the value is in the set. O(1).\n     */\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\n        return set._indexes[value] != 0;\n    }\n\n    /**\n     * @dev Returns the number of values on the set. O(1).\n     */\n    function _length(Set storage set) private view returns (uint256) {\n        return set._values.length;\n    }\n\n    /**\n     * @dev Returns the value stored at position `index` in the set. O(1).\n     *\n     * Note that there are no guarantees on the ordering of values inside the\n     * array, and it may change when more values are added or removed.\n     *\n     * Requirements:\n     *\n     * - `index` must be strictly less than {length}.\n     */\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\n        return set._values[index];\n    }\n\n    /**\n     * @dev Return the entire set in an array\n     *\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n     */\n    function _values(Set storage set) private view returns (bytes32[] memory) {\n        return set._values;\n    }\n\n    // Bytes32Set\n\n    struct Bytes32Set {\n        Set _inner;\n    }\n\n    /**\n     * @dev Add a value to a set. O(1).\n     *\n     * Returns true if the value was added to the set, that is if it was not\n     * already present.\n     */\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n        return _add(set._inner, value);\n    }\n\n    /**\n     * @dev Removes a value from a set. O(1).\n     *\n     * Returns true if the value was removed from the set, that is if it was\n     * present.\n     */\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n        return _remove(set._inner, value);\n    }\n\n    /**\n     * @dev Returns true if the value is in the set. O(1).\n     */\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n        return _contains(set._inner, value);\n    }\n\n    /**\n     * @dev Returns the number of values in the set. O(1).\n     */\n    function length(Bytes32Set storage set) internal view returns (uint256) {\n        return _length(set._inner);\n    }\n\n    /**\n     * @dev Returns the value stored at position `index` in the set. O(1).\n     *\n     * Note that there are no guarantees on the ordering of values inside the\n     * array, and it may change when more values are added or removed.\n     *\n     * Requirements:\n     *\n     * - `index` must be strictly less than {length}.\n     */\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n        return _at(set._inner, index);\n    }\n\n    /**\n     * @dev Return the entire set in an array\n     *\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n     */\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\n        return _values(set._inner);\n    }\n\n    // AddressSet\n\n    struct AddressSet {\n        Set _inner;\n    }\n\n    /**\n     * @dev Add a value to a set. O(1).\n     *\n     * Returns true if the value was added to the set, that is if it was not\n     * already present.\n     */\n    function add(AddressSet storage set, address value) internal returns (bool) {\n        return _add(set._inner, bytes32(uint256(uint160(value))));\n    }\n\n    /**\n     * @dev Removes a value from a set. O(1).\n     *\n     * Returns true if the value was removed from the set, that is if it was\n     * present.\n     */\n    function remove(AddressSet storage set, address value) internal returns (bool) {\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\n    }\n\n    /**\n     * @dev Returns true if the value is in the set. O(1).\n     */\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\n    }\n\n    /**\n     * @dev Returns the number of values in the set. O(1).\n     */\n    function length(AddressSet storage set) internal view returns (uint256) {\n        return _length(set._inner);\n    }\n\n    /**\n     * @dev Returns the value stored at position `index` in the set. O(1).\n     *\n     * Note that there are no guarantees on the ordering of values inside the\n     * array, and it may change when more values are added or removed.\n     *\n     * Requirements:\n     *\n     * - `index` must be strictly less than {length}.\n     */\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\n        return address(uint160(uint256(_at(set._inner, index))));\n    }\n\n    /**\n     * @dev Return the entire set in an array\n     *\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n     */\n    function values(AddressSet storage set) internal view returns (address[] memory) {\n        bytes32[] memory store = _values(set._inner);\n        address[] memory result;\n\n        assembly {\n            result := store\n        }\n\n        return result;\n    }\n\n    // UintSet\n\n    struct UintSet {\n        Set _inner;\n    }\n\n    /**\n     * @dev Add a value to a set. O(1).\n     *\n     * Returns true if the value was added to the set, that is if it was not\n     * already present.\n     */\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\n        return _add(set._inner, bytes32(value));\n    }\n\n    /**\n     * @dev Removes a value from a set. O(1).\n     *\n     * Returns true if the value was removed from the set, that is if it was\n     * present.\n     */\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\n        return _remove(set._inner, bytes32(value));\n    }\n\n    /**\n     * @dev Returns true if the value is in the set. O(1).\n     */\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n        return _contains(set._inner, bytes32(value));\n    }\n\n    /**\n     * @dev Returns the number of values on the set. O(1).\n     */\n    function length(UintSet storage set) internal view returns (uint256) {\n        return _length(set._inner);\n    }\n\n    /**\n     * @dev Returns the value stored at position `index` in the set. O(1).\n     *\n     * Note that there are no guarantees on the ordering of values inside the\n     * array, and it may change when more values are added or removed.\n     *\n     * Requirements:\n     *\n     * - `index` must be strictly less than {length}.\n     */\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n        return uint256(_at(set._inner, index));\n    }\n\n    /**\n     * @dev Return the entire set in an array\n     *\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n     */\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\n        bytes32[] memory store = _values(set._inner);\n        uint256[] memory result;\n\n        assembly {\n            result := store\n        }\n\n        return result;\n    }\n}\n"
      },
      "solidity/interfaces/peripherals/IKeep3rAccountance.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\n/// @title Keep3rDisputable contract\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\ninterface IKeep3rAccountance {\n  // Events\n\n  /// @notice Emitted when the bonding process of a new keeper begins\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\n  /// @param _bonding The asset the keeper has bonded\n  /// @param _amount The amount the keeper has bonded\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\n\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\n  /// @param _unbonding The liquidity pair or asset being unbonded\n  /// @param _amount The amount being unbonded\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\n\n  // Variables\n\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\n  /// @param _keeper The address of the keeper\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\n\n  /// @notice Tracks when a keeper was first registered\n  /// @param _keeper The address of the keeper\n  /// @return timestamp The time at which the keeper was first registered\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\n\n  /// @notice Tracks if a keeper or job has a pending dispute\n  /// @param _keeperOrJob The address of the keeper or job\n  /// @return _disputed Whether a keeper or job has a pending dispute\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\n\n  /// @notice Tracks how much a keeper has bonded of a certain token\n  /// @param _keeper The address of the keeper\n  /// @param _bond The address of the token being bonded\n  /// @return _bonds Amount of a certain token that a keeper has bonded\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\n\n  /// @notice The current token credits available for a job\n  /// @param _job The address of the job\n  /// @param _token The address of the token bonded\n  /// @return _amount The amount of token credits available for a job\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\n\n  /// @notice Tracks the amount of assets deposited in pending bonds\n  /// @param _keeper The address of the keeper\n  /// @param _bonding The address of the token being bonded\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\n\n  /// @notice Tracks when a bonding for a keeper can be activated\n  /// @param _keeper The address of the keeper\n  /// @param _bonding The address of the token being bonded\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\n\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\n  /// @param _keeper The address of the keeper\n  /// @param _bonding The address of the token being unbonded\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\n\n  /// @notice Tracks how much keeper bonds are to be withdrawn\n  /// @param _keeper The address of the keeper\n  /// @param _bonding The address of the token being unbonded\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\n\n  /// @notice Checks whether the address has ever bonded an asset\n  /// @param _keeper The address of the keeper\n  /// @return _hasBonded Whether the address has ever bonded an asset\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\n\n  // Methods\n\n  /// @notice Lists all jobs\n  /// @return _jobList Array with all the jobs in _jobs\n  function jobs() external view returns (address[] memory _jobList);\n\n  /// @notice Lists all keepers\n  /// @return _keeperList Array with all the keepers in _keepers\n  function keepers() external view returns (address[] memory _keeperList);\n\n  // Errors\n\n  /// @notice Throws when an address is passed as a job, but that address is not a job\n  error JobUnavailable();\n\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\n  error JobDisputed();\n}\n"
      },
      "solidity/interfaces/IKeep3rHelper.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\n/// @title Keep3rHelper contract\n/// @notice Contains all the helper functions used throughout the different files.\n\ninterface IKeep3rHelper {\n  // Errors\n\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\n  error LiquidityPairInvalid();\n\n  // Methods\n  // solhint-enable func-name-mixedcase\n\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\n  /// @param _eth The amount of ETH\n  /// @return _amountOut The amount of KP3R\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\n\n  /// @notice Returns the amount of KP3R the keeper has bonded\n  /// @param _keeper The address of the keeper to check\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\n\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\n  /// @param _keeper The address of the keeper to check\n  /// @param _gasUsed The amount of gas used that will be rewarded\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\n\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\n\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\n  /// @param _gasUsed The amount of gas used that will be rewarded\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\n\n  /// @notice Given a pool address, returns the underlying tokens of the pair\n  /// @param _pool Address of the correspondant pool\n  /// @return _token0 Address of the first token of the pair\n  /// @return _token1 Address of the second token of the pair\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\n\n  /// @notice Defines the order of the tokens in the pair for twap calculations\n  /// @param _pool Address of the correspondant pool\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\n\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\n  /// @param _pool Address of the pool to observe\n  /// @param _secondsAgo Array with time references to observe\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\n  /// @return _success Boolean indicating if the observe call was succesfull\n  function observe(address _pool, uint32[] memory _secondsAgo)\n    external\n    view\n    returns (\n      int56 _tickCumulative1,\n      int56 _tickCumulative2,\n      bool _success\n    );\n\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\n  /// @return _extra Amount of extra gas that should be added to the gas spent\n  function getPaymentParams(uint256 _bonds)\n    external\n    view\n    returns (\n      uint256 _boost,\n      uint256 _oneEthQuote,\n      uint256 _extra\n    );\n\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\n  /// @param _liquidityAmount Amount of liquidity to be converted\n  /// @param _tickDifference Tick value used to calculate the quote\n  /// @param _timeInterval Time value used to calculate the quote\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\n  function getKP3RsAtTick(\n    uint256 _liquidityAmount,\n    int56 _tickDifference,\n    uint256 _timeInterval\n  ) external pure returns (uint256 _kp3rAmount);\n\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\n  /// @param _baseAmount Amount of token to be converted\n  /// @param _tickDifference Tick value used to calculate the quote\n  /// @param _timeInterval Time value used to calculate the quote\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\n  function getQuoteAtTick(\n    uint128 _baseAmount,\n    int56 _tickDifference,\n    uint256 _timeInterval\n  ) external pure returns (uint256 _quoteAmount);\n}\n"
      },
      "solidity/interfaces/peripherals/IKeep3rParameters.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './IBaseErrors.sol';\n\n/// @title Keep3rParameters contract\n/// @notice Handles and sets all the required parameters for Keep3r\n\ninterface IKeep3rParameters is IBaseErrors {\n  // Events\n\n  /// @notice Emitted when the Keep3rHelper address is changed\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\n  event Keep3rHelperChange(address _keep3rHelper);\n\n  /// @notice Emitted when the Keep3rV1 address is changed\n  /// @param _keep3rV1 The address of Keep3rV1's contract\n  event Keep3rV1Change(address _keep3rV1);\n\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\n\n  /// @notice Emitted when the KP3R-WETH pool address is changed\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\n  event Kp3rWethPoolChange(address _kp3rWethPool);\n\n  /// @notice Emitted when bondTime is changed\n  /// @param _bondTime The new bondTime\n  event BondTimeChange(uint256 _bondTime);\n\n  /// @notice Emitted when _liquidityMinimum is changed\n  /// @param _liquidityMinimum The new _liquidityMinimum\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\n\n  /// @notice Emitted when _unbondTime is changed\n  /// @param _unbondTime The new _unbondTime\n  event UnbondTimeChange(uint256 _unbondTime);\n\n  /// @notice Emitted when _rewardPeriodTime is changed\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\n\n  /// @notice Emitted when the inflationPeriod is changed\n  /// @param _inflationPeriod The new inflationPeriod\n  event InflationPeriodChange(uint256 _inflationPeriod);\n\n  /// @notice Emitted when the fee is changed\n  /// @param _fee The new token credits fee\n  event FeeChange(uint256 _fee);\n\n  // Variables\n\n  /// @notice Address of Keep3rHelper's contract\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\n  function keep3rHelper() external view returns (address _keep3rHelper);\n\n  /// @notice Address of Keep3rV1's contract\n  /// @return _keep3rV1 The address of Keep3rV1's contract\n  function keep3rV1() external view returns (address _keep3rV1);\n\n  /// @notice Address of Keep3rV1Proxy's contract\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\n\n  /// @notice Address of the KP3R-WETH pool\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\n\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\n  /// @return _days The required bondTime in days\n  function bondTime() external view returns (uint256 _days);\n\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\n  /// @return _days The required unbondTime in days\n  function unbondTime() external view returns (uint256 _days);\n\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\n  /// @return _amount The minimum amount of liquidity in KP3R\n  function liquidityMinimum() external view returns (uint256 _amount);\n\n  /// @notice The amount of time between each scheduled credits reward given to a job\n  /// @return _days The reward period in days\n  function rewardPeriodTime() external view returns (uint256 _days);\n\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\n  /// @return _period The denominator used to regulate the emission of KP3R\n  function inflationPeriod() external view returns (uint256 _period);\n\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\n  function fee() external view returns (uint256 _amount);\n\n  // Errors\n\n  /// @notice Throws if the reward period is less than the minimum reward period time\n  error MinRewardPeriod();\n\n  /// @notice Throws if either a job or a keeper is disputed\n  error Disputed();\n\n  /// @notice Throws if there are no bonded assets\n  error BondsUnexistent();\n\n  /// @notice Throws if the time required to bond an asset has not passed yet\n  error BondsLocked();\n\n  /// @notice Throws if there are no bonds to withdraw\n  error UnbondsUnexistent();\n\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\n  error UnbondsLocked();\n\n  // Methods\n\n  /// @notice Sets the Keep3rHelper address\n  /// @param _keep3rHelper The Keep3rHelper address\n  function setKeep3rHelper(address _keep3rHelper) external;\n\n  /// @notice Sets the Keep3rV1 address\n  /// @param _keep3rV1 The Keep3rV1 address\n  function setKeep3rV1(address _keep3rV1) external;\n\n  /// @notice Sets the Keep3rV1Proxy address\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\n\n  /// @notice Sets the KP3R-WETH pool address\n  /// @param _kp3rWethPool The KP3R-WETH pool address\n  function setKp3rWethPool(address _kp3rWethPool) external;\n\n  /// @notice Sets the bond time required to activate as a keeper\n  /// @param _bond The new bond time\n  function setBondTime(uint256 _bond) external;\n\n  /// @notice Sets the unbond time required unbond what has been bonded\n  /// @param _unbond The new unbond time\n  function setUnbondTime(uint256 _unbond) external;\n\n  /// @notice Sets the minimum amount of liquidity required to fund a job\n  /// @param _liquidityMinimum The new minimum amount of liquidity\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\n\n  /// @notice Sets the time required to pass between rewards for jobs\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\n\n  /// @notice Sets the new inflation period\n  /// @param _inflationPeriod The new inflation period\n  function setInflationPeriod(uint256 _inflationPeriod) external;\n\n  /// @notice Sets the new fee\n  /// @param _fee The new fee\n  function setFee(uint256 _fee) external;\n}\n"
      },
      "solidity/interfaces/peripherals/IBaseErrors.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.4 <0.9.0;\n\ninterface IBaseErrors {\n  /// @notice Throws if a variable is assigned to the zero address\n  error ZeroAddress();\n}\n"
      },
      "solidity/interfaces/peripherals/IKeep3rRoles.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\n/// @title Keep3rRoles contract\n/// @notice Manages the Keep3r specific roles\ninterface IKeep3rRoles {\n  // Events\n\n  /// @notice Emitted when a slasher is added\n  /// @param _slasher Address of the added slasher\n  event SlasherAdded(address _slasher);\n\n  /// @notice Emitted when a slasher is removed\n  /// @param _slasher Address of the removed slasher\n  event SlasherRemoved(address _slasher);\n\n  /// @notice Emitted when a disputer is added\n  /// @param _disputer Address of the added disputer\n  event DisputerAdded(address _disputer);\n\n  /// @notice Emitted when a disputer is removed\n  /// @param _disputer Address of the removed disputer\n  event DisputerRemoved(address _disputer);\n\n  // Variables\n\n  /// @notice Tracks whether the address is a slasher or not\n  /// @param _slasher Address being checked as a slasher\n  /// @return _isSlasher Whether the address is a slasher or not\n  function slashers(address _slasher) external view returns (bool _isSlasher);\n\n  /// @notice Tracks whether the address is a disputer or not\n  /// @param _disputer Address being checked as a disputer\n  /// @return _isDisputer Whether the address is a disputer or not\n  function disputers(address _disputer) external view returns (bool _isDisputer);\n\n  // Errors\n\n  /// @notice Throws if the address is already a registered slasher\n  error SlasherExistent();\n\n  /// @notice Throws if caller is not a registered slasher\n  error SlasherUnexistent();\n\n  /// @notice Throws if the address is already a registered disputer\n  error DisputerExistent();\n\n  /// @notice Throws if caller is not a registered disputer\n  error DisputerUnexistent();\n\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\n  error OnlySlasher();\n\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\n  error OnlyDisputer();\n\n  // Methods\n\n  /// @notice Registers a slasher by updating the slashers mapping\n  function addSlasher(address _slasher) external;\n\n  /// @notice Removes a slasher by updating the slashers mapping\n  function removeSlasher(address _slasher) external;\n\n  /// @notice Registers a disputer by updating the disputers mapping\n  function addDisputer(address _disputer) external;\n\n  /// @notice Removes a disputer by updating the disputers mapping\n  function removeDisputer(address _disputer) external;\n}\n"
      },
      "solidity/contracts/peripherals/Governable.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../interfaces/peripherals/IGovernable.sol';\n\nabstract contract Governable is IGovernable {\n  /// @inheritdoc IGovernable\n  address public override governance;\n\n  /// @inheritdoc IGovernable\n  address public override pendingGovernance;\n\n  constructor(address _governance) {\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\n    governance = _governance;\n  }\n\n  /// @inheritdoc IGovernable\n  function setGovernance(address _governance) external override onlyGovernance {\n    pendingGovernance = _governance;\n    emit GovernanceProposal(_governance);\n  }\n\n  /// @inheritdoc IGovernable\n  function acceptGovernance() external override onlyPendingGovernance {\n    governance = pendingGovernance;\n    delete pendingGovernance;\n    emit GovernanceSet(governance);\n  }\n\n  /// @notice Functions with this modifier can only be called by governance\n  modifier onlyGovernance {\n    if (msg.sender != governance) revert OnlyGovernance();\n    _;\n  }\n\n  /// @notice Functions with this modifier can only be called by pendingGovernance\n  modifier onlyPendingGovernance {\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\n    _;\n  }\n}\n"
      },
      "solidity/interfaces/peripherals/IGovernable.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\n/// @title Governable contract\n/// @notice Manages the governance role\ninterface IGovernable {\n  // Events\n\n  /// @notice Emitted when pendingGovernance accepts to be governance\n  /// @param _governance Address of the new governance\n  event GovernanceSet(address _governance);\n\n  /// @notice Emitted when a new governance is proposed\n  /// @param _pendingGovernance Address that is proposed to be the new governance\n  event GovernanceProposal(address _pendingGovernance);\n\n  // Errors\n\n  /// @notice Throws if the caller of the function is not governance\n  error OnlyGovernance();\n\n  /// @notice Throws if the caller of the function is not pendingGovernance\n  error OnlyPendingGovernance();\n\n  /// @notice Throws if trying to set governance to zero address\n  error NoGovernanceZeroAddress();\n\n  // Variables\n\n  /// @notice Stores the governance address\n  /// @return _governance The governance addresss\n  function governance() external view returns (address _governance);\n\n  /// @notice Stores the pendingGovernance address\n  /// @return _pendingGovernance The pendingGovernance addresss\n  function pendingGovernance() external view returns (address _pendingGovernance);\n\n  // Methods\n\n  /// @notice Proposes a new address to be governance\n  /// @param _governance The address being proposed as the new governance\n  function setGovernance(address _governance) external;\n\n  /// @notice Changes the governance from the current governance to the previously proposed address\n  function acceptGovernance() external;\n}\n"
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize, which returns 0 for contracts in\n        // construction, since the code is only stored at the end of the\n        // constructor execution.\n\n        uint256 size;\n        assembly {\n            size := extcodesize(account)\n        }\n        return size > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCall(target, data, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        require(isContract(target), \"Address: call to non-contract\");\n\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        require(isContract(target), \"Address: static call to non-contract\");\n\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(isContract(target), \"Address: delegate call to non-contract\");\n\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n     * revert reason using the provided one.\n     *\n     * _Available since v4.3._\n     */\n    function verifyCallResult(\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal pure returns (bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            // Look for revert reason and bubble it up if present\n            if (returndata.length > 0) {\n                // The easiest way to bubble the revert reason is using memory via assembly\n\n                assembly {\n                    let returndata_size := mload(returndata)\n                    revert(add(32, returndata), returndata_size)\n                }\n            } else {\n                revert(errorMessage);\n            }\n        }\n    }\n}\n"
      },
      "solidity/interfaces/IPairManager.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\n\n/// @title  Pair Manager interface\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\ninterface IPairManager is IERC20Metadata {\n  /// @notice Address of the factory from which the pair manager was created\n  /// @return _factory The address of the PairManager Factory\n  function factory() external view returns (address _factory);\n\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\n  /// @return _pool The address of the pool\n  function pool() external view returns (address _pool);\n\n  /// @notice Token0 of the pool\n  /// @return _token0 The address of token0\n  function token0() external view returns (address _token0);\n\n  /// @notice Token1 of the pool\n  /// @return _token1 The address of token1\n  function token1() external view returns (address _token1);\n}\n"
      },
      "solidity/contracts/libraries/FullMath.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\n/// @title Contains 512-bit math functions\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\n/// @dev Handles \"phantom overflow\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\nlibrary FullMath {\n  /// @notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n  /// @param a The multiplicand\n  /// @param b The multiplier\n  /// @param denominator The divisor\n  /// @return result The 256-bit result\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\n  function mulDiv(\n    uint256 a,\n    uint256 b,\n    uint256 denominator\n  ) internal pure returns (uint256 result) {\n    unchecked {\n      // 512-bit multiply [prod1 prod0] = a * b\n      // Compute the product mod 2**256 and mod 2**256 - 1\n      // then use the Chinese Remainder Theorem to reconstruct\n      // the 512 bit result. The result is stored in two 256\n      // variables such that product = prod1 * 2**256 + prod0\n      uint256 prod0; // Least significant 256 bits of the product\n      uint256 prod1; // Most significant 256 bits of the product\n      assembly {\n        let mm := mulmod(a, b, not(0))\n        prod0 := mul(a, b)\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n      }\n\n      // Handle non-overflow cases, 256 by 256 division\n      if (prod1 == 0) {\n        require(denominator > 0);\n        assembly {\n          result := div(prod0, denominator)\n        }\n        return result;\n      }\n\n      // Make sure the result is less than 2**256.\n      // Also prevents denominator == 0\n      require(denominator > prod1);\n\n      ///////////////////////////////////////////////\n      // 512 by 256 division.\n      ///////////////////////////////////////////////\n\n      // Make division exact by subtracting the remainder from [prod1 prod0]\n      // Compute remainder using mulmod\n      uint256 remainder;\n      assembly {\n        remainder := mulmod(a, b, denominator)\n      }\n      // Subtract 256 bit number from 512 bit number\n      assembly {\n        prod1 := sub(prod1, gt(remainder, prod0))\n        prod0 := sub(prod0, remainder)\n      }\n\n      // Factor powers of two out of denominator\n      // Compute largest power of two divisor of denominator.\n      // Always >= 1.\n      uint256 twos = (~denominator + 1) & denominator;\n      // Divide denominator by power of two\n      assembly {\n        denominator := div(denominator, twos)\n      }\n\n      // Divide [prod1 prod0] by the factors of two\n      assembly {\n        prod0 := div(prod0, twos)\n      }\n      // Shift in bits from prod1 into prod0. For this we need\n      // to flip `twos` such that it is 2**256 / twos.\n      // If twos is zero, then it becomes one\n      assembly {\n        twos := add(div(sub(0, twos), twos), 1)\n      }\n      prod0 |= prod1 * twos;\n\n      // Invert denominator mod 2**256\n      // Now that denominator is an odd number, it has an inverse\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\n      // Compute the inverse by starting with a seed that is correct\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\n      uint256 inv = (3 * denominator) ^ 2;\n      // Now use Newton-Raphson iteration to improve the precision.\n      // Thanks to Hensel's lifting lemma, this also works in modular\n      // arithmetic, doubling the correct bits in each step.\n      inv *= 2 - denominator * inv; // inverse mod 2**8\n      inv *= 2 - denominator * inv; // inverse mod 2**16\n      inv *= 2 - denominator * inv; // inverse mod 2**32\n      inv *= 2 - denominator * inv; // inverse mod 2**64\n      inv *= 2 - denominator * inv; // inverse mod 2**128\n      inv *= 2 - denominator * inv; // inverse mod 2**256\n\n      // Because the division is now exact we can divide by multiplying\n      // with the modular inverse of denominator. This will give us the\n      // correct result modulo 2**256. Since the precoditions guarantee\n      // that the outcome is less than 2**256, this is the final result.\n      // We don't need to compute the high bits of the result and prod1\n      // is no longer required.\n      result = prod0 * inv;\n      return result;\n    }\n  }\n\n  /// @notice Calculates ceil(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n  /// @param a The multiplicand\n  /// @param b The multiplier\n  /// @param denominator The divisor\n  /// @return result The 256-bit result\n  function mulDivRoundingUp(\n    uint256 a,\n    uint256 b,\n    uint256 denominator\n  ) internal pure returns (uint256 result) {\n    unchecked {\n      result = mulDiv(a, b, denominator);\n      if (mulmod(a, b, denominator) > 0) {\n        require(result < type(uint256).max);\n        result++;\n      }\n    }\n  }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n *\n * _Available since v4.1._\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"
      },
      "solidity/interfaces/peripherals/IKeep3rDisputable.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\n/// @title Keep3rDisputable contract\n/// @notice Creates/resolves disputes for jobs or keepers\n///         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\n///         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\ninterface IKeep3rDisputable {\n  /// @notice Emitted when a keeper or a job is disputed\n  /// @param _jobOrKeeper The address of the disputed keeper/job\n  /// @param _disputer The user that called the function and disputed the keeper\n  event Dispute(address indexed _jobOrKeeper, address indexed _disputer);\n\n  /// @notice Emitted when a dispute is resolved\n  /// @param _jobOrKeeper The address of the disputed keeper/job\n  /// @param _resolver The user that called the function and resolved the dispute\n  event Resolve(address indexed _jobOrKeeper, address indexed _resolver);\n\n  /// @notice Throws when a job or keeper is already disputed\n  error AlreadyDisputed();\n\n  /// @notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute\n  error NotDisputed();\n\n  /// @notice Allows governance to create a dispute for a given keeper/job\n  /// @param _jobOrKeeper The address in dispute\n  function dispute(address _jobOrKeeper) external;\n\n  /// @notice Allows governance to resolve a dispute on a keeper/job\n  /// @param _jobOrKeeper The address cleared\n  function resolve(address _jobOrKeeper) external;\n}\n"
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\nimport './Keep3rJobFundableCredits.sol';\nimport './Keep3rJobFundableLiquidity.sol';\n\nabstract contract Keep3rJobMigration is IKeep3rJobMigration, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\n  using EnumerableSet for EnumerableSet.AddressSet;\n\n  uint256 internal constant _MIGRATION_COOLDOWN = 1 minutes;\n\n  /// @inheritdoc IKeep3rJobMigration\n  mapping(address => address) public override pendingJobMigrations;\n  mapping(address => mapping(address => uint256)) internal _migrationCreatedAt;\n\n  /// @inheritdoc IKeep3rJobMigration\n  function migrateJob(address _fromJob, address _toJob) external override onlyJobOwner(_fromJob) {\n    if (_fromJob == _toJob) revert JobMigrationImpossible();\n\n    pendingJobMigrations[_fromJob] = _toJob;\n    _migrationCreatedAt[_fromJob][_toJob] = block.timestamp;\n\n    emit JobMigrationRequested(_fromJob, _toJob);\n  }\n\n  /// @inheritdoc IKeep3rJobMigration\n  function acceptJobMigration(address _fromJob, address _toJob) external override onlyJobOwner(_toJob) {\n    if (disputes[_fromJob] || disputes[_toJob]) revert JobDisputed();\n    if (pendingJobMigrations[_fromJob] != _toJob) revert JobMigrationUnavailable();\n    if (block.timestamp < _migrationCreatedAt[_fromJob][_toJob] + _MIGRATION_COOLDOWN) revert JobMigrationLocked();\n\n    // force job credits update for both jobs\n    _settleJobAccountance(_fromJob);\n    _settleJobAccountance(_toJob);\n\n    // migrate tokens\n    while (_jobTokens[_fromJob].length() > 0) {\n      address _tokenToMigrate = _jobTokens[_fromJob].at(0);\n      jobTokenCredits[_toJob][_tokenToMigrate] += jobTokenCredits[_fromJob][_tokenToMigrate];\n      delete jobTokenCredits[_fromJob][_tokenToMigrate];\n      _jobTokens[_fromJob].remove(_tokenToMigrate);\n      _jobTokens[_toJob].add(_tokenToMigrate);\n    }\n\n    // migrate liquidities\n    while (_jobLiquidities[_fromJob].length() > 0) {\n      address _liquidity = _jobLiquidities[_fromJob].at(0);\n\n      liquidityAmount[_toJob][_liquidity] += liquidityAmount[_fromJob][_liquidity];\n      delete liquidityAmount[_fromJob][_liquidity];\n\n      _jobLiquidities[_toJob].add(_liquidity);\n      _jobLiquidities[_fromJob].remove(_liquidity);\n    }\n\n    // migrate job balances\n    _jobPeriodCredits[_toJob] += _jobPeriodCredits[_fromJob];\n    delete _jobPeriodCredits[_fromJob];\n\n    _jobLiquidityCredits[_toJob] += _jobLiquidityCredits[_fromJob];\n    delete _jobLiquidityCredits[_fromJob];\n\n    // stop _fromJob from being a job\n    delete rewardedAt[_fromJob];\n    _jobs.remove(_fromJob);\n\n    // delete unused data slots\n    delete jobOwner[_fromJob];\n    delete jobPendingOwner[_fromJob];\n    delete _migrationCreatedAt[_fromJob][_toJob];\n    delete pendingJobMigrations[_fromJob];\n\n    emit JobMigrationSuccessful(_fromJob, _toJob);\n  }\n}\n"
      },
      "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './Keep3rKeeperFundable.sol';\nimport '../Keep3rDisputable.sol';\nimport '../../../interfaces/external/IKeep3rV1.sol';\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\n\nabstract contract Keep3rKeeperDisputable is IKeep3rKeeperDisputable, Keep3rDisputable, Keep3rKeeperFundable {\n  using EnumerableSet for EnumerableSet.AddressSet;\n  using SafeERC20 for IERC20;\n\n  /// @inheritdoc IKeep3rKeeperDisputable\n  function slash(\n    address _keeper,\n    address _bonded,\n    uint256 _bondAmount,\n    uint256 _unbondAmount\n  ) public override onlySlasher {\n    if (!disputes[_keeper]) revert NotDisputed();\n    _slash(_keeper, _bonded, _bondAmount, _unbondAmount);\n    emit KeeperSlash(_keeper, msg.sender, _bondAmount + _unbondAmount);\n  }\n\n  /// @inheritdoc IKeep3rKeeperDisputable\n  function revoke(address _keeper) external override onlySlasher {\n    if (!disputes[_keeper]) revert NotDisputed();\n    _keepers.remove(_keeper);\n    _slash(_keeper, keep3rV1, bonds[_keeper][keep3rV1], pendingUnbonds[_keeper][keep3rV1]);\n    emit KeeperRevoke(_keeper, msg.sender);\n  }\n\n  function _slash(\n    address _keeper,\n    address _bonded,\n    uint256 _bondAmount,\n    uint256 _unbondAmount\n  ) internal {\n    if (_bonded != keep3rV1) {\n      try IERC20(_bonded).transfer(governance, _bondAmount + _unbondAmount) returns (bool) {} catch (bytes memory) {}\n    }\n    bonds[_keeper][_bonded] -= _bondAmount;\n    pendingUnbonds[_keeper][_bonded] -= _unbondAmount;\n  }\n}\n"
      },
      "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../Keep3rAccountance.sol';\nimport '../Keep3rParameters.sol';\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\n\nimport '../../../interfaces/external/IKeep3rV1.sol';\nimport '../../../interfaces/external/IKeep3rV1Proxy.sol';\n\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\n\nabstract contract Keep3rKeeperFundable is IKeep3rKeeperFundable, ReentrancyGuard, Keep3rParameters {\n  using EnumerableSet for EnumerableSet.AddressSet;\n  using SafeERC20 for IERC20;\n\n  /// @inheritdoc IKeep3rKeeperFundable\n  function bond(address _bonding, uint256 _amount) external override nonReentrant {\n    if (disputes[msg.sender]) revert Disputed();\n    if (_jobs.contains(msg.sender)) revert AlreadyAJob();\n    canActivateAfter[msg.sender][_bonding] = block.timestamp + bondTime;\n\n    uint256 _before = IERC20(_bonding).balanceOf(address(this));\n    IERC20(_bonding).safeTransferFrom(msg.sender, address(this), _amount);\n    _amount = IERC20(_bonding).balanceOf(address(this)) - _before;\n\n    hasBonded[msg.sender] = true;\n    pendingBonds[msg.sender][_bonding] += _amount;\n\n    emit Bonding(msg.sender, _bonding, _amount);\n  }\n\n  /// @inheritdoc IKeep3rKeeperFundable\n  function activate(address _bonding) external override {\n    if (disputes[msg.sender]) revert Disputed();\n    if (canActivateAfter[msg.sender][_bonding] == 0) revert BondsUnexistent();\n    if (canActivateAfter[msg.sender][_bonding] >= block.timestamp) revert BondsLocked();\n\n    delete canActivateAfter[msg.sender][_bonding];\n\n    uint256 _amount = _activate(msg.sender, _bonding);\n    emit Activation(msg.sender, _bonding, _amount);\n  }\n\n  /// @inheritdoc IKeep3rKeeperFundable\n  function unbond(address _bonding, uint256 _amount) external override {\n    canWithdrawAfter[msg.sender][_bonding] = block.timestamp + unbondTime;\n    bonds[msg.sender][_bonding] -= _amount;\n    pendingUnbonds[msg.sender][_bonding] += _amount;\n\n    emit Unbonding(msg.sender, _bonding, _amount);\n  }\n\n  /// @inheritdoc IKeep3rKeeperFundable\n  function withdraw(address _bonding) external override nonReentrant {\n    if (pendingUnbonds[msg.sender][_bonding] == 0) revert UnbondsUnexistent();\n    if (canWithdrawAfter[msg.sender][_bonding] >= block.timestamp) revert UnbondsLocked();\n    if (disputes[msg.sender]) revert Disputed();\n\n    uint256 _amount = pendingUnbonds[msg.sender][_bonding];\n\n    if (_bonding == keep3rV1) {\n      IKeep3rV1Proxy(keep3rV1Proxy).mint(_amount);\n    }\n\n    delete pendingUnbonds[msg.sender][_bonding];\n    delete canWithdrawAfter[msg.sender][_bonding];\n\n    IERC20(_bonding).safeTransfer(msg.sender, _amount);\n\n    emit Withdrawal(msg.sender, _bonding, _amount);\n  }\n\n  function _activate(address _keeper, address _bonding) internal virtual returns (uint256 _amount) {\n    if (firstSeen[_keeper] == 0) {\n      firstSeen[_keeper] = block.timestamp;\n    }\n    _keepers.add(_keeper);\n    _amount = pendingBonds[_keeper][_bonding];\n    delete pendingBonds[_keeper][_bonding];\n\n    // bond provided tokens\n    bonds[_keeper][_bonding] += _amount;\n    if (_bonding == keep3rV1) {\n      IKeep3rV1(keep3rV1).burn(_amount);\n    }\n  }\n}\n"
      },
      "solidity/interfaces/external/IKeep3rV1.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\n\n// solhint-disable func-name-mixedcase\ninterface IKeep3rV1 is IERC20, IERC20Metadata {\n  // Structs\n  struct Checkpoint {\n    uint32 fromBlock;\n    uint256 votes;\n  }\n\n  // Events\n  event DelegateChanged(address indexed _delegator, address indexed _fromDelegate, address indexed _toDelegate);\n  event DelegateVotesChanged(address indexed _delegate, uint256 _previousBalance, uint256 _newBalance);\n  event SubmitJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\n  event ApplyCredit(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\n  event RemoveJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\n  event UnbondJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\n  event JobAdded(address indexed _job, uint256 _block, address _governance);\n  event JobRemoved(address indexed _job, uint256 _block, address _governance);\n  event KeeperWorked(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _block, uint256 _amount);\n  event KeeperBonding(address indexed _keeper, uint256 _block, uint256 _active, uint256 _bond);\n  event KeeperBonded(address indexed _keeper, uint256 _block, uint256 _activated, uint256 _bond);\n  event KeeperUnbonding(address indexed _keeper, uint256 _block, uint256 _deactive, uint256 _bond);\n  event KeeperUnbound(address indexed _keeper, uint256 _block, uint256 _deactivated, uint256 _bond);\n  event KeeperSlashed(address indexed _keeper, address indexed _slasher, uint256 _block, uint256 _slash);\n  event KeeperDispute(address indexed _keeper, uint256 _block);\n  event KeeperResolved(address indexed _keeper, uint256 _block);\n  event TokenCreditAddition(address indexed _credit, address indexed _job, address indexed _creditor, uint256 _block, uint256 _amount);\n\n  // Variables\n  function KPRH() external returns (address);\n\n  function delegates(address _delegator) external view returns (address);\n\n  function checkpoints(address _account, uint32 _checkpoint) external view returns (Checkpoint memory);\n\n  function numCheckpoints(address _account) external view returns (uint32);\n\n  function DOMAIN_TYPEHASH() external returns (bytes32);\n\n  function DOMAINSEPARATOR() external returns (bytes32);\n\n  function DELEGATION_TYPEHASH() external returns (bytes32);\n\n  function PERMIT_TYPEHASH() external returns (bytes32);\n\n  function nonces(address _user) external view returns (uint256);\n\n  function BOND() external returns (uint256);\n\n  function UNBOND() external returns (uint256);\n\n  function LIQUIDITYBOND() external returns (uint256);\n\n  function FEE() external returns (uint256);\n\n  function BASE() external returns (uint256);\n\n  function ETH() external returns (address);\n\n  function bondings(address _user, address _bonding) external view returns (uint256);\n\n  function canWithdrawAfter(address _user, address _bonding) external view returns (uint256);\n\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256);\n\n  function pendingbonds(address _keeper, address _bonding) external view returns (uint256);\n\n  function bonds(address _keeper, address _bonding) external view returns (uint256);\n\n  function votes(address _delegator) external view returns (uint256);\n\n  function firstSeen(address _keeper) external view returns (uint256);\n\n  function disputes(address _keeper) external view returns (bool);\n\n  function lastJob(address _keeper) external view returns (uint256);\n\n  function workCompleted(address _keeper) external view returns (uint256);\n\n  function jobs(address _job) external view returns (bool);\n\n  function credits(address _job, address _credit) external view returns (uint256);\n\n  function liquidityProvided(\n    address _provider,\n    address _liquidity,\n    address _job\n  ) external view returns (uint256);\n\n  function liquidityUnbonding(\n    address _provider,\n    address _liquidity,\n    address _job\n  ) external view returns (uint256);\n\n  function liquidityAmountsUnbonding(\n    address _provider,\n    address _liquidity,\n    address _job\n  ) external view returns (uint256);\n\n  function jobProposalDelay(address _job) external view returns (uint256);\n\n  function liquidityApplied(\n    address _provider,\n    address _liquidity,\n    address _job\n  ) external view returns (uint256);\n\n  function liquidityAmount(\n    address _provider,\n    address _liquidity,\n    address _job\n  ) external view returns (uint256);\n\n  function keepers(address _keeper) external view returns (bool);\n\n  function blacklist(address _keeper) external view returns (bool);\n\n  function keeperList(uint256 _index) external view returns (address);\n\n  function jobList(uint256 _index) external view returns (address);\n\n  function governance() external returns (address);\n\n  function pendingGovernance() external returns (address);\n\n  function liquidityAccepted(address _liquidity) external view returns (bool);\n\n  function liquidityPairs(uint256 _index) external view returns (address);\n\n  // Methods\n  function getCurrentVotes(address _account) external view returns (uint256);\n\n  function addCreditETH(address _job) external payable;\n\n  function addCredit(\n    address _credit,\n    address _job,\n    uint256 _amount\n  ) external;\n\n  function addVotes(address _voter, uint256 _amount) external;\n\n  function removeVotes(address _voter, uint256 _amount) external;\n\n  function addKPRCredit(address _job, uint256 _amount) external;\n\n  function approveLiquidity(address _liquidity) external;\n\n  function revokeLiquidity(address _liquidity) external;\n\n  function pairs() external view returns (address[] memory);\n\n  function addLiquidityToJob(\n    address _liquidity,\n    address _job,\n    uint256 _amount\n  ) external;\n\n  function applyCreditToJob(\n    address _provider,\n    address _liquidity,\n    address _job\n  ) external;\n\n  function unbondLiquidityFromJob(\n    address _liquidity,\n    address _job,\n    uint256 _amount\n  ) external;\n\n  function removeLiquidityFromJob(address _liquidity, address _job) external;\n\n  function mint(uint256 _amount) external;\n\n  function burn(uint256 _amount) external;\n\n  function worked(address _keeper) external;\n\n  function receipt(\n    address _credit,\n    address _keeper,\n    uint256 _amount\n  ) external;\n\n  function receiptETH(address _keeper, uint256 _amount) external;\n\n  function addJob(address _job) external;\n\n  function getJobs() external view returns (address[] memory);\n\n  function removeJob(address _job) external;\n\n  function setKeep3rHelper(address _keep3rHelper) external;\n\n  function setGovernance(address _governance) external;\n\n  function acceptGovernance() external;\n\n  function isKeeper(address _keeper) external returns (bool);\n\n  function isMinKeeper(\n    address _keeper,\n    uint256 _minBond,\n    uint256 _earned,\n    uint256 _age\n  ) external returns (bool);\n\n  function isBondedKeeper(\n    address _keeper,\n    address _bond,\n    uint256 _minBond,\n    uint256 _earned,\n    uint256 _age\n  ) external returns (bool);\n\n  function bond(address _bonding, uint256 _amount) external;\n\n  function getKeepers() external view returns (address[] memory);\n\n  function activate(address _bonding) external;\n\n  function unbond(address _bonding, uint256 _amount) external;\n\n  function slash(\n    address _bonded,\n    address _keeper,\n    uint256 _amount\n  ) external;\n\n  function withdraw(address _bonding) external;\n\n  function dispute(address _keeper) external;\n\n  function revoke(address _keeper) external;\n\n  function resolve(address _keeper) external;\n\n  function permit(\n    address _owner,\n    address _spender,\n    uint256 _amount,\n    uint256 _deadline,\n    uint8 _v,\n    bytes32 _r,\n    bytes32 _s\n  ) external;\n}\n"
      },
      "solidity/interfaces/peripherals/IKeep3rKeepers.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\n/// @title Keep3rKeeperFundable contract\n/// @notice Handles the actions required to become a keeper\ninterface IKeep3rKeeperFundable {\n  // Events\n\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\n  /// @param _keeper The keeper that has been activated\n  /// @param _bond The asset the keeper has bonded\n  /// @param _amount The amount of the asset the keeper has bonded\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\n\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\n  /// @param _bond The asset to withdraw from the bonding pool\n  /// @param _amount The amount of funds withdrawn\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\n\n  // Errors\n\n  /// @notice Throws when the address that is trying to register as a job is already a job\n  error AlreadyAJob();\n\n  // Methods\n\n  /// @notice Beginning of the bonding process\n  /// @param _bonding The asset being bonded\n  /// @param _amount The amount of bonding asset being bonded\n  function bond(address _bonding, uint256 _amount) external;\n\n  /// @notice Beginning of the unbonding process\n  /// @param _bonding The asset being unbonded\n  /// @param _amount Allows for partial unbonding\n  function unbond(address _bonding, uint256 _amount) external;\n\n  /// @notice End of the bonding process after bonding time has passed\n  /// @param _bonding The asset being activated as bond collateral\n  function activate(address _bonding) external;\n\n  /// @notice Withdraw funds after unbonding has finished\n  /// @param _bonding The asset to withdraw from the bonding pool\n  function withdraw(address _bonding) external;\n}\n\n/// @title Keep3rKeeperDisputable contract\n/// @notice Handles the actions that can be taken on a disputed keeper\ninterface IKeep3rKeeperDisputable {\n  // Events\n\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\n  /// @param _keeper The address of the slashed keeper\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\n  /// @param _amount The amount of credits slashed from the keeper\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\n\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\n  /// @param _keeper The address of the revoked keeper\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\n\n  // Methods\n\n  /// @notice Allows governance to slash a keeper based on a dispute\n  /// @param _keeper The address being slashed\n  /// @param _bonded The asset being slashed\n  /// @param _bondAmount The bonded amount being slashed\n  /// @param _unbondAmount The pending unbond amount being slashed\n  function slash(\n    address _keeper,\n    address _bonded,\n    uint256 _bondAmount,\n    uint256 _unbondAmount\n  ) external;\n\n  /// @notice Blacklists a keeper from participating in the network\n  /// @param _keeper The address being slashed\n  function revoke(address _keeper) external;\n}\n\n// solhint-disable-next-line no-empty-blocks\n\n/// @title Keep3rKeepers contract\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\n\n}\n"
      },
      "solidity/interfaces/external/IKeep3rV1Proxy.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../peripherals/IGovernable.sol';\n\ninterface IKeep3rV1Proxy is IGovernable {\n  // Structs\n  struct Recipient {\n    address recipient;\n    uint256 caps;\n  }\n\n  // Variables\n  function keep3rV1() external view returns (address);\n\n  function minter() external view returns (address);\n\n  function next(address) external view returns (uint256);\n\n  function caps(address) external view returns (uint256);\n\n  function recipients() external view returns (address[] memory);\n\n  function recipientsCaps() external view returns (Recipient[] memory);\n\n  // Errors\n  error Cooldown();\n  error NoDrawableAmount();\n  error ZeroAddress();\n  error OnlyMinter();\n\n  // Methods\n  function addRecipient(address recipient, uint256 amount) external;\n\n  function removeRecipient(address recipient) external;\n\n  function draw() external returns (uint256 _amount);\n\n  function setKeep3rV1(address _keep3rV1) external;\n\n  function setMinter(address _minter) external;\n\n  function mint(uint256 _amount) external;\n\n  function mint(address _account, uint256 _amount) external;\n\n  function setKeep3rV1Governance(address _governance) external;\n\n  function acceptKeep3rV1Governance() external;\n\n  function dispute(address _keeper) external;\n\n  function slash(\n    address _bonded,\n    address _keeper,\n    uint256 _amount\n  ) external;\n\n  function revoke(address _keeper) external;\n\n  function resolve(address _keeper) external;\n\n  function addJob(address _job) external;\n\n  function removeJob(address _job) external;\n\n  function addKPRCredit(address _job, uint256 _amount) external;\n\n  function approveLiquidity(address _liquidity) external;\n\n  function revokeLiquidity(address _liquidity) external;\n\n  function setKeep3rHelper(address _keep3rHelper) external;\n\n  function addVotes(address _voter, uint256 _amount) external;\n\n  function removeVotes(address _voter, uint256 _amount) external;\n}\n"
      },
      "solidity/interfaces/peripherals/IDustCollector.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.4 <0.9.0;\n\nimport './IBaseErrors.sol';\n\ninterface IDustCollector is IBaseErrors {\n  /// @notice Emitted when dust is sent\n  /// @param _token The token that will be transferred\n  /// @param _amount The amount of the token that will be transferred\n  /// @param _to The address which will receive the funds\n  event DustSent(address _token, uint256 _amount, address _to);\n\n  /// @notice Allows an authorized user to transfer the tokens or eth that may have been left in a contract\n  /// @param _token The token that will be transferred\n  /// @param _amount The amount of the token that will be transferred\n  /// @param _to The address that will receive the idle funds\n  function sendDust(\n    address _token,\n    uint256 _amount,\n    address _to\n  ) external;\n}\n"
      },
      "solidity/for-test/Keep3rForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../contracts/Keep3r.sol';\n\ncontract Keep3rForTest is Keep3r {\n  constructor(\n    address _governance,\n    address _keep3rHelper,\n    address _keep3rV1,\n    address _keep3rV1Proxy,\n    address _kp3rWethPool\n  ) Keep3r(_governance, _keep3rHelper, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) {}\n\n  function viewTickOrder(address _liquidity) external view returns (bool) {\n    return _isKP3RToken0[_liquidity];\n  }\n}\n"
      },
      "solidity/for-test/peripherals/DustCollectorForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../contracts/peripherals/DustCollector.sol';\n\ncontract DustCollectorForTest is DustCollector {\n  constructor() DustCollector() Governable(msg.sender) {}\n}\n"
      },
      "solidity/interfaces/IKeep3r.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './peripherals/IKeep3rJobs.sol';\nimport './peripherals/IKeep3rKeepers.sol';\nimport './peripherals/IKeep3rAccountance.sol';\nimport './peripherals/IKeep3rRoles.sol';\nimport './peripherals/IKeep3rParameters.sol';\n\n// solhint-disable-next-line no-empty-blocks\n\n/// @title Keep3rV2 contract\n/// @notice This contract inherits all the functionality of Keep3rV2\ninterface IKeep3r is IKeep3rJobs, IKeep3rKeepers, IKeep3rAccountance, IKeep3rRoles, IKeep3rParameters {\n\n}\n"
      },
      "solidity/for-test/JobForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../interfaces/IKeep3r.sol';\n\ncontract JobForTest {\n  error InvalidKeeper();\n  address public keep3r;\n  uint256 public nonce;\n\n  constructor(address _keep3r) {\n    keep3r = _keep3r;\n  }\n\n  function work() external {\n    if (!IKeep3r(keep3r).isKeeper(msg.sender)) revert InvalidKeeper();\n\n    for (uint256 i; i < 1000; i++) {\n      nonce++;\n    }\n\n    IKeep3r(keep3r).worked(msg.sender);\n  }\n\n  function workHard(uint256 _factor) external {\n    if (!IKeep3r(keep3r).isKeeper(msg.sender)) revert InvalidKeeper();\n\n    for (uint256 i; i < 1000 * _factor; i++) {\n      nonce++;\n    }\n\n    IKeep3r(keep3r).worked(msg.sender);\n  }\n}\n"
      },
      "solidity/for-test/BasicJob.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../interfaces/IKeep3r.sol';\n\ncontract BasicJob {\n  error KeeperNotValid();\n\n  address public keep3r;\n  uint256 public nonce;\n  uint256[] public array;\n\n  constructor(address _keep3r) {\n    keep3r = _keep3r;\n  }\n\n  function work() external upkeep {}\n\n  function workHard(uint256 _howHard) external upkeep {\n    for (uint256 i = nonce; i < _howHard; i++) {\n      nonce++;\n    }\n  }\n\n  function workRefund(uint256 _howHard) external upkeep {\n    for (uint256 i; i < _howHard; i++) {\n      array.push(i);\n    }\n\n    while (array.length > 0) {\n      array.pop();\n    }\n  }\n\n  modifier upkeep() {\n    IKeep3r(keep3r).isKeeper(msg.sender);\n    _;\n    IKeep3r(keep3r).worked(msg.sender);\n  }\n}\n"
      },
      "solidity/contracts/Keep3rHelperParameters.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.7 <0.9.0;\n\nimport './libraries/FullMath.sol';\nimport './libraries/TickMath.sol';\nimport '../interfaces/IKeep3r.sol';\nimport '../interfaces/external/IKeep3rV1.sol';\nimport '../interfaces/IKeep3rHelperParameters.sol';\nimport './peripherals/Governable.sol';\nimport './Keep3rHelperParameters.sol';\n\nimport '@openzeppelin/contracts/utils/math/Math.sol';\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\n\ncontract Keep3rHelperParameters is IKeep3rHelperParameters, Governable {\n  /// @inheritdoc IKeep3rHelperParameters\n  address public constant override KP3R = 0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44;\n\n  /// @inheritdoc IKeep3rHelperParameters\n  uint256 public constant override BOOST_BASE = 10_000;\n\n  /// @inheritdoc IKeep3rHelperParameters\n  uint256 public override minBoost = 11_000;\n\n  /// @inheritdoc IKeep3rHelperParameters\n  uint256 public override maxBoost = 12_000;\n\n  /// @inheritdoc IKeep3rHelperParameters\n  uint256 public override targetBond = 200 ether;\n\n  /// @inheritdoc IKeep3rHelperParameters\n  uint256 public override workExtraGas = 50_000;\n\n  /// @inheritdoc IKeep3rHelperParameters\n  uint32 public override quoteTwapTime = 10 minutes;\n\n  /// @inheritdoc IKeep3rHelperParameters\n  address public override keep3rV2;\n\n  /// @inheritdoc IKeep3rHelperParameters\n  IKeep3rHelperParameters.Kp3rWethPool public override kp3rWethPool;\n\n  constructor(address _keep3rV2, address _governance) Governable(_governance) {\n    keep3rV2 = _keep3rV2;\n    _setKp3rWethPool(0x11B7a6bc0259ed6Cf9DB8F499988F9eCc7167bf5);\n  }\n\n  /// @inheritdoc IKeep3rHelperParameters\n  function setKp3rWethPool(address _poolAddress) external override onlyGovernance {\n    _setKp3rWethPool(_poolAddress);\n    emit Kp3rWethPoolChange(kp3rWethPool.poolAddress, kp3rWethPool.isKP3RToken0);\n  }\n\n  /// @inheritdoc IKeep3rHelperParameters\n  function setMinBoost(uint256 _minBoost) external override onlyGovernance {\n    minBoost = _minBoost;\n    emit MinBoostChange(minBoost);\n  }\n\n  /// @inheritdoc IKeep3rHelperParameters\n  function setMaxBoost(uint256 _maxBoost) external override onlyGovernance {\n    maxBoost = _maxBoost;\n    emit MaxBoostChange(maxBoost);\n  }\n\n  /// @inheritdoc IKeep3rHelperParameters\n  function setTargetBond(uint256 _targetBond) external override onlyGovernance {\n    targetBond = _targetBond;\n    emit TargetBondChange(targetBond);\n  }\n\n  /// @inheritdoc IKeep3rHelperParameters\n  function setKeep3rV2(address _keep3rV2) external override onlyGovernance {\n    keep3rV2 = _keep3rV2;\n    emit Keep3rV2Change(keep3rV2);\n  }\n\n  /// @inheritdoc IKeep3rHelperParameters\n  function setWorkExtraGas(uint256 _workExtraGas) external override onlyGovernance {\n    workExtraGas = _workExtraGas;\n    emit WorkExtraGasChange(workExtraGas);\n  }\n\n  /// @inheritdoc IKeep3rHelperParameters\n  function setQuoteTwapTime(uint32 _quoteTwapTime) external override onlyGovernance {\n    quoteTwapTime = _quoteTwapTime;\n    emit QuoteTwapTimeChange(quoteTwapTime);\n  }\n\n  /// @notice Sets KP3R-WETH pool\n  /// @param _poolAddress The address of the KP3R-WETH pool\n  function _setKp3rWethPool(address _poolAddress) internal {\n    bool _isKP3RToken0 = IUniswapV3Pool(_poolAddress).token0() == KP3R;\n    bool _isKP3RToken1 = IUniswapV3Pool(_poolAddress).token1() == KP3R;\n\n    if (!_isKP3RToken0 && !_isKP3RToken1) revert InvalidKp3rPool();\n\n    kp3rWethPool = Kp3rWethPool(_poolAddress, _isKP3RToken0);\n  }\n}\n"
      },
      "solidity/contracts/libraries/TickMath.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n// solhint-disable\n\n/// @title Math library for computing sqrt prices from ticks and vice versa\n/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\n///         prices between 2**-128 and 2**128\nlibrary TickMath {\n  /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\n  int24 internal constant MIN_TICK = -887272;\n  /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\n  int24 internal constant MAX_TICK = -MIN_TICK;\n\n  /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\n  uint160 internal constant MIN_SQRT_RATIO = 4295128739;\n  /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\n  uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;\n\n  /// @notice Calculates sqrt(1.0001^tick) * 2^96\n  /// @dev Throws if |tick| > max tick\n  /// @param tick The input tick for the above formula\n  /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\n  ///         at the given tick\n  function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {\n    uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));\n    require(absTick <= uint256(int256(MAX_TICK)), 'T');\n\n    uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;\n    if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;\n    if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;\n    if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;\n    if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;\n    if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;\n    if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;\n    if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;\n    if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;\n    if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;\n    if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;\n    if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;\n    if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;\n    if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;\n    if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;\n    if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;\n    if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;\n    if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;\n    if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;\n    if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;\n\n    if (tick > 0) ratio = type(uint256).max / ratio;\n\n    // Divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.\n    // we then downcast because we know the result always fits within 160 bits due to our tick input constraint\n    // we round up in the division so getTickAtSqrtRatio of the output price is always consistent\n    sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));\n  }\n\n  /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\n  /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may ever return.\n  /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\n  /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio\n  function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {\n    // Second inequality must be < because the price can never reach the price at the max tick\n    require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');\n    uint256 ratio = uint256(sqrtPriceX96) << 32;\n\n    uint256 r = ratio;\n    uint256 msb = 0;\n\n    assembly {\n      let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))\n      msb := or(msb, f)\n      r := shr(f, r)\n    }\n    assembly {\n      let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))\n      msb := or(msb, f)\n      r := shr(f, r)\n    }\n    assembly {\n      let f := shl(5, gt(r, 0xFFFFFFFF))\n      msb := or(msb, f)\n      r := shr(f, r)\n    }\n    assembly {\n      let f := shl(4, gt(r, 0xFFFF))\n      msb := or(msb, f)\n      r := shr(f, r)\n    }\n    assembly {\n      let f := shl(3, gt(r, 0xFF))\n      msb := or(msb, f)\n      r := shr(f, r)\n    }\n    assembly {\n      let f := shl(2, gt(r, 0xF))\n      msb := or(msb, f)\n      r := shr(f, r)\n    }\n    assembly {\n      let f := shl(1, gt(r, 0x3))\n      msb := or(msb, f)\n      r := shr(f, r)\n    }\n    assembly {\n      let f := gt(r, 0x1)\n      msb := or(msb, f)\n    }\n\n    if (msb >= 128) r = ratio >> (msb - 127);\n    else r = ratio << (127 - msb);\n\n    int256 log_2 = (int256(msb) - 128) << 64;\n\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(63, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(62, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(61, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(60, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(59, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(58, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(57, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(56, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(55, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(54, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(53, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(52, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(51, f))\n      r := shr(f, r)\n    }\n    assembly {\n      r := shr(127, mul(r, r))\n      let f := shr(128, r)\n      log_2 := or(log_2, shl(50, f))\n    }\n\n    int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number\n\n    int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);\n    int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);\n\n    tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;\n  }\n}\n"
      },
      "solidity/interfaces/IKeep3rHelperParameters.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\n/// @title Keep3rHelperParameters contract\n/// @notice Contains all the helper functions used throughout the different files.\ninterface IKeep3rHelperParameters {\n  // Structs\n\n  /// @dev KP3R-WETH Pool address and isKP3RToken0\n  /// @dev Created in order to save gas by avoiding calls to pool's token0 method\n  struct Kp3rWethPool {\n    address poolAddress;\n    bool isKP3RToken0;\n  }\n\n  // Errors\n\n  /// @notice Throws when pool does not have KP3R as token0 nor token1\n  error InvalidKp3rPool();\n\n  // Events\n\n  /// @notice Emitted when the kp3r weth pool is changed\n  /// @param _address Address of the new kp3r weth pool\n  /// @param _isKP3RToken0 True if calling the token0 method of the pool returns the KP3R token address\n  event Kp3rWethPoolChange(address _address, bool _isKP3RToken0);\n\n  /// @notice Emitted when the minimum boost multiplier is changed\n  /// @param _minBoost The minimum boost multiplier\n  event MinBoostChange(uint256 _minBoost);\n\n  /// @notice Emitted when the maximum boost multiplier is changed\n  /// @param _maxBoost The maximum boost multiplier\n  event MaxBoostChange(uint256 _maxBoost);\n\n  /// @notice Emitted when the target bond amount is changed\n  /// @param _targetBond The target bond amount\n  event TargetBondChange(uint256 _targetBond);\n\n  /// @notice Emitted when the Keep3r V2 address is changed\n  /// @param _keep3rV2 The address of Keep3r V2\n  event Keep3rV2Change(address _keep3rV2);\n\n  /// @notice Emitted when the work extra gas amount is changed\n  /// @param _workExtraGas The work extra gas\n  event WorkExtraGasChange(uint256 _workExtraGas);\n\n  /// @notice Emitted when the quote twap time is changed\n  /// @param _quoteTwapTime The twap time for quoting\n  event QuoteTwapTimeChange(uint32 _quoteTwapTime);\n\n  // Variables\n\n  /// @notice Address of KP3R token\n  /// @return _kp3r Address of KP3R token\n  // solhint-disable func-name-mixedcase\n  function KP3R() external view returns (address _kp3r);\n\n  /// @notice The boost base used to calculate the boost rewards for the keeper\n  /// @return _base The boost base number\n  function BOOST_BASE() external view returns (uint256 _base);\n\n  /// @notice KP3R-WETH pool that is being used as oracle\n  /// @return poolAddress Address of the pool\n  /// @return isKP3RToken0 True if calling the token0 method of the pool returns the KP3R token address\n  function kp3rWethPool() external view returns (address poolAddress, bool isKP3RToken0);\n\n  /// @notice The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job\n  ///         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE\n  /// @return _multiplier The minimum boost multiplier\n  function minBoost() external view returns (uint256 _multiplier);\n\n  /// @notice The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job\n  ///         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE\n  /// @return _multiplier The maximum boost multiplier\n  function maxBoost() external view returns (uint256 _multiplier);\n\n  /// @notice The targeted amount of bonded KP3Rs to max-up reward multiplier\n  ///         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get\n  ///                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional\n  /// @return _target The amount of KP3R that comforms the targetBond\n  function targetBond() external view returns (uint256 _target);\n\n  /// @notice The amount of unaccounted gas that is going to be added to keeper payments\n  /// @return _workExtraGas The work unaccounted gas amount\n  function workExtraGas() external view returns (uint256 _workExtraGas);\n\n  /// @notice The twap time for quoting\n  /// @return _quoteTwapTime The twap time\n  function quoteTwapTime() external view returns (uint32 _quoteTwapTime);\n\n  /// @notice Address of Keep3r V2\n  /// @return _keep3rV2 Address of Keep3r V2\n  function keep3rV2() external view returns (address _keep3rV2);\n\n  // Methods\n\n  /// @notice Sets KP3R-WETH pool\n  /// @param _poolAddress The address of the KP3R-WETH pool\n  function setKp3rWethPool(address _poolAddress) external;\n\n  /// @notice Sets the minimum boost multiplier\n  /// @param _minBoost The minimum boost multiplier\n  function setMinBoost(uint256 _minBoost) external;\n\n  /// @notice Sets the maximum boost multiplier\n  /// @param _maxBoost The maximum boost multiplier\n  function setMaxBoost(uint256 _maxBoost) external;\n\n  /// @notice Sets the target bond amount\n  /// @param _targetBond The target bond amount\n  function setTargetBond(uint256 _targetBond) external;\n\n  /// @notice Sets the Keep3r V2 address\n  /// @param _keep3rV2 The address of Keep3r V2\n  function setKeep3rV2(address _keep3rV2) external;\n\n  /// @notice Sets the work extra gas amount\n  /// @param _workExtraGas The work extra gas\n  function setWorkExtraGas(uint256 _workExtraGas) external;\n\n  /// @notice Sets the quote twap time\n  /// @param _quoteTwapTime The twap time for quoting\n  function setQuoteTwapTime(uint32 _quoteTwapTime) external;\n}\n"
      },
      "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\nimport './pool/IUniswapV3PoolImmutables.sol';\nimport './pool/IUniswapV3PoolState.sol';\nimport './pool/IUniswapV3PoolDerivedState.sol';\nimport './pool/IUniswapV3PoolActions.sol';\nimport './pool/IUniswapV3PoolOwnerActions.sol';\nimport './pool/IUniswapV3PoolEvents.sol';\n\n/// @title The interface for a Uniswap V3 Pool\n/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform\n/// to the ERC20 specification\n/// @dev The pool interface is broken up into many smaller pieces\ninterface IUniswapV3Pool is\n    IUniswapV3PoolImmutables,\n    IUniswapV3PoolState,\n    IUniswapV3PoolDerivedState,\n    IUniswapV3PoolActions,\n    IUniswapV3PoolOwnerActions,\n    IUniswapV3PoolEvents\n{\n\n}\n"
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Pool state that never changes\n/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values\ninterface IUniswapV3PoolImmutables {\n    /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\n    /// @return The contract address\n    function factory() external view returns (address);\n\n    /// @notice The first of the two tokens of the pool, sorted by address\n    /// @return The token contract address\n    function token0() external view returns (address);\n\n    /// @notice The second of the two tokens of the pool, sorted by address\n    /// @return The token contract address\n    function token1() external view returns (address);\n\n    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6\n    /// @return The fee\n    function fee() external view returns (uint24);\n\n    /// @notice The pool tick spacing\n    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\n    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\n    /// This value is an int24 to avoid casting even though it is always positive.\n    /// @return The tick spacing\n    function tickSpacing() external view returns (int24);\n\n    /// @notice The maximum amount of position liquidity that can use any tick in the range\n    /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\n    /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\n    /// @return The max amount of liquidity per tick\n    function maxLiquidityPerTick() external view returns (uint128);\n}\n"
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Pool state that can change\n/// @notice These methods compose the pool's state, and can change with any frequency including multiple times\n/// per transaction\ninterface IUniswapV3PoolState {\n    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\n    /// when accessed externally.\n    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\n    /// tick The current tick of the pool, i.e. according to the last tick transition that was run.\n    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\n    /// boundary.\n    /// observationIndex The index of the last oracle observation that was written,\n    /// observationCardinality The current maximum number of observations stored in the pool,\n    /// observationCardinalityNext The next maximum number of observations, to be updated when the observation.\n    /// feeProtocol The protocol fee for both tokens of the pool.\n    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\n    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\n    /// unlocked Whether the pool is currently locked to reentrancy\n    function slot0()\n        external\n        view\n        returns (\n            uint160 sqrtPriceX96,\n            int24 tick,\n            uint16 observationIndex,\n            uint16 observationCardinality,\n            uint16 observationCardinalityNext,\n            uint8 feeProtocol,\n            bool unlocked\n        );\n\n    /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\n    /// @dev This value can overflow the uint256\n    function feeGrowthGlobal0X128() external view returns (uint256);\n\n    /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\n    /// @dev This value can overflow the uint256\n    function feeGrowthGlobal1X128() external view returns (uint256);\n\n    /// @notice The amounts of token0 and token1 that are owed to the protocol\n    /// @dev Protocol fees will never exceed uint128 max in either token\n    function protocolFees() external view returns (uint128 token0, uint128 token1);\n\n    /// @notice The currently in range liquidity available to the pool\n    /// @dev This value has no relationship to the total liquidity across all ticks\n    function liquidity() external view returns (uint128);\n\n    /// @notice Look up information about a specific tick in the pool\n    /// @param tick The tick to look up\n    /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\n    /// tick upper,\n    /// liquidityNet how much liquidity changes when the pool price crosses the tick,\n    /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\n    /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\n    /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\n    /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\n    /// secondsOutside the seconds spent on the other side of the tick from the current tick,\n    /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\n    /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\n    /// In addition, these values are only relative and must be used only in comparison to previous snapshots for\n    /// a specific position.\n    function ticks(int24 tick)\n        external\n        view\n        returns (\n            uint128 liquidityGross,\n            int128 liquidityNet,\n            uint256 feeGrowthOutside0X128,\n            uint256 feeGrowthOutside1X128,\n            int56 tickCumulativeOutside,\n            uint160 secondsPerLiquidityOutsideX128,\n            uint32 secondsOutside,\n            bool initialized\n        );\n\n    /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information\n    function tickBitmap(int16 wordPosition) external view returns (uint256);\n\n    /// @notice Returns the information about a position by the position's key\n    /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\n    /// @return _liquidity The amount of liquidity in the position,\n    /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\n    /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\n    /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\n    /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\n    function positions(bytes32 key)\n        external\n        view\n        returns (\n            uint128 _liquidity,\n            uint256 feeGrowthInside0LastX128,\n            uint256 feeGrowthInside1LastX128,\n            uint128 tokensOwed0,\n            uint128 tokensOwed1\n        );\n\n    /// @notice Returns data about a specific observation index\n    /// @param index The element of the observations array to fetch\n    /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\n    /// ago, rather than at a specific index in the array.\n    /// @return blockTimestamp The timestamp of the observation,\n    /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\n    /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\n    /// Returns initialized whether the observation has been initialized and the values are safe to use\n    function observations(uint256 index)\n        external\n        view\n        returns (\n            uint32 blockTimestamp,\n            int56 tickCumulative,\n            uint160 secondsPerLiquidityCumulativeX128,\n            bool initialized\n        );\n}\n"
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Pool state that is not stored\n/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the\n/// blockchain. The functions here may have variable gas costs.\ninterface IUniswapV3PoolDerivedState {\n    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\n    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\n    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\n    /// you must call it with secondsAgos = [3600, 0].\n    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\n    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\n    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\n    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\n    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\n    /// timestamp\n    function observe(uint32[] calldata secondsAgos)\n        external\n        view\n        returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\n\n    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\n    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\n    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\n    /// snapshot is taken and the second snapshot is taken.\n    /// @param tickLower The lower tick of the range\n    /// @param tickUpper The upper tick of the range\n    /// @return tickCumulativeInside The snapshot of the tick accumulator for the range\n    /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\n    /// @return secondsInside The snapshot of seconds per liquidity for the range\n    function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)\n        external\n        view\n        returns (\n            int56 tickCumulativeInside,\n            uint160 secondsPerLiquidityInsideX128,\n            uint32 secondsInside\n        );\n}\n"
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Permissionless pool actions\n/// @notice Contains pool methods that can be called by anyone\ninterface IUniswapV3PoolActions {\n    /// @notice Sets the initial price for the pool\n    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\n    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96\n    function initialize(uint160 sqrtPriceX96) external;\n\n    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback\n    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\n    /// on tickLower, tickUpper, the amount of liquidity, and the current price.\n    /// @param recipient The address for which the liquidity will be created\n    /// @param tickLower The lower tick of the position in which to add liquidity\n    /// @param tickUpper The upper tick of the position in which to add liquidity\n    /// @param amount The amount of liquidity to mint\n    /// @param data Any data that should be passed through to the callback\n    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\n    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\n    function mint(\n        address recipient,\n        int24 tickLower,\n        int24 tickUpper,\n        uint128 amount,\n        bytes calldata data\n    ) external returns (uint256 amount0, uint256 amount1);\n\n    /// @notice Collects tokens owed to a position\n    /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\n    /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\n    /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\n    /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\n    /// @param recipient The address which should receive the fees collected\n    /// @param tickLower The lower tick of the position for which to collect fees\n    /// @param tickUpper The upper tick of the position for which to collect fees\n    /// @param amount0Requested How much token0 should be withdrawn from the fees owed\n    /// @param amount1Requested How much token1 should be withdrawn from the fees owed\n    /// @return amount0 The amount of fees collected in token0\n    /// @return amount1 The amount of fees collected in token1\n    function collect(\n        address recipient,\n        int24 tickLower,\n        int24 tickUpper,\n        uint128 amount0Requested,\n        uint128 amount1Requested\n    ) external returns (uint128 amount0, uint128 amount1);\n\n    /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\n    /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\n    /// @dev Fees must be collected separately via a call to #collect\n    /// @param tickLower The lower tick of the position for which to burn liquidity\n    /// @param tickUpper The upper tick of the position for which to burn liquidity\n    /// @param amount How much liquidity to burn\n    /// @return amount0 The amount of token0 sent to the recipient\n    /// @return amount1 The amount of token1 sent to the recipient\n    function burn(\n        int24 tickLower,\n        int24 tickUpper,\n        uint128 amount\n    ) external returns (uint256 amount0, uint256 amount1);\n\n    /// @notice Swap token0 for token1, or token1 for token0\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\n    /// @param recipient The address to receive the output of the swap\n    /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\n    /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\n    /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\n    /// value after the swap. If one for zero, the price cannot be greater than this value after the swap\n    /// @param data Any data to be passed through to the callback\n    /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\n    /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive\n    function swap(\n        address recipient,\n        bool zeroForOne,\n        int256 amountSpecified,\n        uint160 sqrtPriceLimitX96,\n        bytes calldata data\n    ) external returns (int256 amount0, int256 amount1);\n\n    /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback\n    /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\n    /// with 0 amount{0,1} and sending the donation amount(s) from the callback\n    /// @param recipient The address which will receive the token0 and token1 amounts\n    /// @param amount0 The amount of token0 to send\n    /// @param amount1 The amount of token1 to send\n    /// @param data Any data to be passed through to the callback\n    function flash(\n        address recipient,\n        uint256 amount0,\n        uint256 amount1,\n        bytes calldata data\n    ) external;\n\n    /// @notice Increase the maximum number of price and liquidity observations that this pool will store\n    /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\n    /// the input observationCardinalityNext.\n    /// @param observationCardinalityNext The desired minimum number of observations for the pool to store\n    function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;\n}\n"
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Permissioned pool actions\n/// @notice Contains pool methods that may only be called by the factory owner\ninterface IUniswapV3PoolOwnerActions {\n    /// @notice Set the denominator of the protocol's % share of the fees\n    /// @param feeProtocol0 new protocol fee for token0 of the pool\n    /// @param feeProtocol1 new protocol fee for token1 of the pool\n    function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;\n\n    /// @notice Collect the protocol fee accrued to the pool\n    /// @param recipient The address to which collected protocol fees should be sent\n    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\n    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\n    /// @return amount0 The protocol fee collected in token0\n    /// @return amount1 The protocol fee collected in token1\n    function collectProtocol(\n        address recipient,\n        uint128 amount0Requested,\n        uint128 amount1Requested\n    ) external returns (uint128 amount0, uint128 amount1);\n}\n"
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Events emitted by a pool\n/// @notice Contains all events emitted by the pool\ninterface IUniswapV3PoolEvents {\n    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool\n    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\n    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\n    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\n    event Initialize(uint160 sqrtPriceX96, int24 tick);\n\n    /// @notice Emitted when liquidity is minted for a given position\n    /// @param sender The address that minted the liquidity\n    /// @param owner The owner of the position and recipient of any minted liquidity\n    /// @param tickLower The lower tick of the position\n    /// @param tickUpper The upper tick of the position\n    /// @param amount The amount of liquidity minted to the position range\n    /// @param amount0 How much token0 was required for the minted liquidity\n    /// @param amount1 How much token1 was required for the minted liquidity\n    event Mint(\n        address sender,\n        address indexed owner,\n        int24 indexed tickLower,\n        int24 indexed tickUpper,\n        uint128 amount,\n        uint256 amount0,\n        uint256 amount1\n    );\n\n    /// @notice Emitted when fees are collected by the owner of a position\n    /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\n    /// @param owner The owner of the position for which fees are collected\n    /// @param tickLower The lower tick of the position\n    /// @param tickUpper The upper tick of the position\n    /// @param amount0 The amount of token0 fees collected\n    /// @param amount1 The amount of token1 fees collected\n    event Collect(\n        address indexed owner,\n        address recipient,\n        int24 indexed tickLower,\n        int24 indexed tickUpper,\n        uint128 amount0,\n        uint128 amount1\n    );\n\n    /// @notice Emitted when a position's liquidity is removed\n    /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\n    /// @param owner The owner of the position for which liquidity is removed\n    /// @param tickLower The lower tick of the position\n    /// @param tickUpper The upper tick of the position\n    /// @param amount The amount of liquidity to remove\n    /// @param amount0 The amount of token0 withdrawn\n    /// @param amount1 The amount of token1 withdrawn\n    event Burn(\n        address indexed owner,\n        int24 indexed tickLower,\n        int24 indexed tickUpper,\n        uint128 amount,\n        uint256 amount0,\n        uint256 amount1\n    );\n\n    /// @notice Emitted by the pool for any swaps between token0 and token1\n    /// @param sender The address that initiated the swap call, and that received the callback\n    /// @param recipient The address that received the output of the swap\n    /// @param amount0 The delta of the token0 balance of the pool\n    /// @param amount1 The delta of the token1 balance of the pool\n    /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\n    /// @param liquidity The liquidity of the pool after the swap\n    /// @param tick The log base 1.0001 of price of the pool after the swap\n    event Swap(\n        address indexed sender,\n        address indexed recipient,\n        int256 amount0,\n        int256 amount1,\n        uint160 sqrtPriceX96,\n        uint128 liquidity,\n        int24 tick\n    );\n\n    /// @notice Emitted by the pool for any flashes of token0/token1\n    /// @param sender The address that initiated the swap call, and that received the callback\n    /// @param recipient The address that received the tokens from flash\n    /// @param amount0 The amount of token0 that was flashed\n    /// @param amount1 The amount of token1 that was flashed\n    /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\n    /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\n    event Flash(\n        address indexed sender,\n        address indexed recipient,\n        uint256 amount0,\n        uint256 amount1,\n        uint256 paid0,\n        uint256 paid1\n    );\n\n    /// @notice Emitted by the pool for increases to the number of observations that can be stored\n    /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\n    /// just before a mint/swap/burn.\n    /// @param observationCardinalityNextOld The previous value of the next observation cardinality\n    /// @param observationCardinalityNextNew The updated value of the next observation cardinality\n    event IncreaseObservationCardinalityNext(\n        uint16 observationCardinalityNextOld,\n        uint16 observationCardinalityNextNew\n    );\n\n    /// @notice Emitted when the protocol fee is changed by the pool\n    /// @param feeProtocol0Old The previous value of the token0 protocol fee\n    /// @param feeProtocol1Old The previous value of the token1 protocol fee\n    /// @param feeProtocol0New The updated value of the token0 protocol fee\n    /// @param feeProtocol1New The updated value of the token1 protocol fee\n    event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);\n\n    /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner\n    /// @param sender The address that collects the protocol fees\n    /// @param recipient The address that receives the collected protocol fees\n    /// @param amount0 The amount of token0 protocol fees that is withdrawn\n    /// @param amount0 The amount of token1 protocol fees that is withdrawn\n    event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);\n}\n"
      },
      "solidity/for-test/UniV3PairManagerForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '@openzeppelin/contracts/token/ERC20/ERC20.sol';\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\n\nimport '../contracts/libraries/LiquidityAmounts.sol';\nimport '../contracts/libraries/PoolAddress.sol';\nimport '../contracts/libraries/FixedPoint96.sol';\nimport '../contracts/libraries/FullMath.sol';\nimport '../contracts/libraries/TickMath.sol';\nimport '../contracts/UniV3PairManager.sol';\nimport '../interfaces/external/IWeth9.sol';\nimport '../interfaces/IUniV3PairManager.sol';\n\ncontract UniV3PairManagerForTest is UniV3PairManager {\n  constructor(address _pool, address _governance) UniV3PairManager(_pool, _governance) {}\n\n  function internalAddLiquidity(\n    uint256 amount0Desired,\n    uint256 amount1Desired,\n    uint256 amount0Min,\n    uint256 amount1Min\n  )\n    external\n    returns (\n      uint128 liquidity,\n      uint256 amount0,\n      uint256 amount1\n    )\n  {\n    return _addLiquidity(amount0Desired, amount1Desired, amount0Min, amount1Min);\n  }\n\n  function internalPay(\n    address token,\n    address payer,\n    address recipient,\n    uint256 value\n  ) external {\n    return _pay(token, payer, recipient, value);\n  }\n\n  function internalMint(address dst, uint256 amount) external {\n    return _mint(dst, amount);\n  }\n\n  function internalBurn(address dst, uint256 amount) external {\n    return _burn(dst, amount);\n  }\n\n  function internalTransferTokens(\n    address src,\n    address dst,\n    uint256 amount\n  ) external {\n    _transferTokens(src, dst, amount);\n  }\n\n  function internalSafeTransferFrom(\n    address token,\n    address from,\n    address to,\n    uint256 value\n  ) external {\n    _safeTransferFrom(token, from, to, value);\n  }\n\n  receive() external payable {}\n}\n"
      },
      "@openzeppelin/contracts/token/ERC20/ERC20.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport \"./IERC20.sol\";\nimport \"./extensions/IERC20Metadata.sol\";\nimport \"../../utils/Context.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20, IERC20Metadata {\n    mapping(address => uint256) private _balances;\n\n    mapping(address => mapping(address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * The default value of {decimals} is 18. To select a different value for\n     * {decimals} you should overload it.\n     *\n     * All two of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual override returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual override returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\n     * overridden;\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual override returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `recipient` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n        _transfer(_msgSender(), recipient, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        _approve(_msgSender(), spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * Requirements:\n     *\n     * - `sender` and `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``sender``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) public virtual override returns (bool) {\n        _transfer(sender, recipient, amount);\n\n        uint256 currentAllowance = _allowances[sender][_msgSender()];\n        require(currentAllowance >= amount, \"ERC20: transfer amount exceeds allowance\");\n        unchecked {\n            _approve(sender, _msgSender(), currentAllowance - amount);\n        }\n\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        uint256 currentAllowance = _allowances[_msgSender()][spender];\n        require(currentAllowance >= subtractedValue, \"ERC20: decreased allowance below zero\");\n        unchecked {\n            _approve(_msgSender(), spender, currentAllowance - subtractedValue);\n        }\n\n        return true;\n    }\n\n    /**\n     * @dev Moves `amount` of tokens from `sender` to `recipient`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `sender` cannot be the zero address.\n     * - `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     */\n    function _transfer(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) internal virtual {\n        require(sender != address(0), \"ERC20: transfer from the zero address\");\n        require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(sender, recipient, amount);\n\n        uint256 senderBalance = _balances[sender];\n        require(senderBalance >= amount, \"ERC20: transfer amount exceeds balance\");\n        unchecked {\n            _balances[sender] = senderBalance - amount;\n        }\n        _balances[recipient] += amount;\n\n        emit Transfer(sender, recipient, amount);\n\n        _afterTokenTransfer(sender, recipient, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply += amount;\n        _balances[account] += amount;\n        emit Transfer(address(0), account, amount);\n\n        _afterTokenTransfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        uint256 accountBalance = _balances[account];\n        require(accountBalance >= amount, \"ERC20: burn amount exceeds balance\");\n        unchecked {\n            _balances[account] = accountBalance - amount;\n        }\n        _totalSupply -= amount;\n\n        emit Transfer(account, address(0), amount);\n\n        _afterTokenTransfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n\n    /**\n     * @dev Hook that is called after any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * has been transferred to `to`.\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _afterTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n}\n"
      },
      "solidity/contracts/libraries/LiquidityAmounts.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.8.4 <0.9.0;\n\nimport './FullMath.sol';\nimport './FixedPoint96.sol';\n\n// solhint-disable\nlibrary LiquidityAmounts {\n  function toUint128(uint256 x) private pure returns (uint128 y) {\n    require((y = uint128(x)) == x);\n  }\n\n  function getLiquidityForAmount0(\n    uint160 sqrtRatioAX96,\n    uint160 sqrtRatioBX96,\n    uint256 amount0\n  ) internal pure returns (uint128 liquidity) {\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n    uint256 intermediate = FullMath.mulDiv(sqrtRatioAX96, sqrtRatioBX96, FixedPoint96.Q96);\n    return toUint128(FullMath.mulDiv(amount0, intermediate, sqrtRatioBX96 - sqrtRatioAX96));\n  }\n\n  function getLiquidityForAmount1(\n    uint160 sqrtRatioAX96,\n    uint160 sqrtRatioBX96,\n    uint256 amount1\n  ) internal pure returns (uint128 liquidity) {\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n    return toUint128(FullMath.mulDiv(amount1, FixedPoint96.Q96, sqrtRatioBX96 - sqrtRatioAX96));\n  }\n\n  function getLiquidityForAmounts(\n    uint160 sqrtRatioX96,\n    uint160 sqrtRatioAX96,\n    uint160 sqrtRatioBX96,\n    uint256 amount0,\n    uint256 amount1\n  ) internal pure returns (uint128 liquidity) {\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\n      liquidity = getLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amount0);\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\n      uint128 liquidity0 = getLiquidityForAmount0(sqrtRatioX96, sqrtRatioBX96, amount0);\n      uint128 liquidity1 = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioX96, amount1);\n\n      liquidity = liquidity0 < liquidity1 ? liquidity0 : liquidity1;\n    } else {\n      liquidity = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1);\n    }\n  }\n\n  function getAmount0ForLiquidity(\n    uint160 sqrtRatioAX96,\n    uint160 sqrtRatioBX96,\n    uint128 liquidity\n  ) internal pure returns (uint256 amount0) {\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n\n    return FullMath.mulDiv(uint256(liquidity) << FixedPoint96.RESOLUTION, sqrtRatioBX96 - sqrtRatioAX96, sqrtRatioBX96) / sqrtRatioAX96;\n  }\n\n  function getAmount1ForLiquidity(\n    uint160 sqrtRatioAX96,\n    uint160 sqrtRatioBX96,\n    uint128 liquidity\n  ) internal pure returns (uint256 amount1) {\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n\n    return FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96);\n  }\n\n  function getAmountsForLiquidity(\n    uint160 sqrtRatioX96,\n    uint160 sqrtRatioAX96,\n    uint160 sqrtRatioBX96,\n    uint128 liquidity\n  ) internal pure returns (uint256 amount0, uint256 amount1) {\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\n      amount0 = getAmount0ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\n      amount0 = getAmount0ForLiquidity(sqrtRatioX96, sqrtRatioBX96, liquidity);\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioX96, liquidity);\n    } else {\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\n    }\n  }\n}\n"
      },
      "solidity/contracts/libraries/PoolAddress.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.8.4 <0.9.0;\n\nlibrary PoolAddress {\n  struct PoolKey {\n    address token0;\n    address token1;\n    uint24 fee;\n  }\n}\n"
      },
      "solidity/contracts/libraries/FixedPoint96.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.8.4 <0.9.0;\n\nlibrary FixedPoint96 {\n  // solhint-disable\n  uint8 internal constant RESOLUTION = 96;\n  uint256 internal constant Q96 = 0x1000000000000000000000000;\n}\n"
      },
      "solidity/contracts/UniV3PairManager.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\n/*\n\nCoded for The Keep3r Network with ♥ by\n\n██████╗░███████╗███████╗██╗  ░██╗░░░░░░░██╗░█████╗░███╗░░██╗██████╗░███████╗██████╗░██╗░░░░░░█████╗░███╗░░██╗██████╗░\n██╔══██╗██╔════╝██╔════╝██║  ░██║░░██╗░░██║██╔══██╗████╗░██║██╔══██╗██╔════╝██╔══██╗██║░░░░░██╔══██╗████╗░██║██╔══██╗\n██║░░██║█████╗░░█████╗░░██║  ░╚██╗████╗██╔╝██║░░██║██╔██╗██║██║░░██║█████╗░░██████╔╝██║░░░░░███████║██╔██╗██║██║░░██║\n██║░░██║██╔══╝░░██╔══╝░░██║  ░░████╔═████║░██║░░██║██║╚████║██║░░██║██╔══╝░░██╔══██╗██║░░░░░██╔══██║██║╚████║██║░░██║\n██████╔╝███████╗██║░░░░░██║  ░░╚██╔╝░╚██╔╝░╚█████╔╝██║░╚███║██████╔╝███████╗██║░░██║███████╗██║░░██║██║░╚███║██████╔╝\n╚═════╝░╚══════╝╚═╝░░░░░╚═╝  ░░░╚═╝░░░╚═╝░░░╚════╝░╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚══╝╚═════╝░\n\nhttps://defi.sucks\n\n*/\n\npragma solidity >=0.8.4 <0.9.0;\n\nimport '@openzeppelin/contracts/token/ERC20/ERC20.sol';\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\n\nimport './libraries/LiquidityAmounts.sol';\nimport './libraries/PoolAddress.sol';\nimport './libraries/FixedPoint96.sol';\nimport './libraries/FullMath.sol';\nimport './libraries/TickMath.sol';\n\nimport '../interfaces/external/IWeth9.sol';\nimport '../interfaces/IUniV3PairManager.sol';\n\nimport './peripherals/Governable.sol';\n\ncontract UniV3PairManager is IUniV3PairManager, Governable {\n  /// @inheritdoc IERC20Metadata\n  string public override name;\n\n  /// @inheritdoc IERC20Metadata\n  string public override symbol;\n\n  /// @inheritdoc IERC20\n  uint256 public override totalSupply;\n\n  /// @inheritdoc IPairManager\n  address public immutable override factory;\n\n  /// @inheritdoc IPairManager\n  address public immutable override token0;\n\n  /// @inheritdoc IPairManager\n  address public immutable override token1;\n\n  /// @inheritdoc IPairManager\n  address public immutable override pool;\n\n  /// @inheritdoc IUniV3PairManager\n  uint24 public immutable override fee;\n\n  /// @inheritdoc IUniV3PairManager\n  uint160 public immutable override sqrtRatioAX96;\n\n  /// @inheritdoc IUniV3PairManager\n  uint160 public immutable override sqrtRatioBX96;\n\n  /// @inheritdoc IUniV3PairManager\n  int24 public immutable override tickLower;\n\n  /// @inheritdoc IUniV3PairManager\n  int24 public immutable override tickUpper;\n\n  /// @inheritdoc IUniV3PairManager\n  int24 public immutable override tickSpacing;\n\n  /// @notice Uniswap's maximum tick\n  /// @dev Due to tick spacing, pools with different fees may have differences between _MAX_TICK and tickUpper. Use tickUpper to find the max tick of the pool.\n  int24 private constant _MAX_TICK = 887272;\n\n  /// @inheritdoc IERC20Metadata\n  //solhint-disable-next-line const-name-snakecase\n  uint8 public constant override decimals = 18;\n\n  /// @inheritdoc IERC20\n  mapping(address => mapping(address => uint256)) public override allowance;\n\n  /// @inheritdoc IERC20\n  mapping(address => uint256) public override balanceOf;\n\n  /// @notice Struct that contains token0, token1, and fee of the Uniswap pool\n  PoolAddress.PoolKey private _poolKey;\n\n  constructor(address _pool, address _governance) Governable(_governance) {\n    uint24 _fee = IUniswapV3Pool(_pool).fee();\n    address _token0 = IUniswapV3Pool(_pool).token0();\n    address _token1 = IUniswapV3Pool(_pool).token1();\n    int24 _tickSpacing = IUniswapV3Pool(_pool).tickSpacing();\n    int24 _tickUpper = _MAX_TICK - (_MAX_TICK % _tickSpacing);\n    int24 _tickLower = -_tickUpper;\n\n    factory = msg.sender;\n    pool = _pool;\n    fee = _fee;\n    tickSpacing = _tickSpacing;\n    tickUpper = _tickUpper;\n    tickLower = _tickLower;\n    token0 = _token0;\n    token1 = _token1;\n    name = string(abi.encodePacked('Keep3rLP - ', ERC20(_token0).symbol(), '/', ERC20(_token1).symbol()));\n    symbol = string(abi.encodePacked('kLP-', ERC20(_token0).symbol(), '/', ERC20(_token1).symbol()));\n\n    sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(_tickLower);\n    sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(_tickUpper);\n    _poolKey = PoolAddress.PoolKey({token0: _token0, token1: _token1, fee: _fee});\n  }\n\n  // This low-level function should be called from a contract which performs important safety checks\n  /// @inheritdoc IUniV3PairManager\n  function mint(\n    uint256 amount0Desired,\n    uint256 amount1Desired,\n    uint256 amount0Min,\n    uint256 amount1Min,\n    address to\n  ) external override returns (uint128 liquidity) {\n    (liquidity, , ) = _addLiquidity(amount0Desired, amount1Desired, amount0Min, amount1Min);\n    _mint(to, liquidity);\n  }\n\n  /// @inheritdoc IUniV3PairManager\n  function uniswapV3MintCallback(\n    uint256 amount0Owed,\n    uint256 amount1Owed,\n    bytes calldata data\n  ) external override {\n    MintCallbackData memory decoded = abi.decode(data, (MintCallbackData));\n    if (msg.sender != pool) revert OnlyPool();\n    if (amount0Owed > 0) _pay(decoded._poolKey.token0, decoded.payer, pool, amount0Owed);\n    if (amount1Owed > 0) _pay(decoded._poolKey.token1, decoded.payer, pool, amount1Owed);\n  }\n\n  /// @inheritdoc IUniV3PairManager\n  function burn(\n    uint128 liquidity,\n    uint256 amount0Min,\n    uint256 amount1Min,\n    address to\n  ) external override returns (uint256 amount0, uint256 amount1) {\n    (amount0, amount1) = IUniswapV3Pool(pool).burn(tickLower, tickUpper, liquidity);\n\n    if (amount0 < amount0Min || amount1 < amount1Min) revert ExcessiveSlippage();\n\n    IUniswapV3Pool(pool).collect(to, tickLower, tickUpper, uint128(amount0), uint128(amount1));\n    _burn(msg.sender, liquidity);\n  }\n\n  /// @inheritdoc IUniV3PairManager\n  function collect() external override onlyGovernance returns (uint256 amount0, uint256 amount1) {\n    (, , , uint128 tokensOwed0, uint128 tokensOwed1) = IUniswapV3Pool(pool).positions(\n      keccak256(abi.encodePacked(address(this), tickLower, tickUpper))\n    );\n    (amount0, amount1) = IUniswapV3Pool(pool).collect(governance, tickLower, tickUpper, tokensOwed0, tokensOwed1);\n  }\n\n  /// @inheritdoc IUniV3PairManager\n  function position()\n    external\n    view\n    override\n    returns (\n      uint128 liquidity,\n      uint256 feeGrowthInside0LastX128,\n      uint256 feeGrowthInside1LastX128,\n      uint128 tokensOwed0,\n      uint128 tokensOwed1\n    )\n  {\n    (liquidity, feeGrowthInside0LastX128, feeGrowthInside1LastX128, tokensOwed0, tokensOwed1) = IUniswapV3Pool(pool).positions(\n      keccak256(abi.encodePacked(address(this), tickLower, tickUpper))\n    );\n  }\n\n  /// @inheritdoc IERC20\n  function approve(address spender, uint256 amount) external override returns (bool) {\n    allowance[msg.sender][spender] = amount;\n\n    emit Approval(msg.sender, spender, amount);\n    return true;\n  }\n\n  /// @inheritdoc IERC20\n  function transfer(address to, uint256 amount) external override returns (bool) {\n    _transferTokens(msg.sender, to, amount);\n    return true;\n  }\n\n  /// @inheritdoc IERC20\n  function transferFrom(\n    address from,\n    address to,\n    uint256 amount\n  ) external override returns (bool) {\n    address spender = msg.sender;\n    uint256 spenderAllowance = allowance[from][spender];\n\n    if (spender != from && spenderAllowance != type(uint256).max) {\n      uint256 newAllowance = spenderAllowance - amount;\n      allowance[from][spender] = newAllowance;\n\n      emit Approval(from, spender, newAllowance);\n    }\n\n    _transferTokens(from, to, amount);\n    return true;\n  }\n\n  /// @notice Adds liquidity to an initialized pool\n  /// @dev Reverts if the returned amount0 is less than amount0Min or if amount1 is less than amount1Min\n  /// @dev This function calls the mint function of the corresponding Uniswap pool, which in turn calls UniswapV3Callback\n  /// @param amount0Desired The amount of token0 we would like to provide\n  /// @param amount1Desired The amount of token1 we would like to provide\n  /// @param amount0Min The minimum amount of token0 we want to provide\n  /// @param amount1Min The minimum amount of token1 we want to provide\n  /// @return liquidity The calculated liquidity we get for the token amounts we provided\n  /// @return amount0 The amount of token0 we ended up providing\n  /// @return amount1 The amount of token1 we ended up providing\n  function _addLiquidity(\n    uint256 amount0Desired,\n    uint256 amount1Desired,\n    uint256 amount0Min,\n    uint256 amount1Min\n  )\n    internal\n    returns (\n      uint128 liquidity,\n      uint256 amount0,\n      uint256 amount1\n    )\n  {\n    (uint160 sqrtPriceX96, , , , , , ) = IUniswapV3Pool(pool).slot0();\n\n    liquidity = LiquidityAmounts.getLiquidityForAmounts(sqrtPriceX96, sqrtRatioAX96, sqrtRatioBX96, amount0Desired, amount1Desired);\n\n    (amount0, amount1) = IUniswapV3Pool(pool).mint(\n      address(this),\n      tickLower,\n      tickUpper,\n      liquidity,\n      abi.encode(MintCallbackData({_poolKey: _poolKey, payer: msg.sender}))\n    );\n\n    if (amount0 < amount0Min || amount1 < amount1Min) revert ExcessiveSlippage();\n  }\n\n  /// @notice Transfers the passed-in token from the payer to the recipient for the corresponding value\n  /// @param token The token to be transferred to the recipient\n  /// @param from The address of the payer\n  /// @param to The address of the passed-in tokens recipient\n  /// @param value How much of that token to be transferred from payer to the recipient\n  function _pay(\n    address token,\n    address from,\n    address to,\n    uint256 value\n  ) internal {\n    _safeTransferFrom(token, from, to, value);\n  }\n\n  /// @notice Mints Keep3r credits to the passed-in address of recipient and increases total supply of Keep3r credits by the corresponding amount\n  /// @param to The recipient of the Keep3r credits\n  /// @param amount The amount Keep3r credits to be minted to the recipient\n  function _mint(address to, uint256 amount) internal {\n    totalSupply += amount;\n    balanceOf[to] += amount;\n    emit Transfer(address(0), to, amount);\n  }\n\n  /// @notice Burns Keep3r credits to the passed-in address of recipient and reduces total supply of Keep3r credits by the corresponding amount\n  /// @param to The address that will get its Keep3r credits burned\n  /// @param amount The amount Keep3r credits to be burned from the recipient/recipient\n  function _burn(address to, uint256 amount) internal {\n    totalSupply -= amount;\n    balanceOf[to] -= amount;\n    emit Transfer(to, address(0), amount);\n  }\n\n  /// @notice Transfers amount of Keep3r credits between two addresses\n  /// @param from The user that transfers the Keep3r credits\n  /// @param to The user that receives the Keep3r credits\n  /// @param amount The amount of Keep3r credits to be transferred\n  function _transferTokens(\n    address from,\n    address to,\n    uint256 amount\n  ) internal {\n    balanceOf[from] -= amount;\n    balanceOf[to] += amount;\n\n    emit Transfer(from, to, amount);\n  }\n\n  /// @notice Transfers the passed-in token from the specified \"from\" to the specified \"to\" for the corresponding value\n  /// @dev Reverts with IUniV3PairManager#UnsuccessfulTransfer if the transfer was not successful,\n  ///      or if the passed data length is different than 0 and the decoded data is not a boolean\n  /// @param token The token to be transferred to the specified \"to\"\n  /// @param from  The address which is going to transfer the tokens\n  /// @param value How much of that token to be transferred from \"from\" to \"to\"\n  function _safeTransferFrom(\n    address token,\n    address from,\n    address to,\n    uint256 value\n  ) internal {\n    // solhint-disable-next-line avoid-low-level-calls\n    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));\n    if (!success || (data.length != 0 && !abi.decode(data, (bool)))) revert UnsuccessfulTransfer();\n  }\n}\n"
      },
      "solidity/interfaces/external/IWeth9.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\n\ninterface IWeth9 is IERC20 {\n  function deposit() external payable;\n\n  function withdraw(uint256) external;\n}\n"
      },
      "solidity/interfaces/IUniV3PairManager.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './IPairManager.sol';\nimport '../contracts/libraries/PoolAddress.sol';\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\nimport './peripherals/IGovernable.sol';\n\n/// @title Pair Manager contract\n/// @notice Creates a UniswapV3 position, and tokenizes in an ERC20 manner\n///         so that the user can use it as liquidity for a Keep3rJob\ninterface IUniV3PairManager is IGovernable, IPairManager {\n  // Structs\n\n  /// @notice The data to be decoded by the UniswapV3MintCallback function\n  struct MintCallbackData {\n    PoolAddress.PoolKey _poolKey; // Struct that contains token0, token1, and fee of the pool passed into the constructor\n    address payer; // The address of the payer, which will be the msg.sender of the mint function\n  }\n\n  // Variables\n\n  /// @notice The fee of the Uniswap pool passed into the constructor\n  /// @return _fee The fee of the Uniswap pool passed into the constructor\n  function fee() external view returns (uint24 _fee);\n\n  /// @notice Highest tick in the Uniswap's curve\n  /// @return _tickUpper The highest tick in the Uniswap's curve\n  function tickUpper() external view returns (int24 _tickUpper);\n\n  /// @notice Lowest tick in the Uniswap's curve\n  /// @return _tickLower The lower tick in the Uniswap's curve\n  function tickLower() external view returns (int24 _tickLower);\n\n  /// @notice The pair tick spacing\n  /// @return _tickSpacing The pair tick spacing\n  function tickSpacing() external view returns (int24 _tickSpacing);\n\n  /// @notice The sqrtRatioAX96 at the lowest tick (-887200) of the Uniswap pool\n  /// @return _sqrtPriceA96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\n  ///         at the lowest tick\n  function sqrtRatioAX96() external view returns (uint160 _sqrtPriceA96);\n\n  /// @notice The sqrtRatioBX96 at the highest tick (887200) of the Uniswap pool\n  /// @return _sqrtPriceBX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\n  ///         at the highest tick\n  function sqrtRatioBX96() external view returns (uint160 _sqrtPriceBX96);\n\n  // Errors\n\n  /// @notice Throws when the caller of the function is not the pool\n  error OnlyPool();\n\n  /// @notice Throws when the slippage exceeds what the user is comfortable with\n  error ExcessiveSlippage();\n\n  /// @notice Throws when a transfer is unsuccessful\n  error UnsuccessfulTransfer();\n\n  // Methods\n\n  /// @notice This function is called after a user calls IUniV3PairManager#mint function\n  ///         It ensures that any tokens owed to the pool are paid by the msg.sender of IUniV3PairManager#mint function\n  /// @param amount0Owed The amount of token0 due to the pool for the minted liquidity\n  /// @param amount1Owed The amount of token1 due to the pool for the minted liquidity\n  /// @param data The encoded token0, token1, fee (_poolKey) and the payer (msg.sender) of the IUniV3PairManager#mint function\n  function uniswapV3MintCallback(\n    uint256 amount0Owed,\n    uint256 amount1Owed,\n    bytes calldata data\n  ) external;\n\n  /// @notice Mints kLP tokens to an address according to the liquidity the msg.sender provides to the UniswapV3 pool\n  /// @dev Triggers UniV3PairManager#uniswapV3MintCallback\n  /// @param amount0Desired The amount of token0 we would like to provide\n  /// @param amount1Desired The amount of token1 we would like to provide\n  /// @param amount0Min The minimum amount of token0 we want to provide\n  /// @param amount1Min The minimum amount of token1 we want to provide\n  /// @param to The address to which the kLP tokens are going to be minted to\n  /// @return liquidity kLP tokens sent in exchange for the provision of tokens\n  function mint(\n    uint256 amount0Desired,\n    uint256 amount1Desired,\n    uint256 amount0Min,\n    uint256 amount1Min,\n    address to\n  ) external returns (uint128 liquidity);\n\n  /// @notice Returns the pair manager's position in the corresponding UniswapV3 pool\n  /// @return liquidity The amount of liquidity provided to the UniswapV3 pool by the pair manager\n  /// @return feeGrowthInside0LastX128 The fee growth of token0 as of the last action on the individual position\n  /// @return feeGrowthInside1LastX128 The fee growth of token1 as of the last action on the individual position\n  /// @return tokensOwed0 The uncollected amount of token0 owed to the position as of the last computation\n  /// @return tokensOwed1 The uncollected amount of token1 owed to the position as of the last computation\n  function position()\n    external\n    view\n    returns (\n      uint128 liquidity,\n      uint256 feeGrowthInside0LastX128,\n      uint256 feeGrowthInside1LastX128,\n      uint128 tokensOwed0,\n      uint128 tokensOwed1\n    );\n\n  /// @notice Calls the UniswapV3 pool's collect function, which collects up to a maximum amount of fees\n  //          owed to a specific position to the recipient, in this case, that recipient is the pair manager\n  /// @dev The collected fees will be sent to governance\n  /// @return amount0 The amount of fees collected in token0\n  /// @return amount1 The amount of fees collected in token1\n  function collect() external returns (uint256 amount0, uint256 amount1);\n\n  /// @notice Burns the corresponding amount of kLP tokens from the msg.sender and withdraws the specified liquidity\n  //          in the entire range\n  /// @param liquidity The amount of liquidity to be burned\n  /// @param amount0Min The minimum amount of token0 we want to send to the recipient (to)\n  /// @param amount1Min The minimum amount of token1 we want to send to the recipient (to)\n  /// @param to The address that will receive the due fees\n  /// @return amount0 The calculated amount of token0 that will be sent to the recipient\n  /// @return amount1 The calculated amount of token1 that will be sent to the recipient\n  function burn(\n    uint128 liquidity,\n    uint256 amount0Min,\n    uint256 amount1Min,\n    address to\n  ) external returns (uint256 amount0, uint256 amount1);\n}\n"
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n}\n"
      },
      "solidity/interfaces/IPairManagerFactory.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport './peripherals/IGovernable.sol';\n\n/// @title Factory of Pair Managers\n/// @notice This contract creates new pair managers\ninterface IPairManagerFactory is IGovernable {\n  // Variables\n\n  /// @notice Maps the address of a Uniswap pool, to the address of the corresponding PairManager\n  ///         For example, the uniswap address of DAI-WETH, will return the Keep3r/DAI-WETH pair manager address\n  /// @param _pool The address of the Uniswap pool\n  /// @return _pairManager The address of the corresponding pair manager\n  function pairManagers(address _pool) external view returns (address _pairManager);\n\n  // Events\n\n  /// @notice Emitted when a new pair manager is created\n  /// @param _pool The address of the corresponding Uniswap pool\n  /// @param _pairManager The address of the just-created pair manager\n  event PairCreated(address _pool, address _pairManager);\n\n  // Errors\n\n  /// @notice Throws an error if the pair manager is already initialized\n  error AlreadyInitialized();\n\n  /// @notice Throws an error if the caller is not the owner\n  error OnlyOwner();\n\n  // Methods\n\n  /// @notice Creates a new pair manager based on the address of a Uniswap pool\n  ///         For example, the uniswap address of DAI-WETH, will create the Keep3r/DAI-WETH pool\n  /// @param _pool The address of the Uniswap pool the pair manager will be based of\n  /// @return _pairManager The address of the just-created pair manager\n  function createPairManager(address _pool) external returns (address _pairManager);\n}\n"
      },
      "solidity/contracts/UniV3PairManagerFactory.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\n/*\n\nCoded for The Keep3r Network with ♥ by\n\n██████╗░███████╗███████╗██╗  ░██╗░░░░░░░██╗░█████╗░███╗░░██╗██████╗░███████╗██████╗░██╗░░░░░░█████╗░███╗░░██╗██████╗░\n██╔══██╗██╔════╝██╔════╝██║  ░██║░░██╗░░██║██╔══██╗████╗░██║██╔══██╗██╔════╝██╔══██╗██║░░░░░██╔══██╗████╗░██║██╔══██╗\n██║░░██║█████╗░░█████╗░░██║  ░╚██╗████╗██╔╝██║░░██║██╔██╗██║██║░░██║█████╗░░██████╔╝██║░░░░░███████║██╔██╗██║██║░░██║\n██║░░██║██╔══╝░░██╔══╝░░██║  ░░████╔═████║░██║░░██║██║╚████║██║░░██║██╔══╝░░██╔══██╗██║░░░░░██╔══██║██║╚████║██║░░██║\n██████╔╝███████╗██║░░░░░██║  ░░╚██╔╝░╚██╔╝░╚█████╔╝██║░╚███║██████╔╝███████╗██║░░██║███████╗██║░░██║██║░╚███║██████╔╝\n╚═════╝░╚══════╝╚═╝░░░░░╚═╝  ░░░╚═╝░░░╚═╝░░░╚════╝░╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚══╝╚═════╝░\n\nhttps://defi.sucks\n\n*/\n\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../interfaces/IPairManagerFactory.sol';\nimport './UniV3PairManager.sol';\nimport './peripherals/Governable.sol';\n\n/// @title Factory of Pair Managers\n/// @notice This contract creates new pair managers\ncontract UniV3PairManagerFactory is IPairManagerFactory, Governable {\n  mapping(address => address) public override pairManagers;\n\n  constructor(address _governance) Governable(_governance) {}\n\n  ///@inheritdoc IPairManagerFactory\n  function createPairManager(address _pool) external override returns (address _pairManager) {\n    if (pairManagers[_pool] != address(0)) revert AlreadyInitialized();\n    _pairManager = address(new UniV3PairManager(_pool, governance));\n    pairManagers[_pool] = _pairManager;\n    emit PairCreated(_pool, _pairManager);\n  }\n}\n"
      },
      "solidity/for-test/peripherals/GovernableForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../contracts/peripherals/Governable.sol';\n\ncontract GovernableForTest is Governable {\n  constructor(address _governor) Governable(_governor) {}\n}\n"
      },
      "solidity/for-test/ERC20ForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '@openzeppelin/contracts/token/ERC20/ERC20.sol';\n\ncontract ERC20ForTest is ERC20 {\n  constructor(\n    string memory _name,\n    string memory _symbol,\n    address _initialAccount,\n    uint256 _initialBalance\n  ) ERC20(_name, _symbol) {\n    _mint(_initialAccount, _initialBalance);\n  }\n\n  function mint(address _account, uint256 _amount) public {\n    _mint(_account, _amount);\n  }\n\n  function burn(address _account, uint256 _amount) public {\n    _burn(_account, _amount);\n  }\n\n  function transferInternal(\n    address _from,\n    address _to,\n    uint256 _value\n  ) public {\n    _transfer(_from, _to, _value);\n  }\n\n  function approveInternal(\n    address _owner,\n    address _spender,\n    uint256 _value\n  ) public {\n    _approve(_owner, _spender, _value);\n  }\n\n  function deposit(uint256 _amount) external payable {\n    // Function added for compatibility with WETH\n  }\n}\n"
      },
      "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../../contracts/peripherals/keepers/Keep3rKeeperFundable.sol';\n\ncontract Keep3rKeeperFundableForTest is Keep3rKeeperFundable {\n  using EnumerableSet for EnumerableSet.AddressSet;\n\n  constructor(\n    address _kph,\n    address _keep3rV1,\n    address _keep3rV1Proxy,\n    address _kp3rWethPool\n  ) Keep3rParameters(_kph, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\n\n  function isKeeper(address _keeper) external view returns (bool) {\n    return _keepers.contains(_keeper);\n  }\n\n  function setJob(address job) external {\n    _jobs.add(job);\n  }\n}\n"
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../../contracts/peripherals/jobs/Keep3rJobWorkable.sol';\n\ncontract Keep3rJobWorkableForTest is Keep3rJobWorkable {\n  using EnumerableSet for EnumerableSet.AddressSet;\n\n  constructor(\n    address _keep3rHelper,\n    address _keep3rV1,\n    address _keep3rV1Proxy,\n    address _kp3rWethPool\n  ) Keep3rParameters(_keep3rHelper, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\n\n  function setJob(address _job) external {\n    _jobs.add(_job);\n  }\n\n  function setKeeper(address _keeper) external {\n    _keepers.add(_keeper);\n  }\n\n  function setApprovedLiquidity(address _liquidity) external {\n    _approvedLiquidities.add(_liquidity);\n  }\n\n  function setJobLiquidity(address _job, address _liquidity) external {\n    _jobLiquidities[_job].add(_liquidity);\n  }\n\n  function viewJobLiquidityCredits(address _job) external view returns (uint256) {\n    return _jobLiquidityCredits[_job];\n  }\n\n  function viewJobPeriodCredits(address _job) external view returns (uint256) {\n    return _jobPeriodCredits[_job];\n  }\n\n  function viewTickCache(address _liquidity) external view returns (TickCache memory _tickCache) {\n    _tickCache = _tick[_liquidity];\n  }\n\n  function viewGas() external view returns (uint256) {\n    return _initialGas;\n  }\n\n  receive() external payable {}\n}\n"
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../../contracts/peripherals/jobs/Keep3rJobManager.sol';\n\ncontract Keep3rJobManagerForTest is Keep3rJobManager {\n  using EnumerableSet for EnumerableSet.AddressSet;\n\n  constructor(\n    address _keep3rHelper,\n    address _keep3rV1,\n    address _keep3rV1Proxy,\n    address _kp3rWethPool\n  ) Keep3rParameters(_keep3rHelper, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\n\n  function isJob(address _job) external view returns (bool _isJob) {\n    _isJob = _jobs.contains(_job);\n  }\n}\n"
      },
      "solidity/for-test/peripherals/Keep3rParametersForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../contracts/peripherals/Keep3rParameters.sol';\n\ncontract Keep3rParametersForTest is Keep3rParameters {\n  constructor(\n    address _keep3rHelper,\n    address _keep3rV1,\n    address _keep3rV1Proxy,\n    address _kp3rWethPool\n  ) Keep3rParameters(_keep3rHelper, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\n\n  function viewLiquidityPool(address _pool) public view returns (address) {\n    return _liquidityPool[_pool];\n  }\n\n  function viewIsKP3RToken0(address _pool) public view returns (bool) {\n    return _isKP3RToken0[_pool];\n  }\n}\n"
      },
      "solidity/for-test/peripherals/Keep3rDisputableForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../contracts/peripherals/Keep3rDisputable.sol';\n\ncontract Keep3rDisputableForTest is Keep3rDisputable {\n  constructor() Keep3rRoles(msg.sender) {}\n}\n"
      },
      "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../../contracts/peripherals/keepers/Keep3rKeeperDisputable.sol';\n\ncontract Keep3rKeeperDisputableForTest is Keep3rKeeperDisputable {\n  using EnumerableSet for EnumerableSet.AddressSet;\n\n  constructor(\n    address _kph,\n    address _keep3rV1,\n    address _keep3rV1Proxy,\n    address _kp3rWethPool\n  ) Keep3rParameters(_kph, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\n\n  function setKeeper(address _keeper) external {\n    _keepers.add(_keeper);\n  }\n\n  function internalSlash(\n    address _bonded,\n    address _keeper,\n    uint256 _bondAmount,\n    uint256 _unbondAmount\n  ) external {\n    _slash(_bonded, _keeper, _bondAmount, _unbondAmount);\n  }\n\n  function isKeeper(address _address) external view returns (bool _isKeeper) {\n    _isKeeper = _keepers.contains(_address);\n  }\n}\n"
      },
      "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../contracts/peripherals/Keep3rAccountance.sol';\n\ncontract Keep3rAccountanceForTest is Keep3rAccountance {\n  using EnumerableSet for EnumerableSet.AddressSet;\n\n  function setJob(address job) external {\n    _jobs.add(job);\n  }\n\n  function setKeeper(address keeper) external {\n    _keepers.add(keeper);\n  }\n}\n"
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../../contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol';\n\ncontract Keep3rJobFundableLiquidityForTest is Keep3rJobFundableLiquidity {\n  using EnumerableSet for EnumerableSet.AddressSet;\n\n  constructor(\n    address _kph,\n    address _keep3rV1,\n    address _keep3rV1Proxy,\n    address _kp3rWethPool\n  ) Keep3rParameters(_kph, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\n\n  function setJob(address _job) external {\n    _jobs.add(_job);\n  }\n\n  function setJobLiquidity(address _job, address _liquidity) external returns (bool) {\n    return _jobLiquidities[_job].add(_liquidity);\n  }\n\n  function setApprovedLiquidity(address _liquidity) external {\n    _approvedLiquidities.add(_liquidity);\n  }\n\n  function setRevokedLiquidity(address _liquidity) external {\n    _approvedLiquidities.remove(_liquidity);\n  }\n\n  function viewTickCache(address _liquidity) external view returns (TickCache memory _tickCache) {\n    _tickCache = _tick[_liquidity];\n  }\n\n  function viewTickOrder(address _liquidity) external view returns (bool) {\n    return _isKP3RToken0[_liquidity];\n  }\n\n  function internalJobLiquidities(address _job) external view returns (address[] memory _list) {\n    _list = _jobLiquidities[_job].values();\n  }\n\n  function internalSettleJobAccountance(address _job) external {\n    _settleJobAccountance(_job);\n  }\n}\n"
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../../contracts/peripherals/jobs/Keep3rJobMigration.sol';\n\ncontract Keep3rJobMigrationForTest is Keep3rJobMigration {\n  using EnumerableSet for EnumerableSet.AddressSet;\n\n  mapping(address => uint256) public settleJobAccountanceCallCount;\n\n  constructor(\n    address _kph,\n    address _keep3rV1,\n    address _keep3rV1Proxy,\n    address _kp3rWethPool\n  ) Keep3rParameters(_kph, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\n\n  function setJobToken(address _job, address _token) external {\n    _jobTokens[_job].add(_token);\n  }\n\n  function setJobLiquidity(address _job, address _liquidity) external {\n    _jobLiquidities[_job].add(_liquidity);\n  }\n\n  function viewJobTokenListLength(address _job) external view returns (uint256) {\n    return _jobTokens[_job].length();\n  }\n\n  function viewJobLiquidityList(address _job) external view returns (address[] memory _list) {\n    _list = _jobLiquidities[_job].values();\n  }\n\n  function viewJobPeriodCredits(address _job) external view returns (uint256) {\n    return _jobPeriodCredits[_job];\n  }\n\n  function viewJobLiquidityCredits(address _job) external view returns (uint256) {\n    return _jobLiquidityCredits[_job];\n  }\n\n  function viewMigrationCreatedAt(address _fromJob, address _toJob) external view returns (uint256) {\n    return _migrationCreatedAt[_fromJob][_toJob];\n  }\n\n  function isJob(address _job) external view returns (bool) {\n    return _jobs.contains(_job);\n  }\n\n  function _settleJobAccountance(address _job) internal override {\n    settleJobAccountanceCallCount[_job]++;\n  }\n}\n"
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../../contracts/peripherals/jobs/Keep3rJobFundableCredits.sol';\n\ncontract Keep3rJobFundableCreditsForTest is Keep3rJobFundableCredits {\n  using EnumerableSet for EnumerableSet.AddressSet;\n\n  constructor(\n    address _kph,\n    address _keep3rV1,\n    address _keep3rV1Proxy,\n    address _kp3rWethPool\n  ) Keep3rParameters(_kph, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\n\n  function setJob(address _job, address _jobOwner) external {\n    _jobs.add(_job);\n    jobOwner[_job] = _jobOwner;\n  }\n\n  function setJobToken(address _job, address _token) external {\n    _jobTokens[_job].add(_token);\n  }\n\n  function isJobToken(address _job, address _token) external view returns (bool _contains) {\n    _contains = _jobTokens[_job].contains(_token);\n  }\n}\n"
      },
      "solidity/contracts/Keep3rHelper.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\n/*\n\nCoded for The Keep3r Network with ♥ by\n\n██████╗░███████╗███████╗██╗  ░██╗░░░░░░░██╗░█████╗░███╗░░██╗██████╗░███████╗██████╗░██╗░░░░░░█████╗░███╗░░██╗██████╗░\n██╔══██╗██╔════╝██╔════╝██║  ░██║░░██╗░░██║██╔══██╗████╗░██║██╔══██╗██╔════╝██╔══██╗██║░░░░░██╔══██╗████╗░██║██╔══██╗\n██║░░██║█████╗░░█████╗░░██║  ░╚██╗████╗██╔╝██║░░██║██╔██╗██║██║░░██║█████╗░░██████╔╝██║░░░░░███████║██╔██╗██║██║░░██║\n██║░░██║██╔══╝░░██╔══╝░░██║  ░░████╔═████║░██║░░██║██║╚████║██║░░██║██╔══╝░░██╔══██╗██║░░░░░██╔══██║██║╚████║██║░░██║\n██████╔╝███████╗██║░░░░░██║  ░░╚██╔╝░╚██╔╝░╚█████╔╝██║░╚███║██████╔╝███████╗██║░░██║███████╗██║░░██║██║░╚███║██████╔╝\n╚═════╝░╚══════╝╚═╝░░░░░╚═╝  ░░░╚═╝░░░╚═╝░░░╚════╝░╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚══╝╚═════╝░\n\nhttps://defi.sucks\n\n*/\n\npragma solidity >=0.8.7 <0.9.0;\n\nimport './libraries/FullMath.sol';\nimport './libraries/TickMath.sol';\nimport '../interfaces/IKeep3r.sol';\nimport '../interfaces/IKeep3rHelper.sol';\nimport './Keep3rHelperParameters.sol';\n\nimport '@openzeppelin/contracts/utils/math/Math.sol';\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\n\ncontract Keep3rHelper is IKeep3rHelper, Keep3rHelperParameters {\n  constructor(address _keep3rV2, address _governance) Keep3rHelperParameters(_keep3rV2, _governance) {}\n\n  /// @inheritdoc IKeep3rHelper\n  function quote(uint256 _eth) public view override returns (uint256 _amountOut) {\n    uint32[] memory _secondsAgos = new uint32[](2);\n    _secondsAgos[1] = quoteTwapTime;\n\n    (int56[] memory _tickCumulatives, ) = IUniswapV3Pool(kp3rWethPool.poolAddress).observe(_secondsAgos);\n    int56 _difference = _tickCumulatives[0] - _tickCumulatives[1];\n    _amountOut = getQuoteAtTick(uint128(_eth), kp3rWethPool.isKP3RToken0 ? _difference : -_difference, quoteTwapTime);\n  }\n\n  /// @inheritdoc IKeep3rHelper\n  function bonds(address _keeper) public view override returns (uint256 _amountBonded) {\n    return IKeep3r(keep3rV2).bonds(_keeper, KP3R);\n  }\n\n  /// @inheritdoc IKeep3rHelper\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) public view override returns (uint256 _kp3r) {\n    uint256 _boost = getRewardBoostFor(bonds(_keeper));\n    _kp3r = quote((_gasUsed * _boost) / BOOST_BASE);\n  }\n\n  /// @inheritdoc IKeep3rHelper\n  function getRewardAmount(uint256 _gasUsed) external view override returns (uint256 _amount) {\n    // solhint-disable-next-line avoid-tx-origin\n    return getRewardAmountFor(tx.origin, _gasUsed);\n  }\n\n  /// @inheritdoc IKeep3rHelper\n  function getRewardBoostFor(uint256 _bonds) public view override returns (uint256 _rewardBoost) {\n    _bonds = Math.min(_bonds, targetBond);\n    uint256 _cap = Math.max(minBoost, minBoost + ((maxBoost - minBoost) * _bonds) / targetBond);\n    _rewardBoost = _cap * _getBasefee();\n  }\n\n  /// @inheritdoc IKeep3rHelper\n  function getPoolTokens(address _pool) public view override returns (address _token0, address _token1) {\n    return (IUniswapV3Pool(_pool).token0(), IUniswapV3Pool(_pool).token1());\n  }\n\n  /// @inheritdoc IKeep3rHelper\n  function isKP3RToken0(address _pool) public view override returns (bool _isKP3RToken0) {\n    address _token0;\n    address _token1;\n    (_token0, _token1) = getPoolTokens(_pool);\n    if (_token0 == KP3R) {\n      return true;\n    } else if (_token1 != KP3R) {\n      revert LiquidityPairInvalid();\n    }\n  }\n\n  /// @inheritdoc IKeep3rHelper\n  function observe(address _pool, uint32[] memory _secondsAgo)\n    public\n    view\n    override\n    returns (\n      int56 _tickCumulative1,\n      int56 _tickCumulative2,\n      bool _success\n    )\n  {\n    try IUniswapV3Pool(_pool).observe(_secondsAgo) returns (int56[] memory _uniswapResponse, uint160[] memory) {\n      _tickCumulative1 = _uniswapResponse[0];\n      if (_uniswapResponse.length > 1) {\n        _tickCumulative2 = _uniswapResponse[1];\n      }\n      _success = true;\n    } catch (bytes memory) {}\n  }\n\n  /// @inheritdoc IKeep3rHelper\n  function getPaymentParams(uint256 _bonds)\n    external\n    view\n    override\n    returns (\n      uint256 _boost,\n      uint256 _oneEthQuote,\n      uint256 _extra\n    )\n  {\n    _oneEthQuote = quote(1 ether);\n    _boost = getRewardBoostFor(_bonds);\n    _extra = workExtraGas;\n  }\n\n  /// @inheritdoc IKeep3rHelper\n  function getKP3RsAtTick(\n    uint256 _liquidityAmount,\n    int56 _tickDifference,\n    uint256 _timeInterval\n  ) public pure override returns (uint256 _kp3rAmount) {\n    uint160 sqrtRatioX96 = TickMath.getSqrtRatioAtTick(int24(_tickDifference / int256(_timeInterval)));\n    _kp3rAmount = FullMath.mulDiv(1 << 96, _liquidityAmount, sqrtRatioX96);\n  }\n\n  /// @inheritdoc IKeep3rHelper\n  function getQuoteAtTick(\n    uint128 _baseAmount,\n    int56 _tickDifference,\n    uint256 _timeInterval\n  ) public pure override returns (uint256 _quoteAmount) {\n    uint160 sqrtRatioX96 = TickMath.getSqrtRatioAtTick(int24(_tickDifference / int256(_timeInterval)));\n\n    if (sqrtRatioX96 <= type(uint128).max) {\n      uint256 ratioX192 = uint256(sqrtRatioX96) * sqrtRatioX96;\n      _quoteAmount = FullMath.mulDiv(1 << 192, _baseAmount, ratioX192);\n    } else {\n      uint256 ratioX128 = FullMath.mulDiv(sqrtRatioX96, sqrtRatioX96, 1 << 64);\n      _quoteAmount = FullMath.mulDiv(1 << 128, _baseAmount, ratioX128);\n    }\n  }\n\n  /// @notice Gets the block's base fee\n  /// @return _baseFee The block's basefee\n  function _getBasefee() internal view virtual returns (uint256 _baseFee) {\n    return block.basefee;\n  }\n}\n"
      },
      "solidity/for-test/Keep3rHelperForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../contracts/Keep3rHelper.sol';\n\ncontract Keep3rHelperForTest is Keep3rHelper {\n  uint256 public basefee;\n\n  constructor(address _keep3rV2, address _governance) Keep3rHelper(_keep3rV2, _governance) {}\n\n  function _getBasefee() internal view override returns (uint256) {\n    return basefee;\n  }\n\n  function setBaseFee(uint256 _baseFee) external {\n    basefee = _baseFee;\n  }\n}\n"
      },
      "solidity/for-test/libraries/LiquidityAmountsForTest.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../contracts/libraries/FullMath.sol';\nimport '../../contracts/libraries/FixedPoint96.sol';\n\n/// @dev Made this library into a contract to be able to calculate liquidity more precisely for tests\n\n// solhint-disable\ncontract LiquidityAmountsForTest {\n  function toUint128(uint256 x) private pure returns (uint128 y) {\n    require((y = uint128(x)) == x);\n  }\n\n  function getLiquidityForAmount0(\n    uint160 sqrtRatioAX96,\n    uint160 sqrtRatioBX96,\n    uint256 amount0\n  ) public pure returns (uint128 liquidity) {\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n    uint256 intermediate = FullMath.mulDiv(sqrtRatioAX96, sqrtRatioBX96, FixedPoint96.Q96);\n    return toUint128(FullMath.mulDiv(amount0, intermediate, sqrtRatioBX96 - sqrtRatioAX96));\n  }\n\n  function getLiquidityForAmount1(\n    uint160 sqrtRatioAX96,\n    uint160 sqrtRatioBX96,\n    uint256 amount1\n  ) public pure returns (uint128 liquidity) {\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n    return toUint128(FullMath.mulDiv(amount1, FixedPoint96.Q96, sqrtRatioBX96 - sqrtRatioAX96));\n  }\n\n  function getLiquidityForAmounts(\n    uint160 sqrtRatioX96,\n    uint160 sqrtRatioAX96,\n    uint160 sqrtRatioBX96,\n    uint256 amount0,\n    uint256 amount1\n  ) external pure returns (uint128 liquidity) {\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\n      liquidity = getLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amount0);\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\n      uint128 liquidity0 = getLiquidityForAmount0(sqrtRatioX96, sqrtRatioBX96, amount0);\n      uint128 liquidity1 = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioX96, amount1);\n\n      liquidity = liquidity0 < liquidity1 ? liquidity0 : liquidity1;\n    } else {\n      liquidity = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1);\n    }\n  }\n\n  function getAmount0ForLiquidity(\n    uint160 sqrtRatioAX96,\n    uint160 sqrtRatioBX96,\n    uint128 liquidity\n  ) public pure returns (uint256 amount0) {\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n\n    return FullMath.mulDiv(uint256(liquidity) << FixedPoint96.RESOLUTION, sqrtRatioBX96 - sqrtRatioAX96, sqrtRatioBX96) / sqrtRatioAX96;\n  }\n\n  function getAmount1ForLiquidity(\n    uint160 sqrtRatioAX96,\n    uint160 sqrtRatioBX96,\n    uint128 liquidity\n  ) public pure returns (uint256 amount1) {\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n\n    return FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96);\n  }\n\n  function getAmountsForLiquidity(\n    uint160 sqrtRatioX96,\n    uint160 sqrtRatioAX96,\n    uint160 sqrtRatioBX96,\n    uint128 liquidity\n  ) external pure returns (uint256 amount0, uint256 amount1) {\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\n      amount0 = getAmount0ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\n      amount0 = getAmount0ForLiquidity(sqrtRatioX96, sqrtRatioBX96, liquidity);\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioX96, liquidity);\n    } else {\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\n    }\n  }\n}\n"
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobOwnershipForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../../contracts/peripherals/jobs/Keep3rJobOwnership.sol';\n\ncontract Keep3rJobOwnershipForTest is Keep3rJobOwnership {}\n"
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '../../../contracts/peripherals/jobs/Keep3rJobDisputable.sol';\n\ncontract Keep3rJobDisputableForTest is Keep3rJobDisputable {\n  using EnumerableSet for EnumerableSet.AddressSet;\n\n  constructor(\n    address _kph,\n    address _keep3rV1,\n    address _keep3rV1Proxy,\n    address _kp3rWethPool\n  ) Keep3rParameters(_kph, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\n\n  function setJobLiquidity(address _job, address _liquidity) external {\n    _jobLiquidities[_job].add(_liquidity);\n  }\n\n  function setJobToken(address _job, address _token) external {\n    _jobTokens[_job].add(_token);\n  }\n\n  function setApprovedLiquidity(address _liquidity) external {\n    _approvedLiquidities.add(_liquidity);\n  }\n\n  function setRevokedLiquidity(address _liquidity) external {\n    _approvedLiquidities.remove(_liquidity);\n  }\n\n  function internalJobLiquidityCredits(address _job) external view returns (uint256 _credits) {\n    _credits = _jobLiquidityCredits[_job];\n  }\n\n  function internalJobPeriodCredits(address _job) external view returns (uint256 _credits) {\n    _credits = _jobPeriodCredits[_job];\n  }\n\n  function internalJobTokens(address _job) external view returns (address[] memory _tokens) {\n    _tokens = new address[](_jobTokens[_job].length());\n    for (uint256 i; i < _jobTokens[_job].length(); i++) {\n      _tokens[i] = _jobTokens[_job].at(i);\n    }\n  }\n\n  function internalJobLiquidities(address _job) external view returns (address[] memory _tokens) {\n    _tokens = new address[](_jobLiquidities[_job].length());\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\n      _tokens[i] = _jobLiquidities[_job].at(i);\n    }\n  }\n}\n"
      },
      "solidity/for-test/IUniswapV3PoolForTest.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.8.4 <0.9.0;\n\nimport '@uniswap/v3-core/contracts/interfaces/IERC20Minimal.sol';\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\n\n// solhint-disable-next-line no-empty-blocks\ninterface IUniswapV3PoolForTest is IERC20Minimal, IUniswapV3Pool {\n\n}\n"
      },
      "@uniswap/v3-core/contracts/interfaces/IERC20Minimal.sol": {
        "content": "// SPDX-License-Identifier: GPL-2.0-or-later\npragma solidity >=0.5.0;\n\n/// @title Minimal ERC20 interface for Uniswap\n/// @notice Contains a subset of the full ERC20 interface that is used in Uniswap V3\ninterface IERC20Minimal {\n    /// @notice Returns the balance of a token\n    /// @param account The account for which to look up the number of tokens it has, i.e. its balance\n    /// @return The number of tokens held by the account\n    function balanceOf(address account) external view returns (uint256);\n\n    /// @notice Transfers the amount of token from the `msg.sender` to the recipient\n    /// @param recipient The account that will receive the amount transferred\n    /// @param amount The number of tokens to send from the sender to the recipient\n    /// @return Returns true for a successful transfer, false for an unsuccessful transfer\n    function transfer(address recipient, uint256 amount) external returns (bool);\n\n    /// @notice Returns the current allowance given to a spender by an owner\n    /// @param owner The account of the token owner\n    /// @param spender The account of the token spender\n    /// @return The current allowance granted by `owner` to `spender`\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /// @notice Sets the allowance of a spender from the `msg.sender` to the value `amount`\n    /// @param spender The account which will be allowed to spend a given amount of the owners tokens\n    /// @param amount The amount of tokens allowed to be used by `spender`\n    /// @return Returns true for a successful approval, false for unsuccessful\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /// @notice Transfers `amount` tokens from `sender` to `recipient` up to the allowance given to the `msg.sender`\n    /// @param sender The account from which the transfer will be initiated\n    /// @param recipient The recipient of the transfer\n    /// @param amount The amount of the transfer\n    /// @return Returns true for a successful transfer, false for unsuccessful\n    function transferFrom(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) external returns (bool);\n\n    /// @notice Event emitted when tokens are transferred from one address to another, either via `#transfer` or `#transferFrom`.\n    /// @param from The account from which the tokens were sent, i.e. the balance decreased\n    /// @param to The account to which the tokens were sent, i.e. the balance increased\n    /// @param value The amount of tokens that were transferred\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /// @notice Event emitted when the approval amount for the spender of a given owner's tokens changes.\n    /// @param owner The account that approved spending of its tokens\n    /// @param spender The account for which the spending allowance was modified\n    /// @param value The new allowance from the owner to the spender\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 33
      },
      "outputSelection": {
        "*": {
          "*": [
            "storageLayout",
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata",
            "devdoc",
            "userdoc",
            "evm.gasEstimates"
          ],
          "": [
            "ast"
          ]
        }
      },
      "metadata": {
        "useLiteralContent": true
      }
    }
  },
  "output": {
    "contracts": {
      "@openzeppelin/contracts/security/ReentrancyGuard.sol": {
        "ReentrancyGuard": {
          "abi": [],
          "devdoc": {
            "details": "Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "@openzeppelin/contracts/security/ReentrancyGuard.sol:ReentrancyGuard",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/token/ERC20/ERC20.sol": {
        "ERC20": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name_",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol_",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "details": "Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.",
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "See {IERC20-allowance}."
              },
              "approve(address,uint256)": {
                "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
              },
              "balanceOf(address)": {
                "details": "See {IERC20-balanceOf}."
              },
              "constructor": {
                "details": "Sets the values for {name} and {symbol}. The default value of {decimals} is 18. To select a different value for {decimals} you should overload it. All two of these values are immutable: they can only be set once during construction."
              },
              "decimals()": {
                "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
              },
              "decreaseAllowance(address,uint256)": {
                "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
              },
              "increaseAllowance(address,uint256)": {
                "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
              },
              "name()": {
                "details": "Returns the name of the token."
              },
              "symbol()": {
                "details": "Returns the symbol of the token, usually a shorter version of the name."
              },
              "totalSupply()": {
                "details": "See {IERC20-totalSupply}."
              },
              "transfer(address,uint256)": {
                "details": "See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
              },
              "transferFrom(address,address,uint256)": {
                "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_84": {
                  "entryPoint": null,
                  "id": 84,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "abi_decode_string_fromMemory": {
                  "entryPoint": 270,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory": {
                  "entryPoint": 453,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "extract_byte_array_length": {
                  "entryPoint": 559,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x41": {
                  "entryPoint": 620,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1985:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "78:821:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "127:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "136:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "139:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "129:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "129:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "129:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "106:6:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "114:4:84",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "102:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "102:17:84"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "121:3:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "98:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "98:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "91:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "91:35:84"
                              },
                              "nodeType": "YulIf",
                              "src": "88:55:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "152:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "168:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "162:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "162:13:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "156:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "184:28:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "202:2:84",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "206:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "198:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "198:10:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "210:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "194:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "194:18:84"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "188:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "235:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "237:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "237:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "237:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "227:2:84"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "231:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "224:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "224:10:84"
                              },
                              "nodeType": "YulIf",
                              "src": "221:36:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "266:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "280:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "276:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "276:7:84"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "270:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "292:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "312:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "306:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "306:9:84"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "296:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "324:71:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "346:6:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "370:2:84"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "374:4:84",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "366:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "366:13:84"
                                              },
                                              {
                                                "name": "_3",
                                                "nodeType": "YulIdentifier",
                                                "src": "381:2:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "362:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "362:22:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "386:2:84",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "358:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "358:31:84"
                                      },
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "391:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "354:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "354:40:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "342:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "342:53:84"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "328:10:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "454:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "456:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "456:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "456:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "413:10:84"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "425:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "410:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "410:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "433:10:84"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "445:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "430:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "430:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "407:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "407:46:84"
                              },
                              "nodeType": "YulIf",
                              "src": "404:72:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "492:2:84",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "496:10:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "485:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "485:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "485:22:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "523:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "531:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "516:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "516:18:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "516:18:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "543:14:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "553:4:84",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "547:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "603:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "612:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "615:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "605:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "605:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "605:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "580:6:84"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "588:2:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "576:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "576:15:84"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "593:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "572:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "572:24:84"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "598:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "569:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "569:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "566:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "628:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "637:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "632:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "693:87:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "memPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "722:6:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "730:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "718:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "718:14:84"
                                            },
                                            {
                                              "name": "_4",
                                              "nodeType": "YulIdentifier",
                                              "src": "734:2:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "714:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "714:23:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "offset",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "753:6:84"
                                                    },
                                                    {
                                                      "name": "i",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "761:1:84"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "749:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "749:14:84"
                                                },
                                                {
                                                  "name": "_4",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "765:2:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "745:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "745:23:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "739:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "739:30:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "707:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "707:63:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "707:63:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "658:1:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "661:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "655:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "655:9:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "665:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "667:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "676:1:84"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "679:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "672:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "672:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "667:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "651:3:84",
                                "statements": []
                              },
                              "src": "647:133:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "810:59:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "memPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "839:6:84"
                                                },
                                                {
                                                  "name": "_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "847:2:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "835:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "835:15:84"
                                            },
                                            {
                                              "name": "_4",
                                              "nodeType": "YulIdentifier",
                                              "src": "852:2:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "831:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "831:24:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "857:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "824:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "824:35:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "824:35:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "795:1:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "798:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "792:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "792:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "789:80:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "878:15:84",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "887:6:84"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "878:5:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_string_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "52:6:84",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "60:3:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "68:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:885:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1022:444:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1068:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1077:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1080:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1070:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1070:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1070:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1043:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1052:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1039:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1039:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1064:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1035:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1035:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1032:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1093:30:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1113:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1107:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1107:16:84"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1097:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1132:28:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1150:2:84",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1154:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1146:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1146:10:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1158:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "1142:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1142:18:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1136:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1187:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1196:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1199:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1189:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1189:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1189:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1175:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1183:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1172:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1172:14:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1169:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1212:71:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1255:9:84"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1266:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1251:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1251:22:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1275:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1222:28:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1222:61:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1212:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1292:41:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1318:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1329:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1314:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1314:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1308:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1308:25:84"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1296:8:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1362:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1371:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1374:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1364:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1364:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1364:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1348:8:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1358:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1345:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1345:16:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1342:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1387:73:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1430:9:84"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1441:8:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1426:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1426:24:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1452:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1397:28:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1397:63:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1387:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "980:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "991:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1003:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1011:6:84",
                            "type": ""
                          }
                        ],
                        "src": "904:562:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1526:325:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1536:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1550:1:84",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "1553:4:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "1546:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1546:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "1536:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1567:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "1597:4:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1603:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "1593:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1593:12:84"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "1571:18:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1644:31:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1646:27:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "1660:6:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1668:4:84",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "1656:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1656:17:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "1646:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "1624:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1617:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1617:26:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1614:61:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1734:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1755:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1762:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1767:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "1758:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1758:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1748:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1748:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1748:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1799:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1802:4:84",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1792:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1792:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1792:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1827:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1830:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1820:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1820:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1820:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "1690:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "1713:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1721:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1710:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1710:14:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "1687:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1687:38:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1684:161:84"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "1506:4:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "1515:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1471:380:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1888:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1905:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1912:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1917:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1908:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1908:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1898:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1898:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1898:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1945:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1948:4:84",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1938:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1938:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1938:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1969:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1972:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1962:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1962:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1962:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "1856:127:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), 0)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040523480156200001157600080fd5b5060405162000b4638038062000b468339810160408190526200003491620001c5565b81516200004990600390602085019062000068565b5080516200005f90600490602084019062000068565b50505062000282565b82805462000076906200022f565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b600082601f8301126200012057600080fd5b81516001600160401b03808211156200013d576200013d6200026c565b604051601f8301601f19908116603f011681019082821181831017156200016857620001686200026c565b816040528381526020925086838588010111156200018557600080fd5b600091505b83821015620001a957858201830151818301840152908201906200018a565b83821115620001bb5760008385830101525b9695505050505050565b60008060408385031215620001d957600080fd5b82516001600160401b0380821115620001f157600080fd5b620001ff868387016200010e565b935060208501519150808211156200021657600080fd5b5062000225858286016200010e565b9150509250929050565b600181811c908216806200024457607f821691505b602082108114156200026657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6108b480620002926000396000f3fe608060405234801561001057600080fd5b50600436106100995760003560e01c806306fdde031461009e578063095ea7b3146100bc57806318160ddd146100df57806323b872dd146100f1578063313ce56714610104578063395093511461011357806370a082311461012657806395d89b411461014f578063a457c2d714610157578063a9059cbb1461016a578063dd62ed3e1461017d575b600080fd5b6100a66101b6565b6040516100b391906107c8565b60405180910390f35b6100cf6100ca36600461079e565b610248565b60405190151581526020016100b3565b6002545b6040519081526020016100b3565b6100cf6100ff366004610762565b61025e565b604051601281526020016100b3565b6100cf61012136600461079e565b61030d565b6100e361013436600461070d565b6001600160a01b031660009081526020819052604090205490565b6100a6610349565b6100cf61016536600461079e565b610358565b6100cf61017836600461079e565b6103f1565b6100e361018b36600461072f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101c590610843565b80601f01602080910402602001604051908101604052809291908181526020018280546101f190610843565b801561023e5780601f106102135761010080835404028352916020019161023e565b820191906000526020600020905b81548152906001019060200180831161022157829003601f168201915b5050505050905090565b60006102553384846103fe565b50600192915050565b600061026b848484610522565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156102f55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61030285338584036103fe565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161025591859061034490869061081d565b6103fe565b6060600480546101c590610843565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156103da5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016102ec565b6103e733858584036103fe565b5060019392505050565b6000610255338484610522565b6001600160a01b0383166104605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016102ec565b6001600160a01b0382166104c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016102ec565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166105865760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016102ec565b6001600160a01b0382166105e85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016102ec565b6001600160a01b038316600090815260208190526040902054818110156106605760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016102ec565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061069790849061081d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106e391815260200190565b60405180910390a350505050565b80356001600160a01b038116811461070857600080fd5b919050565b60006020828403121561071f57600080fd5b610728826106f1565b9392505050565b6000806040838503121561074257600080fd5b61074b836106f1565b9150610759602084016106f1565b90509250929050565b60008060006060848603121561077757600080fd5b610780846106f1565b925061078e602085016106f1565b9150604084013590509250925092565b600080604083850312156107b157600080fd5b6107ba836106f1565b946020939093013593505050565b600060208083528351808285015260005b818110156107f5578581018301518582016040015282016107d9565b81811115610807576000604083870101525b50601f01601f1916929092016040019392505050565b6000821982111561083e57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c9082168061085757607f821691505b6020821081141561087857634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220678d85b9f606935d821faf4d3fb1c43df6b3509ef09ab4a87bbd07a70655f41964736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xB46 CODESIZE SUB DUP1 PUSH3 0xB46 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x1C5 JUMP JUMPDEST DUP2 MLOAD PUSH3 0x49 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x68 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x5F SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x68 JUMP JUMPDEST POP POP POP PUSH3 0x282 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x76 SWAP1 PUSH3 0x22F JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x9A JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0xE5 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0xB5 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xE5 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xE5 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xE5 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xC8 JUMP JUMPDEST POP PUSH3 0xF3 SWAP3 SWAP2 POP PUSH3 0xF7 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0xF3 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0xF8 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x13D JUMPI PUSH3 0x13D PUSH3 0x26C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x168 JUMPI PUSH3 0x168 PUSH3 0x26C JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x1A9 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x18A JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x1BB JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1FF DUP7 DUP4 DUP8 ADD PUSH3 0x10E JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x225 DUP6 DUP3 DUP7 ADD PUSH3 0x10E JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x244 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x266 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x8B4 DUP1 PUSH3 0x292 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x99 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x9E JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xBC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xF1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x104 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x113 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x14F JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x17D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA6 PUSH2 0x1B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB3 SWAP2 SWAP1 PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xCF PUSH2 0xCA CALLDATASIZE PUSH1 0x4 PUSH2 0x79E JUMP JUMPDEST PUSH2 0x248 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB3 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB3 JUMP JUMPDEST PUSH2 0xCF PUSH2 0xFF CALLDATASIZE PUSH1 0x4 PUSH2 0x762 JUMP JUMPDEST PUSH2 0x25E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB3 JUMP JUMPDEST PUSH2 0xCF PUSH2 0x121 CALLDATASIZE PUSH1 0x4 PUSH2 0x79E JUMP JUMPDEST PUSH2 0x30D JUMP JUMPDEST PUSH2 0xE3 PUSH2 0x134 CALLDATASIZE PUSH1 0x4 PUSH2 0x70D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xA6 PUSH2 0x349 JUMP JUMPDEST PUSH2 0xCF PUSH2 0x165 CALLDATASIZE PUSH1 0x4 PUSH2 0x79E JUMP JUMPDEST PUSH2 0x358 JUMP JUMPDEST PUSH2 0xCF PUSH2 0x178 CALLDATASIZE PUSH1 0x4 PUSH2 0x79E JUMP JUMPDEST PUSH2 0x3F1 JUMP JUMPDEST PUSH2 0xE3 PUSH2 0x18B CALLDATASIZE PUSH1 0x4 PUSH2 0x72F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x1C5 SWAP1 PUSH2 0x843 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1F1 SWAP1 PUSH2 0x843 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x23E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x213 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x23E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x221 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x255 CALLER DUP5 DUP5 PUSH2 0x3FE JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26B DUP5 DUP5 DUP5 PUSH2 0x522 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 DUP2 LT ISZERO PUSH2 0x2F5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732061 PUSH1 0x44 DUP3 ADD MSTORE PUSH8 0x6C6C6F77616E6365 PUSH1 0xC0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x302 DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x3FE JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x255 SWAP2 DUP6 SWAP1 PUSH2 0x344 SWAP1 DUP7 SWAP1 PUSH2 0x81D JUMP JUMPDEST PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x1C5 SWAP1 PUSH2 0x843 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD DUP3 DUP2 LT ISZERO PUSH2 0x3DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2EC JUMP JUMPDEST PUSH2 0x3E7 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x3FE JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x255 CALLER DUP5 DUP5 PUSH2 0x522 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x460 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x4C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x586 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x660 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP6 DUP6 SUB SWAP1 SSTORE SWAP2 DUP6 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x697 SWAP1 DUP5 SWAP1 PUSH2 0x81D JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x6E3 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x708 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x71F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x728 DUP3 PUSH2 0x6F1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x742 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x74B DUP4 PUSH2 0x6F1 JUMP JUMPDEST SWAP2 POP PUSH2 0x759 PUSH1 0x20 DUP5 ADD PUSH2 0x6F1 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x777 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x780 DUP5 PUSH2 0x6F1 JUMP JUMPDEST SWAP3 POP PUSH2 0x78E PUSH1 0x20 DUP6 ADD PUSH2 0x6F1 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7BA DUP4 PUSH2 0x6F1 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x7F5 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x7D9 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x807 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x83E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x857 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x878 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x8D85B9F606935D82 0x1F 0xAF 0x4D EXTCODEHASH 0xB1 0xC4 RETURNDATASIZE 0xF6 0xB3 POP SWAP15 CREATE SWAP11 0xB4 0xA8 PUSH28 0xBD07A70655F41964736F6C6343000807003300000000000000000000 ",
              "sourceMap": "1331:10416:1:-:0;;;1906:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1972:13;;;;:5;;:13;;;;;:::i;:::-;-1:-1:-1;1995:17:1;;;;:7;;:17;;;;;:::i;:::-;;1906:113;;1331:10416;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1331:10416:1;;;-1:-1:-1;1331:10416:1;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:885:84;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;162:13;;-1:-1:-1;;;;;224:10:84;;;221:36;;;237:18;;:::i;:::-;312:2;306:9;280:2;366:13;;-1:-1:-1;;362:22:84;;;386:2;358:31;354:40;342:53;;;410:18;;;430:22;;;407:46;404:72;;;456:18;;:::i;:::-;496:10;492:2;485:22;531:2;523:6;516:18;553:4;543:14;;598:3;593:2;588;580:6;576:15;572:24;569:33;566:53;;;615:1;612;605:12;566:53;637:1;628:10;;647:133;661:2;658:1;655:9;647:133;;;749:14;;;745:23;;739:30;718:14;;;714:23;;707:63;672:10;;;;647:133;;;798:2;795:1;792:9;789:80;;;857:1;852:2;847;839:6;835:15;831:24;824:35;789:80;887:6;14:885;-1:-1:-1;;;;;;14:885:84:o;904:562::-;1003:6;1011;1064:2;1052:9;1043:7;1039:23;1035:32;1032:52;;;1080:1;1077;1070:12;1032:52;1107:16;;-1:-1:-1;;;;;1172:14:84;;;1169:34;;;1199:1;1196;1189:12;1169:34;1222:61;1275:7;1266:6;1255:9;1251:22;1222:61;:::i;:::-;1212:71;;1329:2;1318:9;1314:18;1308:25;1292:41;;1358:2;1348:8;1345:16;1342:36;;;1374:1;1371;1364:12;1342:36;;1397:63;1452:7;1441:8;1430:9;1426:24;1397:63;:::i;:::-;1387:73;;;904:562;;;;;:::o;1471:380::-;1550:1;1546:12;;;;1593;;;1614:61;;1668:4;1660:6;1656:17;1646:27;;1614:61;1721:2;1713:6;1710:14;1690:18;1687:38;1684:161;;;1767:10;1762:3;1758:20;1755:1;1748:31;1802:4;1799:1;1792:15;1830:4;1827:1;1820:15;1684:161;;1471:380;;;:::o;1856:127::-;1917:10;1912:3;1908:20;1905:1;1898:31;1948:4;1945:1;1938:15;1972:4;1969:1;1962:15;1856:127;1331:10416:1;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_afterTokenTransfer_584": {
                  "entryPoint": null,
                  "id": 584,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_approve_562": {
                  "entryPoint": 1022,
                  "id": 562,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_beforeTokenTransfer_573": {
                  "entryPoint": null,
                  "id": 573,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_msgSender_1221": {
                  "entryPoint": null,
                  "id": 1221,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_transfer_389": {
                  "entryPoint": 1314,
                  "id": 389,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@allowance_177": {
                  "entryPoint": null,
                  "id": 177,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@approve_198": {
                  "entryPoint": 584,
                  "id": 198,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@balanceOf_138": {
                  "entryPoint": null,
                  "id": 138,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@decimals_114": {
                  "entryPoint": null,
                  "id": 114,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@decreaseAllowance_312": {
                  "entryPoint": 856,
                  "id": 312,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@increaseAllowance_273": {
                  "entryPoint": 781,
                  "id": 273,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@name_94": {
                  "entryPoint": 438,
                  "id": 94,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@symbol_104": {
                  "entryPoint": 841,
                  "id": 104,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@totalSupply_124": {
                  "entryPoint": null,
                  "id": 124,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@transferFrom_246": {
                  "entryPoint": 606,
                  "id": 246,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@transfer_159": {
                  "entryPoint": 1009,
                  "id": 159,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_address": {
                  "entryPoint": 1777,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 1805,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 1839,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_uint256": {
                  "entryPoint": 1890,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 1950,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 1992,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 2077,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "extract_byte_array_length": {
                  "entryPoint": 2115,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:5857:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "111:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "262:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "308:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "317:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "320:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "310:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "310:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "310:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "292:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "279:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "275:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "272:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "333:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "362:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "333:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "228:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "239:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "251:6:84",
                            "type": ""
                          }
                        ],
                        "src": "192:186:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "470:173:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "516:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "525:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "528:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "518:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "518:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "518:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "491:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "500:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "487:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "487:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "512:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "480:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "541:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "570:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "551:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "551:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "541:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "589:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "622:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "633:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "618:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "618:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "599:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "599:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "589:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "428:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "439:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "451:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "459:6:84",
                            "type": ""
                          }
                        ],
                        "src": "383:260:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "752:224:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "798:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "807:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "810:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "800:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "800:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "800:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "773:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "782:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "769:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "769:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "794:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "765:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "765:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "762:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "823:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "852:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "833:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "833:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "823:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "871:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "904:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "915:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "900:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "900:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "881:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "881:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "871:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "928:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "955:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "966:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "951:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "951:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "938:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "938:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "928:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "702:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "713:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "725:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "733:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "741:6:84",
                            "type": ""
                          }
                        ],
                        "src": "648:328:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1068:167:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1114:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1123:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1126:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1116:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1116:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1116:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1089:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1098:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1085:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1085:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1110:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1081:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1081:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1078:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1139:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1168:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1149:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1149:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1139:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1187:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1214:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1225:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1210:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1210:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1197:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1197:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1187:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1026:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1037:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1049:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1057:6:84",
                            "type": ""
                          }
                        ],
                        "src": "981:254:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1335:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1345:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1357:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1368:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1353:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1353:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1345:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1387:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "1412:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "1405:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1405:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "1398:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1398:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1380:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1380:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1380:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1304:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1315:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1326:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1240:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1553:476:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1563:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1573:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1567:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1591:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1602:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1584:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1584:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1584:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1614:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1634:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1628:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1628:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "1618:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1661:9:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1672:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1657:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1657:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1677:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1650:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1650:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1650:34:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1693:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1702:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "1697:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1762:90:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "headStart",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1791:9:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1802:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "1787:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1787:17:84"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1806:2:84",
                                              "type": "",
                                              "value": "64"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "1783:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1783:26:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "value0",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1825:6:84"
                                                    },
                                                    {
                                                      "name": "i",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1833:1:84"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1821:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "1821:14:84"
                                                },
                                                {
                                                  "name": "_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1837:2:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "1817:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1817:23:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "1811:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1811:30:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1776:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1776:66:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1776:66:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1723:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1726:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1720:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1720:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1734:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1736:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1745:1:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1748:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1741:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1741:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1736:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1716:3:84",
                                "statements": []
                              },
                              "src": "1712:140:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1886:66:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "headStart",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1915:9:84"
                                                },
                                                {
                                                  "name": "length",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1926:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "1911:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1911:22:84"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1935:2:84",
                                              "type": "",
                                              "value": "64"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "1907:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1907:31:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1940:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1900:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1900:42:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1900:42:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1867:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1870:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1864:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1864:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1861:91:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1961:62:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1977:9:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "1996:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2004:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "1992:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1992:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2013:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "2009:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2009:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "1988:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1988:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1973:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1973:45:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2020:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1969:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1969:54:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1961:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1522:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1533:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1544:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1432:597:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2208:225:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2225:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2236:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2218:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2218:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2218:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2259:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2270:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2255:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2255:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2275:2:84",
                                    "type": "",
                                    "value": "35"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2248:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2248:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2248:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2298:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2309:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2294:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2294:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2314:34:84",
                                    "type": "",
                                    "value": "ERC20: transfer to the zero addr"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2287:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2287:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2287:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2369:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2380:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2365:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2365:18:84"
                                  },
                                  {
                                    "hexValue": "657373",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2385:5:84",
                                    "type": "",
                                    "value": "ess"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2358:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2358:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2358:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2400:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2412:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2423:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2408:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2408:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2400:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2185:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2199:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2034:399:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2612:224:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2629:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2640:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2622:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2622:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2622:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2663:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2674:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2659:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2659:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2679:2:84",
                                    "type": "",
                                    "value": "34"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2652:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2652:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2652:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2702:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2713:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2698:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2698:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a20617070726f766520746f20746865207a65726f206164647265",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2718:34:84",
                                    "type": "",
                                    "value": "ERC20: approve to the zero addre"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2691:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2691:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2691:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2773:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2784:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2769:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2769:18:84"
                                  },
                                  {
                                    "hexValue": "7373",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2789:4:84",
                                    "type": "",
                                    "value": "ss"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2762:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2762:32:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2762:32:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2803:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2815:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2826:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2811:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2811:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2803:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2589:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2603:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2438:398:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3015:228:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3032:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3043:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3025:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3025:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3025:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3066:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3077:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3062:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3062:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3082:2:84",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3055:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3055:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3055:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3105:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3116:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3101:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3101:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3121:34:84",
                                    "type": "",
                                    "value": "ERC20: transfer amount exceeds b"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3094:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3094:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3094:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3176:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3187:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3172:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3172:18:84"
                                  },
                                  {
                                    "hexValue": "616c616e6365",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3192:8:84",
                                    "type": "",
                                    "value": "alance"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3165:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3165:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3165:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3210:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3222:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3233:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3218:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3218:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3210:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2992:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3006:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2841:402:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3422:230:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3439:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3450:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3432:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3432:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3432:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3473:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3484:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3469:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3469:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3489:2:84",
                                    "type": "",
                                    "value": "40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3462:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3462:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3462:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3512:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3523:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3508:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3508:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732061",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3528:34:84",
                                    "type": "",
                                    "value": "ERC20: transfer amount exceeds a"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3501:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3501:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3501:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3583:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3594:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3579:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3579:18:84"
                                  },
                                  {
                                    "hexValue": "6c6c6f77616e6365",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3599:10:84",
                                    "type": "",
                                    "value": "llowance"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3572:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3572:38:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3572:38:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3619:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3631:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3642:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3627:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3627:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3619:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3399:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3413:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3248:404:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3831:227:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3848:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3859:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3841:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3841:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3841:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3882:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3893:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3878:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3878:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3898:2:84",
                                    "type": "",
                                    "value": "37"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3871:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3871:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3871:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3921:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3932:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3917:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3917:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f206164",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3937:34:84",
                                    "type": "",
                                    "value": "ERC20: transfer from the zero ad"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3910:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3910:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3910:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3992:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4003:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3988:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3988:18:84"
                                  },
                                  {
                                    "hexValue": "6472657373",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4008:7:84",
                                    "type": "",
                                    "value": "dress"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3981:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3981:35:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3981:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4025:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4037:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4048:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4033:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4033:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4025:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3808:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3822:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3657:401:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4237:226:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4254:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4265:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4247:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4247:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4247:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4288:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4299:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4284:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4284:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4304:2:84",
                                    "type": "",
                                    "value": "36"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4277:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4277:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4277:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4327:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4338:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4323:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4323:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f20616464",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4343:34:84",
                                    "type": "",
                                    "value": "ERC20: approve from the zero add"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4316:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4316:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4316:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4398:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4409:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4394:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4394:18:84"
                                  },
                                  {
                                    "hexValue": "72657373",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4414:6:84",
                                    "type": "",
                                    "value": "ress"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4387:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4387:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4387:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4430:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4442:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4453:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4438:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4438:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4430:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4214:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4228:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4063:400:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4642:227:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4659:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4670:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4652:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4652:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4652:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4693:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4704:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4689:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4689:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4709:2:84",
                                    "type": "",
                                    "value": "37"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4682:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4682:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4682:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4732:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4743:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4728:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4728:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4748:34:84",
                                    "type": "",
                                    "value": "ERC20: decreased allowance below"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4721:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4721:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4721:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4803:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4814:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4799:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4799:18:84"
                                  },
                                  {
                                    "hexValue": "207a65726f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4819:7:84",
                                    "type": "",
                                    "value": " zero"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4792:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4792:35:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4792:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4836:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4848:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4859:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4844:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4844:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4836:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4619:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4633:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4468:401:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4975:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4985:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4997:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5008:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4993:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4993:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4985:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5027:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5038:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5020:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5020:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5020:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4944:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4955:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4966:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4874:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5153:87:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5163:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5175:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5186:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5171:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5171:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5163:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5205:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5220:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5228:4:84",
                                        "type": "",
                                        "value": "0xff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5216:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5216:17:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5198:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5198:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5198:36:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5122:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5133:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5144:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5056:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5293:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5328:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5349:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5356:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5361:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "5352:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5352:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5342:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5342:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5342:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5393:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5396:4:84",
                                          "type": "",
                                          "value": "0x11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5386:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5386:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5386:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5421:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5424:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5414:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5414:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5414:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5309:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "5316:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "5312:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5312:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5306:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5306:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5303:136:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5448:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5459:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5462:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5455:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5455:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "5448:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "5276:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "5279:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "5285:3:84",
                            "type": ""
                          }
                        ],
                        "src": "5245:225:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5530:325:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5540:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5554:1:84",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "5557:4:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5550:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5550:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "5540:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5571:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "5601:4:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5607:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "5597:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5597:12:84"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "5575:18:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5648:31:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5650:27:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "5664:6:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5672:4:84",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "5660:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5660:17:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "5650:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "5628:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5621:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5621:26:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5618:61:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5738:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5759:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5766:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5771:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "5762:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5762:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5752:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5752:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5752:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5803:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5806:4:84",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5796:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5796:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5796:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5831:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5834:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5824:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5824:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5824:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "5694:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "5717:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5725:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5714:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5714:14:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "5691:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5691:38:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5688:161:84"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "5510:4:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "5519:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5475:380:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"ERC20: transfer amount exceeds b\")\n        mstore(add(headStart, 96), \"alance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 40)\n        mstore(add(headStart, 64), \"ERC20: transfer amount exceeds a\")\n        mstore(add(headStart, 96), \"llowance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: decreased allowance below\")\n        mstore(add(headStart, 96), \" zero\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        sum := add(x, y)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100995760003560e01c806306fdde031461009e578063095ea7b3146100bc57806318160ddd146100df57806323b872dd146100f1578063313ce56714610104578063395093511461011357806370a082311461012657806395d89b411461014f578063a457c2d714610157578063a9059cbb1461016a578063dd62ed3e1461017d575b600080fd5b6100a66101b6565b6040516100b391906107c8565b60405180910390f35b6100cf6100ca36600461079e565b610248565b60405190151581526020016100b3565b6002545b6040519081526020016100b3565b6100cf6100ff366004610762565b61025e565b604051601281526020016100b3565b6100cf61012136600461079e565b61030d565b6100e361013436600461070d565b6001600160a01b031660009081526020819052604090205490565b6100a6610349565b6100cf61016536600461079e565b610358565b6100cf61017836600461079e565b6103f1565b6100e361018b36600461072f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101c590610843565b80601f01602080910402602001604051908101604052809291908181526020018280546101f190610843565b801561023e5780601f106102135761010080835404028352916020019161023e565b820191906000526020600020905b81548152906001019060200180831161022157829003601f168201915b5050505050905090565b60006102553384846103fe565b50600192915050565b600061026b848484610522565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156102f55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61030285338584036103fe565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161025591859061034490869061081d565b6103fe565b6060600480546101c590610843565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156103da5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016102ec565b6103e733858584036103fe565b5060019392505050565b6000610255338484610522565b6001600160a01b0383166104605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016102ec565b6001600160a01b0382166104c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016102ec565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166105865760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016102ec565b6001600160a01b0382166105e85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016102ec565b6001600160a01b038316600090815260208190526040902054818110156106605760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016102ec565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061069790849061081d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106e391815260200190565b60405180910390a350505050565b80356001600160a01b038116811461070857600080fd5b919050565b60006020828403121561071f57600080fd5b610728826106f1565b9392505050565b6000806040838503121561074257600080fd5b61074b836106f1565b9150610759602084016106f1565b90509250929050565b60008060006060848603121561077757600080fd5b610780846106f1565b925061078e602085016106f1565b9150604084013590509250925092565b600080604083850312156107b157600080fd5b6107ba836106f1565b946020939093013593505050565b600060208083528351808285015260005b818110156107f5578581018301518582016040015282016107d9565b81811115610807576000604083870101525b50601f01601f1916929092016040019392505050565b6000821982111561083e57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c9082168061085757607f821691505b6020821081141561087857634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220678d85b9f606935d821faf4d3fb1c43df6b3509ef09ab4a87bbd07a70655f41964736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x99 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x9E JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xBC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xF1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x104 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x113 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x14F JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x17D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA6 PUSH2 0x1B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB3 SWAP2 SWAP1 PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xCF PUSH2 0xCA CALLDATASIZE PUSH1 0x4 PUSH2 0x79E JUMP JUMPDEST PUSH2 0x248 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB3 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB3 JUMP JUMPDEST PUSH2 0xCF PUSH2 0xFF CALLDATASIZE PUSH1 0x4 PUSH2 0x762 JUMP JUMPDEST PUSH2 0x25E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB3 JUMP JUMPDEST PUSH2 0xCF PUSH2 0x121 CALLDATASIZE PUSH1 0x4 PUSH2 0x79E JUMP JUMPDEST PUSH2 0x30D JUMP JUMPDEST PUSH2 0xE3 PUSH2 0x134 CALLDATASIZE PUSH1 0x4 PUSH2 0x70D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xA6 PUSH2 0x349 JUMP JUMPDEST PUSH2 0xCF PUSH2 0x165 CALLDATASIZE PUSH1 0x4 PUSH2 0x79E JUMP JUMPDEST PUSH2 0x358 JUMP JUMPDEST PUSH2 0xCF PUSH2 0x178 CALLDATASIZE PUSH1 0x4 PUSH2 0x79E JUMP JUMPDEST PUSH2 0x3F1 JUMP JUMPDEST PUSH2 0xE3 PUSH2 0x18B CALLDATASIZE PUSH1 0x4 PUSH2 0x72F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x1C5 SWAP1 PUSH2 0x843 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1F1 SWAP1 PUSH2 0x843 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x23E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x213 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x23E JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x221 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x255 CALLER DUP5 DUP5 PUSH2 0x3FE JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26B DUP5 DUP5 DUP5 PUSH2 0x522 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 DUP2 LT ISZERO PUSH2 0x2F5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732061 PUSH1 0x44 DUP3 ADD MSTORE PUSH8 0x6C6C6F77616E6365 PUSH1 0xC0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x302 DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x3FE JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x255 SWAP2 DUP6 SWAP1 PUSH2 0x344 SWAP1 DUP7 SWAP1 PUSH2 0x81D JUMP JUMPDEST PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x1C5 SWAP1 PUSH2 0x843 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD DUP3 DUP2 LT ISZERO PUSH2 0x3DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2EC JUMP JUMPDEST PUSH2 0x3E7 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x3FE JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x255 CALLER DUP5 DUP5 PUSH2 0x522 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x460 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x4C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x586 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x660 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP6 DUP6 SUB SWAP1 SSTORE SWAP2 DUP6 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x697 SWAP1 DUP5 SWAP1 PUSH2 0x81D JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x6E3 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x708 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x71F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x728 DUP3 PUSH2 0x6F1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x742 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x74B DUP4 PUSH2 0x6F1 JUMP JUMPDEST SWAP2 POP PUSH2 0x759 PUSH1 0x20 DUP5 ADD PUSH2 0x6F1 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x777 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x780 DUP5 PUSH2 0x6F1 JUMP JUMPDEST SWAP3 POP PUSH2 0x78E PUSH1 0x20 DUP6 ADD PUSH2 0x6F1 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7BA DUP4 PUSH2 0x6F1 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x7F5 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x7D9 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x807 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x83E JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x857 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x878 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x8D85B9F606935D82 0x1F 0xAF 0x4D EXTCODEHASH 0xB1 0xC4 RETURNDATASIZE 0xF6 0xB3 POP SWAP15 CREATE SWAP11 0xB4 0xA8 PUSH28 0xBD07A70655F41964736F6C6343000807003300000000000000000000 ",
              "sourceMap": "1331:10416:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2084:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4181:166;;;;;;:::i;:::-;;:::i;:::-;;;1405:14:84;;1398:22;1380:41;;1368:2;1353:18;4181:166:1;1240:187:84;3172:106:1;3259:12;;3172:106;;;5020:25:84;;;5008:2;4993:18;3172:106:1;4874:177:84;4814:478:1;;;;;;:::i;:::-;;:::i;3021:91::-;;;3103:2;5198:36:84;;5186:2;5171:18;3021:91:1;5056:184:84;5687:212:1;;;;;;:::i;:::-;;:::i;3336:125::-;;;;;;:::i;:::-;-1:-1:-1;;;;;3436:18:1;3410:7;3436:18;;;;;;;;;;;;3336:125;2295:102;;;:::i;6386:405::-;;;;;;:::i;:::-;;:::i;3664:172::-;;;;;;:::i;:::-;;:::i;3894:149::-;;;;;;:::i;:::-;-1:-1:-1;;;;;4009:18:1;;;3983:7;4009:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3894:149;2084:98;2138:13;2170:5;2163:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2084:98;:::o;4181:166::-;4264:4;4280:39;666:10:6;4303:7:1;4312:6;4280:8;:39::i;:::-;-1:-1:-1;4336:4:1;4181:166;;;;:::o;4814:478::-;4950:4;4966:36;4976:6;4984:9;4995:6;4966:9;:36::i;:::-;-1:-1:-1;;;;;5040:19:1;;5013:24;5040:19;;;:11;:19;;;;;;;;666:10:6;5040:33:1;;;;;;;;5091:26;;;;5083:79;;;;-1:-1:-1;;;5083:79:1;;3450:2:84;5083:79:1;;;3432:21:84;3489:2;3469:18;;;3462:30;3528:34;3508:18;;;3501:62;-1:-1:-1;;;3579:18:84;;;3572:38;3627:19;;5083:79:1;;;;;;;;;5196:57;5205:6;666:10:6;5246:6:1;5227:16;:25;5196:8;:57::i;:::-;-1:-1:-1;5281:4:1;;4814:478;-1:-1:-1;;;;4814:478:1:o;5687:212::-;666:10:6;5775:4:1;5823:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5823:34:1;;;;;;;;;;5775:4;;5791:80;;5814:7;;5823:47;;5860:10;;5823:47;:::i;:::-;5791:8;:80::i;2295:102::-;2351:13;2383:7;2376:14;;;;;:::i;6386:405::-;666:10:6;6479:4:1;6522:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6522:34:1;;;;;;;;;;6574:35;;;;6566:85;;;;-1:-1:-1;;;6566:85:1;;4670:2:84;6566:85:1;;;4652:21:84;4709:2;4689:18;;;4682:30;4748:34;4728:18;;;4721:62;-1:-1:-1;;;4799:18:84;;;4792:35;4844:19;;6566:85:1;4468:401:84;6566:85:1;6685:67;666:10:6;6708:7:1;6736:15;6717:16;:34;6685:8;:67::i;:::-;-1:-1:-1;6780:4:1;;6386:405;-1:-1:-1;;;6386:405:1:o;3664:172::-;3750:4;3766:42;666:10:6;3790:9:1;3801:6;3766:9;:42::i;9962:370::-;-1:-1:-1;;;;;10093:19:1;;10085:68;;;;-1:-1:-1;;;10085:68:1;;4265:2:84;10085:68:1;;;4247:21:84;4304:2;4284:18;;;4277:30;4343:34;4323:18;;;4316:62;-1:-1:-1;;;4394:18:84;;;4387:34;4438:19;;10085:68:1;4063:400:84;10085:68:1;-1:-1:-1;;;;;10171:21:1;;10163:68;;;;-1:-1:-1;;;10163:68:1;;2640:2:84;10163:68:1;;;2622:21:84;2679:2;2659:18;;;2652:30;2718:34;2698:18;;;2691:62;-1:-1:-1;;;2769:18:84;;;2762:32;2811:19;;10163:68:1;2438:398:84;10163:68:1;-1:-1:-1;;;;;10242:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10293:32;;5020:25:84;;;10293:32:1;;4993:18:84;10293:32:1;;;;;;;9962:370;;;:::o;7265:713::-;-1:-1:-1;;;;;7400:20:1;;7392:70;;;;-1:-1:-1;;;7392:70:1;;3859:2:84;7392:70:1;;;3841:21:84;3898:2;3878:18;;;3871:30;3937:34;3917:18;;;3910:62;-1:-1:-1;;;3988:18:84;;;3981:35;4033:19;;7392:70:1;3657:401:84;7392:70:1;-1:-1:-1;;;;;7480:23:1;;7472:71;;;;-1:-1:-1;;;7472:71:1;;2236:2:84;7472:71:1;;;2218:21:84;2275:2;2255:18;;;2248:30;2314:34;2294:18;;;2287:62;-1:-1:-1;;;2365:18:84;;;2358:33;2408:19;;7472:71:1;2034:399:84;7472:71:1;-1:-1:-1;;;;;7636:17:1;;7612:21;7636:17;;;;;;;;;;;7671:23;;;;7663:74;;;;-1:-1:-1;;;7663:74:1;;3043:2:84;7663:74:1;;;3025:21:84;3082:2;3062:18;;;3055:30;3121:34;3101:18;;;3094:62;-1:-1:-1;;;3172:18:84;;;3165:36;3218:19;;7663:74:1;2841:402:84;7663:74:1;-1:-1:-1;;;;;7771:17:1;;;:9;:17;;;;;;;;;;;7791:22;;;7771:42;;7833:20;;;;;;;;:30;;7807:6;;7771:9;7833:30;;7807:6;;7833:30;:::i;:::-;;;;;;;;7896:9;-1:-1:-1;;;;;7879:35:1;7888:6;-1:-1:-1;;;;;7879:35:1;;7907:6;7879:35;;;;5020:25:84;;5008:2;4993:18;;4874:177;7879:35:1;;;;;;;;7382:596;7265:713;;;:::o;14:173:84:-;82:20;;-1:-1:-1;;;;;131:31:84;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:84:o;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:52;;;1126:1;1123;1116:12;1078:52;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;981:254:84:o;1432:597::-;1544:4;1573:2;1602;1591:9;1584:21;1634:6;1628:13;1677:6;1672:2;1661:9;1657:18;1650:34;1702:1;1712:140;1726:6;1723:1;1720:13;1712:140;;;1821:14;;;1817:23;;1811:30;1787:17;;;1806:2;1783:26;1776:66;1741:10;;1712:140;;;1870:6;1867:1;1864:13;1861:91;;;1940:1;1935:2;1926:6;1915:9;1911:22;1907:31;1900:42;1861:91;-1:-1:-1;2013:2:84;1992:15;-1:-1:-1;;1988:29:84;1973:45;;;;2020:2;1969:54;;1432:597;-1:-1:-1;;;1432:597:84:o;5245:225::-;5285:3;5316:1;5312:6;5309:1;5306:13;5303:136;;;5361:10;5356:3;5352:20;5349:1;5342:31;5396:4;5393:1;5386:15;5424:4;5421:1;5414:15;5303:136;-1:-1:-1;5455:9:84;;5245:225::o;5475:380::-;5554:1;5550:12;;;;5597;;;5618:61;;5672:4;5664:6;5660:17;5650:27;;5618:61;5725:2;5717:6;5714:14;5694:18;5691:38;5688:161;;;5771:10;5766:3;5762:20;5759:1;5752:31;5806:4;5803:1;5796:15;5834:4;5831:1;5824:15;5688:161;;5475:380;;;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "445600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "allowance(address,address)": "infinite",
                "approve(address,uint256)": "24596",
                "balanceOf(address)": "2650",
                "decimals()": "243",
                "decreaseAllowance(address,uint256)": "27042",
                "increaseAllowance(address,uint256)": "27022",
                "name()": "infinite",
                "symbol()": "infinite",
                "totalSupply()": "2303",
                "transfer(address,uint256)": "51341",
                "transferFrom(address,address,uint256)": "infinite"
              },
              "internal": {
                "_afterTokenTransfer(address,address,uint256)": "infinite",
                "_approve(address,address,uint256)": "infinite",
                "_beforeTokenTransfer(address,address,uint256)": "infinite",
                "_burn(address,uint256)": "infinite",
                "_mint(address,uint256)": "infinite",
                "_transfer(address,address,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. The default value of {decimals} is 18. To select a different value for {decimals} you should overload it. All two of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `recipient` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(_msgSender(), recipient, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        _approve(_msgSender(), spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` and `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``sender``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        _transfer(sender, recipient, amount);\\n\\n        uint256 currentAllowance = _allowances[sender][_msgSender()];\\n        require(currentAllowance >= amount, \\\"ERC20: transfer amount exceeds allowance\\\");\\n        unchecked {\\n            _approve(sender, _msgSender(), currentAllowance - amount);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        uint256 currentAllowance = _allowances[_msgSender()][spender];\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(_msgSender(), spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `sender` to `recipient`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` cannot be the zero address.\\n     * - `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal virtual {\\n        require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(sender, recipient, amount);\\n\\n        uint256 senderBalance = _balances[sender];\\n        require(senderBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[sender] = senderBalance - amount;\\n        }\\n        _balances[recipient] += amount;\\n\\n        emit Transfer(sender, recipient, amount);\\n\\n        _afterTokenTransfer(sender, recipient, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        _balances[account] += amount;\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n        }\\n        _totalSupply -= amount;\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n}\\n\",\"keccak256\":\"0xb03df8481a954604ad0c9125680893b2e3f7ff770fe470e38b89ac61b84e8072\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 55,
                "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20",
                "label": "_balances",
                "offset": 0,
                "slot": "0",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 61,
                "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20",
                "label": "_allowances",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 63,
                "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20",
                "label": "_totalSupply",
                "offset": 0,
                "slot": "2",
                "type": "t_uint256"
              },
              {
                "astId": 65,
                "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20",
                "label": "_name",
                "offset": 0,
                "slot": "3",
                "type": "t_string_storage"
              },
              {
                "astId": 67,
                "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20",
                "label": "_symbol",
                "offset": 0,
                "slot": "4",
                "type": "t_string_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/token/ERC20/IERC20.sol": {
        "IERC20": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "details": "Interface of the ERC20 standard as defined in the EIP.",
            "events": {
              "Approval(address,address,uint256)": {
                "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."
              },
              "Transfer(address,address,uint256)": {
                "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."
              }
            },
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "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."
              },
              "approve(address,uint256)": {
                "details": "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."
              },
              "balanceOf(address)": {
                "details": "Returns the amount of tokens owned by `account`."
              },
              "totalSupply()": {
                "details": "Returns the amount of tokens in existence."
              },
              "transfer(address,uint256)": {
                "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
              },
              "transferFrom(address,address,uint256)": {
                "details": "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."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"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.\"},\"approve(address,uint256)\":{\"details\":\"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.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
        "IERC20Metadata": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "details": "Interface for the optional metadata functions from the ERC20 standard. _Available since v4.1._",
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "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."
              },
              "approve(address,uint256)": {
                "details": "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."
              },
              "balanceOf(address)": {
                "details": "Returns the amount of tokens owned by `account`."
              },
              "decimals()": {
                "details": "Returns the decimals places of the token."
              },
              "name()": {
                "details": "Returns the name of the token."
              },
              "symbol()": {
                "details": "Returns the symbol of the token."
              },
              "totalSupply()": {
                "details": "Returns the amount of tokens in existence."
              },
              "transfer(address,uint256)": {
                "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
              },
              "transferFrom(address,address,uint256)": {
                "details": "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."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard. _Available since v4.1._\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"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.\"},\"approve(address,uint256)\":{\"details\":\"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.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
        "SafeERC20": {
          "abi": [],
          "devdoc": {
            "details": "Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.",
            "kind": "dev",
            "methods": {},
            "title": "SafeERC20",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cca54b3cb7de4aa30a3c5eeaab39f751ed1bd2a2736a1a98fcfdaa29d802aaf864736f6c63430008070033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCC 0xA5 0x4B EXTCODECOPY 0xB7 0xDE 0x4A LOG3 EXP EXTCODECOPY 0x5E 0xEA 0xAB CODECOPY 0xF7 MLOAD 0xED SHL 0xD2 LOG2 PUSH20 0x6A1A98FCFDAA29D802AAF864736F6C6343000807 STOP CALLER ",
              "sourceMap": "578:3270:4:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;578:3270:4;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cca54b3cb7de4aa30a3c5eeaab39f751ed1bd2a2736a1a98fcfdaa29d802aaf864736f6c63430008070033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCC 0xA5 0x4B EXTCODECOPY 0xB7 0xDE 0x4A LOG3 EXP EXTCODECOPY 0x5E 0xEA 0xAB CODECOPY 0xF7 MLOAD 0xED SHL 0xD2 LOG2 PUSH20 0x6A1A98FCFDAA29D802AAF864736F6C6343000807 STOP CALLER ",
              "sourceMap": "578:3270:4:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              },
              "internal": {
                "_callOptionalReturn(contract IERC20,bytes memory)": "infinite",
                "safeApprove(contract IERC20,address,uint256)": "infinite",
                "safeDecreaseAllowance(contract IERC20,address,uint256)": "infinite",
                "safeIncreaseAllowance(contract IERC20,address,uint256)": "infinite",
                "safeTransfer(contract IERC20,address,uint256)": "infinite",
                "safeTransferFrom(contract IERC20,address,address,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "Address": {
          "abi": [],
          "devdoc": {
            "details": "Collection of functions related to the address type",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205cf8c2604750646d02652a102d1783280285fc6e3824590001c9d1485dc7878d64736f6c63430008070033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5C 0xF8 0xC2 PUSH1 0x47 POP PUSH5 0x6D02652A10 0x2D OR DUP4 0x28 MUL DUP6 0xFC PUSH15 0x3824590001C9D1485DC7878D64736F PUSH13 0x63430008070033000000000000 ",
              "sourceMap": "126:7729:5:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;126:7729:5;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205cf8c2604750646d02652a102d1783280285fc6e3824590001c9d1485dc7878d64736f6c63430008070033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5C 0xF8 0xC2 PUSH1 0x47 POP PUSH5 0x6D02652A10 0x2D OR DUP4 0x28 MUL DUP6 0xFC PUSH15 0x3824590001C9D1485DC7878D64736F PUSH13 0x63430008070033000000000000 ",
              "sourceMap": "126:7729:5:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              },
              "internal": {
                "functionCall(address,bytes memory)": "infinite",
                "functionCall(address,bytes memory,string memory)": "infinite",
                "functionCallWithValue(address,bytes memory,uint256)": "infinite",
                "functionCallWithValue(address,bytes memory,uint256,string memory)": "infinite",
                "functionDelegateCall(address,bytes memory)": "infinite",
                "functionDelegateCall(address,bytes memory,string memory)": "infinite",
                "functionStaticCall(address,bytes memory)": "infinite",
                "functionStaticCall(address,bytes memory,string memory)": "infinite",
                "isContract(address)": "infinite",
                "sendValue(address payable,uint256)": "infinite",
                "verifyCallResult(bool,bytes memory,string memory)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "Context": {
          "abi": [],
          "devdoc": {
            "details": "Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "Math": {
          "abi": [],
          "devdoc": {
            "details": "Standard math utilities missing in the Solidity language.",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220dee1a11f8d7b8a7d76ea3d4f0273066c7e64bbeae635f662a44b2e725522d6ce64736f6c63430008070033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE 0xE1 LOG1 0x1F DUP14 PUSH28 0x8A7D76EA3D4F0273066C7E64BBEAE635F662A44B2E725522D6CE6473 PUSH16 0x6C634300080700330000000000000000 ",
              "sourceMap": "132:1024:7:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;132:1024:7;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220dee1a11f8d7b8a7d76ea3d4f0273066c7e64bbeae635f662a44b2e725522d6ce64736f6c63430008070033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE 0xE1 LOG1 0x1F DUP14 PUSH28 0x8A7D76EA3D4F0273066C7E64BBEAE635F662A44B2E725522D6CE6473 PUSH16 0x6C634300080700330000000000000000 ",
              "sourceMap": "132:1024:7:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              },
              "internal": {
                "average(uint256,uint256)": "infinite",
                "ceilDiv(uint256,uint256)": "infinite",
                "max(uint256,uint256)": "infinite",
                "min(uint256,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@openzeppelin/contracts/utils/structs/EnumerableSet.sol": {
        "EnumerableSet": {
          "abi": [],
          "devdoc": {
            "details": "Library for managing https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ``` contract Example {     // Add the library methods     using EnumerableSet for EnumerableSet.AddressSet;     // Declare a set state variable     EnumerableSet.AddressSet private mySet; } ``` As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) and `uint256` (`UintSet`) are supported.",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f07fc7219bc3b952b058bb304a9c8e7d757b9a3f2618aa99169cd27c14050f4f64736f6c63430008070033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CREATE PUSH32 0xC7219BC3B952B058BB304A9C8E7D757B9A3F2618AA99169CD27C14050F4F6473 PUSH16 0x6C634300080700330000000000000000 ",
              "sourceMap": "745:11368:8:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;745:11368:8;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f07fc7219bc3b952b058bb304a9c8e7d757b9a3f2618aa99169cd27c14050f4f64736f6c63430008070033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CREATE PUSH32 0xC7219BC3B952B058BB304A9C8E7D757B9A3F2618AA99169CD27C14050F4F6473 PUSH16 0x6C634300080700330000000000000000 ",
              "sourceMap": "745:11368:8:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              },
              "internal": {
                "_add(struct EnumerableSet.Set storage pointer,bytes32)": "infinite",
                "_at(struct EnumerableSet.Set storage pointer,uint256)": "infinite",
                "_contains(struct EnumerableSet.Set storage pointer,bytes32)": "infinite",
                "_length(struct EnumerableSet.Set storage pointer)": "infinite",
                "_remove(struct EnumerableSet.Set storage pointer,bytes32)": "infinite",
                "_values(struct EnumerableSet.Set storage pointer)": "infinite",
                "add(struct EnumerableSet.AddressSet storage pointer,address)": "infinite",
                "add(struct EnumerableSet.Bytes32Set storage pointer,bytes32)": "infinite",
                "add(struct EnumerableSet.UintSet storage pointer,uint256)": "infinite",
                "at(struct EnumerableSet.AddressSet storage pointer,uint256)": "infinite",
                "at(struct EnumerableSet.Bytes32Set storage pointer,uint256)": "infinite",
                "at(struct EnumerableSet.UintSet storage pointer,uint256)": "infinite",
                "contains(struct EnumerableSet.AddressSet storage pointer,address)": "infinite",
                "contains(struct EnumerableSet.Bytes32Set storage pointer,bytes32)": "infinite",
                "contains(struct EnumerableSet.UintSet storage pointer,uint256)": "infinite",
                "length(struct EnumerableSet.AddressSet storage pointer)": "infinite",
                "length(struct EnumerableSet.Bytes32Set storage pointer)": "infinite",
                "length(struct EnumerableSet.UintSet storage pointer)": "infinite",
                "remove(struct EnumerableSet.AddressSet storage pointer,address)": "infinite",
                "remove(struct EnumerableSet.Bytes32Set storage pointer,bytes32)": "infinite",
                "remove(struct EnumerableSet.UintSet storage pointer,uint256)": "infinite",
                "values(struct EnumerableSet.AddressSet storage pointer)": "infinite",
                "values(struct EnumerableSet.Bytes32Set storage pointer)": "infinite",
                "values(struct EnumerableSet.UintSet storage pointer)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ``` contract Example {     // Add the library methods     using EnumerableSet for EnumerableSet.AddressSet;     // Declare a set state variable     EnumerableSet.AddressSet private mySet; } ``` As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) and `uint256` (`UintSet`) are supported.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":\"EnumerableSet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "@uniswap/v3-core/contracts/interfaces/IERC20Minimal.sol": {
        "IERC20Minimal": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "Approval(address,address,uint256)": {
                "params": {
                  "owner": "The account that approved spending of its tokens",
                  "spender": "The account for which the spending allowance was modified",
                  "value": "The new allowance from the owner to the spender"
                }
              },
              "Transfer(address,address,uint256)": {
                "params": {
                  "from": "The account from which the tokens were sent, i.e. the balance decreased",
                  "to": "The account to which the tokens were sent, i.e. the balance increased",
                  "value": "The amount of tokens that were transferred"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "params": {
                  "owner": "The account of the token owner",
                  "spender": "The account of the token spender"
                },
                "returns": {
                  "_0": "The current allowance granted by `owner` to `spender`"
                }
              },
              "approve(address,uint256)": {
                "params": {
                  "amount": "The amount of tokens allowed to be used by `spender`",
                  "spender": "The account which will be allowed to spend a given amount of the owners tokens"
                },
                "returns": {
                  "_0": "Returns true for a successful approval, false for unsuccessful"
                }
              },
              "balanceOf(address)": {
                "params": {
                  "account": "The account for which to look up the number of tokens it has, i.e. its balance"
                },
                "returns": {
                  "_0": "The number of tokens held by the account"
                }
              },
              "transfer(address,uint256)": {
                "params": {
                  "amount": "The number of tokens to send from the sender to the recipient",
                  "recipient": "The account that will receive the amount transferred"
                },
                "returns": {
                  "_0": "Returns true for a successful transfer, false for an unsuccessful transfer"
                }
              },
              "transferFrom(address,address,uint256)": {
                "params": {
                  "amount": "The amount of the transfer",
                  "recipient": "The recipient of the transfer",
                  "sender": "The account from which the transfer will be initiated"
                },
                "returns": {
                  "_0": "Returns true for a successful transfer, false for unsuccessful"
                }
              }
            },
            "title": "Minimal ERC20 interface for Uniswap",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"params\":{\"owner\":\"The account that approved spending of its tokens\",\"spender\":\"The account for which the spending allowance was modified\",\"value\":\"The new allowance from the owner to the spender\"}},\"Transfer(address,address,uint256)\":{\"params\":{\"from\":\"The account from which the tokens were sent, i.e. the balance decreased\",\"to\":\"The account to which the tokens were sent, i.e. the balance increased\",\"value\":\"The amount of tokens that were transferred\"}}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"params\":{\"owner\":\"The account of the token owner\",\"spender\":\"The account of the token spender\"},\"returns\":{\"_0\":\"The current allowance granted by `owner` to `spender`\"}},\"approve(address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens allowed to be used by `spender`\",\"spender\":\"The account which will be allowed to spend a given amount of the owners tokens\"},\"returns\":{\"_0\":\"Returns true for a successful approval, false for unsuccessful\"}},\"balanceOf(address)\":{\"params\":{\"account\":\"The account for which to look up the number of tokens it has, i.e. its balance\"},\"returns\":{\"_0\":\"The number of tokens held by the account\"}},\"transfer(address,uint256)\":{\"params\":{\"amount\":\"The number of tokens to send from the sender to the recipient\",\"recipient\":\"The account that will receive the amount transferred\"},\"returns\":{\"_0\":\"Returns true for a successful transfer, false for an unsuccessful transfer\"}},\"transferFrom(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the transfer\",\"recipient\":\"The recipient of the transfer\",\"sender\":\"The account from which the transfer will be initiated\"},\"returns\":{\"_0\":\"Returns true for a successful transfer, false for unsuccessful\"}}},\"title\":\"Minimal ERC20 interface for Uniswap\",\"version\":1},\"userdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"notice\":\"Event emitted when the approval amount for the spender of a given owner's tokens changes.\"},\"Transfer(address,address,uint256)\":{\"notice\":\"Event emitted when tokens are transferred from one address to another, either via `#transfer` or `#transferFrom`.\"}},\"kind\":\"user\",\"methods\":{\"allowance(address,address)\":{\"notice\":\"Returns the current allowance given to a spender by an owner\"},\"approve(address,uint256)\":{\"notice\":\"Sets the allowance of a spender from the `msg.sender` to the value `amount`\"},\"balanceOf(address)\":{\"notice\":\"Returns the balance of a token\"},\"transfer(address,uint256)\":{\"notice\":\"Transfers the amount of token from the `msg.sender` to the recipient\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Transfers `amount` tokens from `sender` to `recipient` up to the allowance given to the `msg.sender`\"}},\"notice\":\"Contains a subset of the full ERC20 interface that is used in Uniswap V3\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/IERC20Minimal.sol\":\"IERC20Minimal\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/IERC20Minimal.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Minimal ERC20 interface for Uniswap\\n/// @notice Contains a subset of the full ERC20 interface that is used in Uniswap V3\\ninterface IERC20Minimal {\\n    /// @notice Returns the balance of a token\\n    /// @param account The account for which to look up the number of tokens it has, i.e. its balance\\n    /// @return The number of tokens held by the account\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /// @notice Transfers the amount of token from the `msg.sender` to the recipient\\n    /// @param recipient The account that will receive the amount transferred\\n    /// @param amount The number of tokens to send from the sender to the recipient\\n    /// @return Returns true for a successful transfer, false for an unsuccessful transfer\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /// @notice Returns the current allowance given to a spender by an owner\\n    /// @param owner The account of the token owner\\n    /// @param spender The account of the token spender\\n    /// @return The current allowance granted by `owner` to `spender`\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /// @notice Sets the allowance of a spender from the `msg.sender` to the value `amount`\\n    /// @param spender The account which will be allowed to spend a given amount of the owners tokens\\n    /// @param amount The amount of tokens allowed to be used by `spender`\\n    /// @return Returns true for a successful approval, false for unsuccessful\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /// @notice Transfers `amount` tokens from `sender` to `recipient` up to the allowance given to the `msg.sender`\\n    /// @param sender The account from which the transfer will be initiated\\n    /// @param recipient The recipient of the transfer\\n    /// @param amount The amount of the transfer\\n    /// @return Returns true for a successful transfer, false for unsuccessful\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /// @notice Event emitted when tokens are transferred from one address to another, either via `#transfer` or `#transferFrom`.\\n    /// @param from The account from which the tokens were sent, i.e. the balance decreased\\n    /// @param to The account to which the tokens were sent, i.e. the balance increased\\n    /// @param value The amount of tokens that were transferred\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /// @notice Event emitted when the approval amount for the spender of a given owner's tokens changes.\\n    /// @param owner The account that approved spending of its tokens\\n    /// @param spender The account for which the spending allowance was modified\\n    /// @param value The new allowance from the owner to the spender\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbbb4fbd3cf2221bba3218d27871f61f2852ff296cbe81946b935481ff181f735\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "events": {
              "Approval(address,address,uint256)": {
                "notice": "Event emitted when the approval amount for the spender of a given owner's tokens changes."
              },
              "Transfer(address,address,uint256)": {
                "notice": "Event emitted when tokens are transferred from one address to another, either via `#transfer` or `#transferFrom`."
              }
            },
            "kind": "user",
            "methods": {
              "allowance(address,address)": {
                "notice": "Returns the current allowance given to a spender by an owner"
              },
              "approve(address,uint256)": {
                "notice": "Sets the allowance of a spender from the `msg.sender` to the value `amount`"
              },
              "balanceOf(address)": {
                "notice": "Returns the balance of a token"
              },
              "transfer(address,uint256)": {
                "notice": "Transfers the amount of token from the `msg.sender` to the recipient"
              },
              "transferFrom(address,address,uint256)": {
                "notice": "Transfers `amount` tokens from `sender` to `recipient` up to the allowance given to the `msg.sender`"
              }
            },
            "notice": "Contains a subset of the full ERC20 interface that is used in Uniswap V3",
            "version": 1
          }
        }
      },
      "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol": {
        "IUniswapV3Pool": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "Burn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "name": "Collect",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "name": "CollectProtocol",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "paid0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "paid1",
                  "type": "uint256"
                }
              ],
              "name": "Flash",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint16",
                  "name": "observationCardinalityNextOld",
                  "type": "uint16"
                },
                {
                  "indexed": false,
                  "internalType": "uint16",
                  "name": "observationCardinalityNextNew",
                  "type": "uint16"
                }
              ],
              "name": "IncreaseObservationCardinalityNext",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "indexed": false,
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "Initialize",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "Mint",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol0Old",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol1Old",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol0New",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol1New",
                  "type": "uint8"
                }
              ],
              "name": "SetFeeProtocol",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "amount0",
                  "type": "int256"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "amount1",
                  "type": "int256"
                },
                {
                  "indexed": false,
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "Swap",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                }
              ],
              "name": "burn",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount0Requested",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1Requested",
                  "type": "uint128"
                }
              ],
              "name": "collect",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint128",
                  "name": "amount0Requested",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1Requested",
                  "type": "uint128"
                }
              ],
              "name": "collectProtocol",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint24",
                  "name": "",
                  "type": "uint24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "feeGrowthGlobal0X128",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "feeGrowthGlobal1X128",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "flash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint16",
                  "name": "observationCardinalityNext",
                  "type": "uint16"
                }
              ],
              "name": "increaseObservationCardinalityNext",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                }
              ],
              "name": "initialize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidity",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "maxLiquidityPerTick",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "observations",
              "outputs": [
                {
                  "internalType": "uint32",
                  "name": "blockTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "int56",
                  "name": "tickCumulative",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityCumulativeX128",
                  "type": "uint160"
                },
                {
                  "internalType": "bool",
                  "name": "initialized",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint32[]",
                  "name": "secondsAgos",
                  "type": "uint32[]"
                }
              ],
              "name": "observe",
              "outputs": [
                {
                  "internalType": "int56[]",
                  "name": "tickCumulatives",
                  "type": "int56[]"
                },
                {
                  "internalType": "uint160[]",
                  "name": "secondsPerLiquidityCumulativeX128s",
                  "type": "uint160[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "key",
                  "type": "bytes32"
                }
              ],
              "name": "positions",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "_liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside0LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside1LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "protocolFees",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "token0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "token1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint8",
                  "name": "feeProtocol0",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "feeProtocol1",
                  "type": "uint8"
                }
              ],
              "name": "setFeeProtocol",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "slot0",
              "outputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                },
                {
                  "internalType": "uint16",
                  "name": "observationIndex",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "observationCardinality",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "observationCardinalityNext",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "feeProtocol",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "unlocked",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                }
              ],
              "name": "snapshotCumulativesInside",
              "outputs": [
                {
                  "internalType": "int56",
                  "name": "tickCumulativeInside",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityInsideX128",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsInside",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "zeroForOne",
                  "type": "bool"
                },
                {
                  "internalType": "int256",
                  "name": "amountSpecified",
                  "type": "int256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "swap",
              "outputs": [
                {
                  "internalType": "int256",
                  "name": "amount0",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1",
                  "type": "int256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int16",
                  "name": "wordPosition",
                  "type": "int16"
                }
              ],
              "name": "tickBitmap",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickSpacing",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "ticks",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidityGross",
                  "type": "uint128"
                },
                {
                  "internalType": "int128",
                  "name": "liquidityNet",
                  "type": "int128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthOutside0X128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthOutside1X128",
                  "type": "uint256"
                },
                {
                  "internalType": "int56",
                  "name": "tickCumulativeOutside",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityOutsideX128",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsOutside",
                  "type": "uint32"
                },
                {
                  "internalType": "bool",
                  "name": "initialized",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token0",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "details": "The pool interface is broken up into many smaller pieces",
            "kind": "dev",
            "methods": {
              "burn(int24,int24,uint128)": {
                "details": "Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0Fees must be collected separately via a call to #collect",
                "params": {
                  "amount": "How much liquidity to burn",
                  "tickLower": "The lower tick of the position for which to burn liquidity",
                  "tickUpper": "The upper tick of the position for which to burn liquidity"
                },
                "returns": {
                  "amount0": "The amount of token0 sent to the recipient",
                  "amount1": "The amount of token1 sent to the recipient"
                }
              },
              "collect(address,int24,int24,uint128,uint128)": {
                "details": "Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.",
                "params": {
                  "amount0Requested": "How much token0 should be withdrawn from the fees owed",
                  "amount1Requested": "How much token1 should be withdrawn from the fees owed",
                  "recipient": "The address which should receive the fees collected",
                  "tickLower": "The lower tick of the position for which to collect fees",
                  "tickUpper": "The upper tick of the position for which to collect fees"
                },
                "returns": {
                  "amount0": "The amount of fees collected in token0",
                  "amount1": "The amount of fees collected in token1"
                }
              },
              "collectProtocol(address,uint128,uint128)": {
                "params": {
                  "amount0Requested": "The maximum amount of token0 to send, can be 0 to collect fees in only token1",
                  "amount1Requested": "The maximum amount of token1 to send, can be 0 to collect fees in only token0",
                  "recipient": "The address to which collected protocol fees should be sent"
                },
                "returns": {
                  "amount0": "The protocol fee collected in token0",
                  "amount1": "The protocol fee collected in token1"
                }
              },
              "factory()": {
                "returns": {
                  "_0": "The contract address"
                }
              },
              "fee()": {
                "returns": {
                  "_0": "The fee"
                }
              },
              "feeGrowthGlobal0X128()": {
                "details": "This value can overflow the uint256"
              },
              "feeGrowthGlobal1X128()": {
                "details": "This value can overflow the uint256"
              },
              "flash(address,uint256,uint256,bytes)": {
                "details": "The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallbackCan be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling with 0 amount{0,1} and sending the donation amount(s) from the callback",
                "params": {
                  "amount0": "The amount of token0 to send",
                  "amount1": "The amount of token1 to send",
                  "data": "Any data to be passed through to the callback",
                  "recipient": "The address which will receive the token0 and token1 amounts"
                }
              },
              "increaseObservationCardinalityNext(uint16)": {
                "details": "This method is no-op if the pool already has an observationCardinalityNext greater than or equal to the input observationCardinalityNext.",
                "params": {
                  "observationCardinalityNext": "The desired minimum number of observations for the pool to store"
                }
              },
              "initialize(uint160)": {
                "details": "Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value",
                "params": {
                  "sqrtPriceX96": "the initial sqrt price of the pool as a Q64.96"
                }
              },
              "liquidity()": {
                "details": "This value has no relationship to the total liquidity across all ticks"
              },
              "maxLiquidityPerTick()": {
                "details": "This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool",
                "returns": {
                  "_0": "The max amount of liquidity per tick"
                }
              },
              "mint(address,int24,int24,uint128,bytes)": {
                "details": "The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends on tickLower, tickUpper, the amount of liquidity, and the current price.",
                "params": {
                  "amount": "The amount of liquidity to mint",
                  "data": "Any data that should be passed through to the callback",
                  "recipient": "The address for which the liquidity will be created",
                  "tickLower": "The lower tick of the position in which to add liquidity",
                  "tickUpper": "The upper tick of the position in which to add liquidity"
                },
                "returns": {
                  "amount0": "The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback",
                  "amount1": "The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback"
                }
              },
              "observations(uint256)": {
                "details": "You most likely want to use #observe() instead of this method to get an observation as of some amount of time ago, rather than at a specific index in the array.",
                "params": {
                  "index": "The element of the observations array to fetch"
                },
                "returns": {
                  "blockTimestamp": "The timestamp of the observation, Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, Returns initialized whether the observation has been initialized and the values are safe to use"
                }
              },
              "observe(uint32[])": {
                "details": "To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, you must call it with secondsAgos = [3600, 0].The time weighted average tick represents the geometric time weighted average price of the pool, in log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.",
                "params": {
                  "secondsAgos": "From how long ago each cumulative tick and liquidity value should be returned"
                },
                "returns": {
                  "secondsPerLiquidityCumulativeX128s": "Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block timestamp",
                  "tickCumulatives": "Cumulative tick values as of each `secondsAgos` from the current block timestamp"
                }
              },
              "positions(bytes32)": {
                "params": {
                  "key": "The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper"
                },
                "returns": {
                  "_liquidity": "The amount of liquidity in the position, Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke"
                }
              },
              "protocolFees()": {
                "details": "Protocol fees will never exceed uint128 max in either token"
              },
              "setFeeProtocol(uint8,uint8)": {
                "params": {
                  "feeProtocol0": "new protocol fee for token0 of the pool",
                  "feeProtocol1": "new protocol fee for token1 of the pool"
                }
              },
              "slot0()": {
                "returns": {
                  "sqrtPriceX96": "The current price of the pool as a sqrt(token1/token0) Q64.96 value tick The current tick of the pool, i.e. according to the last tick transition that was run. This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick boundary. observationIndex The index of the last oracle observation that was written, observationCardinality The current maximum number of observations stored in the pool, observationCardinalityNext The next maximum number of observations, to be updated when the observation. feeProtocol The protocol fee for both tokens of the pool. Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. unlocked Whether the pool is currently locked to reentrancy"
                }
              },
              "snapshotCumulativesInside(int24,int24)": {
                "details": "Snapshots must only be compared to other snapshots, taken over a period for which a position existed. I.e., snapshots cannot be compared if a position is not held for the entire period between when the first snapshot is taken and the second snapshot is taken.",
                "params": {
                  "tickLower": "The lower tick of the range",
                  "tickUpper": "The upper tick of the range"
                },
                "returns": {
                  "secondsInside": "The snapshot of seconds per liquidity for the range",
                  "secondsPerLiquidityInsideX128": "The snapshot of seconds per liquidity for the range",
                  "tickCumulativeInside": "The snapshot of the tick accumulator for the range"
                }
              },
              "swap(address,bool,int256,uint160,bytes)": {
                "details": "The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback",
                "params": {
                  "amountSpecified": "The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)",
                  "data": "Any data to be passed through to the callback",
                  "recipient": "The address to receive the output of the swap",
                  "sqrtPriceLimitX96": "The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap",
                  "zeroForOne": "The direction of the swap, true for token0 to token1, false for token1 to token0"
                },
                "returns": {
                  "amount0": "The delta of the balance of token0 of the pool, exact when negative, minimum when positive",
                  "amount1": "The delta of the balance of token1 of the pool, exact when negative, minimum when positive"
                }
              },
              "tickSpacing()": {
                "details": "Ticks can only be used at multiples of this value, minimum of 1 and always positive e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... This value is an int24 to avoid casting even though it is always positive.",
                "returns": {
                  "_0": "The tick spacing"
                }
              },
              "ticks(int24)": {
                "params": {
                  "tick": "The tick to look up"
                },
                "returns": {
                  "liquidityGross": "the total amount of position liquidity that uses the pool either as tick lower or tick upper, liquidityNet how much liquidity changes when the pool price crosses the tick, feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, secondsOutside the seconds spent on the other side of the tick from the current tick, initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. In addition, these values are only relative and must be used only in comparison to previous snapshots for a specific position."
                }
              },
              "token0()": {
                "returns": {
                  "_0": "The token contract address"
                }
              },
              "token1()": {
                "returns": {
                  "_0": "The token contract address"
                }
              }
            },
            "title": "The interface for a Uniswap V3 Pool",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "burn(int24,int24,uint128)": "a34123a7",
              "collect(address,int24,int24,uint128,uint128)": "4f1eb3d8",
              "collectProtocol(address,uint128,uint128)": "85b66729",
              "factory()": "c45a0155",
              "fee()": "ddca3f43",
              "feeGrowthGlobal0X128()": "f3058399",
              "feeGrowthGlobal1X128()": "46141319",
              "flash(address,uint256,uint256,bytes)": "490e6cbc",
              "increaseObservationCardinalityNext(uint16)": "32148f67",
              "initialize(uint160)": "f637731d",
              "liquidity()": "1a686502",
              "maxLiquidityPerTick()": "70cf754a",
              "mint(address,int24,int24,uint128,bytes)": "3c8a7d8d",
              "observations(uint256)": "252c09d7",
              "observe(uint32[])": "883bdbfd",
              "positions(bytes32)": "514ea4bf",
              "protocolFees()": "1ad8b03b",
              "setFeeProtocol(uint8,uint8)": "8206a4d1",
              "slot0()": "3850c7bd",
              "snapshotCumulativesInside(int24,int24)": "a38807f2",
              "swap(address,bool,int256,uint160,bytes)": "128acb08",
              "tickBitmap(int16)": "5339c296",
              "tickSpacing()": "d0c93a7c",
              "ticks(int24)": "f30dba93",
              "token0()": "0dfe1681",
              "token1()": "d21220a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"Collect\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"CollectProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid1\",\"type\":\"uint256\"}],\"name\":\"Flash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextOld\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextNew\",\"type\":\"uint16\"}],\"name\":\"IncreaseObservationCardinalityNext\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Initialize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0New\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1New\",\"type\":\"uint8\"}],\"name\":\"SetFeeProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collectProtocol\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal0X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal1X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"flash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"}],\"name\":\"increaseObservationCardinalityNext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidity\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLiquidityPerTick\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"observations\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"blockTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"int56\",\"name\":\"tickCumulative\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityCumulativeX128\",\"type\":\"uint160\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"secondsAgos\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56[]\",\"name\":\"tickCumulatives\",\"type\":\"int56[]\"},{\"internalType\":\"uint160[]\",\"name\":\"secondsPerLiquidityCumulativeX128s\",\"type\":\"uint160[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"positions\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"_liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFees\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"token0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"token1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"feeProtocol0\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol1\",\"type\":\"uint8\"}],\"name\":\"setFeeProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slot0\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint16\",\"name\":\"observationIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinality\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"snapshotCumulativesInside\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"tickCumulativeInside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityInsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsInside\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int16\",\"name\":\"wordPosition\",\"type\":\"int16\"}],\"name\":\"tickBitmap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"ticks\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside0X128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside1X128\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"tickCumulativeOutside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityOutsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsOutside\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The pool interface is broken up into many smaller pieces\",\"kind\":\"dev\",\"methods\":{\"burn(int24,int24,uint128)\":{\"details\":\"Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0Fees must be collected separately via a call to #collect\",\"params\":{\"amount\":\"How much liquidity to burn\",\"tickLower\":\"The lower tick of the position for which to burn liquidity\",\"tickUpper\":\"The upper tick of the position for which to burn liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 sent to the recipient\",\"amount1\":\"The amount of token1 sent to the recipient\"}},\"collect(address,int24,int24,uint128,uint128)\":{\"details\":\"Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\",\"params\":{\"amount0Requested\":\"How much token0 should be withdrawn from the fees owed\",\"amount1Requested\":\"How much token1 should be withdrawn from the fees owed\",\"recipient\":\"The address which should receive the fees collected\",\"tickLower\":\"The lower tick of the position for which to collect fees\",\"tickUpper\":\"The upper tick of the position for which to collect fees\"},\"returns\":{\"amount0\":\"The amount of fees collected in token0\",\"amount1\":\"The amount of fees collected in token1\"}},\"collectProtocol(address,uint128,uint128)\":{\"params\":{\"amount0Requested\":\"The maximum amount of token0 to send, can be 0 to collect fees in only token1\",\"amount1Requested\":\"The maximum amount of token1 to send, can be 0 to collect fees in only token0\",\"recipient\":\"The address to which collected protocol fees should be sent\"},\"returns\":{\"amount0\":\"The protocol fee collected in token0\",\"amount1\":\"The protocol fee collected in token1\"}},\"factory()\":{\"returns\":{\"_0\":\"The contract address\"}},\"fee()\":{\"returns\":{\"_0\":\"The fee\"}},\"feeGrowthGlobal0X128()\":{\"details\":\"This value can overflow the uint256\"},\"feeGrowthGlobal1X128()\":{\"details\":\"This value can overflow the uint256\"},\"flash(address,uint256,uint256,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallbackCan be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling with 0 amount{0,1} and sending the donation amount(s) from the callback\",\"params\":{\"amount0\":\"The amount of token0 to send\",\"amount1\":\"The amount of token1 to send\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address which will receive the token0 and token1 amounts\"}},\"increaseObservationCardinalityNext(uint16)\":{\"details\":\"This method is no-op if the pool already has an observationCardinalityNext greater than or equal to the input observationCardinalityNext.\",\"params\":{\"observationCardinalityNext\":\"The desired minimum number of observations for the pool to store\"}},\"initialize(uint160)\":{\"details\":\"Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\",\"params\":{\"sqrtPriceX96\":\"the initial sqrt price of the pool as a Q64.96\"}},\"liquidity()\":{\"details\":\"This value has no relationship to the total liquidity across all ticks\"},\"maxLiquidityPerTick()\":{\"details\":\"This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\",\"returns\":{\"_0\":\"The max amount of liquidity per tick\"}},\"mint(address,int24,int24,uint128,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends on tickLower, tickUpper, the amount of liquidity, and the current price.\",\"params\":{\"amount\":\"The amount of liquidity to mint\",\"data\":\"Any data that should be passed through to the callback\",\"recipient\":\"The address for which the liquidity will be created\",\"tickLower\":\"The lower tick of the position in which to add liquidity\",\"tickUpper\":\"The upper tick of the position in which to add liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\",\"amount1\":\"The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\"}},\"observations(uint256)\":{\"details\":\"You most likely want to use #observe() instead of this method to get an observation as of some amount of time ago, rather than at a specific index in the array.\",\"params\":{\"index\":\"The element of the observations array to fetch\"},\"returns\":{\"blockTimestamp\":\"The timestamp of the observation, Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, Returns initialized whether the observation has been initialized and the values are safe to use\"}},\"observe(uint32[])\":{\"details\":\"To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, you must call it with secondsAgos = [3600, 0].The time weighted average tick represents the geometric time weighted average price of the pool, in log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\",\"params\":{\"secondsAgos\":\"From how long ago each cumulative tick and liquidity value should be returned\"},\"returns\":{\"secondsPerLiquidityCumulativeX128s\":\"Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block timestamp\",\"tickCumulatives\":\"Cumulative tick values as of each `secondsAgos` from the current block timestamp\"}},\"positions(bytes32)\":{\"params\":{\"key\":\"The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\"},\"returns\":{\"_liquidity\":\"The amount of liquidity in the position, Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\"}},\"protocolFees()\":{\"details\":\"Protocol fees will never exceed uint128 max in either token\"},\"setFeeProtocol(uint8,uint8)\":{\"params\":{\"feeProtocol0\":\"new protocol fee for token0 of the pool\",\"feeProtocol1\":\"new protocol fee for token1 of the pool\"}},\"slot0()\":{\"returns\":{\"sqrtPriceX96\":\"The current price of the pool as a sqrt(token1/token0) Q64.96 value tick The current tick of the pool, i.e. according to the last tick transition that was run. This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick boundary. observationIndex The index of the last oracle observation that was written, observationCardinality The current maximum number of observations stored in the pool, observationCardinalityNext The next maximum number of observations, to be updated when the observation. feeProtocol The protocol fee for both tokens of the pool. Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. unlocked Whether the pool is currently locked to reentrancy\"}},\"snapshotCumulativesInside(int24,int24)\":{\"details\":\"Snapshots must only be compared to other snapshots, taken over a period for which a position existed. I.e., snapshots cannot be compared if a position is not held for the entire period between when the first snapshot is taken and the second snapshot is taken.\",\"params\":{\"tickLower\":\"The lower tick of the range\",\"tickUpper\":\"The upper tick of the range\"},\"returns\":{\"secondsInside\":\"The snapshot of seconds per liquidity for the range\",\"secondsPerLiquidityInsideX128\":\"The snapshot of seconds per liquidity for the range\",\"tickCumulativeInside\":\"The snapshot of the tick accumulator for the range\"}},\"swap(address,bool,int256,uint160,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\",\"params\":{\"amountSpecified\":\"The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address to receive the output of the swap\",\"sqrtPriceLimitX96\":\"The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap\",\"zeroForOne\":\"The direction of the swap, true for token0 to token1, false for token1 to token0\"},\"returns\":{\"amount0\":\"The delta of the balance of token0 of the pool, exact when negative, minimum when positive\",\"amount1\":\"The delta of the balance of token1 of the pool, exact when negative, minimum when positive\"}},\"tickSpacing()\":{\"details\":\"Ticks can only be used at multiples of this value, minimum of 1 and always positive e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... This value is an int24 to avoid casting even though it is always positive.\",\"returns\":{\"_0\":\"The tick spacing\"}},\"ticks(int24)\":{\"params\":{\"tick\":\"The tick to look up\"},\"returns\":{\"liquidityGross\":\"the total amount of position liquidity that uses the pool either as tick lower or tick upper, liquidityNet how much liquidity changes when the pool price crosses the tick, feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, secondsOutside the seconds spent on the other side of the tick from the current tick, initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. In addition, these values are only relative and must be used only in comparison to previous snapshots for a specific position.\"}},\"token0()\":{\"returns\":{\"_0\":\"The token contract address\"}},\"token1()\":{\"returns\":{\"_0\":\"The token contract address\"}}},\"title\":\"The interface for a Uniswap V3 Pool\",\"version\":1},\"userdoc\":{\"events\":{\"Burn(address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when a position's liquidity is removed\"},\"Collect(address,address,int24,int24,uint128,uint128)\":{\"notice\":\"Emitted when fees are collected by the owner of a position\"},\"CollectProtocol(address,address,uint128,uint128)\":{\"notice\":\"Emitted when the collected protocol fees are withdrawn by the factory owner\"},\"Flash(address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted by the pool for any flashes of token0/token1\"},\"IncreaseObservationCardinalityNext(uint16,uint16)\":{\"notice\":\"Emitted by the pool for increases to the number of observations that can be stored\"},\"Initialize(uint160,int24)\":{\"notice\":\"Emitted exactly once by a pool when #initialize is first called on the pool\"},\"Mint(address,address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when liquidity is minted for a given position\"},\"SetFeeProtocol(uint8,uint8,uint8,uint8)\":{\"notice\":\"Emitted when the protocol fee is changed by the pool\"},\"Swap(address,address,int256,int256,uint160,uint128,int24)\":{\"notice\":\"Emitted by the pool for any swaps between token0 and token1\"}},\"kind\":\"user\",\"methods\":{\"burn(int24,int24,uint128)\":{\"notice\":\"Burn liquidity from the sender and account tokens owed for the liquidity to the position\"},\"collect(address,int24,int24,uint128,uint128)\":{\"notice\":\"Collects tokens owed to a position\"},\"collectProtocol(address,uint128,uint128)\":{\"notice\":\"Collect the protocol fee accrued to the pool\"},\"factory()\":{\"notice\":\"The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\"},\"fee()\":{\"notice\":\"The pool's fee in hundredths of a bip, i.e. 1e-6\"},\"feeGrowthGlobal0X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\"},\"feeGrowthGlobal1X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\"},\"flash(address,uint256,uint256,bytes)\":{\"notice\":\"Receive token0 and/or token1 and pay it back, plus a fee, in the callback\"},\"increaseObservationCardinalityNext(uint16)\":{\"notice\":\"Increase the maximum number of price and liquidity observations that this pool will store\"},\"initialize(uint160)\":{\"notice\":\"Sets the initial price for the pool\"},\"liquidity()\":{\"notice\":\"The currently in range liquidity available to the pool\"},\"maxLiquidityPerTick()\":{\"notice\":\"The maximum amount of position liquidity that can use any tick in the range\"},\"mint(address,int24,int24,uint128,bytes)\":{\"notice\":\"Adds liquidity for the given recipient/tickLower/tickUpper position\"},\"observations(uint256)\":{\"notice\":\"Returns data about a specific observation index\"},\"observe(uint32[])\":{\"notice\":\"Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\"},\"positions(bytes32)\":{\"notice\":\"Returns the information about a position by the position's key\"},\"protocolFees()\":{\"notice\":\"The amounts of token0 and token1 that are owed to the protocol\"},\"setFeeProtocol(uint8,uint8)\":{\"notice\":\"Set the denominator of the protocol's % share of the fees\"},\"slot0()\":{\"notice\":\"The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas when accessed externally.\"},\"snapshotCumulativesInside(int24,int24)\":{\"notice\":\"Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\"},\"swap(address,bool,int256,uint160,bytes)\":{\"notice\":\"Swap token0 for token1, or token1 for token0\"},\"tickBitmap(int16)\":{\"notice\":\"Returns 256 packed tick initialized boolean values. See TickBitmap for more information\"},\"tickSpacing()\":{\"notice\":\"The pool tick spacing\"},\"ticks(int24)\":{\"notice\":\"Look up information about a specific tick in the pool\"},\"token0()\":{\"notice\":\"The first of the two tokens of the pool, sorted by address\"},\"token1()\":{\"notice\":\"The second of the two tokens of the pool, sorted by address\"}},\"notice\":\"A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform to the ERC20 specification\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":\"IUniswapV3Pool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\nimport './pool/IUniswapV3PoolImmutables.sol';\\nimport './pool/IUniswapV3PoolState.sol';\\nimport './pool/IUniswapV3PoolDerivedState.sol';\\nimport './pool/IUniswapV3PoolActions.sol';\\nimport './pool/IUniswapV3PoolOwnerActions.sol';\\nimport './pool/IUniswapV3PoolEvents.sol';\\n\\n/// @title The interface for a Uniswap V3 Pool\\n/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform\\n/// to the ERC20 specification\\n/// @dev The pool interface is broken up into many smaller pieces\\ninterface IUniswapV3Pool is\\n    IUniswapV3PoolImmutables,\\n    IUniswapV3PoolState,\\n    IUniswapV3PoolDerivedState,\\n    IUniswapV3PoolActions,\\n    IUniswapV3PoolOwnerActions,\\n    IUniswapV3PoolEvents\\n{\\n\\n}\\n\",\"keccak256\":\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissionless pool actions\\n/// @notice Contains pool methods that can be called by anyone\\ninterface IUniswapV3PoolActions {\\n    /// @notice Sets the initial price for the pool\\n    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\\n    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96\\n    function initialize(uint160 sqrtPriceX96) external;\\n\\n    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback\\n    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\\n    /// on tickLower, tickUpper, the amount of liquidity, and the current price.\\n    /// @param recipient The address for which the liquidity will be created\\n    /// @param tickLower The lower tick of the position in which to add liquidity\\n    /// @param tickUpper The upper tick of the position in which to add liquidity\\n    /// @param amount The amount of liquidity to mint\\n    /// @param data Any data that should be passed through to the callback\\n    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    function mint(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount,\\n        bytes calldata data\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Collects tokens owed to a position\\n    /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\\n    /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\\n    /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\\n    /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\\n    /// @param recipient The address which should receive the fees collected\\n    /// @param tickLower The lower tick of the position for which to collect fees\\n    /// @param tickUpper The upper tick of the position for which to collect fees\\n    /// @param amount0Requested How much token0 should be withdrawn from the fees owed\\n    /// @param amount1Requested How much token1 should be withdrawn from the fees owed\\n    /// @return amount0 The amount of fees collected in token0\\n    /// @return amount1 The amount of fees collected in token1\\n    function collect(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n\\n    /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\\n    /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\\n    /// @dev Fees must be collected separately via a call to #collect\\n    /// @param tickLower The lower tick of the position for which to burn liquidity\\n    /// @param tickUpper The upper tick of the position for which to burn liquidity\\n    /// @param amount How much liquidity to burn\\n    /// @return amount0 The amount of token0 sent to the recipient\\n    /// @return amount1 The amount of token1 sent to the recipient\\n    function burn(\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Swap token0 for token1, or token1 for token0\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\\n    /// @param recipient The address to receive the output of the swap\\n    /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\\n    /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\\n    /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\\n    /// value after the swap. If one for zero, the price cannot be greater than this value after the swap\\n    /// @param data Any data to be passed through to the callback\\n    /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\\n    /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive\\n    function swap(\\n        address recipient,\\n        bool zeroForOne,\\n        int256 amountSpecified,\\n        uint160 sqrtPriceLimitX96,\\n        bytes calldata data\\n    ) external returns (int256 amount0, int256 amount1);\\n\\n    /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback\\n    /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\\n    /// with 0 amount{0,1} and sending the donation amount(s) from the callback\\n    /// @param recipient The address which will receive the token0 and token1 amounts\\n    /// @param amount0 The amount of token0 to send\\n    /// @param amount1 The amount of token1 to send\\n    /// @param data Any data to be passed through to the callback\\n    function flash(\\n        address recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        bytes calldata data\\n    ) external;\\n\\n    /// @notice Increase the maximum number of price and liquidity observations that this pool will store\\n    /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\\n    /// the input observationCardinalityNext.\\n    /// @param observationCardinalityNext The desired minimum number of observations for the pool to store\\n    function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;\\n}\\n\",\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that is not stored\\n/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the\\n/// blockchain. The functions here may have variable gas costs.\\ninterface IUniswapV3PoolDerivedState {\\n    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\\n    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\\n    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\\n    /// you must call it with secondsAgos = [3600, 0].\\n    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\\n    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\\n    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\\n    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\\n    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\\n    /// timestamp\\n    function observe(uint32[] calldata secondsAgos)\\n        external\\n        view\\n        returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\\n\\n    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\\n    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\\n    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\\n    /// snapshot is taken and the second snapshot is taken.\\n    /// @param tickLower The lower tick of the range\\n    /// @param tickUpper The upper tick of the range\\n    /// @return tickCumulativeInside The snapshot of the tick accumulator for the range\\n    /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\\n    /// @return secondsInside The snapshot of seconds per liquidity for the range\\n    function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)\\n        external\\n        view\\n        returns (\\n            int56 tickCumulativeInside,\\n            uint160 secondsPerLiquidityInsideX128,\\n            uint32 secondsInside\\n        );\\n}\\n\",\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Events emitted by a pool\\n/// @notice Contains all events emitted by the pool\\ninterface IUniswapV3PoolEvents {\\n    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool\\n    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\\n    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\\n    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\\n    event Initialize(uint160 sqrtPriceX96, int24 tick);\\n\\n    /// @notice Emitted when liquidity is minted for a given position\\n    /// @param sender The address that minted the liquidity\\n    /// @param owner The owner of the position and recipient of any minted liquidity\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity minted to the position range\\n    /// @param amount0 How much token0 was required for the minted liquidity\\n    /// @param amount1 How much token1 was required for the minted liquidity\\n    event Mint(\\n        address sender,\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted when fees are collected by the owner of a position\\n    /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\\n    /// @param owner The owner of the position for which fees are collected\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount0 The amount of token0 fees collected\\n    /// @param amount1 The amount of token1 fees collected\\n    event Collect(\\n        address indexed owner,\\n        address recipient,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount0,\\n        uint128 amount1\\n    );\\n\\n    /// @notice Emitted when a position's liquidity is removed\\n    /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\\n    /// @param owner The owner of the position for which liquidity is removed\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity to remove\\n    /// @param amount0 The amount of token0 withdrawn\\n    /// @param amount1 The amount of token1 withdrawn\\n    event Burn(\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted by the pool for any swaps between token0 and token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the output of the swap\\n    /// @param amount0 The delta of the token0 balance of the pool\\n    /// @param amount1 The delta of the token1 balance of the pool\\n    /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\\n    /// @param liquidity The liquidity of the pool after the swap\\n    /// @param tick The log base 1.0001 of price of the pool after the swap\\n    event Swap(\\n        address indexed sender,\\n        address indexed recipient,\\n        int256 amount0,\\n        int256 amount1,\\n        uint160 sqrtPriceX96,\\n        uint128 liquidity,\\n        int24 tick\\n    );\\n\\n    /// @notice Emitted by the pool for any flashes of token0/token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the tokens from flash\\n    /// @param amount0 The amount of token0 that was flashed\\n    /// @param amount1 The amount of token1 that was flashed\\n    /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\\n    /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\\n    event Flash(\\n        address indexed sender,\\n        address indexed recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        uint256 paid0,\\n        uint256 paid1\\n    );\\n\\n    /// @notice Emitted by the pool for increases to the number of observations that can be stored\\n    /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\\n    /// just before a mint/swap/burn.\\n    /// @param observationCardinalityNextOld The previous value of the next observation cardinality\\n    /// @param observationCardinalityNextNew The updated value of the next observation cardinality\\n    event IncreaseObservationCardinalityNext(\\n        uint16 observationCardinalityNextOld,\\n        uint16 observationCardinalityNextNew\\n    );\\n\\n    /// @notice Emitted when the protocol fee is changed by the pool\\n    /// @param feeProtocol0Old The previous value of the token0 protocol fee\\n    /// @param feeProtocol1Old The previous value of the token1 protocol fee\\n    /// @param feeProtocol0New The updated value of the token0 protocol fee\\n    /// @param feeProtocol1New The updated value of the token1 protocol fee\\n    event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);\\n\\n    /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner\\n    /// @param sender The address that collects the protocol fees\\n    /// @param recipient The address that receives the collected protocol fees\\n    /// @param amount0 The amount of token0 protocol fees that is withdrawn\\n    /// @param amount0 The amount of token1 protocol fees that is withdrawn\\n    event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that never changes\\n/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values\\ninterface IUniswapV3PoolImmutables {\\n    /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\\n    /// @return The contract address\\n    function factory() external view returns (address);\\n\\n    /// @notice The first of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token0() external view returns (address);\\n\\n    /// @notice The second of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token1() external view returns (address);\\n\\n    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6\\n    /// @return The fee\\n    function fee() external view returns (uint24);\\n\\n    /// @notice The pool tick spacing\\n    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\\n    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\\n    /// This value is an int24 to avoid casting even though it is always positive.\\n    /// @return The tick spacing\\n    function tickSpacing() external view returns (int24);\\n\\n    /// @notice The maximum amount of position liquidity that can use any tick in the range\\n    /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\\n    /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\\n    /// @return The max amount of liquidity per tick\\n    function maxLiquidityPerTick() external view returns (uint128);\\n}\\n\",\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissioned pool actions\\n/// @notice Contains pool methods that may only be called by the factory owner\\ninterface IUniswapV3PoolOwnerActions {\\n    /// @notice Set the denominator of the protocol's % share of the fees\\n    /// @param feeProtocol0 new protocol fee for token0 of the pool\\n    /// @param feeProtocol1 new protocol fee for token1 of the pool\\n    function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;\\n\\n    /// @notice Collect the protocol fee accrued to the pool\\n    /// @param recipient The address to which collected protocol fees should be sent\\n    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\\n    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\\n    /// @return amount0 The protocol fee collected in token0\\n    /// @return amount1 The protocol fee collected in token1\\n    function collectProtocol(\\n        address recipient,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that can change\\n/// @notice These methods compose the pool's state, and can change with any frequency including multiple times\\n/// per transaction\\ninterface IUniswapV3PoolState {\\n    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\\n    /// when accessed externally.\\n    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\\n    /// tick The current tick of the pool, i.e. according to the last tick transition that was run.\\n    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\\n    /// boundary.\\n    /// observationIndex The index of the last oracle observation that was written,\\n    /// observationCardinality The current maximum number of observations stored in the pool,\\n    /// observationCardinalityNext The next maximum number of observations, to be updated when the observation.\\n    /// feeProtocol The protocol fee for both tokens of the pool.\\n    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\\n    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\\n    /// unlocked Whether the pool is currently locked to reentrancy\\n    function slot0()\\n        external\\n        view\\n        returns (\\n            uint160 sqrtPriceX96,\\n            int24 tick,\\n            uint16 observationIndex,\\n            uint16 observationCardinality,\\n            uint16 observationCardinalityNext,\\n            uint8 feeProtocol,\\n            bool unlocked\\n        );\\n\\n    /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal0X128() external view returns (uint256);\\n\\n    /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal1X128() external view returns (uint256);\\n\\n    /// @notice The amounts of token0 and token1 that are owed to the protocol\\n    /// @dev Protocol fees will never exceed uint128 max in either token\\n    function protocolFees() external view returns (uint128 token0, uint128 token1);\\n\\n    /// @notice The currently in range liquidity available to the pool\\n    /// @dev This value has no relationship to the total liquidity across all ticks\\n    function liquidity() external view returns (uint128);\\n\\n    /// @notice Look up information about a specific tick in the pool\\n    /// @param tick The tick to look up\\n    /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\\n    /// tick upper,\\n    /// liquidityNet how much liquidity changes when the pool price crosses the tick,\\n    /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\\n    /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\\n    /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\\n    /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\\n    /// secondsOutside the seconds spent on the other side of the tick from the current tick,\\n    /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\\n    /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\\n    /// In addition, these values are only relative and must be used only in comparison to previous snapshots for\\n    /// a specific position.\\n    function ticks(int24 tick)\\n        external\\n        view\\n        returns (\\n            uint128 liquidityGross,\\n            int128 liquidityNet,\\n            uint256 feeGrowthOutside0X128,\\n            uint256 feeGrowthOutside1X128,\\n            int56 tickCumulativeOutside,\\n            uint160 secondsPerLiquidityOutsideX128,\\n            uint32 secondsOutside,\\n            bool initialized\\n        );\\n\\n    /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information\\n    function tickBitmap(int16 wordPosition) external view returns (uint256);\\n\\n    /// @notice Returns the information about a position by the position's key\\n    /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\\n    /// @return _liquidity The amount of liquidity in the position,\\n    /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\\n    /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\\n    /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\\n    /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\\n    function positions(bytes32 key)\\n        external\\n        view\\n        returns (\\n            uint128 _liquidity,\\n            uint256 feeGrowthInside0LastX128,\\n            uint256 feeGrowthInside1LastX128,\\n            uint128 tokensOwed0,\\n            uint128 tokensOwed1\\n        );\\n\\n    /// @notice Returns data about a specific observation index\\n    /// @param index The element of the observations array to fetch\\n    /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\\n    /// ago, rather than at a specific index in the array.\\n    /// @return blockTimestamp The timestamp of the observation,\\n    /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\\n    /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\\n    /// Returns initialized whether the observation has been initialized and the values are safe to use\\n    function observations(uint256 index)\\n        external\\n        view\\n        returns (\\n            uint32 blockTimestamp,\\n            int56 tickCumulative,\\n            uint160 secondsPerLiquidityCumulativeX128,\\n            bool initialized\\n        );\\n}\\n\",\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "events": {
              "Burn(address,int24,int24,uint128,uint256,uint256)": {
                "notice": "Emitted when a position's liquidity is removed"
              },
              "Collect(address,address,int24,int24,uint128,uint128)": {
                "notice": "Emitted when fees are collected by the owner of a position"
              },
              "CollectProtocol(address,address,uint128,uint128)": {
                "notice": "Emitted when the collected protocol fees are withdrawn by the factory owner"
              },
              "Flash(address,address,uint256,uint256,uint256,uint256)": {
                "notice": "Emitted by the pool for any flashes of token0/token1"
              },
              "IncreaseObservationCardinalityNext(uint16,uint16)": {
                "notice": "Emitted by the pool for increases to the number of observations that can be stored"
              },
              "Initialize(uint160,int24)": {
                "notice": "Emitted exactly once by a pool when #initialize is first called on the pool"
              },
              "Mint(address,address,int24,int24,uint128,uint256,uint256)": {
                "notice": "Emitted when liquidity is minted for a given position"
              },
              "SetFeeProtocol(uint8,uint8,uint8,uint8)": {
                "notice": "Emitted when the protocol fee is changed by the pool"
              },
              "Swap(address,address,int256,int256,uint160,uint128,int24)": {
                "notice": "Emitted by the pool for any swaps between token0 and token1"
              }
            },
            "kind": "user",
            "methods": {
              "burn(int24,int24,uint128)": {
                "notice": "Burn liquidity from the sender and account tokens owed for the liquidity to the position"
              },
              "collect(address,int24,int24,uint128,uint128)": {
                "notice": "Collects tokens owed to a position"
              },
              "collectProtocol(address,uint128,uint128)": {
                "notice": "Collect the protocol fee accrued to the pool"
              },
              "factory()": {
                "notice": "The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface"
              },
              "fee()": {
                "notice": "The pool's fee in hundredths of a bip, i.e. 1e-6"
              },
              "feeGrowthGlobal0X128()": {
                "notice": "The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool"
              },
              "feeGrowthGlobal1X128()": {
                "notice": "The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool"
              },
              "flash(address,uint256,uint256,bytes)": {
                "notice": "Receive token0 and/or token1 and pay it back, plus a fee, in the callback"
              },
              "increaseObservationCardinalityNext(uint16)": {
                "notice": "Increase the maximum number of price and liquidity observations that this pool will store"
              },
              "initialize(uint160)": {
                "notice": "Sets the initial price for the pool"
              },
              "liquidity()": {
                "notice": "The currently in range liquidity available to the pool"
              },
              "maxLiquidityPerTick()": {
                "notice": "The maximum amount of position liquidity that can use any tick in the range"
              },
              "mint(address,int24,int24,uint128,bytes)": {
                "notice": "Adds liquidity for the given recipient/tickLower/tickUpper position"
              },
              "observations(uint256)": {
                "notice": "Returns data about a specific observation index"
              },
              "observe(uint32[])": {
                "notice": "Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp"
              },
              "positions(bytes32)": {
                "notice": "Returns the information about a position by the position's key"
              },
              "protocolFees()": {
                "notice": "The amounts of token0 and token1 that are owed to the protocol"
              },
              "setFeeProtocol(uint8,uint8)": {
                "notice": "Set the denominator of the protocol's % share of the fees"
              },
              "slot0()": {
                "notice": "The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas when accessed externally."
              },
              "snapshotCumulativesInside(int24,int24)": {
                "notice": "Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range"
              },
              "swap(address,bool,int256,uint160,bytes)": {
                "notice": "Swap token0 for token1, or token1 for token0"
              },
              "tickBitmap(int16)": {
                "notice": "Returns 256 packed tick initialized boolean values. See TickBitmap for more information"
              },
              "tickSpacing()": {
                "notice": "The pool tick spacing"
              },
              "ticks(int24)": {
                "notice": "Look up information about a specific tick in the pool"
              },
              "token0()": {
                "notice": "The first of the two tokens of the pool, sorted by address"
              },
              "token1()": {
                "notice": "The second of the two tokens of the pool, sorted by address"
              }
            },
            "notice": "A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform to the ERC20 specification",
            "version": 1
          }
        }
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol": {
        "IUniswapV3PoolActions": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                }
              ],
              "name": "burn",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount0Requested",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1Requested",
                  "type": "uint128"
                }
              ],
              "name": "collect",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "flash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint16",
                  "name": "observationCardinalityNext",
                  "type": "uint16"
                }
              ],
              "name": "increaseObservationCardinalityNext",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                }
              ],
              "name": "initialize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "zeroForOne",
                  "type": "bool"
                },
                {
                  "internalType": "int256",
                  "name": "amountSpecified",
                  "type": "int256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "swap",
              "outputs": [
                {
                  "internalType": "int256",
                  "name": "amount0",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1",
                  "type": "int256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "burn(int24,int24,uint128)": {
                "details": "Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0Fees must be collected separately via a call to #collect",
                "params": {
                  "amount": "How much liquidity to burn",
                  "tickLower": "The lower tick of the position for which to burn liquidity",
                  "tickUpper": "The upper tick of the position for which to burn liquidity"
                },
                "returns": {
                  "amount0": "The amount of token0 sent to the recipient",
                  "amount1": "The amount of token1 sent to the recipient"
                }
              },
              "collect(address,int24,int24,uint128,uint128)": {
                "details": "Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.",
                "params": {
                  "amount0Requested": "How much token0 should be withdrawn from the fees owed",
                  "amount1Requested": "How much token1 should be withdrawn from the fees owed",
                  "recipient": "The address which should receive the fees collected",
                  "tickLower": "The lower tick of the position for which to collect fees",
                  "tickUpper": "The upper tick of the position for which to collect fees"
                },
                "returns": {
                  "amount0": "The amount of fees collected in token0",
                  "amount1": "The amount of fees collected in token1"
                }
              },
              "flash(address,uint256,uint256,bytes)": {
                "details": "The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallbackCan be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling with 0 amount{0,1} and sending the donation amount(s) from the callback",
                "params": {
                  "amount0": "The amount of token0 to send",
                  "amount1": "The amount of token1 to send",
                  "data": "Any data to be passed through to the callback",
                  "recipient": "The address which will receive the token0 and token1 amounts"
                }
              },
              "increaseObservationCardinalityNext(uint16)": {
                "details": "This method is no-op if the pool already has an observationCardinalityNext greater than or equal to the input observationCardinalityNext.",
                "params": {
                  "observationCardinalityNext": "The desired minimum number of observations for the pool to store"
                }
              },
              "initialize(uint160)": {
                "details": "Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value",
                "params": {
                  "sqrtPriceX96": "the initial sqrt price of the pool as a Q64.96"
                }
              },
              "mint(address,int24,int24,uint128,bytes)": {
                "details": "The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends on tickLower, tickUpper, the amount of liquidity, and the current price.",
                "params": {
                  "amount": "The amount of liquidity to mint",
                  "data": "Any data that should be passed through to the callback",
                  "recipient": "The address for which the liquidity will be created",
                  "tickLower": "The lower tick of the position in which to add liquidity",
                  "tickUpper": "The upper tick of the position in which to add liquidity"
                },
                "returns": {
                  "amount0": "The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback",
                  "amount1": "The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback"
                }
              },
              "swap(address,bool,int256,uint160,bytes)": {
                "details": "The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback",
                "params": {
                  "amountSpecified": "The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)",
                  "data": "Any data to be passed through to the callback",
                  "recipient": "The address to receive the output of the swap",
                  "sqrtPriceLimitX96": "The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap",
                  "zeroForOne": "The direction of the swap, true for token0 to token1, false for token1 to token0"
                },
                "returns": {
                  "amount0": "The delta of the balance of token0 of the pool, exact when negative, minimum when positive",
                  "amount1": "The delta of the balance of token1 of the pool, exact when negative, minimum when positive"
                }
              }
            },
            "title": "Permissionless pool actions",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "burn(int24,int24,uint128)": "a34123a7",
              "collect(address,int24,int24,uint128,uint128)": "4f1eb3d8",
              "flash(address,uint256,uint256,bytes)": "490e6cbc",
              "increaseObservationCardinalityNext(uint16)": "32148f67",
              "initialize(uint160)": "f637731d",
              "mint(address,int24,int24,uint128,bytes)": "3c8a7d8d",
              "swap(address,bool,int256,uint160,bytes)": "128acb08"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"flash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"}],\"name\":\"increaseObservationCardinalityNext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"burn(int24,int24,uint128)\":{\"details\":\"Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0Fees must be collected separately via a call to #collect\",\"params\":{\"amount\":\"How much liquidity to burn\",\"tickLower\":\"The lower tick of the position for which to burn liquidity\",\"tickUpper\":\"The upper tick of the position for which to burn liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 sent to the recipient\",\"amount1\":\"The amount of token1 sent to the recipient\"}},\"collect(address,int24,int24,uint128,uint128)\":{\"details\":\"Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\",\"params\":{\"amount0Requested\":\"How much token0 should be withdrawn from the fees owed\",\"amount1Requested\":\"How much token1 should be withdrawn from the fees owed\",\"recipient\":\"The address which should receive the fees collected\",\"tickLower\":\"The lower tick of the position for which to collect fees\",\"tickUpper\":\"The upper tick of the position for which to collect fees\"},\"returns\":{\"amount0\":\"The amount of fees collected in token0\",\"amount1\":\"The amount of fees collected in token1\"}},\"flash(address,uint256,uint256,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallbackCan be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling with 0 amount{0,1} and sending the donation amount(s) from the callback\",\"params\":{\"amount0\":\"The amount of token0 to send\",\"amount1\":\"The amount of token1 to send\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address which will receive the token0 and token1 amounts\"}},\"increaseObservationCardinalityNext(uint16)\":{\"details\":\"This method is no-op if the pool already has an observationCardinalityNext greater than or equal to the input observationCardinalityNext.\",\"params\":{\"observationCardinalityNext\":\"The desired minimum number of observations for the pool to store\"}},\"initialize(uint160)\":{\"details\":\"Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\",\"params\":{\"sqrtPriceX96\":\"the initial sqrt price of the pool as a Q64.96\"}},\"mint(address,int24,int24,uint128,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends on tickLower, tickUpper, the amount of liquidity, and the current price.\",\"params\":{\"amount\":\"The amount of liquidity to mint\",\"data\":\"Any data that should be passed through to the callback\",\"recipient\":\"The address for which the liquidity will be created\",\"tickLower\":\"The lower tick of the position in which to add liquidity\",\"tickUpper\":\"The upper tick of the position in which to add liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\",\"amount1\":\"The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\"}},\"swap(address,bool,int256,uint160,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\",\"params\":{\"amountSpecified\":\"The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address to receive the output of the swap\",\"sqrtPriceLimitX96\":\"The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap\",\"zeroForOne\":\"The direction of the swap, true for token0 to token1, false for token1 to token0\"},\"returns\":{\"amount0\":\"The delta of the balance of token0 of the pool, exact when negative, minimum when positive\",\"amount1\":\"The delta of the balance of token1 of the pool, exact when negative, minimum when positive\"}}},\"title\":\"Permissionless pool actions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"burn(int24,int24,uint128)\":{\"notice\":\"Burn liquidity from the sender and account tokens owed for the liquidity to the position\"},\"collect(address,int24,int24,uint128,uint128)\":{\"notice\":\"Collects tokens owed to a position\"},\"flash(address,uint256,uint256,bytes)\":{\"notice\":\"Receive token0 and/or token1 and pay it back, plus a fee, in the callback\"},\"increaseObservationCardinalityNext(uint16)\":{\"notice\":\"Increase the maximum number of price and liquidity observations that this pool will store\"},\"initialize(uint160)\":{\"notice\":\"Sets the initial price for the pool\"},\"mint(address,int24,int24,uint128,bytes)\":{\"notice\":\"Adds liquidity for the given recipient/tickLower/tickUpper position\"},\"swap(address,bool,int256,uint160,bytes)\":{\"notice\":\"Swap token0 for token1, or token1 for token0\"}},\"notice\":\"Contains pool methods that can be called by anyone\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":\"IUniswapV3PoolActions\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissionless pool actions\\n/// @notice Contains pool methods that can be called by anyone\\ninterface IUniswapV3PoolActions {\\n    /// @notice Sets the initial price for the pool\\n    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\\n    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96\\n    function initialize(uint160 sqrtPriceX96) external;\\n\\n    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback\\n    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\\n    /// on tickLower, tickUpper, the amount of liquidity, and the current price.\\n    /// @param recipient The address for which the liquidity will be created\\n    /// @param tickLower The lower tick of the position in which to add liquidity\\n    /// @param tickUpper The upper tick of the position in which to add liquidity\\n    /// @param amount The amount of liquidity to mint\\n    /// @param data Any data that should be passed through to the callback\\n    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    function mint(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount,\\n        bytes calldata data\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Collects tokens owed to a position\\n    /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\\n    /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\\n    /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\\n    /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\\n    /// @param recipient The address which should receive the fees collected\\n    /// @param tickLower The lower tick of the position for which to collect fees\\n    /// @param tickUpper The upper tick of the position for which to collect fees\\n    /// @param amount0Requested How much token0 should be withdrawn from the fees owed\\n    /// @param amount1Requested How much token1 should be withdrawn from the fees owed\\n    /// @return amount0 The amount of fees collected in token0\\n    /// @return amount1 The amount of fees collected in token1\\n    function collect(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n\\n    /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\\n    /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\\n    /// @dev Fees must be collected separately via a call to #collect\\n    /// @param tickLower The lower tick of the position for which to burn liquidity\\n    /// @param tickUpper The upper tick of the position for which to burn liquidity\\n    /// @param amount How much liquidity to burn\\n    /// @return amount0 The amount of token0 sent to the recipient\\n    /// @return amount1 The amount of token1 sent to the recipient\\n    function burn(\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Swap token0 for token1, or token1 for token0\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\\n    /// @param recipient The address to receive the output of the swap\\n    /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\\n    /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\\n    /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\\n    /// value after the swap. If one for zero, the price cannot be greater than this value after the swap\\n    /// @param data Any data to be passed through to the callback\\n    /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\\n    /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive\\n    function swap(\\n        address recipient,\\n        bool zeroForOne,\\n        int256 amountSpecified,\\n        uint160 sqrtPriceLimitX96,\\n        bytes calldata data\\n    ) external returns (int256 amount0, int256 amount1);\\n\\n    /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback\\n    /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\\n    /// with 0 amount{0,1} and sending the donation amount(s) from the callback\\n    /// @param recipient The address which will receive the token0 and token1 amounts\\n    /// @param amount0 The amount of token0 to send\\n    /// @param amount1 The amount of token1 to send\\n    /// @param data Any data to be passed through to the callback\\n    function flash(\\n        address recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        bytes calldata data\\n    ) external;\\n\\n    /// @notice Increase the maximum number of price and liquidity observations that this pool will store\\n    /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\\n    /// the input observationCardinalityNext.\\n    /// @param observationCardinalityNext The desired minimum number of observations for the pool to store\\n    function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;\\n}\\n\",\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "burn(int24,int24,uint128)": {
                "notice": "Burn liquidity from the sender and account tokens owed for the liquidity to the position"
              },
              "collect(address,int24,int24,uint128,uint128)": {
                "notice": "Collects tokens owed to a position"
              },
              "flash(address,uint256,uint256,bytes)": {
                "notice": "Receive token0 and/or token1 and pay it back, plus a fee, in the callback"
              },
              "increaseObservationCardinalityNext(uint16)": {
                "notice": "Increase the maximum number of price and liquidity observations that this pool will store"
              },
              "initialize(uint160)": {
                "notice": "Sets the initial price for the pool"
              },
              "mint(address,int24,int24,uint128,bytes)": {
                "notice": "Adds liquidity for the given recipient/tickLower/tickUpper position"
              },
              "swap(address,bool,int256,uint160,bytes)": {
                "notice": "Swap token0 for token1, or token1 for token0"
              }
            },
            "notice": "Contains pool methods that can be called by anyone",
            "version": 1
          }
        }
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol": {
        "IUniswapV3PoolDerivedState": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint32[]",
                  "name": "secondsAgos",
                  "type": "uint32[]"
                }
              ],
              "name": "observe",
              "outputs": [
                {
                  "internalType": "int56[]",
                  "name": "tickCumulatives",
                  "type": "int56[]"
                },
                {
                  "internalType": "uint160[]",
                  "name": "secondsPerLiquidityCumulativeX128s",
                  "type": "uint160[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                }
              ],
              "name": "snapshotCumulativesInside",
              "outputs": [
                {
                  "internalType": "int56",
                  "name": "tickCumulativeInside",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityInsideX128",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsInside",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "observe(uint32[])": {
                "details": "To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, you must call it with secondsAgos = [3600, 0].The time weighted average tick represents the geometric time weighted average price of the pool, in log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.",
                "params": {
                  "secondsAgos": "From how long ago each cumulative tick and liquidity value should be returned"
                },
                "returns": {
                  "secondsPerLiquidityCumulativeX128s": "Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block timestamp",
                  "tickCumulatives": "Cumulative tick values as of each `secondsAgos` from the current block timestamp"
                }
              },
              "snapshotCumulativesInside(int24,int24)": {
                "details": "Snapshots must only be compared to other snapshots, taken over a period for which a position existed. I.e., snapshots cannot be compared if a position is not held for the entire period between when the first snapshot is taken and the second snapshot is taken.",
                "params": {
                  "tickLower": "The lower tick of the range",
                  "tickUpper": "The upper tick of the range"
                },
                "returns": {
                  "secondsInside": "The snapshot of seconds per liquidity for the range",
                  "secondsPerLiquidityInsideX128": "The snapshot of seconds per liquidity for the range",
                  "tickCumulativeInside": "The snapshot of the tick accumulator for the range"
                }
              }
            },
            "title": "Pool state that is not stored",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "observe(uint32[])": "883bdbfd",
              "snapshotCumulativesInside(int24,int24)": "a38807f2"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"secondsAgos\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56[]\",\"name\":\"tickCumulatives\",\"type\":\"int56[]\"},{\"internalType\":\"uint160[]\",\"name\":\"secondsPerLiquidityCumulativeX128s\",\"type\":\"uint160[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"snapshotCumulativesInside\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"tickCumulativeInside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityInsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsInside\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"observe(uint32[])\":{\"details\":\"To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, you must call it with secondsAgos = [3600, 0].The time weighted average tick represents the geometric time weighted average price of the pool, in log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\",\"params\":{\"secondsAgos\":\"From how long ago each cumulative tick and liquidity value should be returned\"},\"returns\":{\"secondsPerLiquidityCumulativeX128s\":\"Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block timestamp\",\"tickCumulatives\":\"Cumulative tick values as of each `secondsAgos` from the current block timestamp\"}},\"snapshotCumulativesInside(int24,int24)\":{\"details\":\"Snapshots must only be compared to other snapshots, taken over a period for which a position existed. I.e., snapshots cannot be compared if a position is not held for the entire period between when the first snapshot is taken and the second snapshot is taken.\",\"params\":{\"tickLower\":\"The lower tick of the range\",\"tickUpper\":\"The upper tick of the range\"},\"returns\":{\"secondsInside\":\"The snapshot of seconds per liquidity for the range\",\"secondsPerLiquidityInsideX128\":\"The snapshot of seconds per liquidity for the range\",\"tickCumulativeInside\":\"The snapshot of the tick accumulator for the range\"}}},\"title\":\"Pool state that is not stored\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"observe(uint32[])\":{\"notice\":\"Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\"},\"snapshotCumulativesInside(int24,int24)\":{\"notice\":\"Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\"}},\"notice\":\"Contains view functions to provide information about the pool that is computed rather than stored on the blockchain. The functions here may have variable gas costs.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":\"IUniswapV3PoolDerivedState\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that is not stored\\n/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the\\n/// blockchain. The functions here may have variable gas costs.\\ninterface IUniswapV3PoolDerivedState {\\n    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\\n    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\\n    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\\n    /// you must call it with secondsAgos = [3600, 0].\\n    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\\n    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\\n    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\\n    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\\n    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\\n    /// timestamp\\n    function observe(uint32[] calldata secondsAgos)\\n        external\\n        view\\n        returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\\n\\n    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\\n    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\\n    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\\n    /// snapshot is taken and the second snapshot is taken.\\n    /// @param tickLower The lower tick of the range\\n    /// @param tickUpper The upper tick of the range\\n    /// @return tickCumulativeInside The snapshot of the tick accumulator for the range\\n    /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\\n    /// @return secondsInside The snapshot of seconds per liquidity for the range\\n    function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)\\n        external\\n        view\\n        returns (\\n            int56 tickCumulativeInside,\\n            uint160 secondsPerLiquidityInsideX128,\\n            uint32 secondsInside\\n        );\\n}\\n\",\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "observe(uint32[])": {
                "notice": "Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp"
              },
              "snapshotCumulativesInside(int24,int24)": {
                "notice": "Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range"
              }
            },
            "notice": "Contains view functions to provide information about the pool that is computed rather than stored on the blockchain. The functions here may have variable gas costs.",
            "version": 1
          }
        }
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol": {
        "IUniswapV3PoolEvents": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "Burn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "name": "Collect",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "name": "CollectProtocol",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "paid0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "paid1",
                  "type": "uint256"
                }
              ],
              "name": "Flash",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint16",
                  "name": "observationCardinalityNextOld",
                  "type": "uint16"
                },
                {
                  "indexed": false,
                  "internalType": "uint16",
                  "name": "observationCardinalityNextNew",
                  "type": "uint16"
                }
              ],
              "name": "IncreaseObservationCardinalityNext",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "indexed": false,
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "Initialize",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "Mint",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol0Old",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol1Old",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol0New",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol1New",
                  "type": "uint8"
                }
              ],
              "name": "SetFeeProtocol",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "amount0",
                  "type": "int256"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "amount1",
                  "type": "int256"
                },
                {
                  "indexed": false,
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "Swap",
              "type": "event"
            }
          ],
          "devdoc": {
            "events": {
              "Burn(address,int24,int24,uint128,uint256,uint256)": {
                "details": "Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect",
                "params": {
                  "amount": "The amount of liquidity to remove",
                  "amount0": "The amount of token0 withdrawn",
                  "amount1": "The amount of token1 withdrawn",
                  "owner": "The owner of the position for which liquidity is removed",
                  "tickLower": "The lower tick of the position",
                  "tickUpper": "The upper tick of the position"
                }
              },
              "Collect(address,address,int24,int24,uint128,uint128)": {
                "details": "Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees",
                "params": {
                  "amount0": "The amount of token0 fees collected",
                  "amount1": "The amount of token1 fees collected",
                  "owner": "The owner of the position for which fees are collected",
                  "tickLower": "The lower tick of the position",
                  "tickUpper": "The upper tick of the position"
                }
              },
              "CollectProtocol(address,address,uint128,uint128)": {
                "params": {
                  "amount0": "The amount of token1 protocol fees that is withdrawn",
                  "recipient": "The address that receives the collected protocol fees",
                  "sender": "The address that collects the protocol fees"
                }
              },
              "Flash(address,address,uint256,uint256,uint256,uint256)": {
                "params": {
                  "amount0": "The amount of token0 that was flashed",
                  "amount1": "The amount of token1 that was flashed",
                  "paid0": "The amount of token0 paid for the flash, which can exceed the amount0 plus the fee",
                  "paid1": "The amount of token1 paid for the flash, which can exceed the amount1 plus the fee",
                  "recipient": "The address that received the tokens from flash",
                  "sender": "The address that initiated the swap call, and that received the callback"
                }
              },
              "IncreaseObservationCardinalityNext(uint16,uint16)": {
                "details": "observationCardinalityNext is not the observation cardinality until an observation is written at the index just before a mint/swap/burn.",
                "params": {
                  "observationCardinalityNextNew": "The updated value of the next observation cardinality",
                  "observationCardinalityNextOld": "The previous value of the next observation cardinality"
                }
              },
              "Initialize(uint160,int24)": {
                "details": "Mint/Burn/Swap cannot be emitted by the pool before Initialize",
                "params": {
                  "sqrtPriceX96": "The initial sqrt price of the pool, as a Q64.96",
                  "tick": "The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool"
                }
              },
              "Mint(address,address,int24,int24,uint128,uint256,uint256)": {
                "params": {
                  "amount": "The amount of liquidity minted to the position range",
                  "amount0": "How much token0 was required for the minted liquidity",
                  "amount1": "How much token1 was required for the minted liquidity",
                  "owner": "The owner of the position and recipient of any minted liquidity",
                  "sender": "The address that minted the liquidity",
                  "tickLower": "The lower tick of the position",
                  "tickUpper": "The upper tick of the position"
                }
              },
              "SetFeeProtocol(uint8,uint8,uint8,uint8)": {
                "params": {
                  "feeProtocol0New": "The updated value of the token0 protocol fee",
                  "feeProtocol0Old": "The previous value of the token0 protocol fee",
                  "feeProtocol1New": "The updated value of the token1 protocol fee",
                  "feeProtocol1Old": "The previous value of the token1 protocol fee"
                }
              },
              "Swap(address,address,int256,int256,uint160,uint128,int24)": {
                "params": {
                  "amount0": "The delta of the token0 balance of the pool",
                  "amount1": "The delta of the token1 balance of the pool",
                  "liquidity": "The liquidity of the pool after the swap",
                  "recipient": "The address that received the output of the swap",
                  "sender": "The address that initiated the swap call, and that received the callback",
                  "sqrtPriceX96": "The sqrt(price) of the pool after the swap, as a Q64.96",
                  "tick": "The log base 1.0001 of price of the pool after the swap"
                }
              }
            },
            "kind": "dev",
            "methods": {},
            "title": "Events emitted by a pool",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"Collect\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"CollectProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid1\",\"type\":\"uint256\"}],\"name\":\"Flash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextOld\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextNew\",\"type\":\"uint16\"}],\"name\":\"IncreaseObservationCardinalityNext\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Initialize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0New\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1New\",\"type\":\"uint8\"}],\"name\":\"SetFeeProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Swap\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"Burn(address,int24,int24,uint128,uint256,uint256)\":{\"details\":\"Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\",\"params\":{\"amount\":\"The amount of liquidity to remove\",\"amount0\":\"The amount of token0 withdrawn\",\"amount1\":\"The amount of token1 withdrawn\",\"owner\":\"The owner of the position for which liquidity is removed\",\"tickLower\":\"The lower tick of the position\",\"tickUpper\":\"The upper tick of the position\"}},\"Collect(address,address,int24,int24,uint128,uint128)\":{\"details\":\"Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\",\"params\":{\"amount0\":\"The amount of token0 fees collected\",\"amount1\":\"The amount of token1 fees collected\",\"owner\":\"The owner of the position for which fees are collected\",\"tickLower\":\"The lower tick of the position\",\"tickUpper\":\"The upper tick of the position\"}},\"CollectProtocol(address,address,uint128,uint128)\":{\"params\":{\"amount0\":\"The amount of token1 protocol fees that is withdrawn\",\"recipient\":\"The address that receives the collected protocol fees\",\"sender\":\"The address that collects the protocol fees\"}},\"Flash(address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amount0\":\"The amount of token0 that was flashed\",\"amount1\":\"The amount of token1 that was flashed\",\"paid0\":\"The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\",\"paid1\":\"The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\",\"recipient\":\"The address that received the tokens from flash\",\"sender\":\"The address that initiated the swap call, and that received the callback\"}},\"IncreaseObservationCardinalityNext(uint16,uint16)\":{\"details\":\"observationCardinalityNext is not the observation cardinality until an observation is written at the index just before a mint/swap/burn.\",\"params\":{\"observationCardinalityNextNew\":\"The updated value of the next observation cardinality\",\"observationCardinalityNextOld\":\"The previous value of the next observation cardinality\"}},\"Initialize(uint160,int24)\":{\"details\":\"Mint/Burn/Swap cannot be emitted by the pool before Initialize\",\"params\":{\"sqrtPriceX96\":\"The initial sqrt price of the pool, as a Q64.96\",\"tick\":\"The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\"}},\"Mint(address,address,int24,int24,uint128,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of liquidity minted to the position range\",\"amount0\":\"How much token0 was required for the minted liquidity\",\"amount1\":\"How much token1 was required for the minted liquidity\",\"owner\":\"The owner of the position and recipient of any minted liquidity\",\"sender\":\"The address that minted the liquidity\",\"tickLower\":\"The lower tick of the position\",\"tickUpper\":\"The upper tick of the position\"}},\"SetFeeProtocol(uint8,uint8,uint8,uint8)\":{\"params\":{\"feeProtocol0New\":\"The updated value of the token0 protocol fee\",\"feeProtocol0Old\":\"The previous value of the token0 protocol fee\",\"feeProtocol1New\":\"The updated value of the token1 protocol fee\",\"feeProtocol1Old\":\"The previous value of the token1 protocol fee\"}},\"Swap(address,address,int256,int256,uint160,uint128,int24)\":{\"params\":{\"amount0\":\"The delta of the token0 balance of the pool\",\"amount1\":\"The delta of the token1 balance of the pool\",\"liquidity\":\"The liquidity of the pool after the swap\",\"recipient\":\"The address that received the output of the swap\",\"sender\":\"The address that initiated the swap call, and that received the callback\",\"sqrtPriceX96\":\"The sqrt(price) of the pool after the swap, as a Q64.96\",\"tick\":\"The log base 1.0001 of price of the pool after the swap\"}}},\"kind\":\"dev\",\"methods\":{},\"title\":\"Events emitted by a pool\",\"version\":1},\"userdoc\":{\"events\":{\"Burn(address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when a position's liquidity is removed\"},\"Collect(address,address,int24,int24,uint128,uint128)\":{\"notice\":\"Emitted when fees are collected by the owner of a position\"},\"CollectProtocol(address,address,uint128,uint128)\":{\"notice\":\"Emitted when the collected protocol fees are withdrawn by the factory owner\"},\"Flash(address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted by the pool for any flashes of token0/token1\"},\"IncreaseObservationCardinalityNext(uint16,uint16)\":{\"notice\":\"Emitted by the pool for increases to the number of observations that can be stored\"},\"Initialize(uint160,int24)\":{\"notice\":\"Emitted exactly once by a pool when #initialize is first called on the pool\"},\"Mint(address,address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when liquidity is minted for a given position\"},\"SetFeeProtocol(uint8,uint8,uint8,uint8)\":{\"notice\":\"Emitted when the protocol fee is changed by the pool\"},\"Swap(address,address,int256,int256,uint160,uint128,int24)\":{\"notice\":\"Emitted by the pool for any swaps between token0 and token1\"}},\"kind\":\"user\",\"methods\":{},\"notice\":\"Contains all events emitted by the pool\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":\"IUniswapV3PoolEvents\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Events emitted by a pool\\n/// @notice Contains all events emitted by the pool\\ninterface IUniswapV3PoolEvents {\\n    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool\\n    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\\n    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\\n    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\\n    event Initialize(uint160 sqrtPriceX96, int24 tick);\\n\\n    /// @notice Emitted when liquidity is minted for a given position\\n    /// @param sender The address that minted the liquidity\\n    /// @param owner The owner of the position and recipient of any minted liquidity\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity minted to the position range\\n    /// @param amount0 How much token0 was required for the minted liquidity\\n    /// @param amount1 How much token1 was required for the minted liquidity\\n    event Mint(\\n        address sender,\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted when fees are collected by the owner of a position\\n    /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\\n    /// @param owner The owner of the position for which fees are collected\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount0 The amount of token0 fees collected\\n    /// @param amount1 The amount of token1 fees collected\\n    event Collect(\\n        address indexed owner,\\n        address recipient,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount0,\\n        uint128 amount1\\n    );\\n\\n    /// @notice Emitted when a position's liquidity is removed\\n    /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\\n    /// @param owner The owner of the position for which liquidity is removed\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity to remove\\n    /// @param amount0 The amount of token0 withdrawn\\n    /// @param amount1 The amount of token1 withdrawn\\n    event Burn(\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted by the pool for any swaps between token0 and token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the output of the swap\\n    /// @param amount0 The delta of the token0 balance of the pool\\n    /// @param amount1 The delta of the token1 balance of the pool\\n    /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\\n    /// @param liquidity The liquidity of the pool after the swap\\n    /// @param tick The log base 1.0001 of price of the pool after the swap\\n    event Swap(\\n        address indexed sender,\\n        address indexed recipient,\\n        int256 amount0,\\n        int256 amount1,\\n        uint160 sqrtPriceX96,\\n        uint128 liquidity,\\n        int24 tick\\n    );\\n\\n    /// @notice Emitted by the pool for any flashes of token0/token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the tokens from flash\\n    /// @param amount0 The amount of token0 that was flashed\\n    /// @param amount1 The amount of token1 that was flashed\\n    /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\\n    /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\\n    event Flash(\\n        address indexed sender,\\n        address indexed recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        uint256 paid0,\\n        uint256 paid1\\n    );\\n\\n    /// @notice Emitted by the pool for increases to the number of observations that can be stored\\n    /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\\n    /// just before a mint/swap/burn.\\n    /// @param observationCardinalityNextOld The previous value of the next observation cardinality\\n    /// @param observationCardinalityNextNew The updated value of the next observation cardinality\\n    event IncreaseObservationCardinalityNext(\\n        uint16 observationCardinalityNextOld,\\n        uint16 observationCardinalityNextNew\\n    );\\n\\n    /// @notice Emitted when the protocol fee is changed by the pool\\n    /// @param feeProtocol0Old The previous value of the token0 protocol fee\\n    /// @param feeProtocol1Old The previous value of the token1 protocol fee\\n    /// @param feeProtocol0New The updated value of the token0 protocol fee\\n    /// @param feeProtocol1New The updated value of the token1 protocol fee\\n    event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);\\n\\n    /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner\\n    /// @param sender The address that collects the protocol fees\\n    /// @param recipient The address that receives the collected protocol fees\\n    /// @param amount0 The amount of token0 protocol fees that is withdrawn\\n    /// @param amount0 The amount of token1 protocol fees that is withdrawn\\n    event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "events": {
              "Burn(address,int24,int24,uint128,uint256,uint256)": {
                "notice": "Emitted when a position's liquidity is removed"
              },
              "Collect(address,address,int24,int24,uint128,uint128)": {
                "notice": "Emitted when fees are collected by the owner of a position"
              },
              "CollectProtocol(address,address,uint128,uint128)": {
                "notice": "Emitted when the collected protocol fees are withdrawn by the factory owner"
              },
              "Flash(address,address,uint256,uint256,uint256,uint256)": {
                "notice": "Emitted by the pool for any flashes of token0/token1"
              },
              "IncreaseObservationCardinalityNext(uint16,uint16)": {
                "notice": "Emitted by the pool for increases to the number of observations that can be stored"
              },
              "Initialize(uint160,int24)": {
                "notice": "Emitted exactly once by a pool when #initialize is first called on the pool"
              },
              "Mint(address,address,int24,int24,uint128,uint256,uint256)": {
                "notice": "Emitted when liquidity is minted for a given position"
              },
              "SetFeeProtocol(uint8,uint8,uint8,uint8)": {
                "notice": "Emitted when the protocol fee is changed by the pool"
              },
              "Swap(address,address,int256,int256,uint160,uint128,int24)": {
                "notice": "Emitted by the pool for any swaps between token0 and token1"
              }
            },
            "kind": "user",
            "methods": {},
            "notice": "Contains all events emitted by the pool",
            "version": 1
          }
        }
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol": {
        "IUniswapV3PoolImmutables": {
          "abi": [
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint24",
                  "name": "",
                  "type": "uint24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "maxLiquidityPerTick",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickSpacing",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token0",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "factory()": {
                "returns": {
                  "_0": "The contract address"
                }
              },
              "fee()": {
                "returns": {
                  "_0": "The fee"
                }
              },
              "maxLiquidityPerTick()": {
                "details": "This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool",
                "returns": {
                  "_0": "The max amount of liquidity per tick"
                }
              },
              "tickSpacing()": {
                "details": "Ticks can only be used at multiples of this value, minimum of 1 and always positive e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... This value is an int24 to avoid casting even though it is always positive.",
                "returns": {
                  "_0": "The tick spacing"
                }
              },
              "token0()": {
                "returns": {
                  "_0": "The token contract address"
                }
              },
              "token1()": {
                "returns": {
                  "_0": "The token contract address"
                }
              }
            },
            "title": "Pool state that never changes",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "factory()": "c45a0155",
              "fee()": "ddca3f43",
              "maxLiquidityPerTick()": "70cf754a",
              "tickSpacing()": "d0c93a7c",
              "token0()": "0dfe1681",
              "token1()": "d21220a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLiquidityPerTick\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"factory()\":{\"returns\":{\"_0\":\"The contract address\"}},\"fee()\":{\"returns\":{\"_0\":\"The fee\"}},\"maxLiquidityPerTick()\":{\"details\":\"This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\",\"returns\":{\"_0\":\"The max amount of liquidity per tick\"}},\"tickSpacing()\":{\"details\":\"Ticks can only be used at multiples of this value, minimum of 1 and always positive e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... This value is an int24 to avoid casting even though it is always positive.\",\"returns\":{\"_0\":\"The tick spacing\"}},\"token0()\":{\"returns\":{\"_0\":\"The token contract address\"}},\"token1()\":{\"returns\":{\"_0\":\"The token contract address\"}}},\"title\":\"Pool state that never changes\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"factory()\":{\"notice\":\"The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\"},\"fee()\":{\"notice\":\"The pool's fee in hundredths of a bip, i.e. 1e-6\"},\"maxLiquidityPerTick()\":{\"notice\":\"The maximum amount of position liquidity that can use any tick in the range\"},\"tickSpacing()\":{\"notice\":\"The pool tick spacing\"},\"token0()\":{\"notice\":\"The first of the two tokens of the pool, sorted by address\"},\"token1()\":{\"notice\":\"The second of the two tokens of the pool, sorted by address\"}},\"notice\":\"These parameters are fixed for a pool forever, i.e., the methods will always return the same values\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":\"IUniswapV3PoolImmutables\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that never changes\\n/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values\\ninterface IUniswapV3PoolImmutables {\\n    /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\\n    /// @return The contract address\\n    function factory() external view returns (address);\\n\\n    /// @notice The first of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token0() external view returns (address);\\n\\n    /// @notice The second of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token1() external view returns (address);\\n\\n    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6\\n    /// @return The fee\\n    function fee() external view returns (uint24);\\n\\n    /// @notice The pool tick spacing\\n    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\\n    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\\n    /// This value is an int24 to avoid casting even though it is always positive.\\n    /// @return The tick spacing\\n    function tickSpacing() external view returns (int24);\\n\\n    /// @notice The maximum amount of position liquidity that can use any tick in the range\\n    /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\\n    /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\\n    /// @return The max amount of liquidity per tick\\n    function maxLiquidityPerTick() external view returns (uint128);\\n}\\n\",\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "factory()": {
                "notice": "The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface"
              },
              "fee()": {
                "notice": "The pool's fee in hundredths of a bip, i.e. 1e-6"
              },
              "maxLiquidityPerTick()": {
                "notice": "The maximum amount of position liquidity that can use any tick in the range"
              },
              "tickSpacing()": {
                "notice": "The pool tick spacing"
              },
              "token0()": {
                "notice": "The first of the two tokens of the pool, sorted by address"
              },
              "token1()": {
                "notice": "The second of the two tokens of the pool, sorted by address"
              }
            },
            "notice": "These parameters are fixed for a pool forever, i.e., the methods will always return the same values",
            "version": 1
          }
        }
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol": {
        "IUniswapV3PoolOwnerActions": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint128",
                  "name": "amount0Requested",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1Requested",
                  "type": "uint128"
                }
              ],
              "name": "collectProtocol",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint8",
                  "name": "feeProtocol0",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "feeProtocol1",
                  "type": "uint8"
                }
              ],
              "name": "setFeeProtocol",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "collectProtocol(address,uint128,uint128)": {
                "params": {
                  "amount0Requested": "The maximum amount of token0 to send, can be 0 to collect fees in only token1",
                  "amount1Requested": "The maximum amount of token1 to send, can be 0 to collect fees in only token0",
                  "recipient": "The address to which collected protocol fees should be sent"
                },
                "returns": {
                  "amount0": "The protocol fee collected in token0",
                  "amount1": "The protocol fee collected in token1"
                }
              },
              "setFeeProtocol(uint8,uint8)": {
                "params": {
                  "feeProtocol0": "new protocol fee for token0 of the pool",
                  "feeProtocol1": "new protocol fee for token1 of the pool"
                }
              }
            },
            "title": "Permissioned pool actions",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "collectProtocol(address,uint128,uint128)": "85b66729",
              "setFeeProtocol(uint8,uint8)": "8206a4d1"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collectProtocol\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"feeProtocol0\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol1\",\"type\":\"uint8\"}],\"name\":\"setFeeProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"collectProtocol(address,uint128,uint128)\":{\"params\":{\"amount0Requested\":\"The maximum amount of token0 to send, can be 0 to collect fees in only token1\",\"amount1Requested\":\"The maximum amount of token1 to send, can be 0 to collect fees in only token0\",\"recipient\":\"The address to which collected protocol fees should be sent\"},\"returns\":{\"amount0\":\"The protocol fee collected in token0\",\"amount1\":\"The protocol fee collected in token1\"}},\"setFeeProtocol(uint8,uint8)\":{\"params\":{\"feeProtocol0\":\"new protocol fee for token0 of the pool\",\"feeProtocol1\":\"new protocol fee for token1 of the pool\"}}},\"title\":\"Permissioned pool actions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"collectProtocol(address,uint128,uint128)\":{\"notice\":\"Collect the protocol fee accrued to the pool\"},\"setFeeProtocol(uint8,uint8)\":{\"notice\":\"Set the denominator of the protocol's % share of the fees\"}},\"notice\":\"Contains pool methods that may only be called by the factory owner\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":\"IUniswapV3PoolOwnerActions\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissioned pool actions\\n/// @notice Contains pool methods that may only be called by the factory owner\\ninterface IUniswapV3PoolOwnerActions {\\n    /// @notice Set the denominator of the protocol's % share of the fees\\n    /// @param feeProtocol0 new protocol fee for token0 of the pool\\n    /// @param feeProtocol1 new protocol fee for token1 of the pool\\n    function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;\\n\\n    /// @notice Collect the protocol fee accrued to the pool\\n    /// @param recipient The address to which collected protocol fees should be sent\\n    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\\n    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\\n    /// @return amount0 The protocol fee collected in token0\\n    /// @return amount1 The protocol fee collected in token1\\n    function collectProtocol(\\n        address recipient,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "collectProtocol(address,uint128,uint128)": {
                "notice": "Collect the protocol fee accrued to the pool"
              },
              "setFeeProtocol(uint8,uint8)": {
                "notice": "Set the denominator of the protocol's % share of the fees"
              }
            },
            "notice": "Contains pool methods that may only be called by the factory owner",
            "version": 1
          }
        }
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol": {
        "IUniswapV3PoolState": {
          "abi": [
            {
              "inputs": [],
              "name": "feeGrowthGlobal0X128",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "feeGrowthGlobal1X128",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidity",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "observations",
              "outputs": [
                {
                  "internalType": "uint32",
                  "name": "blockTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "int56",
                  "name": "tickCumulative",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityCumulativeX128",
                  "type": "uint160"
                },
                {
                  "internalType": "bool",
                  "name": "initialized",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "key",
                  "type": "bytes32"
                }
              ],
              "name": "positions",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "_liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside0LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside1LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "protocolFees",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "token0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "token1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "slot0",
              "outputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                },
                {
                  "internalType": "uint16",
                  "name": "observationIndex",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "observationCardinality",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "observationCardinalityNext",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "feeProtocol",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "unlocked",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int16",
                  "name": "wordPosition",
                  "type": "int16"
                }
              ],
              "name": "tickBitmap",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "ticks",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidityGross",
                  "type": "uint128"
                },
                {
                  "internalType": "int128",
                  "name": "liquidityNet",
                  "type": "int128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthOutside0X128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthOutside1X128",
                  "type": "uint256"
                },
                {
                  "internalType": "int56",
                  "name": "tickCumulativeOutside",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityOutsideX128",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsOutside",
                  "type": "uint32"
                },
                {
                  "internalType": "bool",
                  "name": "initialized",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "feeGrowthGlobal0X128()": {
                "details": "This value can overflow the uint256"
              },
              "feeGrowthGlobal1X128()": {
                "details": "This value can overflow the uint256"
              },
              "liquidity()": {
                "details": "This value has no relationship to the total liquidity across all ticks"
              },
              "observations(uint256)": {
                "details": "You most likely want to use #observe() instead of this method to get an observation as of some amount of time ago, rather than at a specific index in the array.",
                "params": {
                  "index": "The element of the observations array to fetch"
                },
                "returns": {
                  "blockTimestamp": "The timestamp of the observation, Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, Returns initialized whether the observation has been initialized and the values are safe to use"
                }
              },
              "positions(bytes32)": {
                "params": {
                  "key": "The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper"
                },
                "returns": {
                  "_liquidity": "The amount of liquidity in the position, Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke"
                }
              },
              "protocolFees()": {
                "details": "Protocol fees will never exceed uint128 max in either token"
              },
              "slot0()": {
                "returns": {
                  "sqrtPriceX96": "The current price of the pool as a sqrt(token1/token0) Q64.96 value tick The current tick of the pool, i.e. according to the last tick transition that was run. This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick boundary. observationIndex The index of the last oracle observation that was written, observationCardinality The current maximum number of observations stored in the pool, observationCardinalityNext The next maximum number of observations, to be updated when the observation. feeProtocol The protocol fee for both tokens of the pool. Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. unlocked Whether the pool is currently locked to reentrancy"
                }
              },
              "ticks(int24)": {
                "params": {
                  "tick": "The tick to look up"
                },
                "returns": {
                  "liquidityGross": "the total amount of position liquidity that uses the pool either as tick lower or tick upper, liquidityNet how much liquidity changes when the pool price crosses the tick, feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, secondsOutside the seconds spent on the other side of the tick from the current tick, initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. In addition, these values are only relative and must be used only in comparison to previous snapshots for a specific position."
                }
              }
            },
            "title": "Pool state that can change",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "feeGrowthGlobal0X128()": "f3058399",
              "feeGrowthGlobal1X128()": "46141319",
              "liquidity()": "1a686502",
              "observations(uint256)": "252c09d7",
              "positions(bytes32)": "514ea4bf",
              "protocolFees()": "1ad8b03b",
              "slot0()": "3850c7bd",
              "tickBitmap(int16)": "5339c296",
              "ticks(int24)": "f30dba93"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"feeGrowthGlobal0X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal1X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidity\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"observations\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"blockTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"int56\",\"name\":\"tickCumulative\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityCumulativeX128\",\"type\":\"uint160\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"positions\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"_liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFees\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"token0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"token1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slot0\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint16\",\"name\":\"observationIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinality\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int16\",\"name\":\"wordPosition\",\"type\":\"int16\"}],\"name\":\"tickBitmap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"ticks\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside0X128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside1X128\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"tickCumulativeOutside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityOutsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsOutside\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"feeGrowthGlobal0X128()\":{\"details\":\"This value can overflow the uint256\"},\"feeGrowthGlobal1X128()\":{\"details\":\"This value can overflow the uint256\"},\"liquidity()\":{\"details\":\"This value has no relationship to the total liquidity across all ticks\"},\"observations(uint256)\":{\"details\":\"You most likely want to use #observe() instead of this method to get an observation as of some amount of time ago, rather than at a specific index in the array.\",\"params\":{\"index\":\"The element of the observations array to fetch\"},\"returns\":{\"blockTimestamp\":\"The timestamp of the observation, Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, Returns initialized whether the observation has been initialized and the values are safe to use\"}},\"positions(bytes32)\":{\"params\":{\"key\":\"The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\"},\"returns\":{\"_liquidity\":\"The amount of liquidity in the position, Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\"}},\"protocolFees()\":{\"details\":\"Protocol fees will never exceed uint128 max in either token\"},\"slot0()\":{\"returns\":{\"sqrtPriceX96\":\"The current price of the pool as a sqrt(token1/token0) Q64.96 value tick The current tick of the pool, i.e. according to the last tick transition that was run. This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick boundary. observationIndex The index of the last oracle observation that was written, observationCardinality The current maximum number of observations stored in the pool, observationCardinalityNext The next maximum number of observations, to be updated when the observation. feeProtocol The protocol fee for both tokens of the pool. Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. unlocked Whether the pool is currently locked to reentrancy\"}},\"ticks(int24)\":{\"params\":{\"tick\":\"The tick to look up\"},\"returns\":{\"liquidityGross\":\"the total amount of position liquidity that uses the pool either as tick lower or tick upper, liquidityNet how much liquidity changes when the pool price crosses the tick, feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, secondsOutside the seconds spent on the other side of the tick from the current tick, initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. In addition, these values are only relative and must be used only in comparison to previous snapshots for a specific position.\"}}},\"title\":\"Pool state that can change\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"feeGrowthGlobal0X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\"},\"feeGrowthGlobal1X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\"},\"liquidity()\":{\"notice\":\"The currently in range liquidity available to the pool\"},\"observations(uint256)\":{\"notice\":\"Returns data about a specific observation index\"},\"positions(bytes32)\":{\"notice\":\"Returns the information about a position by the position's key\"},\"protocolFees()\":{\"notice\":\"The amounts of token0 and token1 that are owed to the protocol\"},\"slot0()\":{\"notice\":\"The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas when accessed externally.\"},\"tickBitmap(int16)\":{\"notice\":\"Returns 256 packed tick initialized boolean values. See TickBitmap for more information\"},\"ticks(int24)\":{\"notice\":\"Look up information about a specific tick in the pool\"}},\"notice\":\"These methods compose the pool's state, and can change with any frequency including multiple times per transaction\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":\"IUniswapV3PoolState\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that can change\\n/// @notice These methods compose the pool's state, and can change with any frequency including multiple times\\n/// per transaction\\ninterface IUniswapV3PoolState {\\n    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\\n    /// when accessed externally.\\n    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\\n    /// tick The current tick of the pool, i.e. according to the last tick transition that was run.\\n    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\\n    /// boundary.\\n    /// observationIndex The index of the last oracle observation that was written,\\n    /// observationCardinality The current maximum number of observations stored in the pool,\\n    /// observationCardinalityNext The next maximum number of observations, to be updated when the observation.\\n    /// feeProtocol The protocol fee for both tokens of the pool.\\n    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\\n    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\\n    /// unlocked Whether the pool is currently locked to reentrancy\\n    function slot0()\\n        external\\n        view\\n        returns (\\n            uint160 sqrtPriceX96,\\n            int24 tick,\\n            uint16 observationIndex,\\n            uint16 observationCardinality,\\n            uint16 observationCardinalityNext,\\n            uint8 feeProtocol,\\n            bool unlocked\\n        );\\n\\n    /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal0X128() external view returns (uint256);\\n\\n    /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal1X128() external view returns (uint256);\\n\\n    /// @notice The amounts of token0 and token1 that are owed to the protocol\\n    /// @dev Protocol fees will never exceed uint128 max in either token\\n    function protocolFees() external view returns (uint128 token0, uint128 token1);\\n\\n    /// @notice The currently in range liquidity available to the pool\\n    /// @dev This value has no relationship to the total liquidity across all ticks\\n    function liquidity() external view returns (uint128);\\n\\n    /// @notice Look up information about a specific tick in the pool\\n    /// @param tick The tick to look up\\n    /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\\n    /// tick upper,\\n    /// liquidityNet how much liquidity changes when the pool price crosses the tick,\\n    /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\\n    /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\\n    /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\\n    /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\\n    /// secondsOutside the seconds spent on the other side of the tick from the current tick,\\n    /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\\n    /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\\n    /// In addition, these values are only relative and must be used only in comparison to previous snapshots for\\n    /// a specific position.\\n    function ticks(int24 tick)\\n        external\\n        view\\n        returns (\\n            uint128 liquidityGross,\\n            int128 liquidityNet,\\n            uint256 feeGrowthOutside0X128,\\n            uint256 feeGrowthOutside1X128,\\n            int56 tickCumulativeOutside,\\n            uint160 secondsPerLiquidityOutsideX128,\\n            uint32 secondsOutside,\\n            bool initialized\\n        );\\n\\n    /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information\\n    function tickBitmap(int16 wordPosition) external view returns (uint256);\\n\\n    /// @notice Returns the information about a position by the position's key\\n    /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\\n    /// @return _liquidity The amount of liquidity in the position,\\n    /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\\n    /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\\n    /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\\n    /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\\n    function positions(bytes32 key)\\n        external\\n        view\\n        returns (\\n            uint128 _liquidity,\\n            uint256 feeGrowthInside0LastX128,\\n            uint256 feeGrowthInside1LastX128,\\n            uint128 tokensOwed0,\\n            uint128 tokensOwed1\\n        );\\n\\n    /// @notice Returns data about a specific observation index\\n    /// @param index The element of the observations array to fetch\\n    /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\\n    /// ago, rather than at a specific index in the array.\\n    /// @return blockTimestamp The timestamp of the observation,\\n    /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\\n    /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\\n    /// Returns initialized whether the observation has been initialized and the values are safe to use\\n    function observations(uint256 index)\\n        external\\n        view\\n        returns (\\n            uint32 blockTimestamp,\\n            int56 tickCumulative,\\n            uint160 secondsPerLiquidityCumulativeX128,\\n            bool initialized\\n        );\\n}\\n\",\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "feeGrowthGlobal0X128()": {
                "notice": "The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool"
              },
              "feeGrowthGlobal1X128()": {
                "notice": "The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool"
              },
              "liquidity()": {
                "notice": "The currently in range liquidity available to the pool"
              },
              "observations(uint256)": {
                "notice": "Returns data about a specific observation index"
              },
              "positions(bytes32)": {
                "notice": "Returns the information about a position by the position's key"
              },
              "protocolFees()": {
                "notice": "The amounts of token0 and token1 that are owed to the protocol"
              },
              "slot0()": {
                "notice": "The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas when accessed externally."
              },
              "tickBitmap(int16)": {
                "notice": "Returns 256 packed tick initialized boolean values. See TickBitmap for more information"
              },
              "ticks(int24)": {
                "notice": "Look up information about a specific tick in the pool"
              }
            },
            "notice": "These methods compose the pool's state, and can change with any frequency including multiple times per transaction",
            "version": 1
          }
        }
      },
      "solidity/contracts/Keep3r.sol": {
        "Keep3r": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "AlreadyAJob",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "AlreadyAKeeper",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "AlreadyDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientFunds",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobAlreadyAdded",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationImpossible",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Activation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "Dispute",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                }
              ],
              "name": "DustSent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOwner",
                  "type": "address"
                }
              ],
              "name": "JobAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationSuccessful",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashLiquidity",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashToken",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "KeeperRevoke",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "KeeperSlash",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperValidation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperWork",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_resolver",
                  "type": "address"
                }
              ],
              "name": "Resolve",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Withdrawal",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "acceptJobMigration",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "activate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "addJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "bond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                }
              ],
              "name": "bondedPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "directTokenPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_minBond",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_earned",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_age",
                  "type": "uint256"
                }
              ],
              "name": "isBondedKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isBondedKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "isKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "migrateJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingJobMigrations",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "revoke",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                }
              ],
              "name": "sendDust",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonded",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_bondAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_unbondAmount",
                  "type": "uint256"
                }
              ],
              "name": "slash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashTokenFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "worked",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobMigration(address,address)": {
                "details": "Unbond/withdraw process doesn't get migrated",
                "params": {
                  "_fromJob": "The address of the job that requested to migrate",
                  "_toJob": "The address to which the job wants to migrate to"
                }
              },
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "activate(address)": {
                "params": {
                  "_bonding": "The asset being activated as bond collateral"
                }
              },
              "addJob(address)": {
                "params": {
                  "_job": "Address of the contract for which work should be performed"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "bond(address,uint256)": {
                "params": {
                  "_amount": "The amount of bonding asset being bonded",
                  "_bonding": "The asset being bonded"
                }
              },
              "bondedPayment(address,uint256)": {
                "details": "Pays the keeper that performs the work with KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work",
                  "_payment": "The reward that should be allocated for the job"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "directTokenPayment(address,address,uint256)": {
                "details": "Pays the keeper that performs the work with a specific token",
                "params": {
                  "_amount": "The reward that should be allocated",
                  "_keeper": "Address of the keeper that performed the work",
                  "_token": "The asset being awarded to the keeper"
                }
              },
              "dispute(address)": {
                "params": {
                  "_jobOrKeeper": "The address in dispute"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "details": "Should be used for protected functions",
                "params": {
                  "_age": "The minimum keeper age required",
                  "_bond": "The bond token being evaluated",
                  "_earned": "The minimum funds earned in the keepers lifetime",
                  "_keeper": "The keeper to check",
                  "_minBond": "The minimum amount of bonded tokens"
                },
                "returns": {
                  "_isBondedKeeper": "Whether the `_keeper` meets the given requirements"
                }
              },
              "isKeeper(address)": {
                "details": "Can be used for general (non critical) functions",
                "params": {
                  "_keeper": "The keeper being investigated"
                },
                "returns": {
                  "_isKeeper": "Whether the address passed as a parameter is a keeper or not"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_liquidityCredits": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_periodCredits": "The credits the given job has at the current period"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "migrateJob(address,address)": {
                "params": {
                  "_fromJob": "The address of the job that is requesting to migrate",
                  "_toJob": "The address at which the job is requesting to migrate"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "resolve(address)": {
                "params": {
                  "_jobOrKeeper": "The address cleared"
                }
              },
              "revoke(address)": {
                "params": {
                  "_keeper": "The address being slashed"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "sendDust(address,uint256,address)": {
                "params": {
                  "_amount": "The amount of the token that will be transferred",
                  "_to": "The address that will receive the idle funds",
                  "_token": "The token that will be transferred"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "slash(address,address,uint256,uint256)": {
                "params": {
                  "_bondAmount": "The bonded amount being slashed",
                  "_bonded": "The asset being slashed",
                  "_keeper": "The address being slashed",
                  "_unbondAmount": "The pending unbond amount being slashed"
                }
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity that will be slashed",
                  "_job": "The address being slashed",
                  "_liquidity": "The address of the liquidity that will be slashed"
                }
              },
              "slashTokenFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of the token that will be slashed",
                  "_job": "The address of the job from which the token will be slashed",
                  "_token": "The address of the token that will be slashed"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_credits": "The total credits of the given job"
                }
              },
              "unbond(address,uint256)": {
                "params": {
                  "_amount": "Allows for partial unbonding",
                  "_bonding": "The asset being unbonded"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdraw(address)": {
                "params": {
                  "_bonding": "The asset to withdraw from the bonding pool"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              },
              "worked(address)": {
                "details": "Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_18": {
                  "entryPoint": null,
                  "id": 18,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_2471": {
                  "entryPoint": null,
                  "id": 2471,
                  "parameterSlots": 5,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5689": {
                  "entryPoint": null,
                  "id": 5689,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 433,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_addresst_addresst_address_fromMemory": {
                  "entryPoint": 462,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 5
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 574,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1238:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "345:401:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "392:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "401:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "404:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "394:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "394:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "394:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "366:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "375:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "362:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "362:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "387:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "358:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "358:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "355:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "417:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "457:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "427:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "427:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "417:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "476:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "520:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "531:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "516:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "516:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "486:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "486:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "476:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "544:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "588:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "599:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "584:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "584:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "554:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "554:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "544:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "612:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "656:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "667:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "652:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "652:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "622:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "622:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "612:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "680:60:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "724:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "735:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "720:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "720:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "690:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "690:50:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "680:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "279:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "290:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "302:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "310:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "318:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "326:6:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "334:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:550:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "829:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "875:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "884:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "887:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "877:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "877:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "877:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "850:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "859:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "846:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "846:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "871:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "842:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "842:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "839:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "900:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "919:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "913:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "913:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "904:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "982:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "991:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "994:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "984:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "984:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "984:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "951:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "972:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "965:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "965:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "958:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "958:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "948:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "948:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "941:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "941:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "938:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1007:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1017:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1007:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "795:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "806:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "818:6:84",
                            "type": ""
                          }
                        ],
                        "src": "751:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1134:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1144:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1156:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1167:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1152:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1152:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1144:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1186:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1201:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1217:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1222:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1213:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1213:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1226:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1209:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1209:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1197:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1197:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1179:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1179:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1179:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1103:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1114:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1125:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1033:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526203f480601f55621275006020556729a2241af62c000060215562069780602255622cd300602355601e6024553480156200003e57600080fd5b5060405162006244380380620062448339810160408190526200006191620001ce565b60016000558383838388806001600160a01b038116620000935760405162b293ed60e81b815260040160405180910390fd5b601780546001600160a01b03199081166001600160a01b0393841617909155601d80548216888416178155601b80548316888516179055601c80548316878516179055601e8054831686851690811782556000818152600e602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200013e57600080fd5b505afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017991906200023e565b6001600160a01b03919091166000908152600f60205260409020805460ff191691151591909117905550620002699650505050505050565b80516001600160a01b0381168114620001c957600080fd5b919050565b600080600080600060a08688031215620001e757600080fd5b620001f286620001b1565b94506200020260208701620001b1565b93506200021260408701620001b1565b92506200022260608701620001b1565b91506200023260808701620001b1565b90509295509295909350565b6000602082840312156200025157600080fd5b815180151581146200026257600080fd5b9392505050565b615fcb80620002796000396000f3fe608060405234801561001057600080fd5b50600436106103ec5760003560e01c806390a4684e1161020d578063c5198abc11610121578063c5198abc146109e1578063c7ae40d0146109f4578063cb4be2bb14610a07578063cb54694d14610a1a578063cd22af1b14610a2d578063d55995fe14610a58578063dd2080d614610a6b578063ddca3f4314610a7e578063e326ac4314610a87578063ebbb619414610aa7578063ec00cdfc14610aba578063ec8ca64314610acd578063f0f346b914610af6578063f11a1d1a14610b09578063f136a09d14610b1c578063f25e311b14610b3c578063f39c38a014610b4f578063f75f9f7b14610b62578063f9d46cf214610b75578063fc253d2b14610b88578063fe75bc4614610b9157600080fd5b806390a4684e146107f4578063951dc22c14610807578063966abd001461080f57806398e90a0f146108225780639d5c33d81461084b578063a21458091461085e578063a39744b514610871578063a515366a1461089c578063a5d059ca146108af578063a676f9ff146108c2578063a7d2e784146108e2578063aac6aa9c146108eb578063ab033ea9146108fe578063af320e8114610911578063b0103b1a14610924578063b239223314610947578063b440027f1461095a578063b600702a14610985578063b7e7734014610998578063b87fcbff146109ab578063c20297f0146109ce57600080fd5b806359a2255e1161030457806359a2255e146106505780635aa6e675146106635780635ebe23f0146106765780635feeb7941461067f578063633fb68f1461069257806364bb43ee1461069b57806368a9f19c146106ae578063694798e6146106c157806369fe0e2d146106ec5780636ba42aaa146106ff5780636cf262bc146107125780636e2a9ca61461072557806372da828a1461073857806374a8f1031461074b578063768b5d901461075e5780637b40c913146107675780637c8fce231461077a578063878c723e146107825780638bb6dfa8146107ab5780638cb22b76146107be5780638fe204dd146107e157600080fd5b8063034d4c61146103f157806307b435c2146104175780630c620bce146104425780630d6a1f87146104575780631101eb411461046a57806311466d721461047f57806315006b8214610492578063160e1e31146104bd578063165e62e7146104d0578063168f92e71461050d5780631b44555e146105385780631c5a9d9c146105585780631ef94b911461056b57806321040b011461058b578063238efcbc146105b6578063274a8db4146105be57806351cff8d9146105f157806352a4de291461060457806355ea6c4714610617578063575288bf1461062a578063594a3a931461063d575b600080fd5b6104046103ff36600461591c565b610ba4565b6040519081526020015b60405180910390f35b610404610425366004615956565b601260209081526000928352604080842090915290825290205481565b61044a610caa565b60405161040e9190615ccb565b610404610465366004615b05565b610cbb565b61047d6104783660046159da565b610dc1565b005b61047d61048d366004615b05565b610f1b565b6104046104a0366004615956565b601060209081526000928352604080842090915290825290205481565b61047d6104cb36600461591c565b6110aa565b6104e36104de36600461591c565b611210565b604080518251600690810b825260208085015190910b90820152918101519082015260600161040e565b61040461051b366004615956565b600960209081526000928352604080842090915290825290205481565b61040461054636600461591c565b60056020526000908152604090205481565b61047d61056636600461591c565b6115d6565b601b5461057e906001600160a01b031681565b60405161040e9190615c42565b610404610599366004615956565b601360209081526000928352604080842090915290825290205481565b61047d61170f565b6105e16105cc36600461591c565b601a6020526000908152604090205460ff1681565b604051901515815260200161040e565b61047d6105ff36600461591c565b61179b565b61047d6106123660046159da565b6119a4565b61047d61062536600461591c565b611bd5565b61047d6106383660046159da565b611c89565b61047d61064b366004615956565b611f4c565b61047d61065e36600461591c565b611ff1565b60175461057e906001600160a01b031681565b610404601f5481565b61047d61068d36600461591c565b6120a3565b61040460215481565b61047d6106a936600461591c565b61230d565b61047d6106bc36600461591c565b61238f565b6104046106cf366004615956565b602860209081526000928352604080842090915290825290205481565b61047d6106fa366004615bc6565b612447565b6105e161070d36600461591c565b6124a7565b61040461072036600461591c565b612507565b61047d6107333660046159da565b61263d565b61047d61074636600461591c565b61278c565b61047d61075936600461591c565b612829565b61040460225481565b601e5461057e906001600160a01b031681565b61044a612924565b61057e61079036600461591c565b6001602052600090815260409020546001600160a01b031681565b6104046107b936600461591c565b612930565b6105e16107cc36600461591c565b60146020526000908152604090205460ff1681565b61047d6107ef366004615bc6565b6129d3565b61047d610802366004615956565b612a31565b61044a612b1f565b61047d61081d366004615b31565b612b2b565b61057e61083036600461591c565b6002602052600090815260409020546001600160a01b031681565b61047d61085936600461591c565b612c41565b61047d61086c36600461598f565b612cf9565b61040461087f366004615956565b600860209081526000928352604080842090915290825290205481565b61047d6108aa366004615b05565b612ec9565b61047d6108bd366004615b05565b61312a565b6104046108d036600461591c565b60296020526000908152604090205481565b61040460205481565b61047d6108f936600461591c565b6131fd565b61047d61090c36600461591c565b6132b1565b61047d61091f366004615956565b613327565b6105e161093236600461591c565b60076020526000908152604090205460ff1681565b61047d610955366004615bc6565b6137a6565b610404610968366004615956565b602560209081526000928352604080842090915290825290205481565b61047d61099336600461591c565b613806565b61047d6109a6366004615bc6565b613a2b565b6105e16109b936600461591c565b60196020526000908152604090205460ff1681565b61047d6109dc366004615a6e565b613a8b565b61047d6109ef36600461591c565b613b4d565b601c5461057e906001600160a01b031681565b61047d610a1536600461591c565b613c12565b61047d610a28366004615bc6565b613caf565b610404610a3b366004615956565b601160209081526000928352604080842090915290825290205481565b61047d610a66366004615a1b565b613d33565b61047d610a793660046159da565b613f6a565b61040460245481565b610404610a9536600461591c565b60066020526000908152604090205481565b61047d610ab5366004615bc6565b6140e7565b61047d610ac836600461591c565b614147565b61057e610adb36600461591c565b602c602052600090815260409020546001600160a01b031681565b61047d610b0436600461591c565b6141e4565b601d5461057e906001600160a01b031681565b610404610b2a36600461591c565b602a6020526000908152604090205481565b61047d610b4a3660046159da565b614298565b60185461057e906001600160a01b031681565b61047d610b7036600461591c565b6144dd565b6105e1610b83366004615ab4565b614595565b61040460235481565b61047d610b9f366004615b05565b61467e565b600080610bb083612507565b6022549091504290610bcb90610bc69083615e4c565b61476e565b6001600160a01b0385166000908152602960205260409020541115610c6f576022546001600160a01b038516600090815260296020526040902054610c109042615e4c565b10610c4c576022546001600160a01b038516600090815260296020526040902054610c3b9190615db1565b610c459082615e4c565b9050610c85565b6001600160a01b038416600090815260296020526040902054610c459082615e4c565b610c784261476e565b610c829082615e4c565b90505b610c8f8183614788565b610c9885612930565b610ca29190615db1565b949350505050565b6060610cb660266147b2565b905090565b6000610cc86026846147c6565b15610dbb576000610cd884611210565b90508060400151600014610db9576001600160a01b0384166000908152600f602052604081205460ff16610d19578160200151610d1490615ebe565b610d1f565b81602001515b601d5460225460405163a0d2710760e01b8152929350610db0926001600160a01b039092169163a0d2710791610d5b9189918791600401615d82565b60206040518083038186803b158015610d7357600080fd5b505afa158015610d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dab9190615bdf565b6147e8565b92505050610dbb565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610dfd57604051636efb4f4160e11b815260040160405180910390fd5b602054610e0a9042615db1565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610e59908490615db1565b90915550610e6a90508484846147f9565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590610ea95750602154610ea78286614a07565b105b15610ec757604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de85604051610f0c91815260200190565b60405180910390a35050505050565b3360008181526007602052604090205460ff1615610f4c5760405163ad2fdf3b60e01b815260040160405180910390fd5b610f576015826147c6565b610f735760405162941a5760e11b815260040160405180910390fd5b610f7c81614b25565b15610fd7576001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615f7683398151915293610fce9390929091615d9b565b60405180910390a25b6001600160a01b0381166000908152600a60205260409020548211156110565761100081614cfb565b6001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615f768339815191529361104d9390929091615d9b565b60405180910390a25b611061818484614d89565b601b546001600160a01b03808516918382169116600080516020615f568339815191528561108d614e6d565b6040805192835260208301919091520160405180910390a4505050565b6017546001600160a01b031633146110d5576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166110fc5760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b9061115d908490600401615c42565b60206040518083038186803b15801561117557600080fd5b505afa158015611189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ad9190615b68565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa90611205908390615c42565b60405180910390a150565b60408051606081018252600080825260208201819052918101919091526112364261476e565b6001600160a01b0383166000908152602b602052604090206001015414156112ac57506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b6000806112c060225442610bc69190615e4c565b6001600160a01b0385166000908152602b602052604090206001015490915081141561142457604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b61132d4261476e565b6113379042615e4c565b8260008151811061134a5761134a615f27565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926113a69291909116908690600401615c56565b60606040518083038186803b1580156113be57600080fd5b505afa1580156113d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f69190615b83565b600692830b90920b80885291955061141091839150615dfc565b600690810b900b6020860152506115ad9050565b6001600160a01b0384166000908152602b60205260409020600101548111156115ad576040805160028082526060820183526000926020830190803683370190505090506114714261476e565b61147b9042615e4c565b8160008151811061148e5761148e615f27565b602002602001019063ffffffff16908163ffffffff16815250506022546114b44261476e565b6114be9042615e4c565b6114c89190615db1565b816001815181106114db576114db615f27565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d91926115339216908690600401615c56565b60606040518083038186803b15801561154b57600080fd5b505afa15801561155f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115839190615b83565b600692830b90920b808852919550915061159e908290615dfc565b600690810b900b602086015250505b81156115c6576115bc4261476e565b60408401526115ce565b600060408401525b50505b919050565b3360009081526007602052604090205460ff1615611607576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205461164857604051636258f48160e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b0385168452909152902054421161168b57604051630fd0eeef60e11b815260040160405180910390fd5b3360008181526011602090815260408083206001600160a01b03861684529091528120819055906116bc9083614e87565b9050816001600160a01b0316336001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a758360405161170391815260200190565b60405180910390a35050565b6018546001600160a01b0316331461173a57604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161179191615c42565b60405180910390a1565b600260005414156117c75760405162461bcd60e51b81526004016117be90615d4b565b60405180910390fd5b600260009081553381526013602090815260408083206001600160a01b038516845290915290205461180c5760405163184c088160e21b815260040160405180910390fd5b3360009081526012602090815260408083206001600160a01b0385168452909152902054421161184f576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526007602052604090205460ff1615611880576040516362e6201d60e01b815260040160405180910390fd5b3360009081526013602090815260408083206001600160a01b0385811680865291909352922054601b5490929116141561191357601c5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b1580156118fa57600080fd5b505af115801561190e573d6000803e3d6000fd5b505050505b3360008181526013602090815260408083206001600160a01b0387168085529083528184208490558484526012835281842081855290925282209190915561195b9183614f9e565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b600260005414156119c75760405162461bcd60e51b81526004016117be90615d4b565b60026000556119d76026836147c6565b6119f45760405163e0b6aead60e01b815260040160405180910390fd5b6119ff6015846147c6565b611a1c57604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611a3e9083614ff9565b50611a488361500e565b6021546001600160a01b03808516600090815260286020908152604080832093871683529290522054611a8690611a80908490615db1565b84614a07565b1015611aa557604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615f7683398151915293611af29390929091615d9b565b60405180910390a2611b0f6001600160a01b03831633308461506c565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611b46908490615db1565b90915550611b599050610dab8284614a07565b6001600160a01b0384166000908152600b602052604081208054909190611b81908490615db1565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b336000908152601a602052604090205460ff16611c0557604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16611c3e576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b60026000541415611cac5760405162461bcd60e51b81526004016117be90615d4b565b6002600055611cbc6015846147c6565b611cd957604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b0383811691161415611d075760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611d36903090600401615c42565b60206040518083038186803b158015611d4e57600080fd5b505afa158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190615bdf565b9050611d9d6001600160a01b03841633308561506c565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611dcc9190615c42565b60206040518083038186803b158015611de457600080fd5b505afa158015611df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1c9190615bdf565b611e269190615e4c565b9050600061271060245483611e3b9190615ddd565b611e459190615dc9565b9050611e518183615e4c565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190611e88908490615db1565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611ec5921683614f9e565b6001600160a01b0386166000908152600c60205260409020611ee79086614ff9565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb85604051611f3791815260200190565b60405180910390a45050600160005550505050565b6001600160a01b038281166000908152600160205260409020548391163314611f8857604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b03818116600090815260026020526040902054829116331461202d5760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b3360008181526007602052604090205460ff16156120d45760405163ad2fdf3b60e01b815260040160405180910390fd5b6120df6015826147c6565b6120fb5760405162941a5760e11b815260040160405180910390fd5b61210481614b25565b1561215f576001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615f76833981519152936121569390929091615d9b565b60405180910390a25b601d546001600160a01b038381166000908152600860209081526040808320601b548516845290915280822054905163435b21c160e01b8152600481019190915290928392839291169063435b21c19060240160606040518083038186803b1580156121ca57600080fd5b505afa1580156121de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122029190615bf8565b9250925092506000612212614e6d565b90506000612222828486886150aa565b6001600160a01b0387166000908152600a60205260409020549091508111156122bc5761224e86614cfb565b6001600160a01b038616600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615f768339815191529361229b9390929091615d9b565b60405180910390a26122ab614e6d565b91506122b9828486886150aa565b90505b6122c7868883614d89565b601b5460408051838152602081018590526001600160a01b038a8116938a821693911691600080516020615f56833981519152910160405180910390a450505050505050565b6017546001600160a01b03163314612338576040516354348f0360e01b815260040160405180910390fd5b612343602682615107565b61236057604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e56816040516112059190615c42565b6017546001600160a01b031633146123ba576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16156123f45760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b90611205908390615c42565b6017546001600160a01b03163314612472576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001611205565b60006124b1614e6d565b602e556124bf6003836147c6565b156115d1577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e546040516124f791815260200190565b60405180910390a1506001919050565b6000805b6001600160a01b0383166000908152600d6020526040902061252c9061511c565b811015612637576001600160a01b0383166000908152600d602052604081206125559083615126565b90506125626026826147c6565b1561262457600061257282611210565b90508060400151600014612622576001600160a01b0382166000908152600f602052604081205460ff166125b35781602001516125ae90615ebe565b6125b9565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b815294955061261494929093169263a0d2710792610d5b928791600401615d82565b61261e9086615db1565b9450505b505b508061262f81615e8f565b91505061250b565b50919050565b3360009081526019602052604090205460ff1661266d57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff166126a6576040516310cec38560e21b815260040160405180910390fd5b6126b18383836147f9565b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb926126e592909116908590600401615cb2565b602060405180830381600087803b1580156126ff57600080fd5b505af192505050801561272f575060408051601f3d908101601f1916820190925261272c91810190615b68565b60015b6127385761273a565b505b336001600160a01b0316836001600160a01b03167f6e10247c3c094d220ee99436c164b7f38d63b335a20ed817cbefaee4bb02d20e848460405161277f929190615cb2565b60405180910390a3505050565b6017546001600160a01b031633146127b7576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166127de5760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090611205908390615c42565b3360009081526019602052604090205460ff1661285957604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16612892576040516310cec38560e21b815260040160405180910390fd5b61289d600382615107565b50601b546001600160a01b038083166000818152600860209081526040808320949095168083529381528482205492825260138152848220848352905292909220546128eb92849291615132565b60405133906001600160a01b038316907f038a17b9b553c0c3fc2ed14b957a5d8420a1666fd2efe5c1b3fe5f23eea61bb390600090a350565b6060610cb660156147b2565b60008061293c83612507565b6022546001600160a01b038516600090815260296020526040902054919250906129669042615e4c565b1015610dbb5760008111612992576001600160a01b0383166000908152600a60205260409020546129cc565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120546129c2908390615ddd565b6129cc9190615dc9565b9150612637565b6017546001600160a01b031633146129fe576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29101611205565b6001600160a01b038281166000908152600160205260409020548391163314612a6d57604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415612aa05760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d825280832094835293905282902042905590517fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c90612b12908590615c42565b60405180910390a2505050565b6060610cb660036147b2565b6017546001600160a01b03163314612b56576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612b7d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612bde576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015612bd8573d6000803e3d6000fd5b50612bf2565b612bf26001600160a01b0384168284614f9e565b604080516001600160a01b0385811682526020820185905283168183015290517f9a3055ded8c8b5f21bbf4946c5afab6e1fa8b3f057922658e5e1ade125fb0b1e9181900360600190a1505050565b6017546001600160a01b03163314612c6c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1615612ca65760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f90611205908390615c42565b6001600160a01b038381166000908152600160205260409020548491163314612d3557604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038216612d5c5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260136020908152604080832093871683529290522054612d9f5760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211612de4576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615612e1e576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590612e6b908483614f9e565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051612eba91815260200190565b60405180910390a45050505050565b60026000541415612eec5760405162461bcd60e51b81526004016117be90615d4b565b600260009081553381526007602052604090205460ff1615612f21576040516362e6201d60e01b815260040160405180910390fd5b612f2c6015336147c6565b15612f4a5760405163d7229c4360e01b815260040160405180910390fd5b601f54612f579042615db1565b3360009081526011602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81529091906370a0823190612fa2903090600401615c42565b60206040518083038186803b158015612fba57600080fd5b505afa158015612fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff29190615bdf565b90506130096001600160a01b03841633308561506c565b6040516370a0823160e01b815281906001600160a01b038516906370a0823190613037903090600401615c42565b60206040518083038186803b15801561304f57600080fd5b505afa158015613063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130879190615bdf565b6130919190615e4c565b336000908152601460209081526040808320805460ff19166001179055601082528083206001600160a01b03881684529091528120805492945084929091906130db908490615db1565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b6020546131379042615db1565b3360008181526012602090815260408083206001600160a01b03881680855290835281842095909555928252600881528282209382529290925281208054839290613183908490615e4c565b90915550503360009081526013602090815260408083206001600160a01b0386168452909152812080548392906131bb908490615db1565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de90602001611703565b6017546001600160a01b03163314613228576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16613261576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d02590611205908390615c42565b6017546001600160a01b031633146132dc576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90611205908390615c42565b6001600160a01b03818116600090815260016020526040902054829116331461336357604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16806133a257506001600160a01b03821660009081526007602052604090205460ff165b156133c05760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c60205260409020548116908316146133fd57604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d602090815260408083209386168352929052205461342f90603c90615db1565b42101561344f576040516356248e9760e01b815260040160405180910390fd5b6134588361500e565b6134618261500e565b6001600160a01b0383166000908152600c602052604081206134829061511c565b1115613564576001600160a01b0383166000908152600c602052604081206134aa9082615126565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a1685529282528084209284529190528120805493945091926134f8908490615db1565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c9091522061353a9082615107565b506001600160a01b0383166000908152600c6020526040902061355d9082614ff9565b5050613461565b6001600160a01b0383166000908152600d602052604081206135859061511c565b1115613667576001600160a01b0383166000908152600d602052604081206135ad9082615126565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a1685529282528084209284529190528120805493945091926135fb908490615db1565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d90522061363d9082614ff9565b506001600160a01b0384166000908152600d602052604090206136609082615107565b5050613564565b6001600160a01b038084166000908152600b602052604080822054928516825281208054909190613699908490615db1565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a909152808220549285168252812080549091906136dd908490615db1565b90915550506001600160a01b0383166000908152600a602090815260408083208390556029909152812055613713601584615107565b506001600160a01b03808416600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055938352602c909152908190208054909216909155517f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f290612b12908690615c42565b6017546001600160a01b031633146137d1576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001611205565b6017546001600160a01b03163314613831576040516354348f0360e01b815260040160405180910390fd5b61383c602682614ff9565b6138595760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561389257600080fd5b505afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190615939565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b9161391e9190600401615c42565b60206040518083038186803b15801561393657600080fd5b505afa15801561394a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396e9190615b68565b6001600160a01b0382166000908152600f60205260409020805460ff191691151591909117905561399e81611210565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b90611205908390615c42565b6017546001600160a01b03163314613a56576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001611205565b3360009081526019602052604090205460ff16613abb57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff16613af4576040516310cec38560e21b815260040160405180910390fd5b613b0084848484615132565b336001600160a01b0385167f10a73de7ab6e9023aa6e2bc23f7abf4dcef591487e7e55f44c00e34fe60d56db613b368486615db1565b60405190815260200160405180910390a350505050565b613b586015826147c6565b15613b7657604051630809740d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604090205460ff1615613bb057604051632f3d320560e01b815260040160405180910390fd5b613bbb601582614ff9565b506001600160a01b03811660008181526001602052604080822080546001600160a01b03191633908117909155905190917fed3faef50715743626cd57de74281a2b17cdbfc11c0486feda541fb911e0293d91a350565b6017546001600160a01b03163314613c3d576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116613c645760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090611205908390615c42565b6017546001600160a01b03163314613cda576040516354348f0360e01b815260040160405180910390fd5b62015180811015613cfe57604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001611205565b60026000541415613d565760405162461bcd60e51b81526004016117be90615d4b565b600260009081556001600160a01b03858116825260016020526040909120548591163314613d9757604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054613dc990603c90615db1565b4211613de857604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115613e2e5760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615613e685760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290613e9f908490615e4c565b90915550613eb990506001600160a01b0385168385614f9e565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054613f07576001600160a01b0385166000908152600c60205260409020613f059085615107565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051613f5691815260200190565b60405180910390a450506001600055505050565b3360008181526007602052604090205460ff1615613f9b5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff1615613fd5576040516362e6201d60e01b815260040160405180910390fd5b613fe06015826147c6565b613ffc5760405162941a5760e11b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905220548211156140425760405163356680b760e01b815260040160405180910390fd5b6001600160a01b03808216600090815260096020908152604080832093881683529290529081208054849290614079908490615e4c565b9091555061409390506001600160a01b0385168484614f9e565b826001600160a01b0316816001600160a01b0316856001600160a01b0316600080516020615f56833981519152856140c9614e6d565b6040805192835260208301919091520160405180910390a450505050565b6017546001600160a01b03163314614112576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e790602001611205565b6017546001600160a01b03163314614172576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166141995760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90611205908390615c42565b6017546001600160a01b0316331461420f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661424857604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e90611205908390615c42565b3360009081526019602052604090205460ff166142c857604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16614301576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b0383166000908152600c6020526040902061432390836147c6565b61434057604051632eda7a1160e01b815260040160405180910390fd5b6001600160a01b038084166000908152600960209081526040808320938616835292905220548111156143855760405162919bed60e01b815260040160405180910390fd5b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb926143b992909116908590600401615cb2565b602060405180830381600087803b1580156143d357600080fd5b505af1925050508015614403575060408051601f3d908101601f1916820190925261440091810190615b68565b60015b61440c5761440e565b505b6001600160a01b03808416600090815260096020908152604080832093861683529290529081208054839290614445908490615e4c565b90915550506001600160a01b03808416600090815260096020908152604080832093861683529290522054614498576001600160a01b0383166000908152600c602052604090206144969083615107565b505b336001600160a01b0316836001600160a01b03167f20262b97130b5cb8f80624eed2733df2b05db4a0789b4a3d0157e1d318333104848460405161277f929190615cb2565b336000908152601a602052604090205460ff1661450d57604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff1615614547576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b600061459f614e6d565b602e556145ad6003876147c6565b80156145de57506001600160a01b038087166000908152600860209081526040808320938916835292905220548411155b801561460257506001600160a01b0386166000908152600560205260409020548311155b801561463157506001600160a01b038616600090815260066020526040902054829061462e9042615e4c565b10155b15614675577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e5460405161466991815260200190565b60405180910390a15060015b95945050505050565b6017546001600160a01b031633146146a9576040516354348f0360e01b815260040160405180910390fd5b6146b46015836147c6565b6146d157604051636211d34960e01b815260040160405180910390fd5b6146da8261500e565b6001600160a01b0382166000908152600a602052604081208054839290614702908490615db1565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d192614762928252602082015260400190565b60405180910390a25050565b60006022548261477e9190615eaa565b610dbb9083615e4c565b6000602254831015612637576022546147a18385615ddd565b6147ab9190615dc9565b9050610dbb565b606060006147bf83615288565b9392505050565b6001600160a01b038116600090815260018301602052604081205415156147bf565b6000610dbb826022546023546152e4565b6002600054141561481c5760405162461bcd60e51b81526004016117be90615d4b565b600260009081556001600160a01b0384168152600d6020526040902061484290836147c6565b61485e576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156148a45760405163435b562560e01b815260040160405180910390fd5b6148ad83615392565b60006148bc610dab8385614a07565b6001600160a01b0385166000908152600b602052604090205490915015614972576001600160a01b0384166000908152600b6020908152604080832054600a9092529091205461490d908390615ddd565b6149179190615dc9565b6001600160a01b0385166000908152600a60205260408120805490919061493f908490615e4c565b90915550506001600160a01b0384166000908152600b60205260408120805483929061496c908490615e4c565b90915550505b6001600160a01b038085166000908152602860209081526040808320938716835292905290812080548492906149a9908490615e4c565b90915550506001600160a01b038085166000908152602860209081526040808320938716835292905220546149fc576001600160a01b0384166000908152600d602052604090206149fa9084615107565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610dbb576001600160a01b0382166000908152600f602052604081205460ff16614a79576001600160a01b0383166000908152602b6020526040902054614a7490600160381b900460060b615ebe565b614a9d565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d2710791614ad59188918691600401615d82565b60206040518083038186803b158015614aed57600080fd5b505afa158015614b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca29190615bdf565b6000614b304261476e565b6001600160a01b03831660009081526029602052604090205410156115d157614b6060225442610bc69190615e4c565b6001600160a01b03831660009081526029602052604090205411614bd657614b8782615392565b6001600160a01b0382166000908152600b6020908152604080832054600a90925290912055614bb54261476e565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b038316600090815260296020526040902054614bfc9042615e4c565b10614c5857614c0a82615392565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460299092528220805491929091614c49908490615db1565b90915550600191506115d19050565b614c614261476e565b6001600160a01b0383166000908152602a602052604090205410156115d1576001600160a01b0382166000908152600b6020526040902054614ca283615392565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291614cd291615ddd565b614cdc9190615dc9565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260296020526040902054614d4090614d229042615e4c565b6001600160a01b0383166000908152600b6020526040902054614788565b6001600160a01b0382166000908152600a602052604081208054909190614d68908490615db1565b90915550506001600160a01b03166000908152602960205260409020429055565b6001600160a01b0383166000908152600a6020526040902054811115614dc25760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0383166000908152602a60209081526040808320429055600a90915281208054839290614df7908490615e4c565b90915550506001600160a01b038083166000908152600860209081526040808320601b5490941683529290529081208054839290614e36908490615db1565b90915550506001600160a01b03821660009081526005602052604081208054839290614e63908490615db1565b9091555050505050565b6000603f5a614e7d906040615ddd565b610cb69190615dc9565b6001600160a01b038216600090815260066020526040812054614ec0576001600160a01b03831660009081526006602052604090204290555b614ecb600384614ff9565b50506001600160a01b03808316600081815260106020908152604080832094861680845294825280832080549084905593835260088252808320948352939052918220805491928392614f1f908490615db1565b9091555050601b546001600160a01b0383811691161415610dbb57601b54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b158015614f8057600080fd5b505af1158015614f94573d6000803e3d6000fd5b5050505092915050565b614ff48363a9059cbb60e01b8484604051602401614fbd929190615cb2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526153b7565b505050565b60006147bf836001600160a01b038416615489565b61501781614b25565b5061502181614cfb565b6001600160a01b0381166000908152600a6020908152604080832054600b9092529091205461505091906154d8565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b03808516602483015283166044820152606481018290526150a49085906323b872dd60e01b90608401614fbd565b50505050565b6000808486602e546150bc9190615e4c565b6150c69190615db1565b9050670de0b6b3a7640000846127106150df8685615ddd565b6150e99190615dc9565b6150f39190615ddd565b6150fd9190615dc9565b9695505050505050565b60006147bf836001600160a01b0384166154ee565b6000610dbb825490565b60006147bf83836155e1565b601b546001600160a01b0384811691161461520a576017546001600160a01b038085169163a9059cbb91166151678486615db1565b6040518363ffffffff1660e01b8152600401615184929190615cb2565b602060405180830381600087803b15801561519e57600080fd5b505af19250505080156151ce575060408051601f3d908101601f191682019092526151cb91810190615b68565b60015b615208573d8080156151fc576040519150601f19603f3d011682016040523d82523d6000602084013e615201565b606091505b505061520a565b505b6001600160a01b03808516600090815260086020908152604080832093871683529290529081208054849290615241908490615e4c565b90915550506001600160a01b0380851660009081526013602090815260408083209387168352929052908120805483929061527d908490615e4c565b909155505050505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156152d857602002820191906000526020600020905b8154815260200190600101908083116152c4575b50505050509050919050565b60008080600019858709858702925082811083820303915050806000141561531e576000841161531357600080fd5b5082900490506147bf565b80841161532a57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b61539b8161560b565b6001600160a01b039091166000908152600b6020526040902055565b600061540c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166157ef9092919063ffffffff16565b805190915015614ff4578080602001905181019061542a9190615b68565b614ff45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016117be565b60008181526001830160205260408120546154d057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dbb565b506000610dbb565b60008183106154e757816147bf565b5090919050565b600081815260018301602052604081205480156155d7576000615512600183615e4c565b855490915060009061552690600190615e4c565b905081811461558b57600086600001828154811061554657615546615f27565b906000526020600020015490508087600001848154811061556957615569615f27565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061559c5761559c615f11565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dbb565b6000915050610dbb565b60008260000182815481106155f8576155f8615f27565b9060005260206000200154905092915050565b60006156164261476e565b601e546001600160a01b03166000908152602b6020526040902060010154146156ad57601e5461564e906001600160a01b0316611210565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d602052604090206156d19061511c565b811015612637576001600160a01b0383166000908152600d602052604081206156fa9083615126565b90506157076026826147c6565b156157dc576157154261476e565b6001600160a01b0382166000908152602b60205260409020600101541461579b5761573f81611210565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b038085166000908152602860209081526040808320938516835292905220546157cf90610dab9083614a07565b6157d99084615db1565b92505b50806157e781615e8f565b9150506156b0565b6060610ca2848460008585843b6158485760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016117be565b600080866001600160a01b031685876040516158649190615c26565b60006040518083038185875af1925050503d80600081146158a1576040519150601f19603f3d011682016040523d82523d6000602084013e6158a6565b606091505b50915091506158b68282866158c1565b979650505050505050565b606083156158d05750816147bf565b8251156158e05782518084602001fd5b8160405162461bcd60e51b81526004016117be9190615d18565b805180151581146115d157600080fd5b8051600681900b81146115d157600080fd5b60006020828403121561592e57600080fd5b81356147bf81615f3d565b60006020828403121561594b57600080fd5b81516147bf81615f3d565b6000806040838503121561596957600080fd5b823561597481615f3d565b9150602083013561598481615f3d565b809150509250929050565b6000806000606084860312156159a457600080fd5b83356159af81615f3d565b925060208401356159bf81615f3d565b915060408401356159cf81615f3d565b809150509250925092565b6000806000606084860312156159ef57600080fd5b83356159fa81615f3d565b92506020840135615a0a81615f3d565b929592945050506040919091013590565b60008060008060808587031215615a3157600080fd5b8435615a3c81615f3d565b93506020850135615a4c81615f3d565b9250604085013591506060850135615a6381615f3d565b939692955090935050565b60008060008060808587031215615a8457600080fd5b8435615a8f81615f3d565b93506020850135615a9f81615f3d565b93969395505050506040820135916060013590565b600080600080600060a08688031215615acc57600080fd5b8535615ad781615f3d565b94506020860135615ae781615f3d565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215615b1857600080fd5b8235615b2381615f3d565b946020939093013593505050565b600080600060608486031215615b4657600080fd5b8335615b5181615f3d565b92506020840135915060408401356159cf81615f3d565b600060208284031215615b7a57600080fd5b6147bf826158fa565b600080600060608486031215615b9857600080fd5b615ba18461590a565b9250615baf6020850161590a565b9150615bbd604085016158fa565b90509250925092565b600060208284031215615bd857600080fd5b5035919050565b600060208284031215615bf157600080fd5b5051919050565b600080600060608486031215615c0d57600080fd5b8351925060208401519150604084015190509250925092565b60008251615c38818460208701615e63565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015615ca557845163ffffffff1683529383019391830191600101615c83565b5090979650505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015615d0c5783516001600160a01b031683529284019291840191600101615ce7565b50909695505050505050565b6020815260008251806020840152615d37816040850160208701615e63565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b9283526020830191909152604082015260600190565b60008219821115615dc457615dc4615ee5565b500190565b600082615dd857615dd8615efb565b500490565b6000816000190483118215151615615df757615df7615ee5565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615615e2757615e27615ee5565b81667fffffffffffff018313811615615e4257615e42615ee5565b5090039392505050565b600082821015615e5e57615e5e615ee5565b500390565b60005b83811015615e7e578181015183820152602001615e66565b838111156150a45750506000910152565b6000600019821415615ea357615ea3615ee5565b5060010190565b600082615eb957615eb9615efb565b500690565b60008160060b667fffffffffffff19811415615edc57615edc615ee5565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114615f5257600080fd5b5056fe46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfaee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c3820a2646970667358221220b1237fe0bc50d34155280b1f1861a23566f2b6ef241abc6704a75b1e8dd31a6c64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x3F480 PUSH1 0x1F SSTORE PUSH3 0x127500 PUSH1 0x20 SSTORE PUSH8 0x29A2241AF62C0000 PUSH1 0x21 SSTORE PUSH3 0x69780 PUSH1 0x22 SSTORE PUSH3 0x2CD300 PUSH1 0x23 SSTORE PUSH1 0x1E PUSH1 0x24 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x6244 CODESIZE SUB DUP1 PUSH3 0x6244 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x61 SWAP2 PUSH3 0x1CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE DUP4 DUP4 DUP4 DUP4 DUP9 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x93 JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1D DUP1 SLOAD DUP3 AND DUP9 DUP5 AND OR DUP2 SSTORE PUSH1 0x1B DUP1 SLOAD DUP4 AND DUP9 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1C DUP1 SLOAD DUP4 AND DUP8 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1E DUP1 SLOAD DUP4 AND DUP7 DUP6 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP6 AND SWAP1 SWAP2 OR SWAP1 SWAP4 SSTORE SWAP1 SLOAD SWAP1 SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x696A437B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x13E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x153 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x179 SWAP2 SWAP1 PUSH3 0x23E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x269 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH3 0x1E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1F2 DUP7 PUSH3 0x1B1 JUMP JUMPDEST SWAP5 POP PUSH3 0x202 PUSH1 0x20 DUP8 ADD PUSH3 0x1B1 JUMP JUMPDEST SWAP4 POP PUSH3 0x212 PUSH1 0x40 DUP8 ADD PUSH3 0x1B1 JUMP JUMPDEST SWAP3 POP PUSH3 0x222 PUSH1 0x60 DUP8 ADD PUSH3 0x1B1 JUMP JUMPDEST SWAP2 POP PUSH3 0x232 PUSH1 0x80 DUP8 ADD PUSH3 0x1B1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5FCB DUP1 PUSH3 0x279 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3EC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90A4684E GT PUSH2 0x20D JUMPI DUP1 PUSH4 0xC5198ABC GT PUSH2 0x121 JUMPI DUP1 PUSH4 0xC5198ABC EQ PUSH2 0x9E1 JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x9F4 JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0xA07 JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0xA1A JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0xA2D JUMPI DUP1 PUSH4 0xD55995FE EQ PUSH2 0xA58 JUMPI DUP1 PUSH4 0xDD2080D6 EQ PUSH2 0xA6B JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0xA7E JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0xA87 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0xAA7 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0xABA JUMPI DUP1 PUSH4 0xEC8CA643 EQ PUSH2 0xACD JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0xAF6 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0xB09 JUMPI DUP1 PUSH4 0xF136A09D EQ PUSH2 0xB1C JUMPI DUP1 PUSH4 0xF25E311B EQ PUSH2 0xB3C JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0xB4F JUMPI DUP1 PUSH4 0xF75F9F7B EQ PUSH2 0xB62 JUMPI DUP1 PUSH4 0xF9D46CF2 EQ PUSH2 0xB75 JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0xB88 JUMPI DUP1 PUSH4 0xFE75BC46 EQ PUSH2 0xB91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x90A4684E EQ PUSH2 0x7F4 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x807 JUMPI DUP1 PUSH4 0x966ABD00 EQ PUSH2 0x80F JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x822 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x84B JUMPI DUP1 PUSH4 0xA2145809 EQ PUSH2 0x85E JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x871 JUMPI DUP1 PUSH4 0xA515366A EQ PUSH2 0x89C JUMPI DUP1 PUSH4 0xA5D059CA EQ PUSH2 0x8AF JUMPI DUP1 PUSH4 0xA676F9FF EQ PUSH2 0x8C2 JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x8E2 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x8EB JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x8FE JUMPI DUP1 PUSH4 0xAF320E81 EQ PUSH2 0x911 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x924 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x947 JUMPI DUP1 PUSH4 0xB440027F EQ PUSH2 0x95A JUMPI DUP1 PUSH4 0xB600702A EQ PUSH2 0x985 JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x998 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x9AB JUMPI DUP1 PUSH4 0xC20297F0 EQ PUSH2 0x9CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x59A2255E GT PUSH2 0x304 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x650 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x663 JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x676 JUMPI DUP1 PUSH4 0x5FEEB794 EQ PUSH2 0x67F JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x692 JUMPI DUP1 PUSH4 0x64BB43EE EQ PUSH2 0x69B JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x6AE JUMPI DUP1 PUSH4 0x694798E6 EQ PUSH2 0x6C1 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x6EC JUMPI DUP1 PUSH4 0x6BA42AAA EQ PUSH2 0x6FF JUMPI DUP1 PUSH4 0x6CF262BC EQ PUSH2 0x712 JUMPI DUP1 PUSH4 0x6E2A9CA6 EQ PUSH2 0x725 JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x738 JUMPI DUP1 PUSH4 0x74A8F103 EQ PUSH2 0x74B JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x75E JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x767 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x77A JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x782 JUMPI DUP1 PUSH4 0x8BB6DFA8 EQ PUSH2 0x7AB JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x7BE JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x7E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34D4C61 EQ PUSH2 0x3F1 JUMPI DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x417 JUMPI DUP1 PUSH4 0xC620BCE EQ PUSH2 0x442 JUMPI DUP1 PUSH4 0xD6A1F87 EQ PUSH2 0x457 JUMPI DUP1 PUSH4 0x1101EB41 EQ PUSH2 0x46A JUMPI DUP1 PUSH4 0x11466D72 EQ PUSH2 0x47F JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x492 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x4BD JUMPI DUP1 PUSH4 0x165E62E7 EQ PUSH2 0x4D0 JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x538 JUMPI DUP1 PUSH4 0x1C5A9D9C EQ PUSH2 0x558 JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x56B JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x58B JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x5B6 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x5BE JUMPI DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x5F1 JUMPI DUP1 PUSH4 0x52A4DE29 EQ PUSH2 0x604 JUMPI DUP1 PUSH4 0x55EA6C47 EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0x575288BF EQ PUSH2 0x62A JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x63D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x404 PUSH2 0x3FF CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0xBA4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x404 PUSH2 0x425 CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44A PUSH2 0xCAA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x40E SWAP2 SWAP1 PUSH2 0x5CCB JUMP JUMPDEST PUSH2 0x404 PUSH2 0x465 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B05 JUMP JUMPDEST PUSH2 0xCBB JUMP JUMPDEST PUSH2 0x47D PUSH2 0x478 CALLDATASIZE PUSH1 0x4 PUSH2 0x59DA JUMP JUMPDEST PUSH2 0xDC1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x47D PUSH2 0x48D CALLDATASIZE PUSH1 0x4 PUSH2 0x5B05 JUMP JUMPDEST PUSH2 0xF1B JUMP JUMPDEST PUSH2 0x404 PUSH2 0x4A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x4CB CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x10AA JUMP JUMPDEST PUSH2 0x4E3 PUSH2 0x4DE CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x1210 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND DUP3 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 SIGNEXTEND SWAP1 DUP3 ADD MSTORE SWAP2 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x40E JUMP JUMPDEST PUSH2 0x404 PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x404 PUSH2 0x546 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x566 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x15D6 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x57E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x40E SWAP2 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH2 0x404 PUSH2 0x599 CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x170F JUMP JUMPDEST PUSH2 0x5E1 PUSH2 0x5CC CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x40E JUMP JUMPDEST PUSH2 0x47D PUSH2 0x5FF CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x179B JUMP JUMPDEST PUSH2 0x47D PUSH2 0x612 CALLDATASIZE PUSH1 0x4 PUSH2 0x59DA JUMP JUMPDEST PUSH2 0x19A4 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x625 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x1BD5 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x638 CALLDATASIZE PUSH1 0x4 PUSH2 0x59DA JUMP JUMPDEST PUSH2 0x1C89 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x64B CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH2 0x1F4C JUMP JUMPDEST PUSH2 0x47D PUSH2 0x65E CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x1FF1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x57E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x404 PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x68D CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x20A3 JUMP JUMPDEST PUSH2 0x404 PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x6A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x230D JUMP JUMPDEST PUSH2 0x47D PUSH2 0x6BC CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x238F JUMP JUMPDEST PUSH2 0x404 PUSH2 0x6CF CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x6FA CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC6 JUMP JUMPDEST PUSH2 0x2447 JUMP JUMPDEST PUSH2 0x5E1 PUSH2 0x70D CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x24A7 JUMP JUMPDEST PUSH2 0x404 PUSH2 0x720 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x2507 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x733 CALLDATASIZE PUSH1 0x4 PUSH2 0x59DA JUMP JUMPDEST PUSH2 0x263D JUMP JUMPDEST PUSH2 0x47D PUSH2 0x746 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x278C JUMP JUMPDEST PUSH2 0x47D PUSH2 0x759 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x2829 JUMP JUMPDEST PUSH2 0x404 PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x57E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x44A PUSH2 0x2924 JUMP JUMPDEST PUSH2 0x57E PUSH2 0x790 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x404 PUSH2 0x7B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x2930 JUMP JUMPDEST PUSH2 0x5E1 PUSH2 0x7CC CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x7EF CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC6 JUMP JUMPDEST PUSH2 0x29D3 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x802 CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH2 0x2A31 JUMP JUMPDEST PUSH2 0x44A PUSH2 0x2B1F JUMP JUMPDEST PUSH2 0x47D PUSH2 0x81D CALLDATASIZE PUSH1 0x4 PUSH2 0x5B31 JUMP JUMPDEST PUSH2 0x2B2B JUMP JUMPDEST PUSH2 0x57E PUSH2 0x830 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x859 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x2C41 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x86C CALLDATASIZE PUSH1 0x4 PUSH2 0x598F JUMP JUMPDEST PUSH2 0x2CF9 JUMP JUMPDEST PUSH2 0x404 PUSH2 0x87F CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x8AA CALLDATASIZE PUSH1 0x4 PUSH2 0x5B05 JUMP JUMPDEST PUSH2 0x2EC9 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x8BD CALLDATASIZE PUSH1 0x4 PUSH2 0x5B05 JUMP JUMPDEST PUSH2 0x312A JUMP JUMPDEST PUSH2 0x404 PUSH2 0x8D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x404 PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x8F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x31FD JUMP JUMPDEST PUSH2 0x47D PUSH2 0x90C CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x32B1 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x91F CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH2 0x3327 JUMP JUMPDEST PUSH2 0x5E1 PUSH2 0x932 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x955 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC6 JUMP JUMPDEST PUSH2 0x37A6 JUMP JUMPDEST PUSH2 0x404 PUSH2 0x968 CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x993 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x3806 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x9A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC6 JUMP JUMPDEST PUSH2 0x3A2B JUMP JUMPDEST PUSH2 0x5E1 PUSH2 0x9B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x9DC CALLDATASIZE PUSH1 0x4 PUSH2 0x5A6E JUMP JUMPDEST PUSH2 0x3A8B JUMP JUMPDEST PUSH2 0x47D PUSH2 0x9EF CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x3B4D JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x57E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xA15 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x3C12 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xA28 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC6 JUMP JUMPDEST PUSH2 0x3CAF JUMP JUMPDEST PUSH2 0x404 PUSH2 0xA3B CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xA66 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A1B JUMP JUMPDEST PUSH2 0x3D33 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xA79 CALLDATASIZE PUSH1 0x4 PUSH2 0x59DA JUMP JUMPDEST PUSH2 0x3F6A JUMP JUMPDEST PUSH2 0x404 PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x404 PUSH2 0xA95 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xAB5 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC6 JUMP JUMPDEST PUSH2 0x40E7 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xAC8 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x4147 JUMP JUMPDEST PUSH2 0x57E PUSH2 0xADB CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xB04 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x41E4 JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x57E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x404 PUSH2 0xB2A CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xB4A CALLDATASIZE PUSH1 0x4 PUSH2 0x59DA JUMP JUMPDEST PUSH2 0x4298 JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x57E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xB70 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x44DD JUMP JUMPDEST PUSH2 0x5E1 PUSH2 0xB83 CALLDATASIZE PUSH1 0x4 PUSH2 0x5AB4 JUMP JUMPDEST PUSH2 0x4595 JUMP JUMPDEST PUSH2 0x404 PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xB9F CALLDATASIZE PUSH1 0x4 PUSH2 0x5B05 JUMP JUMPDEST PUSH2 0x467E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xBB0 DUP4 PUSH2 0x2507 JUMP JUMPDEST PUSH1 0x22 SLOAD SWAP1 SWAP2 POP TIMESTAMP SWAP1 PUSH2 0xBCB SWAP1 PUSH2 0xBC6 SWAP1 DUP4 PUSH2 0x5E4C JUMP JUMPDEST PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO PUSH2 0xC6F JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC10 SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST LT PUSH2 0xC4C JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC3B SWAP2 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST PUSH2 0xC45 SWAP1 DUP3 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 POP PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC45 SWAP1 DUP3 PUSH2 0x5E4C JUMP JUMPDEST PUSH2 0xC78 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH2 0xC82 SWAP1 DUP3 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0xC8F DUP2 DUP4 PUSH2 0x4788 JUMP JUMPDEST PUSH2 0xC98 DUP6 PUSH2 0x2930 JUMP JUMPDEST PUSH2 0xCA2 SWAP2 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCB6 PUSH1 0x26 PUSH2 0x47B2 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC8 PUSH1 0x26 DUP5 PUSH2 0x47C6 JUMP JUMPDEST ISZERO PUSH2 0xDBB JUMPI PUSH1 0x0 PUSH2 0xCD8 DUP5 PUSH2 0x1210 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0xDB9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xD19 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xD14 SWAP1 PUSH2 0x5EBE JUMP JUMPDEST PUSH2 0xD1F JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH2 0xDB0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0xD5B SWAP2 DUP10 SWAP2 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x5D82 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD87 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDAB SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST PUSH2 0x47E8 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xDBB JUMP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0xDFD JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 SLOAD PUSH2 0xE0A SWAP1 TIMESTAMP PUSH2 0x5DB1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0xE59 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0xE6A SWAP1 POP DUP5 DUP5 DUP5 PUSH2 0x47F9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xEA9 JUMPI POP PUSH1 0x21 SLOAD PUSH2 0xEA7 DUP3 DUP7 PUSH2 0x4A07 JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0xEC7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE DUP6 PUSH1 0x40 MLOAD PUSH2 0xF0C SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xF4C JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF57 PUSH1 0x15 DUP3 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0xF73 JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF7C DUP2 PUSH2 0x4B25 JUMP JUMPDEST ISZERO PUSH2 0xFD7 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F76 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0xFCE SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5D9B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x1056 JUMPI PUSH2 0x1000 DUP2 PUSH2 0x4CFB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F76 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x104D SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5D9B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH2 0x1061 DUP2 DUP5 DUP5 PUSH2 0x4D89 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 DUP4 DUP3 AND SWAP2 AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F56 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH2 0x108D PUSH2 0x4E6D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10D5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x10FC JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x115D SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1189 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11AD SWAP2 SWAP1 PUSH2 0x5B68 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1236 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ ISZERO PUSH2 0x12AC JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x12C0 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xBC6 SWAP2 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 SWAP2 POP DUP2 EQ ISZERO PUSH2 0x1424 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x6 SIGNEXTEND PUSH2 0x132D TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH2 0x1337 SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x134A JUMPI PUSH2 0x134A PUSH2 0x5F27 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD SWAP3 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP2 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x13A6 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C56 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13F6 SWAP2 SWAP1 PUSH2 0x5B83 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP PUSH2 0x1410 SWAP2 DUP4 SWAP2 POP PUSH2 0x5DFC JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP PUSH2 0x15AD SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 GT ISZERO PUSH2 0x15AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x1471 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH2 0x147B SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x148E JUMPI PUSH2 0x148E PUSH2 0x5F27 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x22 SLOAD PUSH2 0x14B4 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH2 0x14BE SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST PUSH2 0x14C8 SWAP2 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x14DB JUMPI PUSH2 0x14DB PUSH2 0x5F27 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP3 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x1533 SWAP3 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C56 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x154B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x155F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1583 SWAP2 SWAP1 PUSH2 0x5B83 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP SWAP2 POP PUSH2 0x159E SWAP1 DUP3 SWAP1 PUSH2 0x5DFC JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x15C6 JUMPI PUSH2 0x15BC TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x15CE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP5 ADD MSTORE JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1607 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x1648 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6258F481 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x168B JUMPI PUSH1 0x40 MLOAD PUSH4 0xFD0EEEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP2 SWAP1 SSTORE SWAP1 PUSH2 0x16BC SWAP1 DUP4 PUSH2 0x4E87 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3673530133B6DA67E9854F605B0CFA7BB9798CD33C18036DFC10D8DA7C4D4A75 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1703 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x173A JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x1791 SWAP2 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x17C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP1 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x180C JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x184F JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1880 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP1 DUP7 MSTORE SWAP2 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SLOAD PUSH1 0x1B SLOAD SWAP1 SWAP3 SWAP2 AND EQ ISZERO PUSH2 0x1913 JUMPI PUSH1 0x1C SLOAD PUSH1 0x40 MLOAD PUSH4 0x140E25AD PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xA0712D68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x190E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x12 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP2 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x195B SWAP2 DUP4 PUSH2 0x4F9E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x2717EAD6B9200DD235AAD468C9809EA400FE33AC69B5BFAA6D3E90FC922B6398 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x19C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP1 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x19D7 PUSH1 0x26 DUP4 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x19F4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE0B6AEAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x19FF PUSH1 0x15 DUP5 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x1A1C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1A3E SWAP1 DUP4 PUSH2 0x4FF9 JUMP JUMPDEST POP PUSH2 0x1A48 DUP4 PUSH2 0x500E JUMP JUMPDEST PUSH1 0x21 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1A86 SWAP1 PUSH2 0x1A80 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST DUP5 PUSH2 0x4A07 JUMP JUMPDEST LT ISZERO PUSH2 0x1AA5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F76 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1AF2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5D9B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x1B0F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x506C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1B46 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1B59 SWAP1 POP PUSH2 0xDAB DUP3 DUP5 PUSH2 0x4A07 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1B81 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 SWAP1 DUP7 AND SWAP1 PUSH32 0x4E186BC75A2220191B826BAFF3EE63C3E970E94E58A9007FF94C9A7B8E6EBB3F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1C05 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1C3E JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0xE02B2375D8FB4AEF3E5BC5D53BFFCF70B6F185C5C93E69DCBE8B6CFC58E837E2 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x1CAC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP1 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1CBC PUSH1 0x15 DUP5 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x1CD9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1D07 JUMPI PUSH1 0x40 MLOAD PUSH3 0x822D97 PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1D36 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D86 SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST SWAP1 POP PUSH2 0x1D9D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x506C JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DCC SWAP2 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DF8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E1C SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST PUSH2 0x1E26 SWAP2 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2710 PUSH1 0x24 SLOAD DUP4 PUSH2 0x1E3B SWAP2 SWAP1 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x1E45 SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E51 DUP2 DUP4 PUSH2 0x5E4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1E88 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x17 SLOAD PUSH2 0x1EC5 SWAP3 AND DUP4 PUSH2 0x4F9E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1EE7 SWAP1 DUP7 PUSH2 0x4FF9 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEC1A37D4A331A5059081E0FB5DA1735E7890900CD215A4FB1E9F2779FD7B83EB DUP6 PUSH1 0x40 MLOAD PUSH2 0x1F37 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x1F88 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x202D JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x20D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x20DF PUSH1 0x15 DUP3 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x20FB JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2104 DUP2 PUSH2 0x4B25 JUMP JUMPDEST ISZERO PUSH2 0x215F JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F76 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x2156 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5D9B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1B SLOAD DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0x435B21C1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP3 DUP4 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x435B21C1 SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2202 SWAP2 SWAP1 PUSH2 0x5BF8 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x2212 PUSH2 0x4E6D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2222 DUP3 DUP5 DUP7 DUP9 PUSH2 0x50AA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 GT ISZERO PUSH2 0x22BC JUMPI PUSH2 0x224E DUP7 PUSH2 0x4CFB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F76 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x229B SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5D9B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x22AB PUSH2 0x4E6D JUMP JUMPDEST SWAP2 POP PUSH2 0x22B9 DUP3 DUP5 DUP7 DUP9 PUSH2 0x50AA JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x22C7 DUP7 DUP9 DUP4 PUSH2 0x4D89 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP4 DUP11 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F56 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2338 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2343 PUSH1 0x26 DUP3 PUSH2 0x5107 JUMP JUMPDEST PUSH2 0x2360 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8D08B1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x51199D699BDFD516FA88DD0D2F8487C40C147B4867ACAA23ADC8D4DF6B098E56 DUP2 PUSH1 0x40 MLOAD PUSH2 0x1205 SWAP2 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x23BA JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x23F4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2472 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x1205 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x24B1 PUSH2 0x4E6D JUMP JUMPDEST PUSH1 0x2E SSTORE PUSH2 0x24BF PUSH1 0x3 DUP4 PUSH2 0x47C6 JUMP JUMPDEST ISZERO PUSH2 0x15D1 JUMPI PUSH32 0x4851CAD52E624C8F7A1D44C28A80DB05988BA2451FC0DB6B0EC338D8ECA95AFB PUSH1 0x2E SLOAD PUSH1 0x40 MLOAD PUSH2 0x24F7 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x252C SWAP1 PUSH2 0x511C JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x2637 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2555 SWAP1 DUP4 PUSH2 0x5126 JUMP JUMPDEST SWAP1 POP PUSH2 0x2562 PUSH1 0x26 DUP3 PUSH2 0x47C6 JUMP JUMPDEST ISZERO PUSH2 0x2624 JUMPI PUSH1 0x0 PUSH2 0x2572 DUP3 PUSH2 0x1210 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x2622 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x25B3 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x25AE SWAP1 PUSH2 0x5EBE JUMP JUMPDEST PUSH2 0x25B9 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SLOAD PUSH1 0x22 SLOAD SWAP2 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH2 0x2614 SWAP5 SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0xA0D27107 SWAP3 PUSH2 0xD5B SWAP3 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x5D82 JUMP JUMPDEST PUSH2 0x261E SWAP1 DUP7 PUSH2 0x5DB1 JUMP JUMPDEST SWAP5 POP POP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x262F DUP2 PUSH2 0x5E8F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x250B JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x266D JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x26A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x26B1 DUP4 DUP4 DUP4 PUSH2 0x47F9 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH2 0x26E5 SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x272F JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x272C SWAP2 DUP2 ADD SWAP1 PUSH2 0x5B68 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x2738 JUMPI PUSH2 0x273A JUMP JUMPDEST POP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6E10247C3C094D220EE99436C164B7F38D63B335A20ED817CBEFAEE4BB02D20E DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x277F SWAP3 SWAP2 SWAP1 PUSH2 0x5CB2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x27B7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x27DE JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2859 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2892 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x289D PUSH1 0x3 DUP3 PUSH2 0x5107 JUMP JUMPDEST POP PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP6 AND DUP1 DUP4 MSTORE SWAP4 DUP2 MSTORE DUP5 DUP3 KECCAK256 SLOAD SWAP3 DUP3 MSTORE PUSH1 0x13 DUP2 MSTORE DUP5 DUP3 KECCAK256 DUP5 DUP4 MSTORE SWAP1 MSTORE SWAP3 SWAP1 SWAP3 KECCAK256 SLOAD PUSH2 0x28EB SWAP3 DUP5 SWAP3 SWAP2 PUSH2 0x5132 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x38A17B9B553C0C3FC2ED14B957A5D8420A1666FD2EFE5C1B3FE5F23EEA61BB3 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCB6 PUSH1 0x15 PUSH2 0x47B2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x293C DUP4 PUSH2 0x2507 JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2966 SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST LT ISZERO PUSH2 0xDBB JUMPI PUSH1 0x0 DUP2 GT PUSH2 0x2992 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x29CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x29C2 SWAP1 DUP4 SWAP1 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x29CC SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST SWAP2 POP PUSH2 0x2637 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x29FE JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0x1205 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x2A6D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2AA0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAFE7AD49 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP6 DUP9 AND SWAP6 DUP7 OR SWAP1 SSTORE PUSH1 0x2D DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE SWAP1 MLOAD PUSH32 0xFF0456758201108DE53C0FF04C69988D4678FF455B2CE6F733328CF85722C04C SWAP1 PUSH2 0x2B12 SWAP1 DUP6 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCB6 PUSH1 0x3 PUSH2 0x47B2 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2B56 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2B7D JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2BDE JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 DUP4 ISZERO PUSH2 0x8FC MUL SWAP1 DUP5 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2BD8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x2BF2 JUMP JUMPDEST PUSH2 0x2BF2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP3 DUP5 PUSH2 0x4F9E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP6 SWAP1 MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH32 0x9A3055DED8C8B5F21BBF4946C5AFAB6E1FA8B3F057922658E5E1ADE125FB0B1E SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2C6C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2CA6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x2D35 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2D5C JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2D9F JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x2DE4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2E1E JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x12 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE SWAP1 PUSH2 0x2E6B SWAP1 DUP5 DUP4 PUSH2 0x4F9E JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFDB7893BF11F50C621E59CC7F1CF540E94295CB27CA869EC7ED7618CA7928862 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2EBA SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x2EEC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP1 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2F21 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2F2C PUSH1 0x15 CALLER PUSH2 0x47C6 JUMP JUMPDEST ISZERO PUSH2 0x2F4A JUMPI PUSH1 0x40 MLOAD PUSH4 0xD7229C43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F SLOAD PUSH2 0x2F57 SWAP1 TIMESTAMP PUSH2 0x5DB1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2FA2 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2FBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FCE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FF2 SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST SWAP1 POP PUSH2 0x3009 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x506C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x3037 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x304F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3063 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3087 SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST PUSH2 0x3091 SWAP2 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x10 DUP3 MSTORE DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP3 SWAP5 POP DUP5 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x30DB SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 CALLER SWAP1 PUSH32 0xA7E66869262026842E8D81F5E6806CDC8D846E27C824E2E22F4FE51442771B34 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x20 SLOAD PUSH2 0x3137 SWAP1 TIMESTAMP PUSH2 0x5DB1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x8 DUP2 MSTORE DUP3 DUP3 KECCAK256 SWAP4 DUP3 MSTORE SWAP3 SWAP1 SWAP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x3183 SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x31BB SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE SWAP1 PUSH1 0x20 ADD PUSH2 0x1703 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3228 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3261 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x32DC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x3363 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x33A2 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x33C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 AND SWAP1 DUP4 AND EQ PUSH2 0x33FD JUMPI PUSH1 0x40 MLOAD PUSH4 0xCED616B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x342F SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x344F JUMPI PUSH1 0x40 MLOAD PUSH4 0x56248E97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3458 DUP4 PUSH2 0x500E JUMP JUMPDEST PUSH2 0x3461 DUP3 PUSH2 0x500E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x3482 SWAP1 PUSH2 0x511C JUMP JUMPDEST GT ISZERO PUSH2 0x3564 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x34AA SWAP1 DUP3 PUSH2 0x5126 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x34F8 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP3 SWAP1 SSTORE SWAP2 DUP2 MSTORE PUSH1 0xC SWAP1 SWAP2 MSTORE KECCAK256 PUSH2 0x353A SWAP1 DUP3 PUSH2 0x5107 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x355D SWAP1 DUP3 PUSH2 0x4FF9 JUMP JUMPDEST POP POP PUSH2 0x3461 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x3585 SWAP1 PUSH2 0x511C JUMP JUMPDEST GT ISZERO PUSH2 0x3667 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x35AD SWAP1 DUP3 PUSH2 0x5126 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x35FB SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE SWAP3 DUP7 AND DUP3 MSTORE PUSH1 0xD SWAP1 MSTORE KECCAK256 PUSH2 0x363D SWAP1 DUP3 PUSH2 0x4FF9 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3660 SWAP1 DUP3 PUSH2 0x5107 JUMP JUMPDEST POP POP PUSH2 0x3564 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x3699 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x36DD SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0x29 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x3713 PUSH1 0x15 DUP5 PUSH2 0x5107 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x2D DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 DUP9 AND DUP1 DUP6 MSTORE SWAP6 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x2C SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9B712B63E3FB1325FA042D3C238CE8144937875065900528EA1E4F3B00F379F2 SWAP1 PUSH2 0x2B12 SWAP1 DUP7 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x37D1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x1205 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3831 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x383C PUSH1 0x26 DUP3 PUSH2 0x4FF9 JUMP JUMPDEST PUSH2 0x3859 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF25E6B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3892 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38CA SWAP2 SWAP1 PUSH2 0x5939 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 DUP4 AND SWAP4 DUP5 OR SWAP1 SSTORE PUSH1 0x1D SLOAD SWAP1 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0x696A437B SWAP2 PUSH2 0x391E SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3936 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x394A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x396E SWAP2 SWAP1 PUSH2 0x5B68 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x399E DUP2 PUSH2 0x1210 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 DUP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xABFA8DB4D238FA78BF4E15FCC91328DD35F3978F200E2857A56BB719732B7B0B SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3A56 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x1205 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3ABB JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3AF4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3B00 DUP5 DUP5 DUP5 DUP5 PUSH2 0x5132 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH32 0x10A73DE7AB6E9023AA6E2BC23F7ABF4DCEF591487E7E55F44C00E34FE60D56DB PUSH2 0x3B36 DUP5 DUP7 PUSH2 0x5DB1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH2 0x3B58 PUSH1 0x15 DUP3 PUSH2 0x47C6 JUMP JUMPDEST ISZERO PUSH2 0x3B76 JUMPI PUSH1 0x40 MLOAD PUSH4 0x809740D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3BB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F3D3205 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3BBB PUSH1 0x15 DUP3 PUSH2 0x4FF9 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP2 PUSH32 0xED3FAEF50715743626CD57DE74281A2B17CDBFC11C0486FEDA541FB911E0293D SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3C3D JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x3C64 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3CDA JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x3CFE JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0x1205 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x3D56 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP1 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 AND CALLER EQ PUSH2 0x3D97 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3DC9 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x3DE8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E0B4075 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP4 GT ISZERO PUSH2 0x3E2E JUMPI PUSH1 0x40 MLOAD PUSH4 0x24AE82D PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3E68 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x3E9F SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x3EB9 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP4 DUP6 PUSH2 0x4F9E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3F07 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3F05 SWAP1 DUP6 PUSH2 0x5107 JUMP JUMPDEST POP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x53E982DD9EC088D634C74C98FBBC161F808B4B6469A26C657120B9A31CB34BFE DUP7 PUSH1 0x40 MLOAD PUSH2 0x3F56 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3F9B JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3FD5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3FE0 PUSH1 0x15 DUP3 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x3FFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4042 JUMPI PUSH1 0x40 MLOAD PUSH4 0x356680B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x4079 SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x4093 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 DUP5 PUSH2 0x4F9E JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F56 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH2 0x40C9 PUSH2 0x4E6D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4112 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x1205 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4172 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x4199 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x420F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4248 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x42C8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4301 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x4323 SWAP1 DUP4 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x4340 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EDA7A11 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x4385 JUMPI PUSH1 0x40 MLOAD PUSH3 0x919BED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH2 0x43B9 SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x43D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x4403 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x4400 SWAP2 DUP2 ADD SWAP1 PUSH2 0x5B68 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x440C JUMPI PUSH2 0x440E JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4445 SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x4498 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x4496 SWAP1 DUP4 PUSH2 0x5107 JUMP JUMPDEST POP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x20262B97130B5CB8F80624EED2733DF2B05DB4A0789B4A3D0157E1D318333104 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x277F SWAP3 SWAP2 SWAP1 PUSH2 0x5CB2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x450D JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x4547 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4EE891B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x70125A1C0F5202217AAE14EC399ABFAAA13C2FD98A91D43BD3A897DD4751E80 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x459F PUSH2 0x4E6D JUMP JUMPDEST PUSH1 0x2E SSTORE PUSH2 0x45AD PUSH1 0x3 DUP8 PUSH2 0x47C6 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x45DE JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP10 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP5 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x4602 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x4631 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH2 0x462E SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST LT ISZERO JUMPDEST ISZERO PUSH2 0x4675 JUMPI PUSH32 0x4851CAD52E624C8F7A1D44C28A80DB05988BA2451FC0DB6B0EC338D8ECA95AFB PUSH1 0x2E SLOAD PUSH1 0x40 MLOAD PUSH2 0x4669 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x46A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x46B4 PUSH1 0x15 DUP4 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x46D1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x46DA DUP3 PUSH2 0x500E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4702 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x5ABCF5031FDBD3BADB9D1E09094208DE329AEE72730E87650F346584205D23D1 SWAP3 PUSH2 0x4762 SWAP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP3 PUSH2 0x477E SWAP2 SWAP1 PUSH2 0x5EAA JUMP JUMPDEST PUSH2 0xDBB SWAP1 DUP4 PUSH2 0x5E4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP4 LT ISZERO PUSH2 0x2637 JUMPI PUSH1 0x22 SLOAD PUSH2 0x47A1 DUP4 DUP6 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x47AB SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST SWAP1 POP PUSH2 0xDBB JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x47BF DUP4 PUSH2 0x5288 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x47BF JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDBB DUP3 PUSH1 0x22 SLOAD PUSH1 0x23 SLOAD PUSH2 0x52E4 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x481C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP1 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x4842 SWAP1 DUP4 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x485E JUMPI PUSH1 0x40 MLOAD PUSH3 0x41CFA5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x48A4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x435B5625 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x48AD DUP4 PUSH2 0x5392 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48BC PUSH2 0xDAB DUP4 DUP6 PUSH2 0x4A07 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x4972 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x490D SWAP1 DUP4 SWAP1 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x4917 SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x493F SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x496C SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x49A9 SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x49FC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x49FA SWAP1 DUP5 PUSH2 0x5107 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0xDBB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4A79 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4A74 SWAP1 PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND PUSH2 0x5EBE JUMP JUMPDEST PUSH2 0x4A9D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x4AD5 SWAP2 DUP9 SWAP2 DUP7 SWAP2 PUSH1 0x4 ADD PUSH2 0x5D82 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4AED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4B01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCA2 SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B30 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x15D1 JUMPI PUSH2 0x4B60 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xBC6 SWAP2 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT PUSH2 0x4BD6 JUMPI PUSH2 0x4B87 DUP3 PUSH2 0x5392 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x4BB5 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4BFC SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST LT PUSH2 0x4C58 JUMPI PUSH2 0x4C0A DUP3 PUSH2 0x5392 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SSTORE PUSH1 0x22 SLOAD PUSH1 0x29 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x4C49 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x1 SWAP2 POP PUSH2 0x15D1 SWAP1 POP JUMP JUMPDEST PUSH2 0x4C61 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x15D1 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4CA2 DUP4 PUSH2 0x5392 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP3 SWAP2 PUSH2 0x4CD2 SWAP2 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x4CDC SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4D40 SWAP1 PUSH2 0x4D22 SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4788 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x4D68 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x4DC2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x356680B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4DF7 SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1B SLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4E36 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4E63 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3F GAS PUSH2 0x4E7D SWAP1 PUSH1 0x40 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0xCB6 SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x4EC0 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMPDEST PUSH2 0x4ECB PUSH1 0x3 DUP5 PUSH2 0x4FF9 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x8 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE SWAP2 DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 DUP4 SWAP3 PUSH2 0x4F1F SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xDBB JUMPI PUSH1 0x1B SLOAD PUSH1 0x40 MLOAD PUSH4 0x852CD8D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x42966C68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4F80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4F94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x4FF4 DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x4FBD SWAP3 SWAP2 SWAP1 PUSH2 0x5CB2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x53B7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47BF DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x5489 JUMP JUMPDEST PUSH2 0x5017 DUP2 PUSH2 0x4B25 JUMP JUMPDEST POP PUSH2 0x5021 DUP2 PUSH2 0x4CFB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x5050 SWAP2 SWAP1 PUSH2 0x54D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x50A4 SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x4FBD JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 DUP7 PUSH1 0x2E SLOAD PUSH2 0x50BC SWAP2 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST PUSH2 0x50C6 SWAP2 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP5 PUSH2 0x2710 PUSH2 0x50DF DUP7 DUP6 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x50E9 SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST PUSH2 0x50F3 SWAP2 SWAP1 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x50FD SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47BF DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x54EE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDBB DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47BF DUP4 DUP4 PUSH2 0x55E1 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x520A JUMPI PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 PUSH4 0xA9059CBB SWAP2 AND PUSH2 0x5167 DUP5 DUP7 PUSH2 0x5DB1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5184 SWAP3 SWAP2 SWAP1 PUSH2 0x5CB2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x519E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x51CE JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x51CB SWAP2 DUP2 ADD SWAP1 PUSH2 0x5B68 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x5208 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x51FC JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5201 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP PUSH2 0x520A JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x5241 SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x527D SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x52D8 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x52C4 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x531E JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x5313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x47BF JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x532A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x539B DUP2 PUSH2 0x560B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x540C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x57EF SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x4FF4 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x542A SWAP2 SWAP1 PUSH2 0x5B68 JUMP JUMPDEST PUSH2 0x4FF4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17BE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x54D0 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xDBB JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xDBB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x54E7 JUMPI DUP2 PUSH2 0x47BF JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x55D7 JUMPI PUSH1 0x0 PUSH2 0x5512 PUSH1 0x1 DUP4 PUSH2 0x5E4C JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x5526 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x558B JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x5546 JUMPI PUSH2 0x5546 PUSH2 0x5F27 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x5569 JUMPI PUSH2 0x5569 PUSH2 0x5F27 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x559C JUMPI PUSH2 0x559C PUSH2 0x5F11 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xDBB JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0xDBB JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x55F8 JUMPI PUSH2 0x55F8 PUSH2 0x5F27 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5616 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x56AD JUMPI PUSH1 0x1E SLOAD PUSH2 0x564E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1210 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x56D1 SWAP1 PUSH2 0x511C JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x2637 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x56FA SWAP1 DUP4 PUSH2 0x5126 JUMP JUMPDEST SWAP1 POP PUSH2 0x5707 PUSH1 0x26 DUP3 PUSH2 0x47C6 JUMP JUMPDEST ISZERO PUSH2 0x57DC JUMPI PUSH2 0x5715 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x579B JUMPI PUSH2 0x573F DUP2 PUSH2 0x1210 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x57CF SWAP1 PUSH2 0xDAB SWAP1 DUP4 PUSH2 0x4A07 JUMP JUMPDEST PUSH2 0x57D9 SWAP1 DUP5 PUSH2 0x5DB1 JUMP JUMPDEST SWAP3 POP JUMPDEST POP DUP1 PUSH2 0x57E7 DUP2 PUSH2 0x5E8F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x56B0 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCA2 DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 DUP5 EXTCODESIZE PUSH2 0x5848 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x17BE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x5864 SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x58A1 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x58A6 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x58B6 DUP3 DUP3 DUP7 PUSH2 0x58C1 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x58D0 JUMPI POP DUP2 PUSH2 0x47BF JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x58E0 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP2 SWAP1 PUSH2 0x5D18 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x15D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x6 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x15D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x592E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x47BF DUP2 PUSH2 0x5F3D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x594B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x47BF DUP2 PUSH2 0x5F3D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5969 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5974 DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x5984 DUP2 PUSH2 0x5F3D JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x59A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x59AF DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x59BF DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x59CF DUP2 PUSH2 0x5F3D JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x59EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x59FA DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x5A0A DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5A31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5A3C DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x5A4C DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x5A63 DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5A84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5A8F DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x5A9F DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x5ACC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x5AD7 DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x5AE7 DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5B18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5B23 DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5B46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5B51 DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x59CF DUP2 PUSH2 0x5F3D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x47BF DUP3 PUSH2 0x58FA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5B98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5BA1 DUP5 PUSH2 0x590A JUMP JUMPDEST SWAP3 POP PUSH2 0x5BAF PUSH1 0x20 DUP6 ADD PUSH2 0x590A JUMP JUMPDEST SWAP2 POP PUSH2 0x5BBD PUSH1 0x40 DUP6 ADD PUSH2 0x58FA JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5BD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5BF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5C0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x5C38 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x5E63 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 DUP3 ADD SWAP2 SWAP1 PUSH1 0x60 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5CA5 JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5C83 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5D0C JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5CE7 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x5D37 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x5E63 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x6 SWAP2 SWAP1 SWAP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5DC4 JUMPI PUSH2 0x5DC4 PUSH2 0x5EE5 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5DD8 JUMPI PUSH2 0x5DD8 PUSH2 0x5EFB JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5DF7 JUMPI PUSH2 0x5DF7 PUSH2 0x5EE5 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x5E27 JUMPI PUSH2 0x5E27 PUSH2 0x5EE5 JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x5E42 JUMPI PUSH2 0x5E42 PUSH2 0x5EE5 JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x5E5E JUMPI PUSH2 0x5E5E PUSH2 0x5EE5 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5E7E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5E66 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x50A4 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x5EA3 JUMPI PUSH2 0x5EA3 PUSH2 0x5EE5 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5EB9 JUMPI PUSH2 0x5EB9 PUSH2 0x5EFB JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x5EDC JUMPI PUSH2 0x5EDC PUSH2 0x5EE5 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5F52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID CHAINID CALLCODE XOR ADDMOD PUSH26 0xA7123A197CC3828C28955D70D661C70ACBDC02450DAF5F9A9C1C STATICCALL 0xEE EXTCODEHASH 0xD 0xAB 0xA9 DUP4 PUSH30 0x1AB0597ACF34328550E4832D02E24E467825E7C2DD318C3820A264697066 PUSH20 0x58221220B1237FE0BC50D34155280B1F1861A235 PUSH7 0xF2B6EF241ABC67 DIV 0xA7 JUMPDEST 0x1E DUP14 0xD3 BYTE PUSH13 0x64736F6C634300080700330000 ",
              "sourceMap": "2517:329:17:-:0;;;702:6:31;667:41;;786:7;749:44;;877:7;834:50;;968:6;925:49;;1057:7;1015:49;;1135:2;1105:32;;2581:263:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1637:1:0;1742:7;:22;2744:13:17;2759:9;2770:14;2786:13;2813:11;;-1:-1:-1;;;;;357:25:28;;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;;;-1:-1:-1;;;;;422:24:28;;;;;;;1479:12:31;:28;;;;;;;;;;1513:8;:20;;;;;;;;;;1539:13;:30;;;;;;;;;;1575:12;:28;;;;;;;;;;;;-1:-1:-1;1609:28:31;;;:14;:28;;;;;;;:43;;;;;;;;;;;1703:12;;1730;;1689:54;;-1:-1:-1;;;1689:54:31;;1730:12;;;1689:54;;;1179:51:84;1703:12:31;;;;-1:-1:-1;1689:40:31;;1152:18:84;;1689:54:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1658:28:31;;;;;;;;:13;:28;;;;;:85;;-1:-1:-1;;1658:85:31;;;;;;;;;;-1:-1:-1;2517:329:17;;-1:-1:-1;;;;;;;2517:329:17;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:550::-;302:6;310;318;326;334;387:3;375:9;366:7;362:23;358:33;355:53;;;404:1;401;394:12;355:53;427:40;457:9;427:40;:::i;:::-;417:50;;486:49;531:2;520:9;516:18;486:49;:::i;:::-;476:59;;554:49;599:2;588:9;584:18;554:49;:::i;:::-;544:59;;622:49;667:2;656:9;652:18;622:49;:::i;:::-;612:59;;690:50;735:3;724:9;720:19;690:50;:::i;:::-;680:60;;196:550;;;;;;;;:::o;751:277::-;818:6;871:2;859:9;850:7;846:23;842:32;839:52;;;887:1;884;877:12;839:52;919:9;913:16;972:5;965:13;958:21;951:5;948:32;938:60;;994:1;991;984:12;938:60;1017:5;751:277;-1:-1:-1;;;751:277:84:o;1033:203::-;2517:329:17;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_activate_9478": {
                  "entryPoint": 20103,
                  "id": 9478,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_add_1372": {
                  "entryPoint": 21641,
                  "id": 1372,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_at_1506": {
                  "entryPoint": 21985,
                  "id": 1506,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_bondedPayment_8852": {
                  "entryPoint": 19849,
                  "id": 8852,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_calculateJobPeriodCredits_7702": {
                  "entryPoint": 22027,
                  "id": 7702,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_calculatePayment_8890": {
                  "entryPoint": 20650,
                  "id": 8890,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@_callOptionalReturn_911": {
                  "entryPoint": 21431,
                  "id": 911,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_contains_1475": {
                  "entryPoint": null,
                  "id": 1475,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_getGasLeft_8907": {
                  "entryPoint": 20077,
                  "id": 8907,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_getReward_7863": {
                  "entryPoint": 18408,
                  "id": 7863,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_length_1489": {
                  "entryPoint": null,
                  "id": 1489,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_period_7847": {
                  "entryPoint": 18286,
                  "id": 7847,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_phase_7831": {
                  "entryPoint": 18312,
                  "id": 7831,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_quoteLiquidity_7909": {
                  "entryPoint": 18951,
                  "id": 7909,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_remove_1456": {
                  "entryPoint": 21742,
                  "id": 1456,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_rewardJobCredits_7597": {
                  "entryPoint": 19707,
                  "id": 7597,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_settleJobAccountance_7938": {
                  "entryPoint": 20494,
                  "id": 7938,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_slash_9078": {
                  "entryPoint": 20786,
                  "id": 9078,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_unbondLiquidityFromJob_7802": {
                  "entryPoint": 18425,
                  "id": 7802,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_updateJobCreditsIfNeeded_7567": {
                  "entryPoint": 19237,
                  "id": 7567,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_updateJobPeriod_7612": {
                  "entryPoint": 21394,
                  "id": 7612,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_values_1520": {
                  "entryPoint": 21128,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 5903,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@acceptJobMigration_8291": {
                  "entryPoint": 13095,
                  "id": 8291,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@acceptJobOwnership_8373": {
                  "entryPoint": 8177,
                  "id": 8373,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@activate_9270": {
                  "entryPoint": 5590,
                  "id": 9270,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 11329,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addJob_7999": {
                  "entryPoint": 15181,
                  "id": 7999,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addLiquidityToJob_7283": {
                  "entryPoint": 6564,
                  "id": 7283,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 9103,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addTokenCreditsToJob_6417": {
                  "entryPoint": 7305,
                  "id": 6417,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@add_1658": {
                  "entryPoint": 20473,
                  "id": 1658,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@approveLiquidity_7148": {
                  "entryPoint": 14342,
                  "id": 7148,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@approvedLiquidities_6581": {
                  "entryPoint": 3242,
                  "id": 6581,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@at_1754": {
                  "entryPoint": 20774,
                  "id": 1754,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@bondTime_5611": {
                  "entryPoint": null,
                  "id": 5611,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bond_9206": {
                  "entryPoint": 11977,
                  "id": 9206,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@bondedPayment_8730": {
                  "entryPoint": 3867,
                  "id": 8730,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@changeJobOwnership_8336": {
                  "entryPoint": 8012,
                  "id": 8336,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@contains_1712": {
                  "entryPoint": 18374,
                  "id": 1712,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@directTokenPayment_8806": {
                  "entryPoint": 16234,
                  "id": 8806,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@dispute_5547": {
                  "entryPoint": 17629,
                  "id": 5547,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_5636": {
                  "entryPoint": null,
                  "id": 5636,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@forceLiquidityCreditsToJob_7094": {
                  "entryPoint": 18046,
                  "id": 7094,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@functionCallWithValue_1073": {
                  "entryPoint": null,
                  "id": 1073,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@functionCall_1003": {
                  "entryPoint": 22511,
                  "id": 1003,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@inflationPeriod_5631": {
                  "entryPoint": null,
                  "id": 5631,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@isBondedKeeper_8512": {
                  "entryPoint": 17813,
                  "id": 8512,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "@isContract_932": {
                  "entryPoint": null,
                  "id": 932,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@isKeeper_8454": {
                  "entryPoint": 9383,
                  "id": 8454,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobLiquidityCredits_6715": {
                  "entryPoint": 10544,
                  "id": 6715,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobOwner_8303": {
                  "entryPoint": null,
                  "id": 8303,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPendingOwner_8309": {
                  "entryPoint": null,
                  "id": 8309,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPeriodCredits_6663": {
                  "entryPoint": 9479,
                  "id": 6663,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobTokenCreditsAddedAt_6297": {
                  "entryPoint": null,
                  "id": 6297,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 10532,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keep3rHelper_5602": {
                  "entryPoint": null,
                  "id": 5602,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1Proxy_5598": {
                  "entryPoint": null,
                  "id": 5598,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1_5594": {
                  "entryPoint": null,
                  "id": 5594,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keepers_5506": {
                  "entryPoint": 11039,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@kp3rWethPool_5606": {
                  "entryPoint": null,
                  "id": 5606,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@length_1727": {
                  "entryPoint": 20764,
                  "id": 1727,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@liquidityAmount_6548": {
                  "entryPoint": null,
                  "id": 6548,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@liquidityMinimum_5621": {
                  "entryPoint": null,
                  "id": 5621,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@migrateJob_8070": {
                  "entryPoint": 10801,
                  "id": 8070,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@min_1270": {
                  "entryPoint": 21720,
                  "id": 1270,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@mulDiv_4263": {
                  "entryPoint": 21220,
                  "id": 4263,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@observeLiquidity_7053": {
                  "entryPoint": 4624,
                  "id": 7053,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingJobMigrations_8024": {
                  "entryPoint": null,
                  "id": 8024,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@quoteLiquidity_6849": {
                  "entryPoint": 3259,
                  "id": 6849,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@removeDisputer_6072": {
                  "entryPoint": 16868,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 12797,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@remove_1685": {
                  "entryPoint": 20743,
                  "id": 1685,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@resolve_5577": {
                  "entryPoint": 7125,
                  "id": 5577,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@revokeLiquidity_7171": {
                  "entryPoint": 8973,
                  "id": 7171,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@revoke_9025": {
                  "entryPoint": 10281,
                  "id": 9025,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@rewardPeriodTime_5626": {
                  "entryPoint": null,
                  "id": 5626,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@rewardedAt_6554": {
                  "entryPoint": null,
                  "id": 6554,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@safeTransferFrom_745": {
                  "entryPoint": 20588,
                  "id": 745,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@safeTransfer_719": {
                  "entryPoint": 20382,
                  "id": 719,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@sendDust_5256": {
                  "entryPoint": 11051,
                  "id": 5256,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@setBondTime_5836": {
                  "entryPoint": 14891,
                  "id": 5836,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setFee_5933": {
                  "entryPoint": 9287,
                  "id": 5933,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 12977,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setInflationPeriod_5915": {
                  "entryPoint": 14246,
                  "id": 5915,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rHelper_5717": {
                  "entryPoint": 10124,
                  "id": 5717,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1Proxy_5773": {
                  "entryPoint": 15378,
                  "id": 5773,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1_5745": {
                  "entryPoint": 16711,
                  "id": 5745,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_5818": {
                  "entryPoint": 4266,
                  "id": 5818,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setLiquidityMinimum_5872": {
                  "entryPoint": 16615,
                  "id": 5872,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRewardPeriodTime_5897": {
                  "entryPoint": 15535,
                  "id": 5897,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setUnbondTime_5854": {
                  "entryPoint": 10707,
                  "id": 5854,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@slashLiquidityFromJob_6258": {
                  "entryPoint": 9789,
                  "id": 6258,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@slashTokenFromJob_6210": {
                  "entryPoint": 17048,
                  "id": 6210,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@slash_8980": {
                  "entryPoint": 14987,
                  "id": 8980,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@totalJobCredits_6795": {
                  "entryPoint": 2980,
                  "id": 6795,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@unbondLiquidityFromJob_7351": {
                  "entryPoint": 3521,
                  "id": 7351,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@unbondTime_5616": {
                  "entryPoint": null,
                  "id": 5616,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@unbond_9317": {
                  "entryPoint": 12586,
                  "id": 9317,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 18354,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@verifyCallResult_1208": {
                  "entryPoint": 22721,
                  "id": 1208,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@withdrawLiquidityFromJob_7443": {
                  "entryPoint": 11513,
                  "id": 7443,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@withdrawTokenCreditsFromJob_6507": {
                  "entryPoint": 15667,
                  "id": 6507,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@withdraw_9413": {
                  "entryPoint": 6043,
                  "id": 9413,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@workedAt_6560": {
                  "entryPoint": null,
                  "id": 6560,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@worked_8642": {
                  "entryPoint": 8355,
                  "id": 8642,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_bool_fromMemory": {
                  "entryPoint": 22778,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_int56_fromMemory": {
                  "entryPoint": 22794,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 22812,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 22841,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 22870,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_address": {
                  "entryPoint": 22927,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256": {
                  "entryPoint": 23002,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_address": {
                  "entryPoint": 23067,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_uint256": {
                  "entryPoint": 23150,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256": {
                  "entryPoint": 23220,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 5
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 23301,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_uint256t_address": {
                  "entryPoint": 23345,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 23400,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_int56t_int56t_bool_fromMemory": {
                  "entryPoint": 23427,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 23494,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256_fromMemory": {
                  "entryPoint": 23519,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory": {
                  "entryPoint": 23544,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 23590,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 23618,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 23638,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": 23730,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 23755,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 23832,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 23883,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed": {
                  "entryPoint": 23938,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": 23963,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 23985,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 24009,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 24029,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_int56": {
                  "entryPoint": 24060,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 24140,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 24163,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "increment_t_uint256": {
                  "entryPoint": 24207,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mod_t_uint256": {
                  "entryPoint": 24234,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "negate_t_int56": {
                  "entryPoint": 24254,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 24293,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x12": {
                  "entryPoint": 24315,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x31": {
                  "entryPoint": 24337,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x32": {
                  "entryPoint": 24359,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_address": {
                  "entryPoint": 24381,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:15007:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "71:107:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "81:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "96:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "90:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "90:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "81:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "156:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "165:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "168:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "158:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "158:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "158:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "146:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "139:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "139:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "132:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "132:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "122:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "122:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "115:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "115:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "112:60:84"
                            }
                          ]
                        },
                        "name": "abi_decode_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "50:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "61:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "241:106:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "251:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "266:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "260:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "260:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "251:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "325:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "334:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "337:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "327:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "327:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "327:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "295:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "313:1:84",
                                            "type": "",
                                            "value": "6"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "316:5:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "302:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "302:20:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "292:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "292:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "285:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "285:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "282:59:84"
                            }
                          ]
                        },
                        "name": "abi_decode_int56_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "220:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "231:5:84",
                            "type": ""
                          }
                        ],
                        "src": "183:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "422:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "468:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "477:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "480:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "470:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "470:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "470:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "443:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "452:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "439:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "439:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "464:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "435:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "435:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "432:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "493:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "519:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "506:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "506:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "497:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "563:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "538:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "538:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "538:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "578:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "588:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "578:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "388:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "399:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "411:6:84",
                            "type": ""
                          }
                        ],
                        "src": "352:247:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "685:170:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "731:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "740:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "743:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "733:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "733:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "733:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "706:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "715:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "702:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "702:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "727:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "698:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "698:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "695:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "756:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "775:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "769:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "769:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "760:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "819:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "794:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "794:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "794:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "834:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "844:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "834:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "651:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "662:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "674:6:84",
                            "type": ""
                          }
                        ],
                        "src": "604:251:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "947:301:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "993:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1002:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1005:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "995:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "995:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "995:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "968:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "977:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "964:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "964:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "989:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "960:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "960:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "957:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1018:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1044:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1031:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1031:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1022:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1088:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1063:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1063:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1063:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1103:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1113:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1103:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1127:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1159:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1170:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1155:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1155:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1142:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1142:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1131:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1208:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1183:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1183:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1183:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1225:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1235:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1225:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "905:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "916:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "928:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "936:6:84",
                            "type": ""
                          }
                        ],
                        "src": "860:388:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1357:425:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1403:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1412:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1415:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1405:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1405:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1405:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1378:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1387:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1374:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1374:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1399:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1370:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1370:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1367:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1428:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1454:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1441:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1441:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1432:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1498:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1473:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1473:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1473:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1513:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1523:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1513:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1537:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1569:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1580:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1565:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1565:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1552:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1552:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1541:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1618:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1593:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1593:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1593:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1635:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1645:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1635:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1661:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1693:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1704:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1689:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1689:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1676:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1676:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1665:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1742:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1717:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1717:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1717:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1759:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "1769:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1759:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1307:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1318:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1330:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1338:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1346:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1253:529:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1891:352:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1937:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1946:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1949:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1939:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1939:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1939:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1912:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1921:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1908:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1908:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1933:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1904:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1904:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1901:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1962:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1988:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1975:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1975:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1966:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2032:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2007:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2007:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2007:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2047:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2057:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2047:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2071:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2103:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2114:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2099:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2099:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2086:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2086:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2075:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2152:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2127:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2127:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2127:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2169:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "2179:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2169:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2195:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2222:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2233:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2218:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2218:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2205:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2205:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2195:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1841:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1852:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1864:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1872:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1880:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1787:456:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2369:477:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2416:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2425:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2428:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2418:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2418:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2418:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2390:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2399:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2386:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2386:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2411:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2382:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2382:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2379:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2441:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2467:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2454:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2454:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2445:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2511:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2486:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2486:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2486:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2526:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2536:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2526:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2550:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2582:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2593:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2578:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2578:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2565:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2565:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2554:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2631:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2606:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2606:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2606:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2648:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "2658:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2648:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2674:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2701:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2712:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2697:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2697:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2684:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2684:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2674:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2725:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2757:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2768:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2753:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2753:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2740:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2740:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2729:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2806:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2781:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2781:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2781:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2823:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "2833:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "2823:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2311:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2322:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2334:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2342:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2350:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2358:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2248:598:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2972:404:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3019:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3028:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3031:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3021:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3021:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3021:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2993:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3002:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2989:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2989:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3014:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2985:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2985:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2982:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3044:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3070:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3057:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3057:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3048:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3114:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3089:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3089:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3089:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3129:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3139:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3129:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3153:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3185:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3196:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3181:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3181:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3168:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3168:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3157:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3234:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3209:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3209:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3209:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3251:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "3261:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3251:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3277:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3304:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3315:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3300:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3300:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3287:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3287:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3277:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3328:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3355:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3366:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3351:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3351:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3338:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3338:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "3328:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2914:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2925:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2937:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2945:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2953:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2961:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2851:525:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3519:456:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3566:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3575:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3578:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3568:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3568:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3568:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3540:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3549:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3536:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3536:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3561:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3532:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3532:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3529:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3591:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3617:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3604:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3604:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3595:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3661:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3636:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3636:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3636:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3676:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3686:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3676:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3700:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3732:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3743:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3728:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3728:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3715:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3715:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3704:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3781:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3756:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3756:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3756:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3798:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "3808:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3798:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3824:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3851:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3862:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3847:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3847:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3834:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3834:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3824:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3875:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3902:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3913:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3898:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3898:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3885:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3885:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "3875:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3926:43:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3953:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3964:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3949:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3949:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3936:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3936:33:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3926:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3453:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3464:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3476:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3484:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3492:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "3500:6:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "3508:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3381:594:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4067:228:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4113:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4122:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4125:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4115:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4115:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4115:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4088:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4097:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4084:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4084:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4109:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4080:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4080:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4077:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4138:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4164:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4151:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4151:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4142:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4208:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4183:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4183:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4183:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4223:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4233:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4223:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4247:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4274:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4285:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4270:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4270:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4257:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4257:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4247:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4025:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4036:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4048:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4056:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3980:315:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4404:352:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4450:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4459:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4462:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4452:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4452:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4452:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4425:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4434:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4421:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4421:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4446:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4417:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4417:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4414:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4475:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4501:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4488:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4488:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4479:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4545:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4520:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4520:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4520:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4560:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4570:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4560:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4584:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4611:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4622:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4607:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4607:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4594:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4594:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4584:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4635:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4667:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4678:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4663:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4663:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4650:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4650:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4639:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4716:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4691:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4691:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4691:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4733:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "4743:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4733:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4354:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4365:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4377:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4385:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4393:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4300:456:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4839:124:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4885:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4894:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4897:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4887:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4887:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4887:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4860:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4869:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4856:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4856:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4881:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4852:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4852:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4849:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4910:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4947:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4920:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4920:37:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4910:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4805:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4816:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4828:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4761:202:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5076:256:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5122:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5131:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5134:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5124:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5124:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5124:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5097:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5106:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5093:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5093:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5118:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5089:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5089:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5086:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5147:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5185:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_int56_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5157:27:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5157:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5147:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5204:57:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5246:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5257:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5242:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5242:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_int56_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5214:27:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5214:47:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5204:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5270:56:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5311:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5322:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5307:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5307:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5280:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5280:46:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5270:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int56t_int56t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5026:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5037:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5049:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5057:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5065:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4968:364:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5407:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5453:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5462:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5465:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5455:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5455:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5455:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5428:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5437:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5424:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5424:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5449:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5420:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5420:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5417:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5478:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5501:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5488:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5488:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5478:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5373:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5384:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5396:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5337:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5603:103:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5649:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5658:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5661:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5651:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5651:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5651:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5624:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5633:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5620:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5620:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5645:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5616:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5616:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5613:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5674:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5690:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5684:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5684:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5674:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5569:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5580:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5592:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5522:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5826:191:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5872:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5881:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5884:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5874:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5874:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5874:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5847:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5856:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5843:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5843:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5868:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5839:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5839:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5836:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5897:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5913:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5907:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5907:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5897:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5932:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5952:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5963:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5948:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5948:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5942:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5942:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5932:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5976:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5996:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6007:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5992:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5992:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5986:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5986:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5976:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5776:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5787:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5799:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5807:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5815:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5711:306:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6159:137:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6169:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6189:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6183:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6183:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6173:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6231:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6239:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6227:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6227:17:84"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6246:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6251:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6205:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6205:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6205:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6267:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6278:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6283:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6274:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6274:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "6267:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "6135:3:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6140:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "6151:3:84",
                            "type": ""
                          }
                        ],
                        "src": "6022:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6402:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6412:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6424:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6435:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6420:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6420:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6412:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6454:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6469:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6485:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6490:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "6481:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6481:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6494:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "6477:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6477:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6465:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6465:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6447:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6447:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6447:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6371:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6382:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6393:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6301:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6666:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6676:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6688:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6699:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6684:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6684:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6676:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6711:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6729:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6734:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6725:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6725:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6738:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "6721:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6721:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6715:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6756:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6771:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6779:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6767:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6767:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6749:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6749:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6749:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6803:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6814:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6799:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6799:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6823:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6831:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6819:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6819:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6792:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6792:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6792:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6855:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6866:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6851:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6851:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6871:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6844:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6844:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6844:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6619:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6630:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6638:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6646:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6657:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6509:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7066:567:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7076:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7094:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7105:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7090:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7090:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7080:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7124:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7139:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7155:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7160:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "7151:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7151:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7164:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "7147:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7147:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7135:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7135:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7117:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7117:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7117:51:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7177:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7187:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7181:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7209:9:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7220:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7205:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7205:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7225:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7198:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7198:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7198:30:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7237:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "7248:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "7241:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7263:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7283:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7277:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7277:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "7267:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7306:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7314:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7299:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7299:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7299:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7330:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7341:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7352:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7337:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7337:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "7330:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7364:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7382:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7390:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7378:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7378:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "7368:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7402:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7411:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "7406:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7470:137:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "7491:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "7506:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "7500:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "7500:13:84"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "7515:10:84",
                                              "type": "",
                                              "value": "0xffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "7496:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7496:30:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7484:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7484:43:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7484:43:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7540:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "7551:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "7556:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7547:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7547:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "7540:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7572:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "7586:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "7594:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7582:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7582:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "7572:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "7432:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7435:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7429:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7429:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "7443:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7445:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "7454:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7457:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7450:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7450:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "7445:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "7425:3:84",
                                "statements": []
                              },
                              "src": "7421:186:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7616:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "7624:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7616:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7027:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7038:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7046:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7057:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6889:744:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7767:145:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7777:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7789:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7800:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7785:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7785:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7777:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7819:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7834:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7850:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7855:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "7846:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7846:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7859:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "7842:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7842:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7830:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7830:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7812:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7812:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7812:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7883:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7894:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7879:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7879:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7899:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7872:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7872:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7872:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7728:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7739:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7747:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7758:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7638:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8074:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8084:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8096:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8107:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8092:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8092:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8084:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8119:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8137:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8142:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8133:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8133:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8146:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "8129:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8129:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8123:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8164:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8179:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8187:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8175:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8175:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8157:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8157:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8157:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8211:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8222:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8207:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8207:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8227:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8200:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8200:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8200:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8254:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8265:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8250:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8250:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "8274:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8282:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8270:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8270:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8243:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8243:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8243:43:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8027:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8038:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8046:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8054:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8065:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7917:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8448:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8458:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8468:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8462:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8479:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8497:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8508:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8493:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8493:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8483:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8527:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8538:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8520:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8520:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8520:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8550:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "8561:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "8554:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8576:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8596:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8590:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8590:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "8580:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8619:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8627:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8612:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8612:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8612:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8643:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8654:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8665:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8650:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8650:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "8643:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8677:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8695:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8703:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8691:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8691:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "8681:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8715:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8724:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "8719:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8783:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "8804:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "8819:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "8813:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "8813:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "8836:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "8841:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "8832:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "8832:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "8845:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "8828:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "8828:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "8809:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "8809:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "8797:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8797:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8797:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "8862:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "8873:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "8878:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "8869:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8869:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "8862:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "8894:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "8908:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "8916:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "8904:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8904:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "8894:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "8745:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8748:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8742:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8742:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "8756:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "8758:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "8767:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "8770:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "8763:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8763:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "8758:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "8738:3:84",
                                "statements": []
                              },
                              "src": "8734:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8938:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "8946:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8938:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8417:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8428:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8439:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8297:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9055:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9065:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9077:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9088:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9073:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9073:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9065:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9107:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "9132:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "9125:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9125:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "9118:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9118:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9100:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9100:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9100:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9024:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9035:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9046:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8960:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9273:262:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9290:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9301:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9283:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9283:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9283:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9313:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9333:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9327:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9327:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "9317:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9360:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9371:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9356:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9356:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "9376:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9349:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9349:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9349:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "9418:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9426:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9414:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9414:15:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9435:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9446:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9431:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9431:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "9451:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "9392:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9392:66:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9392:66:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9467:62:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9483:9:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "9502:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9510:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "9498:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9498:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9519:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "9515:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9515:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "9494:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9494:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9479:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9479:45:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9526:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9475:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9475:54:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9467:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9242:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9253:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9264:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9152:383:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9714:228:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9731:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9742:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9724:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9724:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9724:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9765:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9776:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9761:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9761:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9781:2:84",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9754:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9754:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9754:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9804:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9815:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9800:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9800:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9820:34:84",
                                    "type": "",
                                    "value": "Address: insufficient balance fo"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9793:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9793:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9793:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9875:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9886:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9871:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9871:18:84"
                                  },
                                  {
                                    "hexValue": "722063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9891:8:84",
                                    "type": "",
                                    "value": "r call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9864:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9864:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9864:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9909:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9921:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9932:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9917:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9917:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9909:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9691:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9705:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9540:402:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10121:179:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10138:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10149:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10131:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10131:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10131:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10172:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10183:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10168:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10168:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10188:2:84",
                                    "type": "",
                                    "value": "29"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10161:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10161:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10161:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10211:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10222:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10207:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10207:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "10227:31:84",
                                    "type": "",
                                    "value": "Address: call to non-contract"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10200:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10200:59:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10200:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10268:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10280:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10291:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10276:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10276:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10268:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10098:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10112:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9947:353:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10479:232:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10496:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10507:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10489:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10489:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10489:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10530:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10541:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10526:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10526:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10546:2:84",
                                    "type": "",
                                    "value": "42"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10519:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10519:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10519:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10569:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10580:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10565:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10565:18:84"
                                  },
                                  {
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "10585:34:84",
                                    "type": "",
                                    "value": "SafeERC20: ERC20 operation did n"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10558:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10558:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10558:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10640:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10651:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10636:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10636:18:84"
                                  },
                                  {
                                    "hexValue": "6f742073756363656564",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "10656:12:84",
                                    "type": "",
                                    "value": "ot succeed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10629:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10629:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10629:40:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10678:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10690:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10701:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10686:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10686:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10678:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10456:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10470:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10305:406:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10890:181:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10907:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10918:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10900:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10900:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10900:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10941:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10952:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10937:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10937:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10957:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10930:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10930:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10930:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10980:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10991:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10976:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10976:18:84"
                                  },
                                  {
                                    "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "10996:33:84",
                                    "type": "",
                                    "value": "ReentrancyGuard: reentrant call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10969:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10969:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10969:61:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11039:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11051:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11062:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11047:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11047:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11039:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10867:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10881:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10716:355:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11233:239:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11243:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11255:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11266:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11251:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11251:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11243:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11285:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11307:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "11316:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "11310:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11310:13:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "11296:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11296:28:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11278:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11278:47:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11278:47:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11345:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11356:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11341:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11341:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11374:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "11387:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11395:4:84",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "11383:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11383:17:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "11377:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11377:24:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "11363:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11363:39:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11334:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11334:69:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11334:69:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11423:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11434:4:84",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11419:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11419:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "11451:6:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "11459:4:84",
                                            "type": "",
                                            "value": "0x40"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "11447:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11447:17:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "11441:5:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11441:24:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11412:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11412:54:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11412:54:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11202:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11213:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11224:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11076:396:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11578:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11588:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11600:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11611:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11596:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11596:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11588:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11630:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "11641:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11623:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11623:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11623:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11547:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11558:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11569:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11477:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11812:177:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11822:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11834:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11845:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11830:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11830:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11822:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11864:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "11875:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11857:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11857:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11857:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11902:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11913:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11898:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11898:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11929:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "11932:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "11918:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11918:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11891:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11891:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11891:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11960:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11971:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11956:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11956:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "11976:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11949:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11949:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11949:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11765:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "11776:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "11784:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11792:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11803:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11659:330:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12123:119:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12133:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12145:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12156:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12141:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12141:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "12133:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12175:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "12186:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12168:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12168:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12168:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12213:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12224:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12209:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12209:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "12229:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12202:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12202:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12202:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12084:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "12095:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "12103:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12114:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11994:248:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12404:162:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12414:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12426:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12437:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12422:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12422:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "12414:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12456:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "12467:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12449:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12449:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12449:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12494:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12505:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12490:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12490:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "12510:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12483:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12483:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12483:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12537:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12548:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12533:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12533:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "12553:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12526:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12526:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12526:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12357:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "12368:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "12376:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "12384:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12395:4:84",
                            "type": ""
                          }
                        ],
                        "src": "12247:319:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12619:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12646:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "12648:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12648:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12648:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12635:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "12642:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "12638:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12638:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "12632:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12632:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12629:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12677:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12688:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12691:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12684:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12684:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "12677:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "12602:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "12605:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "12611:3:84",
                            "type": ""
                          }
                        ],
                        "src": "12571:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12750:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12773:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "12775:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12775:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12775:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12770:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "12763:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12763:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12760:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12804:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12813:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12816:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "12809:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12809:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "12804:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "12735:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "12738:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "12744:1:84",
                            "type": ""
                          }
                        ],
                        "src": "12704:120:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12881:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12940:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "12942:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12942:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12942:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "12912:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "12905:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12905:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "12898:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12898:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "12920:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12931:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "12927:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "12927:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "12935:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "12923:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12923:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "12917:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12917:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "12894:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12894:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12891:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12971:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12986:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12989:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "12982:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12982:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "12971:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "12860:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "12863:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "12869:7:84",
                            "type": ""
                          }
                        ],
                        "src": "12829:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13049:312:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13059:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13081:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "13084:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "13070:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13070:16:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "13063:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13095:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13117:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "13120:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "13106:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13106:16:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "13099:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13131:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "13145:3:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13150:1:84",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13141:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13141:11:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "13135:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13223:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "13225:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13225:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13225:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "13175:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "13168:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13168:10:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "13184:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "13197:16:84",
                                                "type": "",
                                                "value": "0x7fffffffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "13193:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "13193:21:84"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "13216:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "13189:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13189:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "13180:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13180:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "13164:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13164:58:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13161:84:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13303:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "13305:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13305:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13305:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "13261:2:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "13269:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "13278:16:84",
                                            "type": "",
                                            "value": "0x7fffffffffffff"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "13296:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "13274:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13274:26:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sgt",
                                      "nodeType": "YulIdentifier",
                                      "src": "13265:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13265:36:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "13257:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13257:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13254:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13334:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "13346:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "13351:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "13342:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13342:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "13334:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "13031:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "13034:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "13040:4:84",
                            "type": ""
                          }
                        ],
                        "src": "13002:359:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13415:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13437:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "13439:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13439:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13439:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "13431:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "13434:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13428:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13428:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13425:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13468:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "13480:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "13483:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "13476:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13476:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "13468:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "13397:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "13400:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "13406:4:84",
                            "type": ""
                          }
                        ],
                        "src": "13366:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13549:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13559:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "13568:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "13563:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13628:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "13653:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "13658:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "13649:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13649:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13672:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13677:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "13668:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "13668:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "13662:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13662:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "13642:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13642:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13642:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "13589:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "13592:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13586:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13586:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "13600:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "13602:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "13611:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13614:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "13607:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13607:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "13602:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "13582:3:84",
                                "statements": []
                              },
                              "src": "13578:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13717:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "13730:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "13735:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "13726:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13726:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13744:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "13719:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13719:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13719:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "13706:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "13709:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13703:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13703:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13700:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "13527:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "13532:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "13537:6:84",
                            "type": ""
                          }
                        ],
                        "src": "13496:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13806:88:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13837:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "13839:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13839:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13839:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "13822:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13833:1:84",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "13829:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13829:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "13819:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13819:17:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13816:43:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13868:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "13879:5:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13886:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13875:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13875:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "13868:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "increment_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "13788:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "13798:3:84",
                            "type": ""
                          }
                        ],
                        "src": "13759:135:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13937:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13960:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "13962:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13962:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13962:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "13957:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "13950:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13950:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13947:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13991:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "14000:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "14003:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "13996:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13996:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "13991:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "13922:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "13925:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "13931:1:84",
                            "type": ""
                          }
                        ],
                        "src": "13899:112:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14058:151:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14068:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14094:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "14097:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "14083:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14083:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "14072:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14150:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "14152:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14152:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14152:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14118:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14131:16:84",
                                        "type": "",
                                        "value": "0x7fffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "14127:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14127:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "14115:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14115:34:84"
                              },
                              "nodeType": "YulIf",
                              "src": "14112:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14181:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14192:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14195:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "14188:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14188:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "14181:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "14040:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "14050:3:84",
                            "type": ""
                          }
                        ],
                        "src": "14016:193:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14246:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14263:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14270:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14275:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14266:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14266:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14256:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14256:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14256:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14303:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14306:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14296:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14296:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14296:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14327:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14330:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "14320:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14320:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14320:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14214:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14378:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14395:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14402:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14407:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14398:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14398:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14388:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14388:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14388:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14435:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14438:4:84",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14428:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14428:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14428:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14459:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14462:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "14452:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14452:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14452:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14346:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14510:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14527:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14534:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14539:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14530:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14530:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14520:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14520:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14520:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14567:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14570:4:84",
                                    "type": "",
                                    "value": "0x31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14560:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14560:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14560:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14591:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14594:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "14584:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14584:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14584:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x31",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14478:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14642:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14659:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14666:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14671:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14662:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14662:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14652:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14652:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14652:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14699:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14702:4:84",
                                    "type": "",
                                    "value": "0x32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14692:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14692:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14692:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14723:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14726:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "14716:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14716:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14716:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x32",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14610:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14774:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14791:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14798:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14803:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14794:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14794:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14784:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14784:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14784:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14831:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14834:4:84",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14824:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14824:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14824:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14855:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14858:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "14848:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14848:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14848:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14742:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14919:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14983:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "14992:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "14995:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "14985:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14985:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14985:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "14942:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "14953:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "14968:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "14973:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "14964:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "14964:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "14977:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "14960:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "14960:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "14949:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "14949:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "14939:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14939:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "14932:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14932:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "14929:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "14908:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14874:131:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_bool_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_int56_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, signextend(6, value))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let value_2 := calldataload(add(headStart, 96))\n        validator_revert_address(value_2)\n        value3 := value_2\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_bool_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_int56t_int56t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_int56_fromMemory(headStart)\n        value1 := abi_decode_int56_fromMemory(add(headStart, 32))\n        value2 := abi_decode_bool_fromMemory(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let pos := tail_1\n        let length := mload(value1)\n        mstore(tail_1, length)\n        pos := add(headStart, 96)\n        let srcPtr := add(value1, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, signextend(6, mload(value0)))\n        mstore(add(headStart, 0x20), signextend(6, mload(add(value0, 0x20))))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), signextend(6, value1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_int56(x, y) -> diff\n    {\n        let x_1 := signextend(6, x)\n        let y_1 := signextend(6, y)\n        let _1 := slt(y_1, 0)\n        if and(iszero(_1), slt(x_1, add(not(0x7fffffffffffff), y_1))) { panic_error_0x11() }\n        if and(_1, sgt(x_1, add(0x7fffffffffffff, y_1))) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function negate_t_int56(value) -> ret\n    {\n        let value_1 := signextend(6, value)\n        if eq(value_1, not(0x7fffffffffffff)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106103ec5760003560e01c806390a4684e1161020d578063c5198abc11610121578063c5198abc146109e1578063c7ae40d0146109f4578063cb4be2bb14610a07578063cb54694d14610a1a578063cd22af1b14610a2d578063d55995fe14610a58578063dd2080d614610a6b578063ddca3f4314610a7e578063e326ac4314610a87578063ebbb619414610aa7578063ec00cdfc14610aba578063ec8ca64314610acd578063f0f346b914610af6578063f11a1d1a14610b09578063f136a09d14610b1c578063f25e311b14610b3c578063f39c38a014610b4f578063f75f9f7b14610b62578063f9d46cf214610b75578063fc253d2b14610b88578063fe75bc4614610b9157600080fd5b806390a4684e146107f4578063951dc22c14610807578063966abd001461080f57806398e90a0f146108225780639d5c33d81461084b578063a21458091461085e578063a39744b514610871578063a515366a1461089c578063a5d059ca146108af578063a676f9ff146108c2578063a7d2e784146108e2578063aac6aa9c146108eb578063ab033ea9146108fe578063af320e8114610911578063b0103b1a14610924578063b239223314610947578063b440027f1461095a578063b600702a14610985578063b7e7734014610998578063b87fcbff146109ab578063c20297f0146109ce57600080fd5b806359a2255e1161030457806359a2255e146106505780635aa6e675146106635780635ebe23f0146106765780635feeb7941461067f578063633fb68f1461069257806364bb43ee1461069b57806368a9f19c146106ae578063694798e6146106c157806369fe0e2d146106ec5780636ba42aaa146106ff5780636cf262bc146107125780636e2a9ca61461072557806372da828a1461073857806374a8f1031461074b578063768b5d901461075e5780637b40c913146107675780637c8fce231461077a578063878c723e146107825780638bb6dfa8146107ab5780638cb22b76146107be5780638fe204dd146107e157600080fd5b8063034d4c61146103f157806307b435c2146104175780630c620bce146104425780630d6a1f87146104575780631101eb411461046a57806311466d721461047f57806315006b8214610492578063160e1e31146104bd578063165e62e7146104d0578063168f92e71461050d5780631b44555e146105385780631c5a9d9c146105585780631ef94b911461056b57806321040b011461058b578063238efcbc146105b6578063274a8db4146105be57806351cff8d9146105f157806352a4de291461060457806355ea6c4714610617578063575288bf1461062a578063594a3a931461063d575b600080fd5b6104046103ff36600461591c565b610ba4565b6040519081526020015b60405180910390f35b610404610425366004615956565b601260209081526000928352604080842090915290825290205481565b61044a610caa565b60405161040e9190615ccb565b610404610465366004615b05565b610cbb565b61047d6104783660046159da565b610dc1565b005b61047d61048d366004615b05565b610f1b565b6104046104a0366004615956565b601060209081526000928352604080842090915290825290205481565b61047d6104cb36600461591c565b6110aa565b6104e36104de36600461591c565b611210565b604080518251600690810b825260208085015190910b90820152918101519082015260600161040e565b61040461051b366004615956565b600960209081526000928352604080842090915290825290205481565b61040461054636600461591c565b60056020526000908152604090205481565b61047d61056636600461591c565b6115d6565b601b5461057e906001600160a01b031681565b60405161040e9190615c42565b610404610599366004615956565b601360209081526000928352604080842090915290825290205481565b61047d61170f565b6105e16105cc36600461591c565b601a6020526000908152604090205460ff1681565b604051901515815260200161040e565b61047d6105ff36600461591c565b61179b565b61047d6106123660046159da565b6119a4565b61047d61062536600461591c565b611bd5565b61047d6106383660046159da565b611c89565b61047d61064b366004615956565b611f4c565b61047d61065e36600461591c565b611ff1565b60175461057e906001600160a01b031681565b610404601f5481565b61047d61068d36600461591c565b6120a3565b61040460215481565b61047d6106a936600461591c565b61230d565b61047d6106bc36600461591c565b61238f565b6104046106cf366004615956565b602860209081526000928352604080842090915290825290205481565b61047d6106fa366004615bc6565b612447565b6105e161070d36600461591c565b6124a7565b61040461072036600461591c565b612507565b61047d6107333660046159da565b61263d565b61047d61074636600461591c565b61278c565b61047d61075936600461591c565b612829565b61040460225481565b601e5461057e906001600160a01b031681565b61044a612924565b61057e61079036600461591c565b6001602052600090815260409020546001600160a01b031681565b6104046107b936600461591c565b612930565b6105e16107cc36600461591c565b60146020526000908152604090205460ff1681565b61047d6107ef366004615bc6565b6129d3565b61047d610802366004615956565b612a31565b61044a612b1f565b61047d61081d366004615b31565b612b2b565b61057e61083036600461591c565b6002602052600090815260409020546001600160a01b031681565b61047d61085936600461591c565b612c41565b61047d61086c36600461598f565b612cf9565b61040461087f366004615956565b600860209081526000928352604080842090915290825290205481565b61047d6108aa366004615b05565b612ec9565b61047d6108bd366004615b05565b61312a565b6104046108d036600461591c565b60296020526000908152604090205481565b61040460205481565b61047d6108f936600461591c565b6131fd565b61047d61090c36600461591c565b6132b1565b61047d61091f366004615956565b613327565b6105e161093236600461591c565b60076020526000908152604090205460ff1681565b61047d610955366004615bc6565b6137a6565b610404610968366004615956565b602560209081526000928352604080842090915290825290205481565b61047d61099336600461591c565b613806565b61047d6109a6366004615bc6565b613a2b565b6105e16109b936600461591c565b60196020526000908152604090205460ff1681565b61047d6109dc366004615a6e565b613a8b565b61047d6109ef36600461591c565b613b4d565b601c5461057e906001600160a01b031681565b61047d610a1536600461591c565b613c12565b61047d610a28366004615bc6565b613caf565b610404610a3b366004615956565b601160209081526000928352604080842090915290825290205481565b61047d610a66366004615a1b565b613d33565b61047d610a793660046159da565b613f6a565b61040460245481565b610404610a9536600461591c565b60066020526000908152604090205481565b61047d610ab5366004615bc6565b6140e7565b61047d610ac836600461591c565b614147565b61057e610adb36600461591c565b602c602052600090815260409020546001600160a01b031681565b61047d610b0436600461591c565b6141e4565b601d5461057e906001600160a01b031681565b610404610b2a36600461591c565b602a6020526000908152604090205481565b61047d610b4a3660046159da565b614298565b60185461057e906001600160a01b031681565b61047d610b7036600461591c565b6144dd565b6105e1610b83366004615ab4565b614595565b61040460235481565b61047d610b9f366004615b05565b61467e565b600080610bb083612507565b6022549091504290610bcb90610bc69083615e4c565b61476e565b6001600160a01b0385166000908152602960205260409020541115610c6f576022546001600160a01b038516600090815260296020526040902054610c109042615e4c565b10610c4c576022546001600160a01b038516600090815260296020526040902054610c3b9190615db1565b610c459082615e4c565b9050610c85565b6001600160a01b038416600090815260296020526040902054610c459082615e4c565b610c784261476e565b610c829082615e4c565b90505b610c8f8183614788565b610c9885612930565b610ca29190615db1565b949350505050565b6060610cb660266147b2565b905090565b6000610cc86026846147c6565b15610dbb576000610cd884611210565b90508060400151600014610db9576001600160a01b0384166000908152600f602052604081205460ff16610d19578160200151610d1490615ebe565b610d1f565b81602001515b601d5460225460405163a0d2710760e01b8152929350610db0926001600160a01b039092169163a0d2710791610d5b9189918791600401615d82565b60206040518083038186803b158015610d7357600080fd5b505afa158015610d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dab9190615bdf565b6147e8565b92505050610dbb565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610dfd57604051636efb4f4160e11b815260040160405180910390fd5b602054610e0a9042615db1565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610e59908490615db1565b90915550610e6a90508484846147f9565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590610ea95750602154610ea78286614a07565b105b15610ec757604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de85604051610f0c91815260200190565b60405180910390a35050505050565b3360008181526007602052604090205460ff1615610f4c5760405163ad2fdf3b60e01b815260040160405180910390fd5b610f576015826147c6565b610f735760405162941a5760e11b815260040160405180910390fd5b610f7c81614b25565b15610fd7576001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615f7683398151915293610fce9390929091615d9b565b60405180910390a25b6001600160a01b0381166000908152600a60205260409020548211156110565761100081614cfb565b6001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615f768339815191529361104d9390929091615d9b565b60405180910390a25b611061818484614d89565b601b546001600160a01b03808516918382169116600080516020615f568339815191528561108d614e6d565b6040805192835260208301919091520160405180910390a4505050565b6017546001600160a01b031633146110d5576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166110fc5760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b9061115d908490600401615c42565b60206040518083038186803b15801561117557600080fd5b505afa158015611189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ad9190615b68565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa90611205908390615c42565b60405180910390a150565b60408051606081018252600080825260208201819052918101919091526112364261476e565b6001600160a01b0383166000908152602b602052604090206001015414156112ac57506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b6000806112c060225442610bc69190615e4c565b6001600160a01b0385166000908152602b602052604090206001015490915081141561142457604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b61132d4261476e565b6113379042615e4c565b8260008151811061134a5761134a615f27565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926113a69291909116908690600401615c56565b60606040518083038186803b1580156113be57600080fd5b505afa1580156113d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f69190615b83565b600692830b90920b80885291955061141091839150615dfc565b600690810b900b6020860152506115ad9050565b6001600160a01b0384166000908152602b60205260409020600101548111156115ad576040805160028082526060820183526000926020830190803683370190505090506114714261476e565b61147b9042615e4c565b8160008151811061148e5761148e615f27565b602002602001019063ffffffff16908163ffffffff16815250506022546114b44261476e565b6114be9042615e4c565b6114c89190615db1565b816001815181106114db576114db615f27565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d91926115339216908690600401615c56565b60606040518083038186803b15801561154b57600080fd5b505afa15801561155f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115839190615b83565b600692830b90920b808852919550915061159e908290615dfc565b600690810b900b602086015250505b81156115c6576115bc4261476e565b60408401526115ce565b600060408401525b50505b919050565b3360009081526007602052604090205460ff1615611607576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205461164857604051636258f48160e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b0385168452909152902054421161168b57604051630fd0eeef60e11b815260040160405180910390fd5b3360008181526011602090815260408083206001600160a01b03861684529091528120819055906116bc9083614e87565b9050816001600160a01b0316336001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a758360405161170391815260200190565b60405180910390a35050565b6018546001600160a01b0316331461173a57604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161179191615c42565b60405180910390a1565b600260005414156117c75760405162461bcd60e51b81526004016117be90615d4b565b60405180910390fd5b600260009081553381526013602090815260408083206001600160a01b038516845290915290205461180c5760405163184c088160e21b815260040160405180910390fd5b3360009081526012602090815260408083206001600160a01b0385168452909152902054421161184f576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526007602052604090205460ff1615611880576040516362e6201d60e01b815260040160405180910390fd5b3360009081526013602090815260408083206001600160a01b0385811680865291909352922054601b5490929116141561191357601c5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b1580156118fa57600080fd5b505af115801561190e573d6000803e3d6000fd5b505050505b3360008181526013602090815260408083206001600160a01b0387168085529083528184208490558484526012835281842081855290925282209190915561195b9183614f9e565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b600260005414156119c75760405162461bcd60e51b81526004016117be90615d4b565b60026000556119d76026836147c6565b6119f45760405163e0b6aead60e01b815260040160405180910390fd5b6119ff6015846147c6565b611a1c57604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611a3e9083614ff9565b50611a488361500e565b6021546001600160a01b03808516600090815260286020908152604080832093871683529290522054611a8690611a80908490615db1565b84614a07565b1015611aa557604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615f7683398151915293611af29390929091615d9b565b60405180910390a2611b0f6001600160a01b03831633308461506c565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611b46908490615db1565b90915550611b599050610dab8284614a07565b6001600160a01b0384166000908152600b602052604081208054909190611b81908490615db1565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b336000908152601a602052604090205460ff16611c0557604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16611c3e576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b60026000541415611cac5760405162461bcd60e51b81526004016117be90615d4b565b6002600055611cbc6015846147c6565b611cd957604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b0383811691161415611d075760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611d36903090600401615c42565b60206040518083038186803b158015611d4e57600080fd5b505afa158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190615bdf565b9050611d9d6001600160a01b03841633308561506c565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611dcc9190615c42565b60206040518083038186803b158015611de457600080fd5b505afa158015611df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1c9190615bdf565b611e269190615e4c565b9050600061271060245483611e3b9190615ddd565b611e459190615dc9565b9050611e518183615e4c565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190611e88908490615db1565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611ec5921683614f9e565b6001600160a01b0386166000908152600c60205260409020611ee79086614ff9565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb85604051611f3791815260200190565b60405180910390a45050600160005550505050565b6001600160a01b038281166000908152600160205260409020548391163314611f8857604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b03818116600090815260026020526040902054829116331461202d5760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b3360008181526007602052604090205460ff16156120d45760405163ad2fdf3b60e01b815260040160405180910390fd5b6120df6015826147c6565b6120fb5760405162941a5760e11b815260040160405180910390fd5b61210481614b25565b1561215f576001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615f76833981519152936121569390929091615d9b565b60405180910390a25b601d546001600160a01b038381166000908152600860209081526040808320601b548516845290915280822054905163435b21c160e01b8152600481019190915290928392839291169063435b21c19060240160606040518083038186803b1580156121ca57600080fd5b505afa1580156121de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122029190615bf8565b9250925092506000612212614e6d565b90506000612222828486886150aa565b6001600160a01b0387166000908152600a60205260409020549091508111156122bc5761224e86614cfb565b6001600160a01b038616600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615f768339815191529361229b9390929091615d9b565b60405180910390a26122ab614e6d565b91506122b9828486886150aa565b90505b6122c7868883614d89565b601b5460408051838152602081018590526001600160a01b038a8116938a821693911691600080516020615f56833981519152910160405180910390a450505050505050565b6017546001600160a01b03163314612338576040516354348f0360e01b815260040160405180910390fd5b612343602682615107565b61236057604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e56816040516112059190615c42565b6017546001600160a01b031633146123ba576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16156123f45760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b90611205908390615c42565b6017546001600160a01b03163314612472576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001611205565b60006124b1614e6d565b602e556124bf6003836147c6565b156115d1577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e546040516124f791815260200190565b60405180910390a1506001919050565b6000805b6001600160a01b0383166000908152600d6020526040902061252c9061511c565b811015612637576001600160a01b0383166000908152600d602052604081206125559083615126565b90506125626026826147c6565b1561262457600061257282611210565b90508060400151600014612622576001600160a01b0382166000908152600f602052604081205460ff166125b35781602001516125ae90615ebe565b6125b9565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b815294955061261494929093169263a0d2710792610d5b928791600401615d82565b61261e9086615db1565b9450505b505b508061262f81615e8f565b91505061250b565b50919050565b3360009081526019602052604090205460ff1661266d57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff166126a6576040516310cec38560e21b815260040160405180910390fd5b6126b18383836147f9565b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb926126e592909116908590600401615cb2565b602060405180830381600087803b1580156126ff57600080fd5b505af192505050801561272f575060408051601f3d908101601f1916820190925261272c91810190615b68565b60015b6127385761273a565b505b336001600160a01b0316836001600160a01b03167f6e10247c3c094d220ee99436c164b7f38d63b335a20ed817cbefaee4bb02d20e848460405161277f929190615cb2565b60405180910390a3505050565b6017546001600160a01b031633146127b7576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166127de5760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090611205908390615c42565b3360009081526019602052604090205460ff1661285957604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16612892576040516310cec38560e21b815260040160405180910390fd5b61289d600382615107565b50601b546001600160a01b038083166000818152600860209081526040808320949095168083529381528482205492825260138152848220848352905292909220546128eb92849291615132565b60405133906001600160a01b038316907f038a17b9b553c0c3fc2ed14b957a5d8420a1666fd2efe5c1b3fe5f23eea61bb390600090a350565b6060610cb660156147b2565b60008061293c83612507565b6022546001600160a01b038516600090815260296020526040902054919250906129669042615e4c565b1015610dbb5760008111612992576001600160a01b0383166000908152600a60205260409020546129cc565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120546129c2908390615ddd565b6129cc9190615dc9565b9150612637565b6017546001600160a01b031633146129fe576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29101611205565b6001600160a01b038281166000908152600160205260409020548391163314612a6d57604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415612aa05760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d825280832094835293905282902042905590517fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c90612b12908590615c42565b60405180910390a2505050565b6060610cb660036147b2565b6017546001600160a01b03163314612b56576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612b7d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612bde576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015612bd8573d6000803e3d6000fd5b50612bf2565b612bf26001600160a01b0384168284614f9e565b604080516001600160a01b0385811682526020820185905283168183015290517f9a3055ded8c8b5f21bbf4946c5afab6e1fa8b3f057922658e5e1ade125fb0b1e9181900360600190a1505050565b6017546001600160a01b03163314612c6c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1615612ca65760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f90611205908390615c42565b6001600160a01b038381166000908152600160205260409020548491163314612d3557604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038216612d5c5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260136020908152604080832093871683529290522054612d9f5760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211612de4576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615612e1e576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590612e6b908483614f9e565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051612eba91815260200190565b60405180910390a45050505050565b60026000541415612eec5760405162461bcd60e51b81526004016117be90615d4b565b600260009081553381526007602052604090205460ff1615612f21576040516362e6201d60e01b815260040160405180910390fd5b612f2c6015336147c6565b15612f4a5760405163d7229c4360e01b815260040160405180910390fd5b601f54612f579042615db1565b3360009081526011602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81529091906370a0823190612fa2903090600401615c42565b60206040518083038186803b158015612fba57600080fd5b505afa158015612fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff29190615bdf565b90506130096001600160a01b03841633308561506c565b6040516370a0823160e01b815281906001600160a01b038516906370a0823190613037903090600401615c42565b60206040518083038186803b15801561304f57600080fd5b505afa158015613063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130879190615bdf565b6130919190615e4c565b336000908152601460209081526040808320805460ff19166001179055601082528083206001600160a01b03881684529091528120805492945084929091906130db908490615db1565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b6020546131379042615db1565b3360008181526012602090815260408083206001600160a01b03881680855290835281842095909555928252600881528282209382529290925281208054839290613183908490615e4c565b90915550503360009081526013602090815260408083206001600160a01b0386168452909152812080548392906131bb908490615db1565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de90602001611703565b6017546001600160a01b03163314613228576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16613261576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d02590611205908390615c42565b6017546001600160a01b031633146132dc576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90611205908390615c42565b6001600160a01b03818116600090815260016020526040902054829116331461336357604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16806133a257506001600160a01b03821660009081526007602052604090205460ff165b156133c05760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c60205260409020548116908316146133fd57604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d602090815260408083209386168352929052205461342f90603c90615db1565b42101561344f576040516356248e9760e01b815260040160405180910390fd5b6134588361500e565b6134618261500e565b6001600160a01b0383166000908152600c602052604081206134829061511c565b1115613564576001600160a01b0383166000908152600c602052604081206134aa9082615126565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a1685529282528084209284529190528120805493945091926134f8908490615db1565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c9091522061353a9082615107565b506001600160a01b0383166000908152600c6020526040902061355d9082614ff9565b5050613461565b6001600160a01b0383166000908152600d602052604081206135859061511c565b1115613667576001600160a01b0383166000908152600d602052604081206135ad9082615126565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a1685529282528084209284529190528120805493945091926135fb908490615db1565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d90522061363d9082614ff9565b506001600160a01b0384166000908152600d602052604090206136609082615107565b5050613564565b6001600160a01b038084166000908152600b602052604080822054928516825281208054909190613699908490615db1565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a909152808220549285168252812080549091906136dd908490615db1565b90915550506001600160a01b0383166000908152600a602090815260408083208390556029909152812055613713601584615107565b506001600160a01b03808416600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055938352602c909152908190208054909216909155517f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f290612b12908690615c42565b6017546001600160a01b031633146137d1576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001611205565b6017546001600160a01b03163314613831576040516354348f0360e01b815260040160405180910390fd5b61383c602682614ff9565b6138595760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561389257600080fd5b505afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190615939565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b9161391e9190600401615c42565b60206040518083038186803b15801561393657600080fd5b505afa15801561394a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396e9190615b68565b6001600160a01b0382166000908152600f60205260409020805460ff191691151591909117905561399e81611210565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b90611205908390615c42565b6017546001600160a01b03163314613a56576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001611205565b3360009081526019602052604090205460ff16613abb57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff16613af4576040516310cec38560e21b815260040160405180910390fd5b613b0084848484615132565b336001600160a01b0385167f10a73de7ab6e9023aa6e2bc23f7abf4dcef591487e7e55f44c00e34fe60d56db613b368486615db1565b60405190815260200160405180910390a350505050565b613b586015826147c6565b15613b7657604051630809740d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604090205460ff1615613bb057604051632f3d320560e01b815260040160405180910390fd5b613bbb601582614ff9565b506001600160a01b03811660008181526001602052604080822080546001600160a01b03191633908117909155905190917fed3faef50715743626cd57de74281a2b17cdbfc11c0486feda541fb911e0293d91a350565b6017546001600160a01b03163314613c3d576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116613c645760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090611205908390615c42565b6017546001600160a01b03163314613cda576040516354348f0360e01b815260040160405180910390fd5b62015180811015613cfe57604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001611205565b60026000541415613d565760405162461bcd60e51b81526004016117be90615d4b565b600260009081556001600160a01b03858116825260016020526040909120548591163314613d9757604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054613dc990603c90615db1565b4211613de857604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115613e2e5760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615613e685760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290613e9f908490615e4c565b90915550613eb990506001600160a01b0385168385614f9e565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054613f07576001600160a01b0385166000908152600c60205260409020613f059085615107565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051613f5691815260200190565b60405180910390a450506001600055505050565b3360008181526007602052604090205460ff1615613f9b5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff1615613fd5576040516362e6201d60e01b815260040160405180910390fd5b613fe06015826147c6565b613ffc5760405162941a5760e11b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905220548211156140425760405163356680b760e01b815260040160405180910390fd5b6001600160a01b03808216600090815260096020908152604080832093881683529290529081208054849290614079908490615e4c565b9091555061409390506001600160a01b0385168484614f9e565b826001600160a01b0316816001600160a01b0316856001600160a01b0316600080516020615f56833981519152856140c9614e6d565b6040805192835260208301919091520160405180910390a450505050565b6017546001600160a01b03163314614112576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e790602001611205565b6017546001600160a01b03163314614172576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166141995760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90611205908390615c42565b6017546001600160a01b0316331461420f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661424857604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e90611205908390615c42565b3360009081526019602052604090205460ff166142c857604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16614301576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b0383166000908152600c6020526040902061432390836147c6565b61434057604051632eda7a1160e01b815260040160405180910390fd5b6001600160a01b038084166000908152600960209081526040808320938616835292905220548111156143855760405162919bed60e01b815260040160405180910390fd5b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb926143b992909116908590600401615cb2565b602060405180830381600087803b1580156143d357600080fd5b505af1925050508015614403575060408051601f3d908101601f1916820190925261440091810190615b68565b60015b61440c5761440e565b505b6001600160a01b03808416600090815260096020908152604080832093861683529290529081208054839290614445908490615e4c565b90915550506001600160a01b03808416600090815260096020908152604080832093861683529290522054614498576001600160a01b0383166000908152600c602052604090206144969083615107565b505b336001600160a01b0316836001600160a01b03167f20262b97130b5cb8f80624eed2733df2b05db4a0789b4a3d0157e1d318333104848460405161277f929190615cb2565b336000908152601a602052604090205460ff1661450d57604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff1615614547576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b600061459f614e6d565b602e556145ad6003876147c6565b80156145de57506001600160a01b038087166000908152600860209081526040808320938916835292905220548411155b801561460257506001600160a01b0386166000908152600560205260409020548311155b801561463157506001600160a01b038616600090815260066020526040902054829061462e9042615e4c565b10155b15614675577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e5460405161466991815260200190565b60405180910390a15060015b95945050505050565b6017546001600160a01b031633146146a9576040516354348f0360e01b815260040160405180910390fd5b6146b46015836147c6565b6146d157604051636211d34960e01b815260040160405180910390fd5b6146da8261500e565b6001600160a01b0382166000908152600a602052604081208054839290614702908490615db1565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d192614762928252602082015260400190565b60405180910390a25050565b60006022548261477e9190615eaa565b610dbb9083615e4c565b6000602254831015612637576022546147a18385615ddd565b6147ab9190615dc9565b9050610dbb565b606060006147bf83615288565b9392505050565b6001600160a01b038116600090815260018301602052604081205415156147bf565b6000610dbb826022546023546152e4565b6002600054141561481c5760405162461bcd60e51b81526004016117be90615d4b565b600260009081556001600160a01b0384168152600d6020526040902061484290836147c6565b61485e576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156148a45760405163435b562560e01b815260040160405180910390fd5b6148ad83615392565b60006148bc610dab8385614a07565b6001600160a01b0385166000908152600b602052604090205490915015614972576001600160a01b0384166000908152600b6020908152604080832054600a9092529091205461490d908390615ddd565b6149179190615dc9565b6001600160a01b0385166000908152600a60205260408120805490919061493f908490615e4c565b90915550506001600160a01b0384166000908152600b60205260408120805483929061496c908490615e4c565b90915550505b6001600160a01b038085166000908152602860209081526040808320938716835292905290812080548492906149a9908490615e4c565b90915550506001600160a01b038085166000908152602860209081526040808320938716835292905220546149fc576001600160a01b0384166000908152600d602052604090206149fa9084615107565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610dbb576001600160a01b0382166000908152600f602052604081205460ff16614a79576001600160a01b0383166000908152602b6020526040902054614a7490600160381b900460060b615ebe565b614a9d565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d2710791614ad59188918691600401615d82565b60206040518083038186803b158015614aed57600080fd5b505afa158015614b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca29190615bdf565b6000614b304261476e565b6001600160a01b03831660009081526029602052604090205410156115d157614b6060225442610bc69190615e4c565b6001600160a01b03831660009081526029602052604090205411614bd657614b8782615392565b6001600160a01b0382166000908152600b6020908152604080832054600a90925290912055614bb54261476e565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b038316600090815260296020526040902054614bfc9042615e4c565b10614c5857614c0a82615392565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460299092528220805491929091614c49908490615db1565b90915550600191506115d19050565b614c614261476e565b6001600160a01b0383166000908152602a602052604090205410156115d1576001600160a01b0382166000908152600b6020526040902054614ca283615392565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291614cd291615ddd565b614cdc9190615dc9565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260296020526040902054614d4090614d229042615e4c565b6001600160a01b0383166000908152600b6020526040902054614788565b6001600160a01b0382166000908152600a602052604081208054909190614d68908490615db1565b90915550506001600160a01b03166000908152602960205260409020429055565b6001600160a01b0383166000908152600a6020526040902054811115614dc25760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0383166000908152602a60209081526040808320429055600a90915281208054839290614df7908490615e4c565b90915550506001600160a01b038083166000908152600860209081526040808320601b5490941683529290529081208054839290614e36908490615db1565b90915550506001600160a01b03821660009081526005602052604081208054839290614e63908490615db1565b9091555050505050565b6000603f5a614e7d906040615ddd565b610cb69190615dc9565b6001600160a01b038216600090815260066020526040812054614ec0576001600160a01b03831660009081526006602052604090204290555b614ecb600384614ff9565b50506001600160a01b03808316600081815260106020908152604080832094861680845294825280832080549084905593835260088252808320948352939052918220805491928392614f1f908490615db1565b9091555050601b546001600160a01b0383811691161415610dbb57601b54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b158015614f8057600080fd5b505af1158015614f94573d6000803e3d6000fd5b5050505092915050565b614ff48363a9059cbb60e01b8484604051602401614fbd929190615cb2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526153b7565b505050565b60006147bf836001600160a01b038416615489565b61501781614b25565b5061502181614cfb565b6001600160a01b0381166000908152600a6020908152604080832054600b9092529091205461505091906154d8565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b03808516602483015283166044820152606481018290526150a49085906323b872dd60e01b90608401614fbd565b50505050565b6000808486602e546150bc9190615e4c565b6150c69190615db1565b9050670de0b6b3a7640000846127106150df8685615ddd565b6150e99190615dc9565b6150f39190615ddd565b6150fd9190615dc9565b9695505050505050565b60006147bf836001600160a01b0384166154ee565b6000610dbb825490565b60006147bf83836155e1565b601b546001600160a01b0384811691161461520a576017546001600160a01b038085169163a9059cbb91166151678486615db1565b6040518363ffffffff1660e01b8152600401615184929190615cb2565b602060405180830381600087803b15801561519e57600080fd5b505af19250505080156151ce575060408051601f3d908101601f191682019092526151cb91810190615b68565b60015b615208573d8080156151fc576040519150601f19603f3d011682016040523d82523d6000602084013e615201565b606091505b505061520a565b505b6001600160a01b03808516600090815260086020908152604080832093871683529290529081208054849290615241908490615e4c565b90915550506001600160a01b0380851660009081526013602090815260408083209387168352929052908120805483929061527d908490615e4c565b909155505050505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156152d857602002820191906000526020600020905b8154815260200190600101908083116152c4575b50505050509050919050565b60008080600019858709858702925082811083820303915050806000141561531e576000841161531357600080fd5b5082900490506147bf565b80841161532a57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b61539b8161560b565b6001600160a01b039091166000908152600b6020526040902055565b600061540c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166157ef9092919063ffffffff16565b805190915015614ff4578080602001905181019061542a9190615b68565b614ff45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016117be565b60008181526001830160205260408120546154d057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dbb565b506000610dbb565b60008183106154e757816147bf565b5090919050565b600081815260018301602052604081205480156155d7576000615512600183615e4c565b855490915060009061552690600190615e4c565b905081811461558b57600086600001828154811061554657615546615f27565b906000526020600020015490508087600001848154811061556957615569615f27565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061559c5761559c615f11565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dbb565b6000915050610dbb565b60008260000182815481106155f8576155f8615f27565b9060005260206000200154905092915050565b60006156164261476e565b601e546001600160a01b03166000908152602b6020526040902060010154146156ad57601e5461564e906001600160a01b0316611210565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d602052604090206156d19061511c565b811015612637576001600160a01b0383166000908152600d602052604081206156fa9083615126565b90506157076026826147c6565b156157dc576157154261476e565b6001600160a01b0382166000908152602b60205260409020600101541461579b5761573f81611210565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b038085166000908152602860209081526040808320938516835292905220546157cf90610dab9083614a07565b6157d99084615db1565b92505b50806157e781615e8f565b9150506156b0565b6060610ca2848460008585843b6158485760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016117be565b600080866001600160a01b031685876040516158649190615c26565b60006040518083038185875af1925050503d80600081146158a1576040519150601f19603f3d011682016040523d82523d6000602084013e6158a6565b606091505b50915091506158b68282866158c1565b979650505050505050565b606083156158d05750816147bf565b8251156158e05782518084602001fd5b8160405162461bcd60e51b81526004016117be9190615d18565b805180151581146115d157600080fd5b8051600681900b81146115d157600080fd5b60006020828403121561592e57600080fd5b81356147bf81615f3d565b60006020828403121561594b57600080fd5b81516147bf81615f3d565b6000806040838503121561596957600080fd5b823561597481615f3d565b9150602083013561598481615f3d565b809150509250929050565b6000806000606084860312156159a457600080fd5b83356159af81615f3d565b925060208401356159bf81615f3d565b915060408401356159cf81615f3d565b809150509250925092565b6000806000606084860312156159ef57600080fd5b83356159fa81615f3d565b92506020840135615a0a81615f3d565b929592945050506040919091013590565b60008060008060808587031215615a3157600080fd5b8435615a3c81615f3d565b93506020850135615a4c81615f3d565b9250604085013591506060850135615a6381615f3d565b939692955090935050565b60008060008060808587031215615a8457600080fd5b8435615a8f81615f3d565b93506020850135615a9f81615f3d565b93969395505050506040820135916060013590565b600080600080600060a08688031215615acc57600080fd5b8535615ad781615f3d565b94506020860135615ae781615f3d565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215615b1857600080fd5b8235615b2381615f3d565b946020939093013593505050565b600080600060608486031215615b4657600080fd5b8335615b5181615f3d565b92506020840135915060408401356159cf81615f3d565b600060208284031215615b7a57600080fd5b6147bf826158fa565b600080600060608486031215615b9857600080fd5b615ba18461590a565b9250615baf6020850161590a565b9150615bbd604085016158fa565b90509250925092565b600060208284031215615bd857600080fd5b5035919050565b600060208284031215615bf157600080fd5b5051919050565b600080600060608486031215615c0d57600080fd5b8351925060208401519150604084015190509250925092565b60008251615c38818460208701615e63565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015615ca557845163ffffffff1683529383019391830191600101615c83565b5090979650505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015615d0c5783516001600160a01b031683529284019291840191600101615ce7565b50909695505050505050565b6020815260008251806020840152615d37816040850160208701615e63565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b9283526020830191909152604082015260600190565b60008219821115615dc457615dc4615ee5565b500190565b600082615dd857615dd8615efb565b500490565b6000816000190483118215151615615df757615df7615ee5565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615615e2757615e27615ee5565b81667fffffffffffff018313811615615e4257615e42615ee5565b5090039392505050565b600082821015615e5e57615e5e615ee5565b500390565b60005b83811015615e7e578181015183820152602001615e66565b838111156150a45750506000910152565b6000600019821415615ea357615ea3615ee5565b5060010190565b600082615eb957615eb9615efb565b500690565b60008160060b667fffffffffffff19811415615edc57615edc615ee5565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114615f5257600080fd5b5056fe46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfaee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c3820a2646970667358221220b1237fe0bc50d34155280b1f1861a23566f2b6ef241abc6704a75b1e8dd31a6c64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3EC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90A4684E GT PUSH2 0x20D JUMPI DUP1 PUSH4 0xC5198ABC GT PUSH2 0x121 JUMPI DUP1 PUSH4 0xC5198ABC EQ PUSH2 0x9E1 JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x9F4 JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0xA07 JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0xA1A JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0xA2D JUMPI DUP1 PUSH4 0xD55995FE EQ PUSH2 0xA58 JUMPI DUP1 PUSH4 0xDD2080D6 EQ PUSH2 0xA6B JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0xA7E JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0xA87 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0xAA7 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0xABA JUMPI DUP1 PUSH4 0xEC8CA643 EQ PUSH2 0xACD JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0xAF6 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0xB09 JUMPI DUP1 PUSH4 0xF136A09D EQ PUSH2 0xB1C JUMPI DUP1 PUSH4 0xF25E311B EQ PUSH2 0xB3C JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0xB4F JUMPI DUP1 PUSH4 0xF75F9F7B EQ PUSH2 0xB62 JUMPI DUP1 PUSH4 0xF9D46CF2 EQ PUSH2 0xB75 JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0xB88 JUMPI DUP1 PUSH4 0xFE75BC46 EQ PUSH2 0xB91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x90A4684E EQ PUSH2 0x7F4 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x807 JUMPI DUP1 PUSH4 0x966ABD00 EQ PUSH2 0x80F JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x822 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x84B JUMPI DUP1 PUSH4 0xA2145809 EQ PUSH2 0x85E JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x871 JUMPI DUP1 PUSH4 0xA515366A EQ PUSH2 0x89C JUMPI DUP1 PUSH4 0xA5D059CA EQ PUSH2 0x8AF JUMPI DUP1 PUSH4 0xA676F9FF EQ PUSH2 0x8C2 JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x8E2 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x8EB JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x8FE JUMPI DUP1 PUSH4 0xAF320E81 EQ PUSH2 0x911 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x924 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x947 JUMPI DUP1 PUSH4 0xB440027F EQ PUSH2 0x95A JUMPI DUP1 PUSH4 0xB600702A EQ PUSH2 0x985 JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x998 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x9AB JUMPI DUP1 PUSH4 0xC20297F0 EQ PUSH2 0x9CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x59A2255E GT PUSH2 0x304 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x650 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x663 JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x676 JUMPI DUP1 PUSH4 0x5FEEB794 EQ PUSH2 0x67F JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x692 JUMPI DUP1 PUSH4 0x64BB43EE EQ PUSH2 0x69B JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x6AE JUMPI DUP1 PUSH4 0x694798E6 EQ PUSH2 0x6C1 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x6EC JUMPI DUP1 PUSH4 0x6BA42AAA EQ PUSH2 0x6FF JUMPI DUP1 PUSH4 0x6CF262BC EQ PUSH2 0x712 JUMPI DUP1 PUSH4 0x6E2A9CA6 EQ PUSH2 0x725 JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x738 JUMPI DUP1 PUSH4 0x74A8F103 EQ PUSH2 0x74B JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x75E JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x767 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x77A JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x782 JUMPI DUP1 PUSH4 0x8BB6DFA8 EQ PUSH2 0x7AB JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x7BE JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x7E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34D4C61 EQ PUSH2 0x3F1 JUMPI DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x417 JUMPI DUP1 PUSH4 0xC620BCE EQ PUSH2 0x442 JUMPI DUP1 PUSH4 0xD6A1F87 EQ PUSH2 0x457 JUMPI DUP1 PUSH4 0x1101EB41 EQ PUSH2 0x46A JUMPI DUP1 PUSH4 0x11466D72 EQ PUSH2 0x47F JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x492 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x4BD JUMPI DUP1 PUSH4 0x165E62E7 EQ PUSH2 0x4D0 JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x538 JUMPI DUP1 PUSH4 0x1C5A9D9C EQ PUSH2 0x558 JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x56B JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x58B JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x5B6 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x5BE JUMPI DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x5F1 JUMPI DUP1 PUSH4 0x52A4DE29 EQ PUSH2 0x604 JUMPI DUP1 PUSH4 0x55EA6C47 EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0x575288BF EQ PUSH2 0x62A JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x63D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x404 PUSH2 0x3FF CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0xBA4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x404 PUSH2 0x425 CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44A PUSH2 0xCAA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x40E SWAP2 SWAP1 PUSH2 0x5CCB JUMP JUMPDEST PUSH2 0x404 PUSH2 0x465 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B05 JUMP JUMPDEST PUSH2 0xCBB JUMP JUMPDEST PUSH2 0x47D PUSH2 0x478 CALLDATASIZE PUSH1 0x4 PUSH2 0x59DA JUMP JUMPDEST PUSH2 0xDC1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x47D PUSH2 0x48D CALLDATASIZE PUSH1 0x4 PUSH2 0x5B05 JUMP JUMPDEST PUSH2 0xF1B JUMP JUMPDEST PUSH2 0x404 PUSH2 0x4A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x4CB CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x10AA JUMP JUMPDEST PUSH2 0x4E3 PUSH2 0x4DE CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x1210 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND DUP3 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 SIGNEXTEND SWAP1 DUP3 ADD MSTORE SWAP2 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x40E JUMP JUMPDEST PUSH2 0x404 PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x404 PUSH2 0x546 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x566 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x15D6 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x57E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x40E SWAP2 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH2 0x404 PUSH2 0x599 CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x170F JUMP JUMPDEST PUSH2 0x5E1 PUSH2 0x5CC CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x40E JUMP JUMPDEST PUSH2 0x47D PUSH2 0x5FF CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x179B JUMP JUMPDEST PUSH2 0x47D PUSH2 0x612 CALLDATASIZE PUSH1 0x4 PUSH2 0x59DA JUMP JUMPDEST PUSH2 0x19A4 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x625 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x1BD5 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x638 CALLDATASIZE PUSH1 0x4 PUSH2 0x59DA JUMP JUMPDEST PUSH2 0x1C89 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x64B CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH2 0x1F4C JUMP JUMPDEST PUSH2 0x47D PUSH2 0x65E CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x1FF1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x57E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x404 PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x68D CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x20A3 JUMP JUMPDEST PUSH2 0x404 PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x6A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x230D JUMP JUMPDEST PUSH2 0x47D PUSH2 0x6BC CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x238F JUMP JUMPDEST PUSH2 0x404 PUSH2 0x6CF CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x6FA CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC6 JUMP JUMPDEST PUSH2 0x2447 JUMP JUMPDEST PUSH2 0x5E1 PUSH2 0x70D CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x24A7 JUMP JUMPDEST PUSH2 0x404 PUSH2 0x720 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x2507 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x733 CALLDATASIZE PUSH1 0x4 PUSH2 0x59DA JUMP JUMPDEST PUSH2 0x263D JUMP JUMPDEST PUSH2 0x47D PUSH2 0x746 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x278C JUMP JUMPDEST PUSH2 0x47D PUSH2 0x759 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x2829 JUMP JUMPDEST PUSH2 0x404 PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x57E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x44A PUSH2 0x2924 JUMP JUMPDEST PUSH2 0x57E PUSH2 0x790 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x404 PUSH2 0x7B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x2930 JUMP JUMPDEST PUSH2 0x5E1 PUSH2 0x7CC CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x7EF CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC6 JUMP JUMPDEST PUSH2 0x29D3 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x802 CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH2 0x2A31 JUMP JUMPDEST PUSH2 0x44A PUSH2 0x2B1F JUMP JUMPDEST PUSH2 0x47D PUSH2 0x81D CALLDATASIZE PUSH1 0x4 PUSH2 0x5B31 JUMP JUMPDEST PUSH2 0x2B2B JUMP JUMPDEST PUSH2 0x57E PUSH2 0x830 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x859 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x2C41 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x86C CALLDATASIZE PUSH1 0x4 PUSH2 0x598F JUMP JUMPDEST PUSH2 0x2CF9 JUMP JUMPDEST PUSH2 0x404 PUSH2 0x87F CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x8AA CALLDATASIZE PUSH1 0x4 PUSH2 0x5B05 JUMP JUMPDEST PUSH2 0x2EC9 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x8BD CALLDATASIZE PUSH1 0x4 PUSH2 0x5B05 JUMP JUMPDEST PUSH2 0x312A JUMP JUMPDEST PUSH2 0x404 PUSH2 0x8D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x404 PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x8F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x31FD JUMP JUMPDEST PUSH2 0x47D PUSH2 0x90C CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x32B1 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x91F CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH2 0x3327 JUMP JUMPDEST PUSH2 0x5E1 PUSH2 0x932 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x955 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC6 JUMP JUMPDEST PUSH2 0x37A6 JUMP JUMPDEST PUSH2 0x404 PUSH2 0x968 CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x993 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x3806 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x9A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC6 JUMP JUMPDEST PUSH2 0x3A2B JUMP JUMPDEST PUSH2 0x5E1 PUSH2 0x9B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0x9DC CALLDATASIZE PUSH1 0x4 PUSH2 0x5A6E JUMP JUMPDEST PUSH2 0x3A8B JUMP JUMPDEST PUSH2 0x47D PUSH2 0x9EF CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x3B4D JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x57E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xA15 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x3C12 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xA28 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC6 JUMP JUMPDEST PUSH2 0x3CAF JUMP JUMPDEST PUSH2 0x404 PUSH2 0xA3B CALLDATASIZE PUSH1 0x4 PUSH2 0x5956 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xA66 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A1B JUMP JUMPDEST PUSH2 0x3D33 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xA79 CALLDATASIZE PUSH1 0x4 PUSH2 0x59DA JUMP JUMPDEST PUSH2 0x3F6A JUMP JUMPDEST PUSH2 0x404 PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x404 PUSH2 0xA95 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xAB5 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BC6 JUMP JUMPDEST PUSH2 0x40E7 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xAC8 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x4147 JUMP JUMPDEST PUSH2 0x57E PUSH2 0xADB CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xB04 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x41E4 JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x57E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x404 PUSH2 0xB2A CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xB4A CALLDATASIZE PUSH1 0x4 PUSH2 0x59DA JUMP JUMPDEST PUSH2 0x4298 JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x57E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xB70 CALLDATASIZE PUSH1 0x4 PUSH2 0x591C JUMP JUMPDEST PUSH2 0x44DD JUMP JUMPDEST PUSH2 0x5E1 PUSH2 0xB83 CALLDATASIZE PUSH1 0x4 PUSH2 0x5AB4 JUMP JUMPDEST PUSH2 0x4595 JUMP JUMPDEST PUSH2 0x404 PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x47D PUSH2 0xB9F CALLDATASIZE PUSH1 0x4 PUSH2 0x5B05 JUMP JUMPDEST PUSH2 0x467E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xBB0 DUP4 PUSH2 0x2507 JUMP JUMPDEST PUSH1 0x22 SLOAD SWAP1 SWAP2 POP TIMESTAMP SWAP1 PUSH2 0xBCB SWAP1 PUSH2 0xBC6 SWAP1 DUP4 PUSH2 0x5E4C JUMP JUMPDEST PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO PUSH2 0xC6F JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC10 SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST LT PUSH2 0xC4C JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC3B SWAP2 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST PUSH2 0xC45 SWAP1 DUP3 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 POP PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC45 SWAP1 DUP3 PUSH2 0x5E4C JUMP JUMPDEST PUSH2 0xC78 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH2 0xC82 SWAP1 DUP3 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0xC8F DUP2 DUP4 PUSH2 0x4788 JUMP JUMPDEST PUSH2 0xC98 DUP6 PUSH2 0x2930 JUMP JUMPDEST PUSH2 0xCA2 SWAP2 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCB6 PUSH1 0x26 PUSH2 0x47B2 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC8 PUSH1 0x26 DUP5 PUSH2 0x47C6 JUMP JUMPDEST ISZERO PUSH2 0xDBB JUMPI PUSH1 0x0 PUSH2 0xCD8 DUP5 PUSH2 0x1210 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0xDB9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xD19 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xD14 SWAP1 PUSH2 0x5EBE JUMP JUMPDEST PUSH2 0xD1F JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH2 0xDB0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0xD5B SWAP2 DUP10 SWAP2 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x5D82 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD87 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDAB SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST PUSH2 0x47E8 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xDBB JUMP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0xDFD JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 SLOAD PUSH2 0xE0A SWAP1 TIMESTAMP PUSH2 0x5DB1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0xE59 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0xE6A SWAP1 POP DUP5 DUP5 DUP5 PUSH2 0x47F9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xEA9 JUMPI POP PUSH1 0x21 SLOAD PUSH2 0xEA7 DUP3 DUP7 PUSH2 0x4A07 JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0xEC7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE DUP6 PUSH1 0x40 MLOAD PUSH2 0xF0C SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xF4C JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF57 PUSH1 0x15 DUP3 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0xF73 JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF7C DUP2 PUSH2 0x4B25 JUMP JUMPDEST ISZERO PUSH2 0xFD7 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F76 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0xFCE SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5D9B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x1056 JUMPI PUSH2 0x1000 DUP2 PUSH2 0x4CFB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F76 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x104D SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5D9B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH2 0x1061 DUP2 DUP5 DUP5 PUSH2 0x4D89 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 DUP4 DUP3 AND SWAP2 AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F56 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH2 0x108D PUSH2 0x4E6D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10D5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x10FC JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x115D SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1189 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11AD SWAP2 SWAP1 PUSH2 0x5B68 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1236 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ ISZERO PUSH2 0x12AC JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x12C0 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xBC6 SWAP2 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 SWAP2 POP DUP2 EQ ISZERO PUSH2 0x1424 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x6 SIGNEXTEND PUSH2 0x132D TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH2 0x1337 SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x134A JUMPI PUSH2 0x134A PUSH2 0x5F27 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD SWAP3 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP2 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x13A6 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C56 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13F6 SWAP2 SWAP1 PUSH2 0x5B83 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP PUSH2 0x1410 SWAP2 DUP4 SWAP2 POP PUSH2 0x5DFC JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP PUSH2 0x15AD SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 GT ISZERO PUSH2 0x15AD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x1471 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH2 0x147B SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x148E JUMPI PUSH2 0x148E PUSH2 0x5F27 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x22 SLOAD PUSH2 0x14B4 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH2 0x14BE SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST PUSH2 0x14C8 SWAP2 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x14DB JUMPI PUSH2 0x14DB PUSH2 0x5F27 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP3 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x1533 SWAP3 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C56 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x154B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x155F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1583 SWAP2 SWAP1 PUSH2 0x5B83 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP SWAP2 POP PUSH2 0x159E SWAP1 DUP3 SWAP1 PUSH2 0x5DFC JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x15C6 JUMPI PUSH2 0x15BC TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x15CE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP5 ADD MSTORE JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1607 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x1648 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6258F481 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x168B JUMPI PUSH1 0x40 MLOAD PUSH4 0xFD0EEEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP2 SWAP1 SSTORE SWAP1 PUSH2 0x16BC SWAP1 DUP4 PUSH2 0x4E87 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3673530133B6DA67E9854F605B0CFA7BB9798CD33C18036DFC10D8DA7C4D4A75 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1703 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x173A JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x1791 SWAP2 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x17C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP1 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x180C JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x184F JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1880 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP1 DUP7 MSTORE SWAP2 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SLOAD PUSH1 0x1B SLOAD SWAP1 SWAP3 SWAP2 AND EQ ISZERO PUSH2 0x1913 JUMPI PUSH1 0x1C SLOAD PUSH1 0x40 MLOAD PUSH4 0x140E25AD PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xA0712D68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x190E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x12 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP2 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x195B SWAP2 DUP4 PUSH2 0x4F9E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x2717EAD6B9200DD235AAD468C9809EA400FE33AC69B5BFAA6D3E90FC922B6398 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x19C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP1 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x19D7 PUSH1 0x26 DUP4 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x19F4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE0B6AEAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x19FF PUSH1 0x15 DUP5 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x1A1C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1A3E SWAP1 DUP4 PUSH2 0x4FF9 JUMP JUMPDEST POP PUSH2 0x1A48 DUP4 PUSH2 0x500E JUMP JUMPDEST PUSH1 0x21 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1A86 SWAP1 PUSH2 0x1A80 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST DUP5 PUSH2 0x4A07 JUMP JUMPDEST LT ISZERO PUSH2 0x1AA5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F76 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1AF2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5D9B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x1B0F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x506C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1B46 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1B59 SWAP1 POP PUSH2 0xDAB DUP3 DUP5 PUSH2 0x4A07 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1B81 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 SWAP1 DUP7 AND SWAP1 PUSH32 0x4E186BC75A2220191B826BAFF3EE63C3E970E94E58A9007FF94C9A7B8E6EBB3F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1C05 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1C3E JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0xE02B2375D8FB4AEF3E5BC5D53BFFCF70B6F185C5C93E69DCBE8B6CFC58E837E2 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x1CAC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP1 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1CBC PUSH1 0x15 DUP5 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x1CD9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1D07 JUMPI PUSH1 0x40 MLOAD PUSH3 0x822D97 PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1D36 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D86 SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST SWAP1 POP PUSH2 0x1D9D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x506C JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DCC SWAP2 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DF8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E1C SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST PUSH2 0x1E26 SWAP2 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2710 PUSH1 0x24 SLOAD DUP4 PUSH2 0x1E3B SWAP2 SWAP1 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x1E45 SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E51 DUP2 DUP4 PUSH2 0x5E4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1E88 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x17 SLOAD PUSH2 0x1EC5 SWAP3 AND DUP4 PUSH2 0x4F9E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1EE7 SWAP1 DUP7 PUSH2 0x4FF9 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEC1A37D4A331A5059081E0FB5DA1735E7890900CD215A4FB1E9F2779FD7B83EB DUP6 PUSH1 0x40 MLOAD PUSH2 0x1F37 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x1F88 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x202D JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x20D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x20DF PUSH1 0x15 DUP3 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x20FB JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2104 DUP2 PUSH2 0x4B25 JUMP JUMPDEST ISZERO PUSH2 0x215F JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F76 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x2156 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5D9B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1B SLOAD DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0x435B21C1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP3 DUP4 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x435B21C1 SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2202 SWAP2 SWAP1 PUSH2 0x5BF8 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x2212 PUSH2 0x4E6D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2222 DUP3 DUP5 DUP7 DUP9 PUSH2 0x50AA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 GT ISZERO PUSH2 0x22BC JUMPI PUSH2 0x224E DUP7 PUSH2 0x4CFB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F76 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x229B SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5D9B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x22AB PUSH2 0x4E6D JUMP JUMPDEST SWAP2 POP PUSH2 0x22B9 DUP3 DUP5 DUP7 DUP9 PUSH2 0x50AA JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x22C7 DUP7 DUP9 DUP4 PUSH2 0x4D89 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP4 DUP11 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F56 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2338 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2343 PUSH1 0x26 DUP3 PUSH2 0x5107 JUMP JUMPDEST PUSH2 0x2360 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8D08B1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x51199D699BDFD516FA88DD0D2F8487C40C147B4867ACAA23ADC8D4DF6B098E56 DUP2 PUSH1 0x40 MLOAD PUSH2 0x1205 SWAP2 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x23BA JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x23F4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2472 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x1205 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x24B1 PUSH2 0x4E6D JUMP JUMPDEST PUSH1 0x2E SSTORE PUSH2 0x24BF PUSH1 0x3 DUP4 PUSH2 0x47C6 JUMP JUMPDEST ISZERO PUSH2 0x15D1 JUMPI PUSH32 0x4851CAD52E624C8F7A1D44C28A80DB05988BA2451FC0DB6B0EC338D8ECA95AFB PUSH1 0x2E SLOAD PUSH1 0x40 MLOAD PUSH2 0x24F7 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x252C SWAP1 PUSH2 0x511C JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x2637 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2555 SWAP1 DUP4 PUSH2 0x5126 JUMP JUMPDEST SWAP1 POP PUSH2 0x2562 PUSH1 0x26 DUP3 PUSH2 0x47C6 JUMP JUMPDEST ISZERO PUSH2 0x2624 JUMPI PUSH1 0x0 PUSH2 0x2572 DUP3 PUSH2 0x1210 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x2622 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x25B3 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x25AE SWAP1 PUSH2 0x5EBE JUMP JUMPDEST PUSH2 0x25B9 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SLOAD PUSH1 0x22 SLOAD SWAP2 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH2 0x2614 SWAP5 SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0xA0D27107 SWAP3 PUSH2 0xD5B SWAP3 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x5D82 JUMP JUMPDEST PUSH2 0x261E SWAP1 DUP7 PUSH2 0x5DB1 JUMP JUMPDEST SWAP5 POP POP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x262F DUP2 PUSH2 0x5E8F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x250B JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x266D JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x26A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x26B1 DUP4 DUP4 DUP4 PUSH2 0x47F9 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH2 0x26E5 SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x272F JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x272C SWAP2 DUP2 ADD SWAP1 PUSH2 0x5B68 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x2738 JUMPI PUSH2 0x273A JUMP JUMPDEST POP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6E10247C3C094D220EE99436C164B7F38D63B335A20ED817CBEFAEE4BB02D20E DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x277F SWAP3 SWAP2 SWAP1 PUSH2 0x5CB2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x27B7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x27DE JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2859 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2892 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x289D PUSH1 0x3 DUP3 PUSH2 0x5107 JUMP JUMPDEST POP PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP6 AND DUP1 DUP4 MSTORE SWAP4 DUP2 MSTORE DUP5 DUP3 KECCAK256 SLOAD SWAP3 DUP3 MSTORE PUSH1 0x13 DUP2 MSTORE DUP5 DUP3 KECCAK256 DUP5 DUP4 MSTORE SWAP1 MSTORE SWAP3 SWAP1 SWAP3 KECCAK256 SLOAD PUSH2 0x28EB SWAP3 DUP5 SWAP3 SWAP2 PUSH2 0x5132 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x38A17B9B553C0C3FC2ED14B957A5D8420A1666FD2EFE5C1B3FE5F23EEA61BB3 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCB6 PUSH1 0x15 PUSH2 0x47B2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x293C DUP4 PUSH2 0x2507 JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2966 SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST LT ISZERO PUSH2 0xDBB JUMPI PUSH1 0x0 DUP2 GT PUSH2 0x2992 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x29CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x29C2 SWAP1 DUP4 SWAP1 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x29CC SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST SWAP2 POP PUSH2 0x2637 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x29FE JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0x1205 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x2A6D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2AA0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAFE7AD49 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP6 DUP9 AND SWAP6 DUP7 OR SWAP1 SSTORE PUSH1 0x2D DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE SWAP1 MLOAD PUSH32 0xFF0456758201108DE53C0FF04C69988D4678FF455B2CE6F733328CF85722C04C SWAP1 PUSH2 0x2B12 SWAP1 DUP6 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCB6 PUSH1 0x3 PUSH2 0x47B2 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2B56 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2B7D JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2BDE JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 DUP4 ISZERO PUSH2 0x8FC MUL SWAP1 DUP5 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2BD8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x2BF2 JUMP JUMPDEST PUSH2 0x2BF2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP3 DUP5 PUSH2 0x4F9E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP6 SWAP1 MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH32 0x9A3055DED8C8B5F21BBF4946C5AFAB6E1FA8B3F057922658E5E1ADE125FB0B1E SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2C6C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2CA6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x2D35 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2D5C JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2D9F JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x2DE4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2E1E JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x12 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE SWAP1 PUSH2 0x2E6B SWAP1 DUP5 DUP4 PUSH2 0x4F9E JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFDB7893BF11F50C621E59CC7F1CF540E94295CB27CA869EC7ED7618CA7928862 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2EBA SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x2EEC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP1 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2F21 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2F2C PUSH1 0x15 CALLER PUSH2 0x47C6 JUMP JUMPDEST ISZERO PUSH2 0x2F4A JUMPI PUSH1 0x40 MLOAD PUSH4 0xD7229C43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F SLOAD PUSH2 0x2F57 SWAP1 TIMESTAMP PUSH2 0x5DB1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2FA2 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2FBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FCE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FF2 SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST SWAP1 POP PUSH2 0x3009 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x506C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x3037 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x304F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3063 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3087 SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST PUSH2 0x3091 SWAP2 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x10 DUP3 MSTORE DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP3 SWAP5 POP DUP5 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x30DB SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 CALLER SWAP1 PUSH32 0xA7E66869262026842E8D81F5E6806CDC8D846E27C824E2E22F4FE51442771B34 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x20 SLOAD PUSH2 0x3137 SWAP1 TIMESTAMP PUSH2 0x5DB1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x8 DUP2 MSTORE DUP3 DUP3 KECCAK256 SWAP4 DUP3 MSTORE SWAP3 SWAP1 SWAP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x3183 SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x31BB SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE SWAP1 PUSH1 0x20 ADD PUSH2 0x1703 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3228 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3261 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x32DC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x3363 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x33A2 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x33C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 AND SWAP1 DUP4 AND EQ PUSH2 0x33FD JUMPI PUSH1 0x40 MLOAD PUSH4 0xCED616B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x342F SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x344F JUMPI PUSH1 0x40 MLOAD PUSH4 0x56248E97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3458 DUP4 PUSH2 0x500E JUMP JUMPDEST PUSH2 0x3461 DUP3 PUSH2 0x500E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x3482 SWAP1 PUSH2 0x511C JUMP JUMPDEST GT ISZERO PUSH2 0x3564 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x34AA SWAP1 DUP3 PUSH2 0x5126 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x34F8 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP3 SWAP1 SSTORE SWAP2 DUP2 MSTORE PUSH1 0xC SWAP1 SWAP2 MSTORE KECCAK256 PUSH2 0x353A SWAP1 DUP3 PUSH2 0x5107 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x355D SWAP1 DUP3 PUSH2 0x4FF9 JUMP JUMPDEST POP POP PUSH2 0x3461 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x3585 SWAP1 PUSH2 0x511C JUMP JUMPDEST GT ISZERO PUSH2 0x3667 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x35AD SWAP1 DUP3 PUSH2 0x5126 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x35FB SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE SWAP3 DUP7 AND DUP3 MSTORE PUSH1 0xD SWAP1 MSTORE KECCAK256 PUSH2 0x363D SWAP1 DUP3 PUSH2 0x4FF9 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3660 SWAP1 DUP3 PUSH2 0x5107 JUMP JUMPDEST POP POP PUSH2 0x3564 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x3699 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x36DD SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0x29 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x3713 PUSH1 0x15 DUP5 PUSH2 0x5107 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x2D DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 DUP9 AND DUP1 DUP6 MSTORE SWAP6 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x2C SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9B712B63E3FB1325FA042D3C238CE8144937875065900528EA1E4F3B00F379F2 SWAP1 PUSH2 0x2B12 SWAP1 DUP7 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x37D1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x1205 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3831 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x383C PUSH1 0x26 DUP3 PUSH2 0x4FF9 JUMP JUMPDEST PUSH2 0x3859 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF25E6B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3892 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38CA SWAP2 SWAP1 PUSH2 0x5939 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 DUP4 AND SWAP4 DUP5 OR SWAP1 SSTORE PUSH1 0x1D SLOAD SWAP1 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0x696A437B SWAP2 PUSH2 0x391E SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3936 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x394A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x396E SWAP2 SWAP1 PUSH2 0x5B68 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x399E DUP2 PUSH2 0x1210 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 DUP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xABFA8DB4D238FA78BF4E15FCC91328DD35F3978F200E2857A56BB719732B7B0B SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3A56 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x1205 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3ABB JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3AF4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3B00 DUP5 DUP5 DUP5 DUP5 PUSH2 0x5132 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH32 0x10A73DE7AB6E9023AA6E2BC23F7ABF4DCEF591487E7E55F44C00E34FE60D56DB PUSH2 0x3B36 DUP5 DUP7 PUSH2 0x5DB1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH2 0x3B58 PUSH1 0x15 DUP3 PUSH2 0x47C6 JUMP JUMPDEST ISZERO PUSH2 0x3B76 JUMPI PUSH1 0x40 MLOAD PUSH4 0x809740D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3BB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F3D3205 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3BBB PUSH1 0x15 DUP3 PUSH2 0x4FF9 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP2 PUSH32 0xED3FAEF50715743626CD57DE74281A2B17CDBFC11C0486FEDA541FB911E0293D SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3C3D JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x3C64 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3CDA JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x3CFE JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0x1205 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x3D56 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP1 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 AND CALLER EQ PUSH2 0x3D97 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3DC9 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x3DE8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E0B4075 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP4 GT ISZERO PUSH2 0x3E2E JUMPI PUSH1 0x40 MLOAD PUSH4 0x24AE82D PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3E68 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x3E9F SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x3EB9 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP4 DUP6 PUSH2 0x4F9E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3F07 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3F05 SWAP1 DUP6 PUSH2 0x5107 JUMP JUMPDEST POP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x53E982DD9EC088D634C74C98FBBC161F808B4B6469A26C657120B9A31CB34BFE DUP7 PUSH1 0x40 MLOAD PUSH2 0x3F56 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3F9B JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3FD5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3FE0 PUSH1 0x15 DUP3 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x3FFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4042 JUMPI PUSH1 0x40 MLOAD PUSH4 0x356680B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x4079 SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x4093 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 DUP5 PUSH2 0x4F9E JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F56 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH2 0x40C9 PUSH2 0x4E6D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4112 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x1205 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4172 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x4199 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x420F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4248 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x1205 SWAP1 DUP4 SWAP1 PUSH2 0x5C42 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x42C8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4301 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x4323 SWAP1 DUP4 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x4340 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EDA7A11 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x4385 JUMPI PUSH1 0x40 MLOAD PUSH3 0x919BED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH2 0x43B9 SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CB2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x43D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x4403 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x4400 SWAP2 DUP2 ADD SWAP1 PUSH2 0x5B68 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x440C JUMPI PUSH2 0x440E JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4445 SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x4498 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x4496 SWAP1 DUP4 PUSH2 0x5107 JUMP JUMPDEST POP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x20262B97130B5CB8F80624EED2733DF2B05DB4A0789B4A3D0157E1D318333104 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x277F SWAP3 SWAP2 SWAP1 PUSH2 0x5CB2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x450D JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x4547 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4EE891B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x70125A1C0F5202217AAE14EC399ABFAAA13C2FD98A91D43BD3A897DD4751E80 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x459F PUSH2 0x4E6D JUMP JUMPDEST PUSH1 0x2E SSTORE PUSH2 0x45AD PUSH1 0x3 DUP8 PUSH2 0x47C6 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x45DE JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP10 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP5 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x4602 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x4631 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH2 0x462E SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST LT ISZERO JUMPDEST ISZERO PUSH2 0x4675 JUMPI PUSH32 0x4851CAD52E624C8F7A1D44C28A80DB05988BA2451FC0DB6B0EC338D8ECA95AFB PUSH1 0x2E SLOAD PUSH1 0x40 MLOAD PUSH2 0x4669 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x46A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x46B4 PUSH1 0x15 DUP4 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x46D1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x46DA DUP3 PUSH2 0x500E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4702 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x5ABCF5031FDBD3BADB9D1E09094208DE329AEE72730E87650F346584205D23D1 SWAP3 PUSH2 0x4762 SWAP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP3 PUSH2 0x477E SWAP2 SWAP1 PUSH2 0x5EAA JUMP JUMPDEST PUSH2 0xDBB SWAP1 DUP4 PUSH2 0x5E4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP4 LT ISZERO PUSH2 0x2637 JUMPI PUSH1 0x22 SLOAD PUSH2 0x47A1 DUP4 DUP6 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x47AB SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST SWAP1 POP PUSH2 0xDBB JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x47BF DUP4 PUSH2 0x5288 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x47BF JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDBB DUP3 PUSH1 0x22 SLOAD PUSH1 0x23 SLOAD PUSH2 0x52E4 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x481C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP1 PUSH2 0x5D4B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x4842 SWAP1 DUP4 PUSH2 0x47C6 JUMP JUMPDEST PUSH2 0x485E JUMPI PUSH1 0x40 MLOAD PUSH3 0x41CFA5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x48A4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x435B5625 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x48AD DUP4 PUSH2 0x5392 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48BC PUSH2 0xDAB DUP4 DUP6 PUSH2 0x4A07 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x4972 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x490D SWAP1 DUP4 SWAP1 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x4917 SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x493F SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x496C SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x49A9 SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x49FC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x49FA SWAP1 DUP5 PUSH2 0x5107 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0xDBB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4A79 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4A74 SWAP1 PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND PUSH2 0x5EBE JUMP JUMPDEST PUSH2 0x4A9D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x4AD5 SWAP2 DUP9 SWAP2 DUP7 SWAP2 PUSH1 0x4 ADD PUSH2 0x5D82 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4AED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4B01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCA2 SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B30 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x15D1 JUMPI PUSH2 0x4B60 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xBC6 SWAP2 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT PUSH2 0x4BD6 JUMPI PUSH2 0x4B87 DUP3 PUSH2 0x5392 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x4BB5 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4BFC SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST LT PUSH2 0x4C58 JUMPI PUSH2 0x4C0A DUP3 PUSH2 0x5392 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SSTORE PUSH1 0x22 SLOAD PUSH1 0x29 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x4C49 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x1 SWAP2 POP PUSH2 0x15D1 SWAP1 POP JUMP JUMPDEST PUSH2 0x4C61 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x15D1 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4CA2 DUP4 PUSH2 0x5392 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP3 SWAP2 PUSH2 0x4CD2 SWAP2 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x4CDC SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4D40 SWAP1 PUSH2 0x4D22 SWAP1 TIMESTAMP PUSH2 0x5E4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4788 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x4D68 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x4DC2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x356680B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4DF7 SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1B SLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4E36 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4E63 SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3F GAS PUSH2 0x4E7D SWAP1 PUSH1 0x40 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0xCB6 SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x4EC0 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMPDEST PUSH2 0x4ECB PUSH1 0x3 DUP5 PUSH2 0x4FF9 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x8 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE SWAP2 DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 DUP4 SWAP3 PUSH2 0x4F1F SWAP1 DUP5 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xDBB JUMPI PUSH1 0x1B SLOAD PUSH1 0x40 MLOAD PUSH4 0x852CD8D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x42966C68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4F80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4F94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x4FF4 DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x4FBD SWAP3 SWAP2 SWAP1 PUSH2 0x5CB2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x53B7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47BF DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x5489 JUMP JUMPDEST PUSH2 0x5017 DUP2 PUSH2 0x4B25 JUMP JUMPDEST POP PUSH2 0x5021 DUP2 PUSH2 0x4CFB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x5050 SWAP2 SWAP1 PUSH2 0x54D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x50A4 SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x4FBD JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 DUP7 PUSH1 0x2E SLOAD PUSH2 0x50BC SWAP2 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST PUSH2 0x50C6 SWAP2 SWAP1 PUSH2 0x5DB1 JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP5 PUSH2 0x2710 PUSH2 0x50DF DUP7 DUP6 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x50E9 SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST PUSH2 0x50F3 SWAP2 SWAP1 PUSH2 0x5DDD JUMP JUMPDEST PUSH2 0x50FD SWAP2 SWAP1 PUSH2 0x5DC9 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47BF DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x54EE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDBB DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47BF DUP4 DUP4 PUSH2 0x55E1 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x520A JUMPI PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 PUSH4 0xA9059CBB SWAP2 AND PUSH2 0x5167 DUP5 DUP7 PUSH2 0x5DB1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5184 SWAP3 SWAP2 SWAP1 PUSH2 0x5CB2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x519E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x51CE JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x51CB SWAP2 DUP2 ADD SWAP1 PUSH2 0x5B68 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x5208 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x51FC JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5201 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP PUSH2 0x520A JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x5241 SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x527D SWAP1 DUP5 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x52D8 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x52C4 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x531E JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x5313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x47BF JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x532A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x539B DUP2 PUSH2 0x560B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x540C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x57EF SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x4FF4 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x542A SWAP2 SWAP1 PUSH2 0x5B68 JUMP JUMPDEST PUSH2 0x4FF4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17BE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x54D0 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xDBB JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xDBB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x54E7 JUMPI DUP2 PUSH2 0x47BF JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x55D7 JUMPI PUSH1 0x0 PUSH2 0x5512 PUSH1 0x1 DUP4 PUSH2 0x5E4C JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x5526 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x5E4C JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x558B JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x5546 JUMPI PUSH2 0x5546 PUSH2 0x5F27 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x5569 JUMPI PUSH2 0x5569 PUSH2 0x5F27 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x559C JUMPI PUSH2 0x559C PUSH2 0x5F11 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xDBB JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0xDBB JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x55F8 JUMPI PUSH2 0x55F8 PUSH2 0x5F27 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5616 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x56AD JUMPI PUSH1 0x1E SLOAD PUSH2 0x564E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1210 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x56D1 SWAP1 PUSH2 0x511C JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x2637 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x56FA SWAP1 DUP4 PUSH2 0x5126 JUMP JUMPDEST SWAP1 POP PUSH2 0x5707 PUSH1 0x26 DUP3 PUSH2 0x47C6 JUMP JUMPDEST ISZERO PUSH2 0x57DC JUMPI PUSH2 0x5715 TIMESTAMP PUSH2 0x476E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x579B JUMPI PUSH2 0x573F DUP2 PUSH2 0x1210 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x57CF SWAP1 PUSH2 0xDAB SWAP1 DUP4 PUSH2 0x4A07 JUMP JUMPDEST PUSH2 0x57D9 SWAP1 DUP5 PUSH2 0x5DB1 JUMP JUMPDEST SWAP3 POP JUMPDEST POP DUP1 PUSH2 0x57E7 DUP2 PUSH2 0x5E8F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x56B0 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCA2 DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 DUP5 EXTCODESIZE PUSH2 0x5848 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x17BE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x5864 SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x58A1 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x58A6 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x58B6 DUP3 DUP3 DUP7 PUSH2 0x58C1 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x58D0 JUMPI POP DUP2 PUSH2 0x47BF JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x58E0 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17BE SWAP2 SWAP1 PUSH2 0x5D18 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x15D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x6 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x15D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x592E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x47BF DUP2 PUSH2 0x5F3D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x594B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x47BF DUP2 PUSH2 0x5F3D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5969 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5974 DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x5984 DUP2 PUSH2 0x5F3D JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x59A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x59AF DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x59BF DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x59CF DUP2 PUSH2 0x5F3D JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x59EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x59FA DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x5A0A DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5A31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5A3C DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x5A4C DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x5A63 DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5A84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5A8F DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x5A9F DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x5ACC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x5AD7 DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x5AE7 DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5B18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5B23 DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5B46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5B51 DUP2 PUSH2 0x5F3D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x59CF DUP2 PUSH2 0x5F3D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x47BF DUP3 PUSH2 0x58FA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5B98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5BA1 DUP5 PUSH2 0x590A JUMP JUMPDEST SWAP3 POP PUSH2 0x5BAF PUSH1 0x20 DUP6 ADD PUSH2 0x590A JUMP JUMPDEST SWAP2 POP PUSH2 0x5BBD PUSH1 0x40 DUP6 ADD PUSH2 0x58FA JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5BD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5BF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5C0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x5C38 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x5E63 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 DUP3 ADD SWAP2 SWAP1 PUSH1 0x60 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5CA5 JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5C83 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5D0C JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5CE7 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x5D37 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x5E63 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x6 SWAP2 SWAP1 SWAP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5DC4 JUMPI PUSH2 0x5DC4 PUSH2 0x5EE5 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5DD8 JUMPI PUSH2 0x5DD8 PUSH2 0x5EFB JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5DF7 JUMPI PUSH2 0x5DF7 PUSH2 0x5EE5 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x5E27 JUMPI PUSH2 0x5E27 PUSH2 0x5EE5 JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x5E42 JUMPI PUSH2 0x5E42 PUSH2 0x5EE5 JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x5E5E JUMPI PUSH2 0x5E5E PUSH2 0x5EE5 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5E7E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5E66 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x50A4 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x5EA3 JUMPI PUSH2 0x5EA3 PUSH2 0x5EE5 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5EB9 JUMPI PUSH2 0x5EB9 PUSH2 0x5EFB JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x5EDC JUMPI PUSH2 0x5EDC PUSH2 0x5EE5 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5F52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID CHAINID CALLCODE XOR ADDMOD PUSH26 0xA7123A197CC3828C28955D70D661C70ACBDC02450DAF5F9A9C1C STATICCALL 0xEE EXTCODEHASH 0xD 0xAB 0xA9 DUP4 PUSH30 0x1AB0597ACF34328550E4832D02E24E467825E7C2DD318C3820A264697066 PUSH20 0x58221220B1237FE0BC50D34155280B1F1861A235 PUSH7 0xF2B6EF241ABC67 DIV 0xA7 JUMPDEST 0x1E DUP14 0xD3 BYTE PUSH13 0x64736F6C634300080700330000 ",
              "sourceMap": "2517:329:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3206:848:35;;;;;;:::i;:::-;;:::i;:::-;;;11623:25:84;;;11611:2;11596:18;3206:848:35;;;;;;;;1968:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1402:135:35;;;:::i;:::-;;;;;;;:::i;4104:514::-;;;;;;:::i;:::-;;:::i;8401:573::-;;;;;;:::i;:::-;;:::i;:::-;;2423:690:39;;;;;;:::i;:::-;;:::i;1728:76:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2556:364:31;;;;;;:::i;:::-;;:::i;4668:1632:35:-;;;;;;:::i;:::-;;:::i;:::-;;;;11310:13:84;;11307:1;11296:28;;;11278:47;;11395:4;11383:17;;;11377:24;11363:39;;;11341:20;;;11334:69;11447:17;;;11441:24;11419:20;;;11412:54;11266:2;11251:18;4668:1632:35;11076:396:84;880:79:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;:::i;:::-;;;;;;;;;;;;;;1374:436:42;;;;;;:::i;:::-;;:::i;362:32:31:-;;;;;-1:-1:-1;;;;;362:32:31;;;;;;;;;;:::i;2090:78:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;384:50:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9125:14:84;;9118:22;9100:41;;9088:2;9073:18;384:50:32;8960:187:84;2196:653:42;;;;;;:::i;:::-;;:::i;7478:873:35:-;;;;;;:::i;:::-;;:::i;568:210:30:-;;;;;;:::i;:::-;;:::i;973:834:34:-;;;;;;:::i;:::-;;:::i;423:204:38:-;;;;;;:::i;:::-;;:::i;669:279::-;;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;-1:-1:-1;;;;;199:34:28;;;667:41:31;;;;;;1340:1042:39;;;;;;:::i;:::-;;:::i;834:50:31:-;;;;;;7219:209:35;;;;;;:::i;:::-;;:::i;533:194:32:-;;;;;;:::i;:::-;;:::i;945:79:35:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4195:110:31;;;;;;:::i;:::-;;:::i;566:221:39:-;;;;;;:::i;:::-;;:::i;1587:691:35:-;;;;;;:::i;:::-;;:::i;1075:373:33:-;;;;;;:::i;:::-;;:::i;1788:223:31:-;;;;;;:::i;:::-;;:::i;860:284:41:-;;;;;;:::i;:::-;;:::i;925:49:31:-;;;;;;590:36;;;;;-1:-1:-1;;;;;590:36:31;;;2385:105:29;;;:::i;226:52:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;226:52:38;;;2328:828:35;;;;;;:::i;:::-;;:::i;2210:50:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3140:152:31;;;;;;:::i;:::-;;:::i;666:319:37:-;;;;;;:::i;:::-;;:::i;2531:111:29:-;;;:::i;486:348:27:-;;;;;;:::i;:::-;;:::i;321:59:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;321:59:38;;;999:203:32;;;;;;:::i;:::-;;:::i;9024:681:35:-;;;;;;:::i;:::-;;:::i;769:69:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;721:609:42;;;;;;:::i;:::-;;:::i;1854:298::-;;;;;;:::i;:::-;;:::i;1075:54:35:-;;;;;;:::i;:::-;;;;;;;;;;;;;;749:44:31;;;;;;762:202:32;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;1027:1856:37:-;;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3973:182:31;;;;;;:::i;:::-;;:::i;838:86:34:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6736:433:35;;;;;;:::i;:::-;;:::i;2960:140:31:-;;;;;;:::i;:::-;;:::i;299:49:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;488:326:41;;;;;;:::i;:::-;;:::i;422:253:36:-;;;;;;:::i;:::-;;:::i;435:37:31:-;;;;;-1:-1:-1;;;;;435:37:31;;;2286:230;;;;;;:::i;:::-;;:::i;3666:267::-;;;;;;:::i;:::-;;:::i;1846:80:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1855:695:34;;;;;;:::i;:::-;;:::i;3154:538:39:-;;;;;;:::i;:::-;;:::i;1105:32:31:-;;;;;;534:53:29;;;;;;:::i;:::-;;;;;;;;;;;;;;3332:188:31;;;;;;:::i;:::-;;:::i;2051:195::-;;;;;;:::i;:::-;;:::i;479:64:37:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;479:64:37;;;1237:211:32;;;;;;:::i;:::-;;:::i;513:36:31:-;;;;;-1:-1:-1;;;;;513:36:31;;;1180:52:35;;;;;;:::i;:::-;;;;;;;;;;;;;;444:588:33;;;;;;:::i;:::-;;:::i;268:41:28:-;;;;;-1:-1:-1;;;;;268:41:28;;;316:212:30;;;;;;:::i;:::-;;:::i;828:471:39:-;;;;;;:::i;:::-;;:::i;1015:49:31:-;;;;;;6364:322:35;;;;;;:::i;:::-;;:::i;3206:848::-;3277:16;3301:22;3326;3343:4;3326:16;:22::i;:::-;3446:16;;3301:47;;-1:-1:-1;3374:15:35;;3420:43;;3428:34;;3374:15;3428:34;:::i;:::-;3420:7;:43::i;:::-;-1:-1:-1;;;;;3401:16:35;;;;;;:10;:16;;;;;;:62;3396:576;;;3566:16;;-1:-1:-1;;;;;3545:16:35;;;;;;:10;:16;;;;;;3527:34;;:15;:34;:::i;:::-;3526:56;3522:324;;3704:16;;-1:-1:-1;;;;;3685:16:35;;;;;;:10;:16;;;;;;:35;;3704:16;3685:35;:::i;:::-;3671:50;;;;:::i;:::-;;;3396:576;;3522:324;-1:-1:-1;;;;;3821:16:35;;;;;;:10;:16;;;;;;3808:29;;;;:::i;3396:576::-;3941:24;3949:15;3941:7;:24::i;:::-;3928:37;;;;:::i;:::-;;;3396:576;4016:33;4023:9;4034:14;4016:6;:33::i;:::-;3988:25;4008:4;3988:19;:25::i;:::-;:61;;;;:::i;:::-;3977:72;3206:848;-1:-1:-1;;;;3206:848:35:o;1402:135::-;1465:22;1503:29;:20;:27;:29::i;:::-;1495:37;;1402:135;:::o;4104:514::-;4197:22;4231:41;:20;4261:10;4231:29;:41::i;:::-;4227:387;;;4282:27;4312:28;4329:10;4312:16;:28::i;:::-;4282:58;;4352:10;:17;;;4373:1;4352:22;4348:260;;-1:-1:-1;;;;;4410:25:35;;4386:21;4410:25;;;:13;:25;;;;;;;;:74;;4463:10;:21;;;4462:22;;;:::i;:::-;4410:74;;;4438:10;:21;;;4410:74;4526:12;;4581:16;;4512:86;;-1:-1:-1;;;4512:86:35;;4386:98;;-1:-1:-1;4501:98:35;;-1:-1:-1;;;;;4526:12:35;;;;4512:42;;:86;;4555:7;;4386:98;;4512:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:10;:98::i;:::-;4494:105;;;;;;4348:260;4274:340;4227:387;4104:514;;;;:::o;8401:573::-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;8598:10:35::1;::::0;8580:28:::1;::::0;:15:::1;:28;:::i;:::-;-1:-1:-1::0;;;;;8543:22:35;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;:34;;::::1;::::0;;;;;;;;;:65;;;;8614:20;;;:14:::1;:20:::0;;;;;:32;;;;;;;;;:43;;8650:7;;8543:22;8614:43:::1;::::0;8650:7;;8614:43:::1;:::i;:::-;::::0;;;-1:-1:-1;8663:50:35::1;::::0;-1:-1:-1;8687:4:35;8693:10;8705:7;8663:23:::1;:50::i;:::-;-1:-1:-1::0;;;;;8750:21:35;;::::1;8720:27;8750:21:::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;8793:23;;;;;:94:::1;;;8871:16;;8820:48;8836:19;8857:10;8820:15;:48::i;:::-;:67;8793:94;8789:132;;;8896:25;;-1:-1:-1::0;;;8896:25:35::1;;;;;;;;;;;8789:132;8949:10;-1:-1:-1::0;;;;;8933:36:35::1;8943:4;-1:-1:-1::0;;;;;8933:36:35::1;;8961:7;8933:36;;;;11623:25:84::0;;11611:2;11596:18;;11477:177;8933:36:35::1;;;;;;;;8537:437;8401:573:::0;;;;:::o;2423:690:39:-;2518:10;2503:12;2539:14;;;:8;:14;;;;;;;;2535:40;;;2562:13;;-1:-1:-1;;;2562:13:39;;;;;;;;;;;2535:40;2586:20;:5;2601:4;2586:14;:20::i;:::-;2581:49;;2615:15;;-1:-1:-1;;;2615:15:39;;;;;;;;;;;2581:49;2641:31;2667:4;2641:25;:31::i;:::-;2637:156;;;-1:-1:-1;;;;;2687:99:39;;2716:16;;;;:10;:16;;;;;;;;;2734:20;:26;;;;;;2762:17;:23;;;;;;;;2687:99;;-1:-1:-1;;;;;;;;;;;2687:99:39;;;2716:16;;2734:26;;2687:99;:::i;:::-;;;;;;;;2637:156;-1:-1:-1;;;;;2814:26:39;;;;;;:20;:26;;;;;;2803:37;;2799:193;;;2850:23;2868:4;2850:17;:23::i;:::-;-1:-1:-1;;;;;2886:99:39;;2915:16;;;;:10;:16;;;;;;;;;2933:20;:26;;;;;;2961:17;:23;;;;;;;;2886:99;;-1:-1:-1;;;;;;;;;;;2886:99:39;;;2915:16;;2933:26;;2886:99;:::i;:::-;;;;;;;;2799:193;2998:39;3013:4;3019:7;3028:8;2998:14;:39::i;:::-;3059:8;;-1:-1:-1;;;;;3048:60:39;;;;;;;;3059:8;-1:-1:-1;;;;;;;;;;;3084:8:39;3094:13;:11;:13::i;:::-;3048:60;;;12168:25:84;;;12224:2;12209:18;;12202:34;;;;12141:18;3048:60:39;;;;;;;2497:616;2423:690;;:::o;2556:364:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2647:27:31;::::1;2643:53;;2683:13;;-1:-1:-1::0;;;2683:13:31::1;;;;;;;;;;;2643:53;2702:12;:28:::0;;-1:-1:-1;;;;;2702:28:31;;::::1;-1:-1:-1::0;;;;;;2702:28:31;;::::1;::::0;::::1;::::0;;;:12:::1;2736:28:::0;;;:14:::1;:28;::::0;;;;;;:43;;;;::::1;::::0;;::::1;::::0;;;2830:12:::1;::::0;2816:55;;-1:-1:-1;;;2816:55:31;;2830:12;::::1;::::0;2816:40:::1;::::0;:55:::1;::::0;2717:13;;2816:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2785:28:31;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;:86;;-1:-1:-1;;2785:86:31::1;::::0;::::1;;::::0;;;::::1;::::0;;;2882:33;::::1;::::0;::::1;::::0;2785:28;;2882:33:::1;:::i;:::-;;;;;;;;2556:364:::0;:::o;4668:1632:35:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;4819:24:35;4827:15;4819:7;:24::i;:::-;-1:-1:-1;;;;;4791:17:35;;;;;;:5;:17;;;;;:24;;;:52;4787:1509;;;-1:-1:-1;;;;;;4924:17:35;;;;;:5;:17;;;;;;;;;4911:30;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4911:30:35;;;;;;;;;;;;;;;;;;;;;;;;;;;4668:1632::o;4787:1509::-;4962:12;4982:18;5003:43;5029:16;;5011:15;:34;;;;:::i;5003:43::-;-1:-1:-1;;;;;5059:17:35;;;;;;:5;:17;;;;;:24;;;4982:64;;-1:-1:-1;5059:38:35;;5055:1103;;;5220:15;;;5233:1;5220:15;;;;;;;;;5190:27;;5220:15;;;;;;;;;-1:-1:-1;;;;;;;;5266:17:35;;5245:18;5266:17;;;:5;:17;;;;;:25;5190:45;;-1:-1:-1;5266:25:35;;5344:24;5352:15;5344:7;:24::i;:::-;5326:42;;:15;:42;:::i;:::-;5302:11;5314:1;5302:14;;;;;;;;:::i;:::-;:67;;;;:14;;;;;;;;;;:67;5428:12;;-1:-1:-1;;;;;5450:26:35;;;5428:12;5450:26;;;:14;:26;;;;;;;;;5414:76;;-1:-1:-1;;;5414:76:35;;5428:12;;;;5414:35;;:76;;5450:26;;;;;5478:11;;5414:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5380:110;;;;;;;;;;;;-1:-1:-1;5525:33:35;;5546:12;;-1:-1:-1;5525:33:35;:::i;:::-;5501:57;;;;;;:21;;;:57;-1:-1:-1;5055:1103:35;;-1:-1:-1;5055:1103:35;;-1:-1:-1;;;;;5577:17:35;;;;;;:5;:17;;;;;:24;;;:37;-1:-1:-1;5573:585:35;;;5719:15;;;5732:1;5719:15;;;;;;;;5689:27;;5719:15;;;;;;;;;;-1:-1:-1;5719:15:35;5689:45;;5787:24;5795:15;5787:7;:24::i;:::-;5769:42;;:15;:42;:::i;:::-;5745:11;5757:1;5745:14;;;;;;;;:::i;:::-;;;;;;:67;;;;;;;;;;;5891:16;;5864:24;5872:15;5864:7;:24::i;:::-;5846:42;;:15;:42;:::i;:::-;:61;;;;:::i;:::-;5822:11;5834:1;5822:14;;;;;;;;:::i;:::-;:86;;;;:14;;;;;;;;;;:86;6015:12;;-1:-1:-1;;;;;6037:26:35;;;5919:22;6037:26;;;:14;:26;;;;;;;;6001:76;;-1:-1:-1;;;6001:76:35;;6015:12;;;;6001:35;;:76;;6037:26;;6065:11;;6001:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5951:126;;;;;;;;;;;;-1:-1:-1;5951:126:35;-1:-1:-1;6112:37:35;;5951:126;;6112:37;:::i;:::-;6088:61;;;;;;:21;;;:61;-1:-1:-1;;5573:585:35;6169:7;6165:125;;;6208:24;6216:15;6208:7;:24::i;:::-;6188:17;;;:44;6165:125;;;6257:24;6264:17;;;6257:24;6165:125;4954:1342;;4787:1509;4668:1632;;;:::o;1374:436:42:-;1447:10;1438:20;;;;:8;:20;;;;;;;;1434:43;;;1467:10;;-1:-1:-1;;;1467:10:42;;;;;;;;;;;1434:43;1504:10;1487:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1487:38:42;;;;;;;;;;1483:73;;1539:17;;-1:-1:-1;;;1539:17:42;;;;;;;;;;;1483:73;1583:10;1566:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1566:38:42;;;;;;;;;;1608:15;-1:-1:-1;1562:83:42;;1632:13;;-1:-1:-1;;;1632:13:42;;;;;;;;;;;1562:83;1676:10;1659:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1659:38:42;;;;;;;;;1652:45;;;1659:28;1722:31;;1688:8;1722:9;:31::i;:::-;1704:49;;1787:8;-1:-1:-1;;;;;1764:41:42;1775:10;-1:-1:-1;;;;;1764:41:42;;1797:7;1764:41;;;;11623:25:84;;11611:2;11596:18;;11477:177;1764:41:42;;;;;;;;1428:382;1374:436;:::o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;754:10:::1;:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;2196:653:42:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;;;;;;;;;1680:1;2389:7;:18;;;2288:10:42::1;2273:26:::0;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;2273:36:42;::::1;::::0;;;;;;;;2269:73:::1;;2323:19;;-1:-1:-1::0;;;2323:19:42::1;;;;;;;;;;;2269:73;2369:10;2352:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;2352:38:42;::::1;::::0;;;;;;;;2394:15:::1;-1:-1:-1::0;2348:85:42::1;;2418:15;;-1:-1:-1::0;;;2418:15:42::1;;;;;;;;;;;2348:85;2452:10;2443:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;2439:43;;;2472:10;;-1:-1:-1::0;;;2472:10:42::1;;;;;;;;;;;2439:43;2522:10;2489:15;2507:26:::0;;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;2507:36:42;;::::1;::::0;;;;;;;;;;2566:8:::1;::::0;2507:36;;2566:8;::::1;2554:20;2550:84;;;2599:13;::::0;2584:43:::1;::::0;-1:-1:-1;;;2584:43:42;;::::1;::::0;::::1;11623:25:84::0;;;-1:-1:-1;;;;;2599:13:42;;::::1;::::0;2584:34:::1;::::0;11596:18:84;;2584:43:42::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2550:84;2662:10;2647:26;::::0;;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;2647:36:42;::::1;::::0;;;;;;;;;2640:43;;;2696:28;;;:16:::1;:28:::0;;;;;:38;;;;;;;;2689:45;;;;2741:50:::1;::::0;2783:7;2741:29:::1;:50::i;:::-;2803:41;::::0;11623:25:84;;;-1:-1:-1;;;;;2803:41:42;::::1;::::0;2814:10:::1;::::0;2803:41:::1;::::0;11611:2:84;11596:18;2803:41:42::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;2196:653:42:o;7478:873:35:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;7614:41:35::1;:20;7644:10:::0;7614:29:::1;:41::i;:::-;7609:80;;7664:25;;-1:-1:-1::0;;;7664:25:35::1;;;;;;;;;;;7609:80;7700:20;:5;7715:4:::0;7700:14:::1;:20::i;:::-;7695:50;;7729:16;;-1:-1:-1::0;;;7729:16:35::1;;;;;;;;;;;7695:50;-1:-1:-1::0;;;;;7752:21:35;::::1;;::::0;;;:15:::1;:21;::::0;;;;:37:::1;::::0;7778:10;7752:25:::1;:37::i;:::-;;7796:27;7818:4;7796:21;:27::i;:::-;7909:16;::::0;-1:-1:-1;;;;;7850:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;7834:72:::1;::::0;7850:43:::1;::::0;7886:7;;7850:43:::1;:::i;:::-;7895:10;7834:15;:72::i;:::-;:91;7830:129;;;7934:25;;-1:-1:-1::0;;;7934:25:35::1;;;;;;;;;;;7830:129;-1:-1:-1::0;;;;;7971:99:35;::::1;8000:16;::::0;;;:10:::1;:16;::::0;;;;;;;;8018:20:::1;:26:::0;;;;;;8046:17:::1;:23:::0;;;;;;;;7971:99;;-1:-1:-1;;;;;;;;;;;7971:99:35;::::1;::::0;8000:16;;8018:26;;7971:99:::1;:::i;:::-;;;;;;;;8077:71;-1:-1:-1::0;;;;;8077:35:35;::::1;8113:10;8133:4;8140:7:::0;8077:35:::1;:71::i;:::-;-1:-1:-1::0;;;;;8154:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:44;;8191:7;;8154:21;:44:::1;::::0;8191:7;;8154:44:::1;:::i;:::-;::::0;;;-1:-1:-1;8231:48:35::1;::::0;-1:-1:-1;8242:36:35::1;8258:7:::0;8267:10;8242:15:::1;:36::i;8231:48::-;-1:-1:-1::0;;;;;8204:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;:75;;:23;;;:75:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;8290:56:35::1;::::0;11623:25:84;;;8326:10:35::1;::::0;-1:-1:-1;;;;;8290:56:35;;::::1;::::0;;;::::1;::::0;::::1;::::0;11611:2:84;11596:18;8290:56:35::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;7478:873:35:o;568:210:30:-;1778:10:32;1768:21;;;;:9;:21;;;;;;;;1763:49;;1798:14;;-1:-1:-1;;;1798:14:32;;;;;;;;;;;1763:49;-1:-1:-1;;;;;649:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;::::1;;644:49;;680:13;;-1:-1:-1::0;;;680:13:30::1;;;;;;;;;;;644:49;-1:-1:-1::0;;;;;699:22:30;::::1;724:5;699:22:::0;;;:8:::1;:22;::::0;;;;;:30;;-1:-1:-1;;699:30:30::1;::::0;;740:33;762:10:::1;::::0;699:22;740:33:::1;::::0;::::1;568:210:::0;:::o;973:834:34:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;1108:20:34::1;:5;1123:4:::0;1108:14:::1;:20::i;:::-;1103:50;;1137:16;;-1:-1:-1::0;;;1137:16:34::1;;;;;;;;;;;1103:50;1229:8;::::0;-1:-1:-1;;;;;1219:18:34;;::::1;1229:8:::0;::::1;1219:18;1215:47;;;1246:16;;-1:-1:-1::0;;;1246:16:34::1;;;;;;;;;;;1215:47;1286:39;::::0;-1:-1:-1;;;1286:39:34;;1268:15:::1;::::0;-1:-1:-1;;;;;1286:24:34;::::1;::::0;::::1;::::0;:39:::1;::::0;1319:4:::1;::::0;1286:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1268:57:::0;-1:-1:-1;1331:67:34::1;-1:-1:-1::0;;;;;1331:31:34;::::1;1363:10;1383:4;1390:7:::0;1331:31:::1;:67::i;:::-;1404:17;1466:7;1431:6;-1:-1:-1::0;;;;;1424:24:34::1;;1457:4;1424:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;;:::i;:::-;1404:69;;1479:17;1238:6:31;1512:3:34;;1500:9;:15;;;;:::i;:::-;1499:25;;;;:::i;:::-;1479:45:::0;-1:-1:-1;1563:21:34::1;1479:45:::0;1563:9;:21:::1;:::i;:::-;-1:-1:-1::0;;;;;1530:21:34;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;;:54;;:29;;:21;:54:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;1590:28:34;;::::1;;::::0;;;:22:::1;:28;::::0;;;;;;;:36;;::::1;::::0;;;;;;;;1629:15:::1;1590:54:::0;;1678:10:::1;::::0;1650:50:::1;::::0;1678:10:::1;1690:9:::0;1650:27:::1;:50::i;:::-;-1:-1:-1::0;;;;;1706:16:34;::::1;;::::0;;;:10:::1;:16;::::0;;;;:28:::1;::::0;1727:6;1706:20:::1;:28::i;:::-;;1780:10;-1:-1:-1::0;;;;;1746:56:34::1;1772:6;-1:-1:-1::0;;;;;1746:56:34::1;1766:4;-1:-1:-1::0;;;;;1746:56:34::1;;1792:9;1746:56;;;;11623:25:84::0;;11611:2;11596:18;;11477:177;1746:56:34::1;;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;;;973:834:34:o;423:204:38:-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;527:21:38;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;-1:-1:-1;;;;;;527:33:38::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;596:14:38;;;;;;;571:51;;527:33;;596:14:::1;::::0;527:21;571:51:::1;::::0;::::1;423:204:::0;;;:::o;669:279::-;-1:-1:-1;;;;;1132:21:38;;;;;;;:15;:21;;;;;;;;;1118:10;:35;1114:69;;1162:21;;-1:-1:-1;;;1162:21:38;;;;;;;;;;;1114:69;-1:-1:-1;;;;;786:14:38;;::::1;761:22;786:14:::0;;;:8:::1;:14;::::0;;;;;;;;;824:15:::1;:21:::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;;807:38:38;;::::1;::::0;;;::::1;::::0;;;851:28;;;;::::1;::::0;;891:52;786:14;::::1;::::0;;;;910:10:::1;::::0;891:52:::1;::::0;761:22;891:52:::1;755:193;669:279:::0;;:::o;1340:1042:39:-;1420:10;1405:12;1440:14;;;:8;:14;;;;;;;;1436:40;;;1463:13;;-1:-1:-1;;;1463:13:39;;;;;;;;;;;1436:40;1487:20;:5;1502:4;1487:14;:20::i;:::-;1482:49;;1516:15;;-1:-1:-1;;;1516:15:39;;;;;;;;;;;1482:49;1542:31;1568:4;1542:25;:31::i;:::-;1538:156;;;-1:-1:-1;;;;;1588:99:39;;1617:16;;;;:10;:16;;;;;;;;;1635:20;:26;;;;;;1663:17;:23;;;;;;;;1588:99;;-1:-1:-1;;;;;;;;;;;1588:99:39;;;1617:16;;1635:26;;1588:99;:::i;:::-;;;;;;;;1538:156;1774:12;;-1:-1:-1;;;;;1805:14:39;;;1701;1805;;;:5;:14;;;;;;;;1820:8;;;;1805:24;;;;;;;;;1760:70;;-1:-1:-1;;;1760:70:39;;;;;11623:25:84;;;;1701:14:39;;;;;;1774:12;;;1760:44;;11596:18:84;;1760:70:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1700:130;;;;;;1837:16;1856:13;:11;:13::i;:::-;1837:32;;1875:16;1894:60;1912:8;1922:9;1933:12;1947:6;1894:17;:60::i;:::-;-1:-1:-1;;;;;1976:26:39;;;;;;:20;:26;;;;;;1875:79;;-1:-1:-1;1965:37:39;;1961:305;;;2012:23;2030:4;2012:17;:23::i;:::-;-1:-1:-1;;;;;2048:99:39;;2077:16;;;;:10;:16;;;;;;;;;2095:20;:26;;;;;;2123:17;:23;;;;;;;;2048:99;;-1:-1:-1;;;;;;;;;;;2048:99:39;;;2077:16;;2095:26;;2048:99;:::i;:::-;;;;;;;;2167:13;:11;:13::i;:::-;2156:24;;2199:60;2217:8;2227:9;2238:12;2252:6;2199:17;:60::i;:::-;2188:71;;1961:305;2272:39;2287:4;2293:7;2302:8;2272:14;:39::i;:::-;2333:8;;2322:55;;;12168:25:84;;;12224:2;12209:18;;12202:34;;;-1:-1:-1;;;;;2322:55:39;;;;;;;;2333:8;;;-1:-1:-1;;;;;;;;;;;2322:55:39;12141:18:84;2322:55:39;;;;;;;1399:983;;;;;;1340:1042;:::o;7219:209:35:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;7308:39:35::1;:20;7336:10:::0;7308:27:::1;:39::i;:::-;7303:78;;7356:25;;-1:-1:-1::0;;;7356:25:35::1;;;;;;;;;;;7303:78;7392:31;7412:10;7392:31;;;;;;:::i;533:194:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;4195:110:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4264:3:31::1;:10:::0;;;4285:15:::1;::::0;11623:25:84;;;4285:15:31::1;::::0;11611:2:84;11596:18;4285:15:31::1;11477:177:84::0;566:221:39;628:14;664:13;:11;:13::i;:::-;650:11;:27;687:26;:8;705:7;687:17;:26::i;:::-;683:100;;;728:29;745:11;;728:29;;;;11623:25:84;;11611:2;11596:18;;11477:177;728:29:39;;;;;;;;-1:-1:-1;772:4:39;;566:221;-1:-1:-1;566:221:39:o;1587:691:35:-;1657:22;1692:9;1687:587;-1:-1:-1;;;;;1707:21:35;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;1703:1;:34;1687:587;;;-1:-1:-1;;;;;1773:21:35;;1752:18;1773:21;;;:15;:21;;;;;:27;;1798:1;1773:24;:27::i;:::-;1752:48;-1:-1:-1;1812:41:35;:20;1752:48;1812:29;:41::i;:::-;1808:460;;;1865:27;1895:28;1912:10;1895:16;:28::i;:::-;1865:58;;1937:10;:17;;;1958:1;1937:22;1933:327;;-1:-1:-1;;;;;1997:25:35;;1973:21;1997:25;;;:13;:25;;;;;;;;:74;;2050:10;:21;;;2049:22;;;:::i;:::-;1997:74;;;2025:10;:21;;;1997:74;2139:12;;-1:-1:-1;;;;;2168:21:35;;;2139:12;2168:21;;;:15;:21;;;;;;;;:33;;;;;;;;;;;;;2220:16;;2125:112;;-1:-1:-1;;;2125:112:35;;1973:98;;-1:-1:-1;2101:148:35;;2139:12;;;;;2125:42;;:112;;1973:98;;2125:112;;;:::i;2101:148::-;2083:166;;;;:::i;:::-;;;1961:299;1933:327;1855:413;1808:460;-1:-1:-1;1739:3:35;;;;:::i;:::-;;;;1687:587;;;;1587:691;;;:::o;1075:373:33:-;1589:10:32;1580:20;;;;:8;:20;;;;;;;;1575:47;;1609:13;;-1:-1:-1;;;1609:13:32;;;;;;;;;;;1575:47;-1:-1:-1;;;;;1214:14:33;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;1209:41;;1237:13;;-1:-1:-1::0;;;1237:13:33::1;;;;;;;;;;;1209:41;1257:50;1281:4;1287:10;1299:7;1257:23;:50::i;:::-;1345:10;::::0;1317:48:::1;::::0;-1:-1:-1;;;1317:48:33;;-1:-1:-1;;;;;1317:27:33;;::::1;::::0;::::1;::::0;:48:::1;::::0;1345:10;;::::1;::::0;1357:7;;1317:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;1317:48:33::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;1317:48:33::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;1313:64;;;;;;;1423:10;-1:-1:-1::0;;;;;1387:56:33::1;1405:4;-1:-1:-1::0;;;;;1387:56:33::1;;1411:10;1435:7;1387:56;;;;;;;:::i;:::-;;;;;;;;1075:373:::0;;;:::o;1788:223:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1879:27:31;::::1;1875:53;;1915:13;;-1:-1:-1::0;;;1915:13:31::1;;;;;;;;;;;1875:53;1934:12;:28:::0;;-1:-1:-1;;;;;;1934:28:31::1;-1:-1:-1::0;;;;;1934:28:31;::::1;;::::0;;1973:33:::1;::::0;::::1;::::0;::::1;::::0;1934:28;;1973:33:::1;:::i;860:284:41:-:0;1589:10:32;1580:20;;;;:8;:20;;;;;;;;1575:47;;1609:13;;-1:-1:-1;;;1609:13:32;;;;;;;;;;;1575:47;-1:-1:-1;;;;;934:17:41;::::1;;::::0;;;:8:::1;:17;::::0;;;;;::::1;;929:44;;960:13;;-1:-1:-1::0;;;960:13:41::1;;;;;;;;;;;929:44;979:24;:8;995:7:::0;979:15:::1;:24::i;:::-;-1:-1:-1::0;1025:8:41::1;::::0;-1:-1:-1;;;;;1035:14:41;;::::1;1025:8;1035:14:::0;;;:5:::1;:14;::::0;;;;;;;1025:8;;;::::1;1035:24:::0;;;;;;;;;;1061:23;;;:14:::1;:23:::0;;;;;:33;;;;;;;;;;1009:86:::1;::::0;1016:7;;1025:8;1009:6:::1;:86::i;:::-;1106:33;::::0;1128:10:::1;::::0;-1:-1:-1;;;;;1106:33:41;::::1;::::0;::::1;::::0;;;::::1;860:284:::0;:::o;2385:105:29:-;2433:22;2471:14;:5;:12;:14::i;2328:828:35:-;2401:25;2434:22;2459;2476:4;2459:16;:22::i;:::-;2588:16;;-1:-1:-1;;;;;2568:16:35;;;;;;:10;:16;;;;;;2434:47;;-1:-1:-1;2588:16:35;2550:34;;:15;:34;:::i;:::-;2549:55;2545:607;;;2729:1;2712:14;:18;:220;;-1:-1:-1;;;;;2906:26:35;;;;;;:20;:26;;;;;;2712:220;;;-1:-1:-1;;;;;2789:23:35;;;;;;:17;:23;;;;;;;;;2742:20;:26;;;;;;;:43;;2771:14;;2742:43;:::i;:::-;2741:71;;;;:::i;:::-;2692:240;;2545:607;;3140:152:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3223:10:31::1;:24:::0;;;3258:29:::1;::::0;11623:25:84;;;3258:29:31::1;::::0;11596:18:84;3258:29:31::1;11477:177:84::0;666:319:37;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;783:6:37::1;-1:-1:-1::0;;;;;771:18:37::1;:8;-1:-1:-1::0;;;;;771:18:37::1;;767:55;;;798:24;;-1:-1:-1::0;;;798:24:37::1;;;;;;;;;;;767:55;-1:-1:-1::0;;;;;829:30:37;;::::1;;::::0;;;:20:::1;:30;::::0;;;;;;;:39;;-1:-1:-1;;;;;;829:39:37::1;::::0;;::::1;::::0;;::::1;::::0;;874:19:::1;:29:::0;;;;;:37;;;;;;;;;914:15:::1;874:55:::0;;941:39;;::::1;::::0;::::1;::::0;829;;941::::1;:::i;:::-;;;;;;;;666:319:::0;;;:::o;2531:111:29:-;2582:22;2620:17;:8;:15;:17::i;486:348:27:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;609:17:27;::::1;605:43;;635:13;;-1:-1:-1::0;;;635:13:27::1;;;;;;;;;;;605:43;-1:-1:-1::0;;;;;658:22:27;::::1;439:42;658:22;654:135;;;690:30;::::0;-1:-1:-1;;;;;690:21:27;::::1;::::0;:30;::::1;;;::::0;712:7;;690:30:::1;::::0;;;712:7;690:21;:30;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;654:135;;;741:41;-1:-1:-1::0;;;;;741:27:27;::::1;769:3:::0;774:7;741:27:::1;:41::i;:::-;799:30;::::0;;-1:-1:-1;;;;;8175:15:84;;;8157:34;;8222:2;8207:18;;8200:34;;;8270:15;;8250:18;;;8243:43;799:30:27;;::::1;::::0;;;;8107:2:84;799:30:27;;::::1;486:348:::0;;;:::o;999:203:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;9024:681:35:-:0;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;9174:23:35;::::1;9170:49;;9206:13;;-1:-1:-1::0;;;9206:13:35::1;;;;;;;;;;;9170:49;-1:-1:-1::0;;;;;9229:20:35;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;;;;;;9225:69:::1;;9275:19;;-1:-1:-1::0;;;9275:19:35::1;;;;;;;;;;;9225:69;-1:-1:-1::0;;;;;9304:22:35;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;:34;;::::1;::::0;;;;;;;9342:15:::1;-1:-1:-1::0;9300:81:35::1;;9366:15;;-1:-1:-1::0;;;9366:15:35::1;;;;;;;;;;;9300:81;-1:-1:-1::0;;;;;9391:14:35;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;9387:37;;;9414:10;;-1:-1:-1::0;;;9414:10:35::1;;;;;;;;;;;9387:37;-1:-1:-1::0;;;;;9449:20:35;;::::1;9431:15;9449:20:::0;;;:14:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;;;;;;;;;;9488:39;;;;9540:22;;;:16:::1;:22:::0;;;;;:34;;;;;;;;9533:41;9449:32;9581:51:::1;::::0;9613:9;9449:32;9581:31:::1;:51::i;:::-;9681:9;-1:-1:-1::0;;;;;9643:57:35::1;9669:10;-1:-1:-1::0;;;;;9643:57:35::1;9663:4;-1:-1:-1::0;;;;;9643:57:35::1;;9692:7;9643:57;;;;11623:25:84::0;;11611:2;11596:18;;11477:177;9643:57:35::1;;;;;;;;9164:541;9024:681:::0;;;;:::o;721:609:42:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;820:10:42::1;811:20:::0;;:8:::1;:20;::::0;;;;;::::1;;807:43;;;840:10;;-1:-1:-1::0;;;840:10:42::1;;;;;;;;;;;807:43;860:26;:5;875:10;860:14;:26::i;:::-;856:52;;;895:13;;-1:-1:-1::0;;;895:13:42::1;;;;;;;;;;;856:52;973:8;::::0;955:26:::1;::::0;:15:::1;:26;:::i;:::-;931:10;914:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;914:38:42;::::1;::::0;;;;;;;;:67;;;;1006:41;;-1:-1:-1;;;1006:41:42;;914:28;;:38;1006:26:::1;::::0;:41:::1;::::0;1041:4:::1;::::0;1006:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;988:59:::0;-1:-1:-1;1053:69:42::1;-1:-1:-1::0;;;;;1053:33:42;::::1;1087:10;1107:4;1114:7:::0;1053:33:::1;:69::i;:::-;1138:41;::::0;-1:-1:-1;;;1138:41:42;;1182:7;;-1:-1:-1;;;;;1138:26:42;::::1;::::0;::::1;::::0;:41:::1;::::0;1173:4:::1;::::0;1138:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;1206:10;1196:21;::::0;;;:9:::1;:21;::::0;;;;;;;:28;;-1:-1:-1;;1196:28:42::1;1220:4;1196:28;::::0;;1230:12:::1;:24:::0;;;;;-1:-1:-1;;;;;1230:34:42;::::1;::::0;;;;;;;:45;;1128:61;;-1:-1:-1;1128:61:42;;1230:34;;1196:21;1230:45:::1;::::0;1128:61;;1230:45:::1;:::i;:::-;::::0;;;-1:-1:-1;;1287:38:42::1;::::0;11623:25:84;;;-1:-1:-1;;;;;1287:38:42;::::1;::::0;1295:10:::1;::::0;1287:38:::1;::::0;11611:2:84;11596:18;1287:38:42::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;721:609:42:o;1854:298::-;1988:10;;1970:28;;:15;:28;:::i;:::-;1946:10;1929:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1929:38:42;;;;;;;;;;;:69;;;;2004:17;;;:5;:17;;;;;:27;;;;;;;;;:38;;2035:7;;1929:28;2004:38;;2035:7;;2004:38;:::i;:::-;;;;-1:-1:-1;;2063:10:42;2048:26;;;;:14;:26;;;;;;;;-1:-1:-1;;;;;2048:36:42;;;;;;;;;:47;;2088:7;;2048:26;:47;;2088:7;;2048:47;:::i;:::-;;;;-1:-1:-1;;2107:40:42;;11623:25:84;;;-1:-1:-1;;;;;2107:40:42;;;2117:10;;2107:40;;11611:2:84;11596:18;2107:40:42;11477:177:84;762:202:32;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;1027:1856:37:-:0;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;1138:18:37;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;::::0;:38:::1;;-1:-1:-1::0;;;;;;1160:16:37;::::1;;::::0;;;:8:::1;:16;::::0;;;;;::::1;;1138:38;1134:64;;;1185:13;;-1:-1:-1::0;;;1185:13:37::1;;;;;;;;;;;1134:64;-1:-1:-1::0;;;;;1208:30:37;;::::1;;::::0;;;:20:::1;:30;::::0;;;;;;::::1;:40:::0;;::::1;;1204:78;;1257:25;;-1:-1:-1::0;;;1257:25:37::1;;;;;;;;;;;1204:78;-1:-1:-1::0;;;;;1310:29:37;;::::1;;::::0;;;:19:::1;:29;::::0;;;;;;;:37;;::::1;::::0;;;;;;;:59:::1;::::0;427:9:::1;::::0;1310:59:::1;:::i;:::-;1292:15;:77;1288:110;;;1378:20;;-1:-1:-1::0;;;1378:20:37::1;;;;;;;;;;;1288:110;1451:31;1473:8;1451:21;:31::i;:::-;1488:29;1510:6;1488:21;:29::i;:::-;-1:-1:-1::0;;;;;1553:20:37;::::1;1585:1;1553:20:::0;;;:10:::1;:20;::::0;;;;:29:::1;::::0;:27:::1;:29::i;:::-;:33;1546:359;;;-1:-1:-1::0;;;;;1622:20:37;::::1;1596:23;1622:20:::0;;;:10:::1;:20;::::0;;;;:26:::1;::::0;1596:23;1622::::1;:26::i;:::-;-1:-1:-1::0;;;;;1700:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:42;;::::1;::::0;;;;;;;;;;1656:23;;::::1;::::0;;;;;;;;:40;;;;;;;;:86;;1596:52;;-1:-1:-1;1700:42:37;;1656:86:::1;::::0;1700:42;;1656:86:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;1757:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:42;;::::1;::::0;;;;;;;;1750:49;;;1807:20;;;:10:::1;:20:::0;;;;:44:::1;::::0;1783:15;1807:27:::1;:44::i;:::-;-1:-1:-1::0;;;;;;1859:18:37;::::1;;::::0;;;:10:::1;:18;::::0;;;;:39:::1;::::0;1882:15;1859:22:::1;:39::i;:::-;;1588:317;1546:359;;;-1:-1:-1::0;;;;;1945:25:37;::::1;1982:1;1945:25:::0;;;:15:::1;:25;::::0;;;;:34:::1;::::0;:32:::1;:34::i;:::-;:38;1938:351;;;-1:-1:-1::0;;;;;2014:25:37;::::1;1993:18;2014:25:::0;;;:15:::1;:25;::::0;;;;:31:::1;::::0;1993:18;2014:28:::1;:31::i;:::-;-1:-1:-1::0;;;;;2093:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:37;;::::1;::::0;;;;;;;;;;2054:23;;::::1;::::0;;;;;;;;:35;;;;;;;;:76;;1993:52;;-1:-1:-1;2093:37:37;;2054:76:::1;::::0;2093:37;;2054:76:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2145:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:37;;::::1;::::0;;;;;;;2138:44;;;2191:23;;::::1;::::0;;:15:::1;:23:::0;;;:39:::1;::::0;2171:10;2191:27:::1;:39::i;:::-;-1:-1:-1::0;;;;;;2238:25:37;::::1;;::::0;;;:15:::1;:25;::::0;;;;:44:::1;::::0;2271:10;2238:32:::1;:44::i;:::-;;1985:304;1938:351;;;-1:-1:-1::0;;;;;2352:27:37;;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;2323:25;;::::1;::::0;;;;:56;;:25;;2352:27;2323:56:::1;::::0;2352:27;;2323:56:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2392:27:37;;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;;2385:34;;;2458:20:::1;:30:::0;;;;;;;2426:28;;::::1;::::0;;;;:62;;:28;;2392:27;2426:62:::1;::::0;2458:30;;2426:62:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2501:30:37;::::1;;::::0;;;:20:::1;:30;::::0;;;;;;;2494:37;;;2583:10:::1;:20:::0;;;;;2576:27;2609:22:::1;:5;2522:8:::0;2609:12:::1;:22::i;:::-;-1:-1:-1::0;;;;;;2677:18:37;;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;;2670:25;;-1:-1:-1;;;;;;2670:25:37;;::::1;::::0;;;2708:15:::1;:25:::0;;;;;2701:32;;;::::1;::::0;;2746:19:::1;:29:::0;;;;;:37;;::::1;::::0;;;;;;;;;2739:44;;;2796:30;;;:20:::1;:30:::0;;;;;;;2789:37;;;;::::1;::::0;;;2838:40;::::1;::::0;::::1;::::0;2686:8;;2838:40:::1;:::i;3973:182:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4066:15:31::1;:34:::0;;;4111:39:::1;::::0;11623:25:84;;;4111:39:31::1;::::0;11611:2:84;11596:18;4111:39:31::1;11477:177:84::0;6736:433:35;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;6834:36:35::1;:20;6859:10:::0;6834:24:::1;:36::i;:::-;6829:73;;6879:23;;-1:-1:-1::0;;;6879:23:35::1;;;;;;;;;;;6829:73;6950:10;-1:-1:-1::0;;;;;6937:29:35::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6908:26:35;;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;:60;;-1:-1:-1;;;;;;6908:60:35::1;::::0;;::::1;::::0;;::::1;::::0;;7016:12:::1;::::0;7002:68;;-1:-1:-1;;;7002:68:35;;7016:12;::::1;::::0;7002:40:::1;::::0;:68:::1;::::0;6908:60;7002:68:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6974:25:35;::::1;;::::0;;;:13:::1;:25;::::0;;;;:96;;-1:-1:-1;;6974:96:35::1;::::0;::::1;;::::0;;;::::1;::::0;;7096:28:::1;6974:25:::0;7096:16:::1;:28::i;:::-;-1:-1:-1::0;;;;;7076:17:35;::::1;;::::0;;;:5:::1;:17;::::0;;;;;;;;:48;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;;7076:48:35::1;-1:-1:-1::0;;;;;;7076:48:35;;;;;;::::1;;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;7135:29;::::1;::::0;::::1;::::0;7082:10;;7135:29:::1;:::i;2960:140:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3039:8:31::1;:20:::0;;;3070:25:::1;::::0;11623::84;;;3070::31::1;::::0;11611:2:84;11596:18;3070:25:31::1;11477:177:84::0;488:326:41;1589:10:32;1580:20;;;;:8;:20;;;;;;;;1575:47;;1609:13;;-1:-1:-1;;;1609:13:32;;;;;;;;;;;1575:47;-1:-1:-1;;;;;640:17:41;::::1;;::::0;;;:8:::1;:17;::::0;;;;;::::1;;635:44;;666:13;;-1:-1:-1::0;;;666:13:41::1;;;;;;;;;;;635:44;685:52;692:7;701;710:11;723:13;685:6;:52::i;:::-;769:10;-1:-1:-1::0;;;;;748:61:41;::::1;;781:27;795:13:::0;781:11;:27:::1;:::i;:::-;748:61;::::0;11623:25:84;;;11611:2;11596:18;748:61:41::1;;;;;;;488:326:::0;;;;:::o;422:253:36:-;480:20;:5;495:4;480:14;:20::i;:::-;476:50;;;509:17;;-1:-1:-1;;;509:17:36;;;;;;;;;;;476:50;-1:-1:-1;;;;;536:15:36;;;;;;:9;:15;;;;;;;;532:44;;;560:16;;-1:-1:-1;;;560:16:36;;;;;;;;;;;532:44;582:15;:5;592:4;582:9;:15::i;:::-;-1:-1:-1;;;;;;603:14:36;;;;;;:8;:14;;;;;;:27;;-1:-1:-1;;;;;;603:27:36;620:10;603:27;;;;;;641:29;;620:10;;641:29;;;422:253;:::o;2286:230:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2379:28:31;::::1;2375:54;;2416:13;;-1:-1:-1::0;;;2416:13:31::1;;;;;;;;;;;2375:54;2435:13;:30:::0;;-1:-1:-1;;;;;;2435:30:31::1;-1:-1:-1::0;;;;;2435:30:31;::::1;;::::0;;2476:35:::1;::::0;::::1;::::0;::::1;::::0;2435:30;;2476:35:::1;:::i;3666:267::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1341:6:31::1;3765:17;:43;3761:73;;;3817:17;;-1:-1:-1::0;;;3817:17:31::1;;;;;;;;;;;3761:73;3840:16;:36:::0;;;3887:41:::1;::::0;11623:25:84;;;3887:41:31::1;::::0;11611:2:84;11596:18;3887:41:31::1;11477:177:84::0;1855:695:34;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;-1:-1:-1;;;;;1012:14:38;;::::1;::::0;;:8:::1;:14;::::0;;;;;;;;::::1;998:10;:28;994:55;;1035:14;;-1:-1:-1::0;;;1035:14:38::1;;;;;;;;;;;994:55;-1:-1:-1::0;;;;;2057:28:34;;::::2;;::::0;;;:22:::2;:28;::::0;;;;;;;:36;;::::2;::::0;;;;;;;:64:::2;::::0;780:9:::2;::::0;2057:64:::2;:::i;:::-;2038:15;:83;2034:119;;2130:23;;-1:-1:-1::0;;;2130:23:34::2;;;;;;;;;;;2034:119;-1:-1:-1::0;;;;;2163:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;:39;-1:-1:-1;2159:81:34::2;;;2211:29;;-1:-1:-1::0;;;2211:29:34::2;;;;;;;;;;;2159:81;-1:-1:-1::0;;;;;2250:14:34;::::2;;::::0;;;:8:::2;:14;::::0;;;;;::::2;;2246:40;;;2273:13;;-1:-1:-1::0;;;2273:13:34::2;;;;;;;;;;;2246:40;-1:-1:-1::0;;;;;2293:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;;:40;;2326:7;;2293:21;:40:::2;::::0;2326:7;;2293:40:::2;:::i;:::-;::::0;;;-1:-1:-1;2339:47:34::2;::::0;-1:-1:-1;;;;;;2339:27:34;::::2;2367:9:::0;2378:7;2339:27:::2;:47::i;:::-;-1:-1:-1::0;;;;;2397:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;2393:86:::2;;-1:-1:-1::0;;;;;2441:16:34;::::2;;::::0;;;:10:::2;:16;::::0;;;;:31:::2;::::0;2465:6;2441:23:::2;:31::i;:::-;;2393:86;2526:9;-1:-1:-1::0;;;;;2490:55:34::2;2518:6;-1:-1:-1::0;;;;;2490:55:34::2;2512:4;-1:-1:-1::0;;;;;2490:55:34::2;;2537:7;2490:55;;;;11623:25:84::0;;11611:2;11596:18;;11477:177;2490:55:34::2;;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;;1855:695:34:o;3154:538:39:-;3287:10;3272:12;3308:14;;;:8;:14;;;;;;;;3304:40;;;3331:13;;-1:-1:-1;;;3331:13:39;;;;;;;;;;;3304:40;-1:-1:-1;;;;;3354:17:39;;;;;;:8;:17;;;;;;;;3350:40;;;3380:10;;-1:-1:-1;;;3380:10:39;;;;;;;;;;;3350:40;3401:20;:5;3416:4;3401:14;:20::i;:::-;3396:49;;3430:15;;-1:-1:-1;;;3430:15:39;;;;;;;;;;;3396:49;-1:-1:-1;;;;;3455:21:39;;;;;;;:15;:21;;;;;;;;:29;;;;;;;;;;:39;-1:-1:-1;3451:71:39;;;3503:19;;-1:-1:-1;;;3503:19:39;;;;;;;;;;;3451:71;-1:-1:-1;;;;;3528:21:39;;;;;;;:15;:21;;;;;;;;:29;;;;;;;;;;;:40;;3561:7;;3528:21;:40;;3561:7;;3528:40;:::i;:::-;;;;-1:-1:-1;3574:45:39;;-1:-1:-1;;;;;;3574:27:39;;3602:7;3611;3574:27;:45::i;:::-;3655:7;-1:-1:-1;;;;;3630:57:39;3649:4;-1:-1:-1;;;;;3630:57:39;3641:6;-1:-1:-1;;;;;3630:57:39;-1:-1:-1;;;;;;;;;;;3664:7:39;3673:13;:11;:13::i;:::-;3630:57;;;12168:25:84;;;12224:2;12209:18;;12202:34;;;;12141:18;3630:57:39;;;;;;;3266:426;3154:538;;;:::o;3332:188:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3427:16:31::1;:36:::0;;;3474:41:::1;::::0;11623:25:84;;;3474:41:31::1;::::0;11611:2:84;11596:18;3474:41:31::1;11477:177:84::0;2051:195:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2134:23:31;::::1;2130:49;;2166:13;;-1:-1:-1::0;;;2166:13:31::1;;;;;;;;;;;2130:49;2185:8;:20:::0;;-1:-1:-1;;;;;;2185:20:31::1;-1:-1:-1::0;;;;;2185:20:31;::::1;;::::0;;2216:25:::1;::::0;::::1;::::0;::::1;::::0;2185:20;;2216:25:::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;444:588:33:-:0;1589:10:32;1580:20;;;;:8;:20;;;;;;;;1575:47;;1609:13;;-1:-1:-1;;;1609:13:32;;;;;;;;;;;1575:47;-1:-1:-1;;;;;575:14:33;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;570:41;;598:13;;-1:-1:-1::0;;;598:13:33::1;;;;;;;;;;;570:41;-1:-1:-1::0;;;;;622:16:33;::::1;;::::0;;;:10:::1;:16;::::0;;;;:33:::1;::::0;648:6;622:25:::1;:33::i;:::-;617:67;;664:20;;-1:-1:-1::0;;;664:20:33::1;;;;;;;;;;;617:67;-1:-1:-1::0;;;;;694:21:33;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:39;-1:-1:-1;690:74:33::1;;;742:22;;-1:-1:-1::0;;;742:22:33::1;;;;;;;;;;;690:74;799:10;::::0;775:44:::1;::::0;-1:-1:-1;;;775:44:33;;-1:-1:-1;;;;;775:23:33;;::::1;::::0;::::1;::::0;:44:::1;::::0;799:10;;::::1;::::0;811:7;;775:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;775:44:33::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;775:44:33::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;771:60;;;;;;;-1:-1:-1::0;;;;;836:21:33;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;;:40;;869:7;;836:21;:40:::1;::::0;869:7;;836:40:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;886:21:33;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;882:86:::1;;-1:-1:-1::0;;;;;930:16:33;::::1;;::::0;;;:10:::1;:16;::::0;;;;:31:::1;::::0;954:6;930:23:::1;:31::i;:::-;;882:86;1007:10;-1:-1:-1::0;;;;;979:48:33::1;993:4;-1:-1:-1::0;;;;;979:48:33::1;;999:6;1019:7;979:48;;;;;;;:::i;316:212:30:-:0;1778:10:32;1768:21;;;;:9;:21;;;;;;;;1763:49;;1798:14;;-1:-1:-1;;;1798:14:32;;;;;;;;;;;1763:49;-1:-1:-1;;;;;396:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;::::1;;392:52;;;427:17;;-1:-1:-1::0;;;427:17:30::1;;;;;;;;;;;392:52;-1:-1:-1::0;;;;;450:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;:29;;-1:-1:-1;;450:29:30::1;475:4;450:29;::::0;;490:33;512:10:::1;::::0;450:22;490:33:::1;::::0;::::1;316:212:::0;:::o;828:471:39:-;982:20;1024:13;:11;:13::i;:::-;1010:11;:27;1054:26;:8;1072:7;1054:17;:26::i;:::-;:69;;;;-1:-1:-1;;;;;;1090:14:39;;;;;;;:5;:14;;;;;;;;:21;;;;;;;;;;:33;-1:-1:-1;1090:33:39;1054:69;:112;;;;-1:-1:-1;;;;;;1133:22:39;;;;;;:13;:22;;;;;;:33;-1:-1:-1;1133:33:39;1054:112;:166;;;;-1:-1:-1;;;;;;1194:18:39;;;;;;:9;:18;;;;;;1216:4;;1176:36;;:15;:36;:::i;:::-;:44;;1054:166;1043:252;;;1240:29;1257:11;;1240:29;;;;11623:25:84;;11611:2;11596:18;;11477:177;1240:29:39;;;;;;;;-1:-1:-1;1284:4:39;1043:252;828:471;;;;;;;:::o;6364:322:35:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;6475:20:35::1;:5;6490:4:::0;6475:14:::1;:20::i;:::-;6470:50;;6504:16;;-1:-1:-1::0;;;6504:16:35::1;;;;;;;;;;;6470:50;6526:27;6548:4;6526:21;:27::i;:::-;-1:-1:-1::0;;;;;6559:26:35;::::1;;::::0;;;:20:::1;:26;::::0;;;;:37;;6589:7;;6559:26;:37:::1;::::0;6589:7;;6559:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;6607:74:35;::::1;6636:16;::::0;;;:10:::1;:16;::::0;;;;;;;;6654:20:::1;:26:::0;;;;;;;;6607:74;;::::1;::::0;::::1;::::0;12168:25:84;;12224:2;12209:18;;12202:34;12156:2;12141:18;;11994:248;6607:74:35::1;;;;;;;;6364:322:::0;;:::o;14272:148::-;14332:24;14398:16;;14385:10;:29;;;;:::i;:::-;14371:44;;:10;:44;:::i;13953:243::-;14034:15;14075:16;;14061:11;:30;14057:134;;;14141:16;;14112:25;14126:11;14112;:25;:::i;:::-;14111:46;;;;:::i;:::-;14101:56;;14057:134;;9499:257:8;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;:::-;9590:44;9499:257;-1:-1:-1;;;9499:257:8:o;8100:165::-;-1:-1:-1;;;;;8233:23:8;;8180:4;3767:19;;;:12;;;:19;;;;;;:24;;8203:55;3671:127;14499:163:35;14563:16;14594:63;14610:11;14623:16;;14641:15;;14594;:63::i;12794:1028::-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;-1:-1:-1;;;;;12927:21:35;::::1;::::0;;:15:::1;:21;::::0;;;;:42:::1;::::0;12958:10;12927:30:::1;:42::i;:::-;12922:80;;12978:24;;-1:-1:-1::0;;;12978:24:35::1;;;;;;;;;;;12922:80;-1:-1:-1::0;;;;;13012:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;:43;-1:-1:-1;13008:82:35::1;;;13064:26;;-1:-1:-1::0;;;13064:26:35::1;;;;;;;;;;;13008:82;13145:22;13162:4;13145:16;:22::i;:::-;13173:30;13206:48;13217:36;13233:7;13242:10;13217:15;:36::i;13206:48::-;-1:-1:-1::0;;;;;13337:23:35;::::1;13363:1;13337:23:::0;;;:17:::1;:23;::::0;;;;;13173:81;;-1:-1:-1;13337:27:35;13333:330:::1;;-1:-1:-1::0;;;;;13576:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;;13521:20:::1;:26:::0;;;;;;;:51:::1;::::0;13550:22;;13521:51:::1;:::i;:::-;13520:79;;;;:::i;:::-;-1:-1:-1::0;;;;;13490:26:35;::::1;;::::0;;;:20:::1;:26;::::0;;;;:109;;:26;;;:109:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;13607:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;:49;;13634:22;;13607:23;:49:::1;::::0;13634:22;;13607:49:::1;:::i;:::-;::::0;;;-1:-1:-1;;13333:330:35::1;-1:-1:-1::0;;;;;13669:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:44;;13706:7;;13669:21;:44:::1;::::0;13706:7;;13669:44:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;13723:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;13719:99:::1;;-1:-1:-1::0;;;;;13771:21:35;::::1;;::::0;;;:15:::1;:21;::::0;;;;:40:::1;::::0;13800:10;13771:28:::1;:40::i;:::-;;13719:99;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;12794:1028:35:o;14740:384::-;-1:-1:-1;;;;;14859:17:35;;14833:14;14859:17;;;:5;:17;;;;;:24;;;:29;14855:265;;-1:-1:-1;;;;;14922:25:35;;14898:21;14922:25;;;:13;:25;;;;;;;;:88;;-1:-1:-1;;;;;14982:17:35;;;;;;:5;:17;;;;;:28;14981:29;;-1:-1:-1;;;14982:28:35;;;;14981:29;:::i;:::-;14922:88;;;-1:-1:-1;;;;;14950:17:35;;;;;;:5;:17;;;;;:28;-1:-1:-1;;;14950:28:35;;;;14922:88;15041:12;;15096:16;;15027:86;;-1:-1:-1;;;15027:86:35;;14898:112;;-1:-1:-1;;;;;;15041:12:35;;;;15027:42;;:86;;15070:7;;14898:112;;15027:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9829:1303::-;9896:14;9941:24;9949:15;9941:7;:24::i;:::-;-1:-1:-1;;;;;9922:16:35;;;;;;:10;:16;;;;;;:43;9918:1210;;;10070:43;10096:16;;10078:15;:34;;;;:::i;10070:43::-;-1:-1:-1;;;;;10050:16:35;;;;;;:10;:16;;;;;;:63;10046:1076;;10214:22;10231:4;10214:16;:22::i;:::-;-1:-1:-1;;;;;10275:23:35;;;;;;:17;:23;;;;;;;;;10246:20;:26;;;;;;:52;10327:24;10335:15;10327:7;:24::i;:::-;-1:-1:-1;;;;;10308:16:35;;;;;;:10;:16;;;;;:43;-1:-1:-1;10373:4:35;4668:1632;;;:::o;10046:1076::-;10436:16;;-1:-1:-1;;;;;10415:16:35;;;;;;:10;:16;;;;;;10397:34;;:15;:34;:::i;:::-;10396:56;10392:730;;10544:22;10561:4;10544:16;:22::i;:::-;-1:-1:-1;;;;;10605:23:35;;;;;;:17;:23;;;;;;;;;10576:20;:26;;;;;:52;10658:16;;10638:10;:16;;;;;:36;;10658:16;;10638;;:36;;10658:16;;10638:36;:::i;:::-;;;;-1:-1:-1;10696:4:35;;-1:-1:-1;10392:730:35;;-1:-1:-1;10392:730:35;;10736:24;10744:15;10736:7;:24::i;:::-;-1:-1:-1;;;;;10719:14:35;;;;;;:8;:14;;;;;;:41;10715:407;;;-1:-1:-1;;;;;10885:23:35;;10853:29;10885:23;;;:17;:23;;;;;;10918:22;10903:4;10918:16;:22::i;:::-;-1:-1:-1;;;;;11009:23:35;;;;;;:17;:23;;;;;;;;;10980:20;:26;;;;;;;11036:21;;10980:52;;;:::i;:::-;10979:78;;;;:::i;:::-;-1:-1:-1;;;;;10950:26:35;;;;;;:20;:26;;;;;:107;-1:-1:-1;9829:1303:35;;;:::o;11196:400::-;-1:-1:-1;;;;;11509:16:35;;;;;;:10;:16;;;;;;11484:67;;11491:34;;:15;:34;:::i;:::-;-1:-1:-1;;;;;11527:23:35;;;;;;:17;:23;;;;;;11484:6;:67::i;:::-;-1:-1:-1;;;;;11454:26:35;;;;;;:20;:26;;;;;:97;;:26;;;:97;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11557:16:35;;;;;:10;:16;;;;;11576:15;11557:34;;11196:400::o;3696:343:39:-;-1:-1:-1;;;;;3815:26:39;;;;;;:20;:26;;;;;;3804:37;;3800:69;;;3850:19;;-1:-1:-1;;;3850:19:39;;;;;;;;;;;3800:69;-1:-1:-1;;;;;3876:14:39;;;;;;:8;:14;;;;;;;;3893:15;3876:32;;3914:20;:26;;;;;:38;;3944:8;;3876:14;3914:38;;3944:8;;3914:38;:::i;:::-;;;;-1:-1:-1;;;;;;;3958:14:39;;;;;;;:5;:14;;;;;;;;3973:8;;;;;3958:24;;;;;;;;:36;;3986:8;;3958:14;:36;;3986:8;;3958:36;:::i;:::-;;;;-1:-1:-1;;;;;;;4000:22:39;;;;;;:13;:22;;;;;:34;;4026:8;;4000:22;:34;;4026:8;;4000:34;:::i;:::-;;;;-1:-1:-1;;;;;3696:343:39:o;4958:107::-;5004:16;5058:2;5040:9;:14;;5052:2;5040:14;:::i;:::-;5039:21;;;;:::i;2853:454:42:-;-1:-1:-1;;;;;2960:18:42;;2933:15;2960:18;;;:9;:18;;;;;;2956:80;;-1:-1:-1;;;;;2993:18:42;;;;;;:9;:18;;;;;3014:15;2993:36;;2956:80;3041:21;:8;3054:7;3041:12;:21::i;:::-;-1:-1:-1;;;;;;;3078:21:42;;;;;;;:12;:21;;;;;;;;:31;;;;;;;;;;;;;;3115:38;;;;3188:14;;;:5;:14;;;;;:24;;;;;;;;;:35;;3078:31;;;;3188:35;;3078:31;;3188:35;:::i;:::-;;;;-1:-1:-1;;3245:8:42;;-1:-1:-1;;;;;3233:20:42;;;3245:8;;3233:20;3229:74;;;3273:8;;3263:33;;-1:-1:-1;;;3263:33:42;;;;;11623:25:84;;;-1:-1:-1;;;;;3273:8:42;;;;3263:24;;11596:18:84;;3263:33:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2853:454;;;;:::o;634:205:4:-;746:86;766:5;796:23;;;821:2;825:5;773:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;773:58:4;;;;;;;;;;;;;;-1:-1:-1;;;;;773:58:4;-1:-1:-1;;;;;;773:58:4;;;;;;;;;;746:19;:86::i;:::-;634:205;;;:::o;7545:150:8:-;7615:4;7638:50;7643:3;-1:-1:-1;;;;;7663:23:8;;7638:4;:50::i;15273:229:35:-;15341:31;15367:4;15341:25;:31::i;:::-;;15378:23;15396:4;15378:17;:23::i;:::-;-1:-1:-1;;;;;15445:26:35;;;;;;:20;:26;;;;;;;;;15473:17;:23;;;;;;;15436:61;;15445:26;15436:8;:61::i;:::-;-1:-1:-1;;;;;15407:26:35;;;;;;;:20;:26;;;;;:90;15273:229::o;845:241:4:-;1010:68;;-1:-1:-1;;;;;6767:15:84;;;1010:68:4;;;6749:34:84;6819:15;;6799:18;;;6792:43;6851:18;;;6844:34;;;983:96:4;;1003:5;;-1:-1:-1;;;1033:27:4;6684:18:84;;1010:68:4;6509:375:84;983:96:4;845:241;;;;:::o;4451:310:39:-;4596:16;4620:21;4669:9;4658:8;4644:11;;:22;;;;:::i;:::-;:34;;;;:::i;:::-;4620:58;-1:-1:-1;4749:7:39;4733:12;1238:6:31;4698:22:39;4714:6;4620:58;4698:22;:::i;:::-;4697:32;;;;:::i;:::-;4696:49;;;;:::i;:::-;4695:61;;;;:::i;:::-;4684:72;4451:310;-1:-1:-1;;;;;;4451:310:39:o;7863:156:8:-;7936:4;7959:53;7967:3;-1:-1:-1;;;;;7987:23:8;;7959:7;:53::i;8346:115::-;8409:7;8435:19;8443:3;3961:18;;3879:107;8803:156;8877:7;8927:22;8931:3;8943:5;8927:3;:22::i;1148:382:41:-;1292:8;;-1:-1:-1;;;;;1281:19:41;;;1292:8;;1281:19;1277:150;;1339:10;;-1:-1:-1;;;;;1314:24:41;;;;;;1339:10;1351:27;1365:13;1351:11;:27;:::i;:::-;1314:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1314:65:41;;;;;;;;-1:-1:-1;;1314:65:41;;;;;;;;;;;;:::i;:::-;;;1310:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1398:23;1310:111;;;1380:17;1310:111;-1:-1:-1;;;;;1432:14:41;;;;;;;:5;:14;;;;;;;;:23;;;;;;;;;;;:38;;1459:11;;1432:14;:38;;1459:11;;1432:38;:::i;:::-;;;;-1:-1:-1;;;;;;;1476:23:41;;;;;;;:14;:23;;;;;;;;:32;;;;;;;;;;;:49;;1512:13;;1476:23;:49;;1512:13;;1476:49;:::i;:::-;;;;-1:-1:-1;;;;;;1148:382:41:o;4986:109:8:-;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;735:3600:23:-;833:14;;;-1:-1:-1;;1336:1:23;1333;1326:20;1371:1;1368;1364:9;1355:18;;1418:5;1414:2;1411:13;1403:5;1399:2;1395:14;1391:34;1382:43;;;1501:5;1510:1;1501:10;1497:155;;;1545:1;1531:11;:15;1523:24;;;;;;-1:-1:-1;1588:23:23;;;;-1:-1:-1;1630:13:23;;1497:155;1773:5;1759:11;:19;1751:28;;;;;;2044:17;2114:11;2111:1;2108;2101:25;3338:1;3319;2473;2458:12;;:16;;2457:32;;2575:22;;;;3319:15;;;3318:21;;3557:17;;;3553:21;;3546:28;3613:17;;;3609:21;;3602:28;3670:17;;;3666:21;;3659:28;3727:17;;;3723:21;;3716:28;3784:17;;;3780:21;;3773:28;3842:17;;;3838:21;;;3831:28;2442:12;2923;;;2919:23;;;2915:31;;;2233:20;;;2222:32;;;2970:12;;;;2272:21;;2693:16;;;;2961:21;;;;4292:11;;735:3600;-1:-1:-1;;;;735:3600:23:o;11656:118:35:-;11737:32;11764:4;11737:26;:32::i;:::-;-1:-1:-1;;;;;11711:23:35;;;;;;;:17;:23;;;;;:58;11656:118::o;3140:706:4:-;3559:23;3585:69;3613:4;3585:69;;;;;;;;;;;;;;;;;3593:5;-1:-1:-1;;;;;3585:27:4;;;:69;;;;;:::i;:::-;3668:17;;3559:95;;-1:-1:-1;3668:21:4;3664:176;;3763:10;3752:30;;;;;;;;;;;;:::i;:::-;3744:85;;;;-1:-1:-1;;;3744:85:4;;10507:2:84;3744:85:4;;;10489:21:84;10546:2;10526:18;;;10519:30;10585:34;10565:18;;;10558:62;-1:-1:-1;;;10636:18:84;;;10629:40;10686:19;;3744:85:4;10305:406:84;1630:404:8;1693:4;3767:19;;;:12;;;:19;;;;;;1709:319;;-1:-1:-1;1751:23:8;;;;;;;;:11;:23;;;;;;;;;;;;;1931:18;;1909:19;;;:12;;;:19;;;;;;:40;;;;1963:11;;1709:319;-1:-1:-1;2012:5:8;2005:12;;391:104:7;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:7;;391:104;-1:-1:-1;391:104:7:o;2202:1388:8:-;2268:4;2405:19;;;:12;;;:19;;;;;;2439:15;;2435:1149;;2808:21;2832:14;2845:1;2832:10;:14;:::i;:::-;2880:18;;2808:38;;-1:-1:-1;2860:17:8;;2880:22;;2901:1;;2880:22;:::i;:::-;2860:42;;2934:13;2921:9;:26;2917:398;;2967:17;2987:3;:11;;2999:9;2987:22;;;;;;;;:::i;:::-;;;;;;;;;2967:42;;3138:9;3109:3;:11;;3121:13;3109:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3221:23;;;:12;;;:23;;;;;:36;;;2917:398;3393:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3485:3;:12;;:19;3498:5;3485:19;;;;;;;;;;;3478:26;;;3526:4;3519:11;;;;;;;2435:1149;3568:5;3561:12;;;;;4328:118;4395:7;4421:3;:11;;4433:5;4421:18;;;;;;;;:::i;:::-;;;;;;;;;4414:25;;4328:118;;;;:::o;11943:753:35:-;12011:22;12075:24;12083:15;12075:7;:24::i;:::-;12051:12;;-1:-1:-1;;;;;12051:12:35;12045:19;;;;:5;:19;;;;;12051:12;12045:26;;:54;12041:170;;12191:12;;12174:30;;-1:-1:-1;;;;;12191:12:35;12174:16;:30::i;:::-;12158:12;;-1:-1:-1;;;;;12158:12:35;12152:19;;;;:5;:19;;;;;;;;;:52;;;;;;;;;;;;;;;;-1:-1:-1;;;12152:52:35;-1:-1:-1;;;;;;12152:52:35;;;;;;;;;;;;;;;;;;12158:12;12152:52;;;;;12041:170;12222:9;12217:475;-1:-1:-1;;;;;12237:21:35;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;12233:1;:34;12217:475;;;-1:-1:-1;;;;;12303:21:35;;12282:18;12303:21;;;:15;:21;;;;;:27;;12328:1;12303:24;:27::i;:::-;12282:48;-1:-1:-1;12342:41:35;:20;12282:48;12342:29;:41::i;:::-;12338:348;;;12427:24;12435:15;12427:7;:24::i;:::-;-1:-1:-1;;;;;12399:17:35;;;;;;:5;:17;;;;;:24;;;:52;12395:181;;12537:28;12554:10;12537:16;:28::i;:::-;-1:-1:-1;;;;;12517:17:35;;;;;;:5;:17;;;;;;;;;:48;;;;;;;;;;;;;;;;-1:-1:-1;;;12517:48:35;-1:-1:-1;;;;;;12517:48:35;;;;;;;;;;;;;;;;;;;;;;;12395:181;-1:-1:-1;;;;;12630:21:35;;;;;;;:15;:21;;;;;;;;:33;;;;;;;;;;12603:74;;12614:62;;12652:10;12614:15;:62::i;12603:74::-;12585:92;;;;:::i;:::-;;;12338:348;-1:-1:-1;12269:3:35;;;;:::i;:::-;;;;12217:475;;3461:223:5;3594:12;3625:52;3647:6;3655:4;3661:1;3664:12;3594;1034:20;;4828:60;;;;-1:-1:-1;;;4828:60:5;;10149:2:84;4828:60:5;;;10131:21:84;10188:2;10168:18;;;10161:30;10227:31;10207:18;;;10200:59;10276:18;;4828:60:5;9947:353:84;4828:60:5;4900:12;4914:23;4941:6;-1:-1:-1;;;;;4941:11:5;4960:5;4967:4;4941:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4899:73;;;;4989:51;5006:7;5015:10;5027:12;4989:16;:51::i;:::-;4982:58;4548:499;-1:-1:-1;;;;;;;4548:499:5:o;7161:692::-;7307:12;7335:7;7331:516;;;-1:-1:-1;7365:10:5;7358:17;;7331:516;7476:17;;:21;7472:365;;7670:10;7664:17;7730:15;7717:10;7713:2;7709:19;7702:44;7472:365;7809:12;7802:20;;-1:-1:-1;;;7802:20:5;;;;;;;;:::i;14:164:84:-;90:13;;139;;132:21;122:32;;112:60;;168:1;165;158:12;183:164;260:13;;313:1;302:20;;;292:31;;282:59;;337:1;334;327:12;352:247;411:6;464:2;452:9;443:7;439:23;435:32;432:52;;;480:1;477;470:12;432:52;519:9;506:23;538:31;563:5;538:31;:::i;604:251::-;674:6;727:2;715:9;706:7;702:23;698:32;695:52;;;743:1;740;733:12;695:52;775:9;769:16;794:31;819:5;794:31;:::i;860:388::-;928:6;936;989:2;977:9;968:7;964:23;960:32;957:52;;;1005:1;1002;995:12;957:52;1044:9;1031:23;1063:31;1088:5;1063:31;:::i;:::-;1113:5;-1:-1:-1;1170:2:84;1155:18;;1142:32;1183:33;1142:32;1183:33;:::i;:::-;1235:7;1225:17;;;860:388;;;;;:::o;1253:529::-;1330:6;1338;1346;1399:2;1387:9;1378:7;1374:23;1370:32;1367:52;;;1415:1;1412;1405:12;1367:52;1454:9;1441:23;1473:31;1498:5;1473:31;:::i;:::-;1523:5;-1:-1:-1;1580:2:84;1565:18;;1552:32;1593:33;1552:32;1593:33;:::i;:::-;1645:7;-1:-1:-1;1704:2:84;1689:18;;1676:32;1717:33;1676:32;1717:33;:::i;:::-;1769:7;1759:17;;;1253:529;;;;;:::o;1787:456::-;1864:6;1872;1880;1933:2;1921:9;1912:7;1908:23;1904:32;1901:52;;;1949:1;1946;1939:12;1901:52;1988:9;1975:23;2007:31;2032:5;2007:31;:::i;:::-;2057:5;-1:-1:-1;2114:2:84;2099:18;;2086:32;2127:33;2086:32;2127:33;:::i;:::-;1787:456;;2179:7;;-1:-1:-1;;;2233:2:84;2218:18;;;;2205:32;;1787:456::o;2248:598::-;2334:6;2342;2350;2358;2411:3;2399:9;2390:7;2386:23;2382:33;2379:53;;;2428:1;2425;2418:12;2379:53;2467:9;2454:23;2486:31;2511:5;2486:31;:::i;:::-;2536:5;-1:-1:-1;2593:2:84;2578:18;;2565:32;2606:33;2565:32;2606:33;:::i;:::-;2658:7;-1:-1:-1;2712:2:84;2697:18;;2684:32;;-1:-1:-1;2768:2:84;2753:18;;2740:32;2781:33;2740:32;2781:33;:::i;:::-;2248:598;;;;-1:-1:-1;2248:598:84;;-1:-1:-1;;2248:598:84:o;2851:525::-;2937:6;2945;2953;2961;3014:3;3002:9;2993:7;2989:23;2985:33;2982:53;;;3031:1;3028;3021:12;2982:53;3070:9;3057:23;3089:31;3114:5;3089:31;:::i;:::-;3139:5;-1:-1:-1;3196:2:84;3181:18;;3168:32;3209:33;3168:32;3209:33;:::i;:::-;2851:525;;3261:7;;-1:-1:-1;;;;3315:2:84;3300:18;;3287:32;;3366:2;3351:18;3338:32;;2851:525::o;3381:594::-;3476:6;3484;3492;3500;3508;3561:3;3549:9;3540:7;3536:23;3532:33;3529:53;;;3578:1;3575;3568:12;3529:53;3617:9;3604:23;3636:31;3661:5;3636:31;:::i;:::-;3686:5;-1:-1:-1;3743:2:84;3728:18;;3715:32;3756:33;3715:32;3756:33;:::i;:::-;3381:594;;3808:7;;-1:-1:-1;;;;3862:2:84;3847:18;;3834:32;;3913:2;3898:18;;3885:32;;3964:3;3949:19;;;3936:33;;-1:-1:-1;3381:594:84:o;3980:315::-;4048:6;4056;4109:2;4097:9;4088:7;4084:23;4080:32;4077:52;;;4125:1;4122;4115:12;4077:52;4164:9;4151:23;4183:31;4208:5;4183:31;:::i;:::-;4233:5;4285:2;4270:18;;;;4257:32;;-1:-1:-1;;;3980:315:84:o;4300:456::-;4377:6;4385;4393;4446:2;4434:9;4425:7;4421:23;4417:32;4414:52;;;4462:1;4459;4452:12;4414:52;4501:9;4488:23;4520:31;4545:5;4520:31;:::i;:::-;4570:5;-1:-1:-1;4622:2:84;4607:18;;4594:32;;-1:-1:-1;4678:2:84;4663:18;;4650:32;4691:33;4650:32;4691:33;:::i;4761:202::-;4828:6;4881:2;4869:9;4860:7;4856:23;4852:32;4849:52;;;4897:1;4894;4887:12;4849:52;4920:37;4947:9;4920:37;:::i;4968:364::-;5049:6;5057;5065;5118:2;5106:9;5097:7;5093:23;5089:32;5086:52;;;5134:1;5131;5124:12;5086:52;5157:38;5185:9;5157:38;:::i;:::-;5147:48;;5214:47;5257:2;5246:9;5242:18;5214:47;:::i;:::-;5204:57;;5280:46;5322:2;5311:9;5307:18;5280:46;:::i;:::-;5270:56;;4968:364;;;;;:::o;5337:180::-;5396:6;5449:2;5437:9;5428:7;5424:23;5420:32;5417:52;;;5465:1;5462;5455:12;5417:52;-1:-1:-1;5488:23:84;;5337:180;-1:-1:-1;5337:180:84:o;5522:184::-;5592:6;5645:2;5633:9;5624:7;5620:23;5616:32;5613:52;;;5661:1;5658;5651:12;5613:52;-1:-1:-1;5684:16:84;;5522:184;-1:-1:-1;5522:184:84:o;5711:306::-;5799:6;5807;5815;5868:2;5856:9;5847:7;5843:23;5839:32;5836:52;;;5884:1;5881;5874:12;5836:52;5913:9;5907:16;5897:26;;5963:2;5952:9;5948:18;5942:25;5932:35;;6007:2;5996:9;5992:18;5986:25;5976:35;;5711:306;;;;;:::o;6022:274::-;6151:3;6189:6;6183:13;6205:53;6251:6;6246:3;6239:4;6231:6;6227:17;6205:53;:::i;:::-;6274:16;;;;;6022:274;-1:-1:-1;;6022:274:84:o;6301:203::-;-1:-1:-1;;;;;6465:32:84;;;;6447:51;;6435:2;6420:18;;6301:203::o;6889:744::-;-1:-1:-1;;;;;7135:32:84;;7117:51;;7105:2;7187;7205:18;;;7198:30;;;7277:13;;7090:18;;;7299:22;;;7057:4;;7378:15;;;;7187:2;7352;7337:18;;;7057:4;7421:186;7435:6;7432:1;7429:13;7421:186;;;7500:13;;7515:10;7496:30;7484:43;;7582:15;;;;7547:12;;;;7457:1;7450:9;7421:186;;;-1:-1:-1;7624:3:84;;6889:744;-1:-1:-1;;;;;;;6889:744:84:o;7638:274::-;-1:-1:-1;;;;;7830:32:84;;;;7812:51;;7894:2;7879:18;;7872:34;7800:2;7785:18;;7638:274::o;8297:658::-;8468:2;8520:21;;;8590:13;;8493:18;;;8612:22;;;8439:4;;8468:2;8691:15;;;;8665:2;8650:18;;;8439:4;8734:195;8748:6;8745:1;8742:13;8734:195;;;8813:13;;-1:-1:-1;;;;;8809:39:84;8797:52;;8904:15;;;;8869:12;;;;8845:1;8763:9;8734:195;;;-1:-1:-1;8946:3:84;;8297:658;-1:-1:-1;;;;;;8297:658:84:o;9152:383::-;9301:2;9290:9;9283:21;9264:4;9333:6;9327:13;9376:6;9371:2;9360:9;9356:18;9349:34;9392:66;9451:6;9446:2;9435:9;9431:18;9426:2;9418:6;9414:15;9392:66;:::i;:::-;9519:2;9498:15;-1:-1:-1;;9494:29:84;9479:45;;;;9526:2;9475:54;;9152:383;-1:-1:-1;;9152:383:84:o;10716:355::-;10918:2;10900:21;;;10957:2;10937:18;;;10930:30;10996:33;10991:2;10976:18;;10969:61;11062:2;11047:18;;10716:355::o;11659:330::-;11857:25;;;11929:1;11918:21;;;;11913:2;11898:18;;11891:49;11971:2;11956:18;;11949:34;11845:2;11830:18;;11659:330::o;12247:319::-;12449:25;;;12505:2;12490:18;;12483:34;;;;12548:2;12533:18;;12526:34;12437:2;12422:18;;12247:319::o;12571:128::-;12611:3;12642:1;12638:6;12635:1;12632:13;12629:39;;;12648:18;;:::i;:::-;-1:-1:-1;12684:9:84;;12571:128::o;12704:120::-;12744:1;12770;12760:35;;12775:18;;:::i;:::-;-1:-1:-1;12809:9:84;;12704:120::o;12829:168::-;12869:7;12935:1;12931;12927:6;12923:14;12920:1;12917:21;12912:1;12905:9;12898:17;12894:45;12891:71;;;12942:18;;:::i;:::-;-1:-1:-1;12982:9:84;;12829:168::o;13002:359::-;13040:4;13084:1;13081;13070:16;13120:1;13117;13106:16;13150:1;13145:3;13141:11;13216:3;13197:16;13193:21;13189:31;13184:3;13180:41;13175:2;13168:10;13164:58;13161:84;;;13225:18;;:::i;:::-;13296:3;13278:16;13274:26;13269:3;13265:36;13261:2;13257:45;13254:71;;;13305:18;;:::i;:::-;-1:-1:-1;13342:13:84;;;13002:359;-1:-1:-1;;;13002:359:84:o;13366:125::-;13406:4;13434:1;13431;13428:8;13425:34;;;13439:18;;:::i;:::-;-1:-1:-1;13476:9:84;;13366:125::o;13496:258::-;13568:1;13578:113;13592:6;13589:1;13586:13;13578:113;;;13668:11;;;13662:18;13649:11;;;13642:39;13614:2;13607:10;13578:113;;;13709:6;13706:1;13703:13;13700:48;;;-1:-1:-1;;13744:1:84;13726:16;;13719:27;13496:258::o;13759:135::-;13798:3;-1:-1:-1;;13819:17:84;;13816:43;;;13839:18;;:::i;:::-;-1:-1:-1;13886:1:84;13875:13;;13759:135::o;13899:112::-;13931:1;13957;13947:35;;13962:18;;:::i;:::-;-1:-1:-1;13996:9:84;;13899:112::o;14016:193::-;14050:3;14097:5;14094:1;14083:20;14131:16;14127:21;14118:7;14115:34;14112:60;;;14152:18;;:::i;:::-;14192:1;14188:15;;14016:193;-1:-1:-1;;14016:193:84:o;14214:127::-;14275:10;14270:3;14266:20;14263:1;14256:31;14306:4;14303:1;14296:15;14330:4;14327:1;14320:15;14346:127;14407:10;14402:3;14398:20;14395:1;14388:31;14438:4;14435:1;14428:15;14462:4;14459:1;14452:15;14478:127;14539:10;14534:3;14530:20;14527:1;14520:31;14570:4;14567:1;14560:15;14594:4;14591:1;14584:15;14610:127;14671:10;14666:3;14662:20;14659:1;14652:31;14702:4;14699:1;14692:15;14726:4;14723:1;14716:15;14874:131;-1:-1:-1;;;;;14949:31:84;;14939:42;;14929:70;;14995:1;14992;14985:12;14929:70;14874:131;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "4904600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "52214",
                "acceptJobMigration(address,address)": "infinite",
                "acceptJobOwnership(address)": "55190",
                "activate(address)": "infinite",
                "addDisputer(address)": "30193",
                "addJob(address)": "infinite",
                "addLiquidityToJob(address,address,uint256)": "infinite",
                "addSlasher(address)": "30237",
                "addTokenCreditsToJob(address,address,uint256)": "infinite",
                "approveLiquidity(address)": "infinite",
                "approvedLiquidities()": "infinite",
                "bond(address,uint256)": "infinite",
                "bondTime()": "2351",
                "bondedPayment(address,uint256)": "infinite",
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "changeJobOwnership(address,address)": "infinite",
                "directTokenPayment(address,address,uint256)": "infinite",
                "dispute(address)": "30929",
                "disputers(address)": "2879",
                "disputes(address)": "2856",
                "fee()": "2460",
                "firstSeen(address)": "2700",
                "forceLiquidityCreditsToJob(address,uint256)": "infinite",
                "governance()": "2406",
                "hasBonded(address)": "2966",
                "inflationPeriod()": "2724",
                "isBondedKeeper(address,address,uint256,uint256,uint256)": "infinite",
                "isKeeper(address)": "infinite",
                "jobLiquidityCredits(address)": "infinite",
                "jobOwner(address)": "2973",
                "jobPendingOwner(address)": "2665",
                "jobPeriodCredits(address)": "infinite",
                "jobTokenCredits(address,address)": "infinite",
                "jobTokenCreditsAddedAt(address,address)": "infinite",
                "jobs()": "infinite",
                "keep3rHelper()": "2669",
                "keep3rV1()": "2649",
                "keep3rV1Proxy()": "2405",
                "keepers()": "infinite",
                "kp3rWethPool()": "2714",
                "liquidityAmount(address,address)": "infinite",
                "liquidityMinimum()": "2395",
                "migrateJob(address,address)": "infinite",
                "observeLiquidity(address)": "infinite",
                "pendingBonds(address,address)": "infinite",
                "pendingGovernance()": "2735",
                "pendingJobMigrations(address)": "2840",
                "pendingUnbonds(address,address)": "infinite",
                "quoteLiquidity(address,uint256)": "infinite",
                "removeDisputer(address)": "30359",
                "removeSlasher(address)": "30338",
                "resolve(address)": "30944",
                "revoke(address)": "infinite",
                "revokeLiquidity(address)": "infinite",
                "rewardPeriodTime()": "2615",
                "rewardedAt(address)": "2723",
                "sendDust(address,uint256,address)": "infinite",
                "setBondTime(uint256)": "25960",
                "setFee(uint256)": "25740",
                "setGovernance(address)": "28096",
                "setInflationPeriod(uint256)": "25894",
                "setKeep3rHelper(address)": "28131",
                "setKeep3rV1(address)": "28086",
                "setKeep3rV1Proxy(address)": "27910",
                "setKp3rWethPool(address)": "infinite",
                "setLiquidityMinimum(uint256)": "25761",
                "setRewardPeriodTime(uint256)": "25655",
                "setUnbondTime(uint256)": "26001",
                "slash(address,address,uint256,uint256)": "infinite",
                "slashLiquidityFromJob(address,address,uint256)": "infinite",
                "slashTokenFromJob(address,address,uint256)": "infinite",
                "slashers(address)": "2966",
                "totalJobCredits(address)": "infinite",
                "unbond(address,uint256)": "infinite",
                "unbondLiquidityFromJob(address,address,uint256)": "infinite",
                "unbondTime()": "2527",
                "withdraw(address)": "infinite",
                "withdrawLiquidityFromJob(address,address,address)": "infinite",
                "withdrawTokenCreditsFromJob(address,address,uint256,address)": "infinite",
                "workCompleted(address)": "2746",
                "worked(address)": "infinite",
                "workedAt(address)": "2832"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobMigration(address,address)": "af320e81",
              "acceptJobOwnership(address)": "59a2255e",
              "activate(address)": "1c5a9d9c",
              "addDisputer(address)": "9d5c33d8",
              "addJob(address)": "c5198abc",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addSlasher(address)": "68a9f19c",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bond(address,uint256)": "a515366a",
              "bondTime()": "5ebe23f0",
              "bondedPayment(address,uint256)": "11466d72",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "directTokenPayment(address,address,uint256)": "dd2080d6",
              "dispute(address)": "f75f9f7b",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "isBondedKeeper(address,address,uint256,uint256,uint256)": "f9d46cf2",
              "isKeeper(address)": "6ba42aaa",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityAmount(address,address)": "694798e6",
              "liquidityMinimum()": "633fb68f",
              "migrateJob(address,address)": "90a4684e",
              "observeLiquidity(address)": "165e62e7",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingJobMigrations(address)": "ec8ca643",
              "pendingUnbonds(address,address)": "21040b01",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "resolve(address)": "55ea6c47",
              "revoke(address)": "74a8f103",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardPeriodTime()": "768b5d90",
              "rewardedAt(address)": "a676f9ff",
              "sendDust(address,uint256,address)": "966abd00",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slash(address,address,uint256,uint256)": "c20297f0",
              "slashLiquidityFromJob(address,address,uint256)": "6e2a9ca6",
              "slashTokenFromJob(address,address,uint256)": "f25e311b",
              "slashers(address)": "b87fcbff",
              "totalJobCredits(address)": "034d4c61",
              "unbond(address,uint256)": "a5d059ca",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "unbondTime()": "a7d2e784",
              "withdraw(address)": "51cff8d9",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workCompleted(address)": "1b44555e",
              "worked(address)": "5feeb794",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyAJob\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyAKeeper\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationImpossible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Activation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"Dispute\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"DustSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOwner\",\"type\":\"address\"}],\"name\":\"JobAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationSuccessful\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"KeeperRevoke\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"KeeperSlash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperValidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperWork\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"Resolve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"acceptJobMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"addJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"}],\"name\":\"bondedPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"directTokenPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_earned\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_age\",\"type\":\"uint256\"}],\"name\":\"isBondedKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isBondedKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"isKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"migrateJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingJobMigrations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"sendDust\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonded\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_bondAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unbondAmount\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashTokenFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"worked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobMigration(address,address)\":{\"details\":\"Unbond/withdraw process doesn't get migrated\",\"params\":{\"_fromJob\":\"The address of the job that requested to migrate\",\"_toJob\":\"The address to which the job wants to migrate to\"}},\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"activate(address)\":{\"params\":{\"_bonding\":\"The asset being activated as bond collateral\"}},\"addJob(address)\":{\"params\":{\"_job\":\"Address of the contract for which work should be performed\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"bond(address,uint256)\":{\"params\":{\"_amount\":\"The amount of bonding asset being bonded\",\"_bonding\":\"The asset being bonded\"}},\"bondedPayment(address,uint256)\":{\"details\":\"Pays the keeper that performs the work with KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\",\"_payment\":\"The reward that should be allocated for the job\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"directTokenPayment(address,address,uint256)\":{\"details\":\"Pays the keeper that performs the work with a specific token\",\"params\":{\"_amount\":\"The reward that should be allocated\",\"_keeper\":\"Address of the keeper that performed the work\",\"_token\":\"The asset being awarded to the keeper\"}},\"dispute(address)\":{\"params\":{\"_jobOrKeeper\":\"The address in dispute\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"details\":\"Should be used for protected functions\",\"params\":{\"_age\":\"The minimum keeper age required\",\"_bond\":\"The bond token being evaluated\",\"_earned\":\"The minimum funds earned in the keepers lifetime\",\"_keeper\":\"The keeper to check\",\"_minBond\":\"The minimum amount of bonded tokens\"},\"returns\":{\"_isBondedKeeper\":\"Whether the `_keeper` meets the given requirements\"}},\"isKeeper(address)\":{\"details\":\"Can be used for general (non critical) functions\",\"params\":{\"_keeper\":\"The keeper being investigated\"},\"returns\":{\"_isKeeper\":\"Whether the address passed as a parameter is a keeper or not\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_liquidityCredits\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_periodCredits\":\"The credits the given job has at the current period\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"migrateJob(address,address)\":{\"params\":{\"_fromJob\":\"The address of the job that is requesting to migrate\",\"_toJob\":\"The address at which the job is requesting to migrate\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"resolve(address)\":{\"params\":{\"_jobOrKeeper\":\"The address cleared\"}},\"revoke(address)\":{\"params\":{\"_keeper\":\"The address being slashed\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"sendDust(address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of the token that will be transferred\",\"_to\":\"The address that will receive the idle funds\",\"_token\":\"The token that will be transferred\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"slash(address,address,uint256,uint256)\":{\"params\":{\"_bondAmount\":\"The bonded amount being slashed\",\"_bonded\":\"The asset being slashed\",\"_keeper\":\"The address being slashed\",\"_unbondAmount\":\"The pending unbond amount being slashed\"}},\"slashLiquidityFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity that will be slashed\",\"_job\":\"The address being slashed\",\"_liquidity\":\"The address of the liquidity that will be slashed\"}},\"slashTokenFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of the token that will be slashed\",\"_job\":\"The address of the job from which the token will be slashed\",\"_token\":\"The address of the token that will be slashed\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_credits\":\"The total credits of the given job\"}},\"unbond(address,uint256)\":{\"params\":{\"_amount\":\"Allows for partial unbonding\",\"_bonding\":\"The asset being unbonded\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdraw(address)\":{\"params\":{\"_bonding\":\"The asset to withdraw from the bonding pool\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}},\"worked(address)\":{\"details\":\"Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAJob()\":[{\"notice\":\"Throws when the address that is trying to register as a job is already a job\"}],\"AlreadyAKeeper()\":[{\"notice\":\"Throws when the address that is trying to register as a keeper is already a keeper\"}],\"AlreadyDisputed()\":[{\"notice\":\"Throws when a job or keeper is already disputed\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"InsufficientFunds()\":[{\"notice\":\"Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobAlreadyAdded()\":[{\"notice\":\"Throws when trying to add a job that has already been added\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobMigrationImpossible()\":[{\"notice\":\"Throws when the address of the job that requests to migrate wants to migrate to its same address\"}],\"JobMigrationLocked()\":[{\"notice\":\"Throws when cooldown between migrations has not yet passed\"}],\"JobMigrationUnavailable()\":[{\"notice\":\"Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobTokenInsufficient()\":[{\"notice\":\"Throws when someone tries to slash more tokens than the job has\"}],\"JobTokenUnexistent()\":[{\"notice\":\"Throws when the token trying to be slashed doesn't exist\"}],\"JobUnapproved()\":[{\"notice\":\"Throws if the address claiming to be a job is not in the list of approved jobs\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"NotDisputed()\":[{\"notice\":\"Throws when a job or keeper is not disputed and someone tries to resolve the dispute\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"Activation(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#activate is called\"},\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Dispute(address,address)\":{\"notice\":\"Emitted when a keeper or a job is disputed\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"DustSent(address,uint256,address)\":{\"notice\":\"Emitted when dust is sent\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobAddition(address,address)\":{\"notice\":\"Emitted when Keep3rJobManager#addJob is called\"},\"JobMigrationRequested(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#migrateJob function is called\"},\"JobMigrationSuccessful(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#acceptJobMigration function is called\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"JobSlashLiquidity(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\"},\"JobSlashToken(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashTokenFromJob is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"KeeperRevoke(address,address)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#revoke is called\"},\"KeeperSlash(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#slash is called\"},\"KeeperValidation(uint256)\":{\"notice\":\"Emitted when a keeper is validated before a job\"},\"KeeperWork(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a keeper works a job\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"Resolve(address,address)\":{\"notice\":\"Emitted when a dispute is resolved\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"},\"Withdrawal(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#withdraw is called\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobMigration(address,address)\":{\"notice\":\"Completes the migration process for a job\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"activate(address)\":{\"notice\":\"End of the bonding process after bonding time has passed\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addJob(address)\":{\"notice\":\"Allows any caller to add a new job\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bond(address,uint256)\":{\"notice\":\"Beginning of the bonding process\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bondedPayment(address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"directTokenPayment(address,address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"dispute(address)\":{\"notice\":\"Allows governance to create a dispute for a given keeper/job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"notice\":\"Confirms if the current keeper is registered and has a minimum bond of any asset.\"},\"isKeeper(address)\":{\"notice\":\"Confirms if the current keeper is registered\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"migrateJob(address,address)\":{\"notice\":\"Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingJobMigrations(address)\":{\"notice\":\"Maps the jobs that have requested a migration to the address they have requested to migrate to\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"resolve(address)\":{\"notice\":\"Allows governance to resolve a dispute on a keeper/job\"},\"revoke(address)\":{\"notice\":\"Blacklists a keeper from participating in the network\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"sendDust(address,uint256,address)\":{\"notice\":\"Allows an authorized user to transfer the tokens or eth that may have been left in a contract\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slash(address,address,uint256,uint256)\":{\"notice\":\"Allows governance to slash a keeper based on a dispute\"},\"slashLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or a slasher to slash liquidity from a job\"},\"slashTokenFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or slasher to slash a job specific token\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbond(address,uint256)\":{\"notice\":\"Beginning of the unbonding process\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdraw(address)\":{\"notice\":\"Withdraw funds after unbonding has finished\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"},\"worked(address)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/Keep3r.sol\":\"Keep3r\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/Keep3r.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/*\\n\\nCoded for The Keep3r Network with \\u2665 by\\n\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2557\\u2003\\u2003\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\n\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u255a\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2554\\u2550\\u2588\\u2588\\u2588\\u2588\\u2551\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\n\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2003\\u2003\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\n\\nhttps://defi.sucks\\n\\n*/\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './peripherals/jobs/Keep3rJobs.sol';\\nimport './peripherals/keepers/Keep3rKeepers.sol';\\nimport './peripherals/Keep3rAccountance.sol';\\nimport './peripherals/Keep3rRoles.sol';\\nimport './peripherals/Keep3rParameters.sol';\\nimport './peripherals/DustCollector.sol';\\n\\ncontract Keep3r is DustCollector, Keep3rJobs, Keep3rKeepers {\\n  constructor(\\n    address _governance,\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) Keep3rParameters(_keep3rHelper, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(_governance) DustCollector() {}\\n}\\n\",\"keccak256\":\"0xd2a7417d7decff283aef255a21712d76b0f24dc1975f9953b62cd4453c8017ae\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/DustCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '../../contracts/peripherals/Governable.sol';\\nimport '../../interfaces/peripherals/IDustCollector.sol';\\n\\nabstract contract DustCollector is IDustCollector, Governable {\\n  using SafeERC20 for IERC20;\\n\\n  address internal constant _ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n  function sendDust(\\n    address _token,\\n    uint256 _amount,\\n    address _to\\n  ) external override onlyGovernance {\\n    if (_to == address(0)) revert ZeroAddress();\\n    if (_token == _ETH_ADDRESS) {\\n      payable(_to).transfer(_amount);\\n    } else {\\n      IERC20(_token).safeTransfer(_to, _amount);\\n    }\\n    emit DustSent(_token, _amount, _to);\\n  }\\n}\\n\",\"keccak256\":\"0x246ac2c4057520bb627ea8040367549786f4477a04fd79358927cd607952bc2f\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rParameters.sol';\\nimport './Keep3rRoles.sol';\\nimport '../../interfaces/peripherals/IKeep3rDisputable.sol';\\n\\nabstract contract Keep3rDisputable is IKeep3rDisputable, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rDisputable\\n  function dispute(address _jobOrKeeper) external override onlyDisputer {\\n    if (disputes[_jobOrKeeper]) revert AlreadyDisputed();\\n    disputes[_jobOrKeeper] = true;\\n    emit Dispute(_jobOrKeeper, msg.sender);\\n  }\\n\\n  /// @inheritdoc IKeep3rDisputable\\n  function resolve(address _jobOrKeeper) external override onlyDisputer {\\n    if (!disputes[_jobOrKeeper]) revert NotDisputed();\\n    disputes[_jobOrKeeper] = false;\\n    emit Resolve(_jobOrKeeper, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x941e9ba02b2ad3975edc444cd771ef1e5386051553632140f882258ea7e4d4bc\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobFundableCredits.sol';\\nimport './Keep3rJobFundableLiquidity.sol';\\nimport '../Keep3rDisputable.sol';\\n\\nabstract contract Keep3rJobDisputable is IKeep3rJobDisputable, Keep3rDisputable, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rJobDisputable\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override onlySlasher {\\n    if (!disputes[_job]) revert NotDisputed();\\n    if (!_jobTokens[_job].contains(_token)) revert JobTokenUnexistent();\\n    if (jobTokenCredits[_job][_token] < _amount) revert JobTokenInsufficient();\\n\\n    try IERC20(_token).transfer(governance, _amount) {} catch {}\\n    jobTokenCredits[_job][_token] -= _amount;\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit JobSlashToken(_job, _token, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobDisputable\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlySlasher {\\n    if (!disputes[_job]) revert NotDisputed();\\n\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n    try IERC20(_liquidity).transfer(governance, _amount) {} catch {}\\n    emit JobSlashLiquidity(_job, _liquidity, msg.sender, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0x86cdbf44dfa46c6b6e184e48e11cb8571e26cf50c793b6b07227c29e743da397\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableCredits is IKeep3rJobFundableCredits, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice Cooldown between withdrawals\\n  uint256 internal constant _WITHDRAW_TOKENS_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  mapping(address => mapping(address => uint256)) public override jobTokenCreditsAddedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    // KP3R shouldn't be used for direct token payments\\n    if (_token == keep3rV1) revert TokenUnallowed();\\n    uint256 _before = IERC20(_token).balanceOf(address(this));\\n    IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\\n    uint256 _received = IERC20(_token).balanceOf(address(this)) - _before;\\n    uint256 _tokenFee = (_received * fee) / _BASE;\\n    jobTokenCredits[_job][_token] += _received - _tokenFee;\\n    jobTokenCreditsAddedAt[_job][_token] = block.timestamp;\\n    IERC20(_token).safeTransfer(governance, _tokenFee);\\n    _jobTokens[_job].add(_token);\\n\\n    emit TokenCreditAddition(_job, _token, msg.sender, _received);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external override nonReentrant onlyJobOwner(_job) {\\n    if (block.timestamp <= jobTokenCreditsAddedAt[_job][_token] + _WITHDRAW_TOKENS_COOLDOWN) revert JobTokenCreditsLocked();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientJobTokenCredits();\\n    if (disputes[_job]) revert JobDisputed();\\n\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_receiver, _amount);\\n\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit TokenCreditWithdrawal(_job, _token, _receiver, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0xb600d18903a008a1ca03743de7cef8330c2d5e66db52c900822551a4be75f7a5\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/IPairManager.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '../../libraries/FullMath.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableLiquidity is IKeep3rJobFundableLiquidity, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice List of liquidities that are accepted in the system\\n  EnumerableSet.AddressSet internal _approvedLiquidities;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => mapping(address => uint256)) public override liquidityAmount;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override rewardedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override workedAt;\\n\\n  /// @notice Tracks an address and returns its TickCache\\n  mapping(address => TickCache) internal _tick;\\n\\n  // Views\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approvedLiquidities() external view override returns (address[] memory _list) {\\n    _list = _approvedLiquidities.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobPeriodCredits(address _job) public view override returns (uint256 _periodCredits) {\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        TickCache memory _tickCache = observeLiquidity(_liquidity);\\n        if (_tickCache.period != 0) {\\n          int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n          _periodCredits += _getReward(\\n            IKeep3rHelper(keep3rHelper).getKP3RsAtTick(liquidityAmount[_job][_liquidity], _tickDifference, rewardPeriodTime)\\n          );\\n        }\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobLiquidityCredits(address _job) public view override returns (uint256 _liquidityCredits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n\\n    // If the job was rewarded in the past 1 period time\\n    if ((block.timestamp - rewardedAt[_job]) < rewardPeriodTime) {\\n      // If the job has period credits, update minted job credits to new twap\\n      _liquidityCredits = _periodCredits > 0\\n        ? (_jobLiquidityCredits[_job] * _periodCredits) / _jobPeriodCredits[_job] // If the job has period credits, return remaining job credits updated to new twap\\n        : _jobLiquidityCredits[_job]; // If not, return remaining credits, forced credits should not be updated\\n    } else {\\n      // Else return a full period worth of credits if current credits have expired\\n      _liquidityCredits = _periodCredits;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function totalJobCredits(address _job) external view override returns (uint256 _credits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n    uint256 _cooldown = block.timestamp;\\n\\n    if ((rewardedAt[_job] > _period(block.timestamp - rewardPeriodTime))) {\\n      // Will calculate cooldown if it outdated\\n      if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will calculate cooldown from last reward reference in this period\\n        _cooldown -= (rewardedAt[_job] + rewardPeriodTime);\\n      } else {\\n        // Will calculate cooldown from last reward timestamp\\n        _cooldown -= rewardedAt[_job];\\n      }\\n    } else {\\n      // Will calculate cooldown from period start if expired\\n      _cooldown -= _period(block.timestamp);\\n    }\\n    _credits = jobLiquidityCredits(_job) + _phase(_cooldown, _periodCredits);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view override returns (uint256 _periodCredits) {\\n    if (_approvedLiquidities.contains(_liquidity)) {\\n      TickCache memory _tickCache = observeLiquidity(_liquidity);\\n      if (_tickCache.period != 0) {\\n        int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n        return _getReward(IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime));\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function observeLiquidity(address _liquidity) public view virtual override returns (TickCache memory _tickCache) {\\n    if (_tick[_liquidity].period == _period(block.timestamp)) {\\n      // Will return cached twaps if liquidity is updated\\n      _tickCache = _tick[_liquidity];\\n    } else {\\n      bool success;\\n      uint256 lastPeriod = _period(block.timestamp - rewardPeriodTime);\\n\\n      if (_tick[_liquidity].period == lastPeriod) {\\n        // Will only ask for current period accumulator if liquidity is outdated\\n        uint32[] memory _secondsAgo = new uint32[](1);\\n        int56 previousTick = _tick[_liquidity].current;\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n\\n        (_tickCache.current, , success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - previousTick;\\n      } else if (_tick[_liquidity].period < lastPeriod) {\\n        // Will ask for 2 accumulators if liquidity is expired\\n        uint32[] memory _secondsAgo = new uint32[](2);\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n        _secondsAgo[1] = uint32(block.timestamp - _period(block.timestamp) + rewardPeriodTime);\\n\\n        int56 _tickCumulative2;\\n        (_tickCache.current, _tickCumulative2, success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - _tickCumulative2;\\n      }\\n      if (success) {\\n        _tickCache.period = _period(block.timestamp);\\n      } else {\\n        delete _tickCache.period;\\n      }\\n    }\\n  }\\n\\n  // Methods\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external override onlyGovernance {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    _settleJobAccountance(_job);\\n    _jobLiquidityCredits[_job] += _amount;\\n    emit LiquidityCreditsForced(_job, rewardedAt[_job], _jobLiquidityCredits[_job]);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approveLiquidity(address _liquidity) external virtual override onlyGovernance {\\n    if (!_approvedLiquidities.add(_liquidity)) revert LiquidityPairApproved();\\n    _liquidityPool[_liquidity] = IPairManager(_liquidity).pool();\\n    _isKP3RToken0[_liquidity] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_liquidityPool[_liquidity]);\\n    _tick[_liquidity] = observeLiquidity(_liquidity);\\n    emit LiquidityApproval(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function revokeLiquidity(address _liquidity) external override onlyGovernance {\\n    if (!_approvedLiquidities.remove(_liquidity)) revert LiquidityPairUnexistent();\\n    emit LiquidityRevocation(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_approvedLiquidities.contains(_liquidity)) revert LiquidityPairUnapproved();\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n\\n    _jobLiquidities[_job].add(_liquidity);\\n\\n    _settleJobAccountance(_job);\\n\\n    if (_quoteLiquidity(liquidityAmount[_job][_liquidity] + _amount, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n    IERC20(_liquidity).safeTransferFrom(msg.sender, address(this), _amount);\\n    liquidityAmount[_job][_liquidity] += _amount;\\n    _jobPeriodCredits[_job] += _getReward(_quoteLiquidity(_amount, _liquidity));\\n    emit LiquidityAddition(_job, _liquidity, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlyJobOwner(_job) {\\n    canWithdrawAfter[_job][_liquidity] = block.timestamp + unbondTime;\\n    pendingUnbonds[_job][_liquidity] += _amount;\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n\\n    uint256 _remainingLiquidity = liquidityAmount[_job][_liquidity];\\n    if (_remainingLiquidity > 0 && _quoteLiquidity(_remainingLiquidity, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit Unbonding(_job, _liquidity, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external override onlyJobOwner(_job) {\\n    if (_receiver == address(0)) revert ZeroAddress();\\n    if (pendingUnbonds[_job][_liquidity] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[_job][_liquidity] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[_job]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[_job][_liquidity];\\n\\n    delete pendingUnbonds[_job][_liquidity];\\n    delete canWithdrawAfter[_job][_liquidity];\\n\\n    IERC20(_liquidity).safeTransfer(_receiver, _amount);\\n    emit LiquidityWithdrawal(_job, _liquidity, _receiver, _amount);\\n  }\\n\\n  // Internal functions\\n\\n  /// @notice Updates or rewards job liquidity credits depending on time since last job reward\\n  function _updateJobCreditsIfNeeded(address _job) internal returns (bool _rewarded) {\\n    if (rewardedAt[_job] < _period(block.timestamp)) {\\n      // Will exit function if job has been rewarded in current period\\n      if (rewardedAt[_job] <= _period(block.timestamp - rewardPeriodTime)) {\\n        // Will reset job to period syncronicity if a full period passed without rewards\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] = _period(block.timestamp);\\n        _rewarded = true;\\n      } else if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will reset job's syncronicity if last reward was more than epoch ago\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] += rewardPeriodTime;\\n        _rewarded = true;\\n      } else if (workedAt[_job] < _period(block.timestamp)) {\\n        // First keeper on period has to update job accountance to current twaps\\n        uint256 previousPeriodCredits = _jobPeriodCredits[_job];\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = (_jobLiquidityCredits[_job] * _jobPeriodCredits[_job]) / previousPeriodCredits;\\n        // Updating job accountance does not reward job\\n      }\\n    }\\n  }\\n\\n  /// @notice Only called if _jobLiquidityCredits < payment\\n  function _rewardJobCredits(address _job) internal {\\n    /// @notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)\\n    /* WARNING: this allows to top up _jobLiquidityCredits to a max of 1.99 but have to spend at least 1 */\\n    _jobLiquidityCredits[_job] += _phase(block.timestamp - rewardedAt[_job], _jobPeriodCredits[_job]);\\n    rewardedAt[_job] = block.timestamp;\\n  }\\n\\n  /// @notice Updates accountance for _jobPeriodCredits\\n  function _updateJobPeriod(address _job) internal {\\n    _jobPeriodCredits[_job] = _calculateJobPeriodCredits(_job);\\n  }\\n\\n  /// @notice Quotes the outdated job liquidities and calculates _periodCredits\\n  /// @dev This function is also responsible for keeping the KP3R/WETH quote updated\\n  function _calculateJobPeriodCredits(address _job) internal returns (uint256 _periodCredits) {\\n    if (_tick[kp3rWethPool].period != _period(block.timestamp)) {\\n      // Updates KP3R/WETH quote if needed\\n      _tick[kp3rWethPool] = observeLiquidity(kp3rWethPool);\\n    }\\n\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        if (_tick[_liquidity].period != _period(block.timestamp)) {\\n          // Updates liquidity cache only if needed\\n          _tick[_liquidity] = observeLiquidity(_liquidity);\\n        }\\n        _periodCredits += _getReward(_quoteLiquidity(liquidityAmount[_job][_liquidity], _liquidity));\\n      }\\n    }\\n  }\\n\\n  /// @notice Updates job accountance calculating the impact of the unbonded liquidity amount\\n  function _unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) internal nonReentrant {\\n    if (!_jobLiquidities[_job].contains(_liquidity)) revert JobLiquidityUnexistent();\\n    if (liquidityAmount[_job][_liquidity] < _amount) revert JobLiquidityInsufficient();\\n\\n    // Ensures current twaps in job liquidities\\n    _updateJobPeriod(_job);\\n    uint256 _periodCreditsToRemove = _getReward(_quoteLiquidity(_amount, _liquidity));\\n\\n    // A liquidity can be revoked causing a job to have 0 periodCredits\\n    if (_jobPeriodCredits[_job] > 0) {\\n      // Removes a % correspondant to a full rewardPeriodTime for the liquidity withdrawn vs all of the liquidities\\n      _jobLiquidityCredits[_job] -= (_jobLiquidityCredits[_job] * _periodCreditsToRemove) / _jobPeriodCredits[_job];\\n      _jobPeriodCredits[_job] -= _periodCreditsToRemove;\\n    }\\n\\n    liquidityAmount[_job][_liquidity] -= _amount;\\n    if (liquidityAmount[_job][_liquidity] == 0) {\\n      _jobLiquidities[_job].remove(_liquidity);\\n    }\\n  }\\n\\n  /// @notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed\\n  function _phase(uint256 _timePassed, uint256 _multiplier) internal view returns (uint256 _result) {\\n    if (_timePassed < rewardPeriodTime) {\\n      _result = (_timePassed * _multiplier) / rewardPeriodTime;\\n    } else _result = _multiplier;\\n  }\\n\\n  /// @notice Returns the start of the period of the provided timestamp\\n  function _period(uint256 _timestamp) internal view returns (uint256 _periodTimestamp) {\\n    return _timestamp - (_timestamp % rewardPeriodTime);\\n  }\\n\\n  /// @notice Calculates relation between rewardPeriod and inflationPeriod\\n  function _getReward(uint256 _baseAmount) internal view returns (uint256 _credits) {\\n    return FullMath.mulDiv(_baseAmount, rewardPeriodTime, inflationPeriod);\\n  }\\n\\n  /// @notice Returns underlying KP3R amount for a given liquidity amount\\n  function _quoteLiquidity(uint256 _amount, address _liquidity) internal view virtual returns (uint256 _quote) {\\n    if (_tick[_liquidity].period != 0) {\\n      int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tick[_liquidity].difference : -_tick[_liquidity].difference;\\n      _quote = IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime);\\n    }\\n  }\\n\\n  /// @notice Updates job credits to current quotes and rewards job's pending minted credits\\n  /// @dev Ensures a maximum of 1 period of credits\\n  function _settleJobAccountance(address _job) internal virtual {\\n    _updateJobCreditsIfNeeded(_job);\\n    _rewardJobCredits(_job);\\n    _jobLiquidityCredits[_job] = Math.min(_jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n  }\\n}\\n\",\"keccak256\":\"0x7747b2a0ee0c4e3322e92a3e1fc0f6f03be63942bc398009726b58f8c9f79cf0\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rRoles.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobManager is IKeep3rJobManager, Keep3rJobOwnership, Keep3rRoles, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @inheritdoc IKeep3rJobManager\\n  function addJob(address _job) external override {\\n    if (_jobs.contains(_job)) revert JobAlreadyAdded();\\n    if (hasBonded[_job]) revert AlreadyAKeeper();\\n    _jobs.add(_job);\\n    jobOwner[_job] = msg.sender;\\n    emit JobAddition(msg.sender, _job);\\n  }\\n}\\n\",\"keccak256\":\"0xa1fa3fde2b28e28476f0af438049043e695372ee24e1e780b67f00d14d5f660e\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\nimport './Keep3rJobFundableCredits.sol';\\nimport './Keep3rJobFundableLiquidity.sol';\\n\\nabstract contract Keep3rJobMigration is IKeep3rJobMigration, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  uint256 internal constant _MIGRATION_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  mapping(address => address) public override pendingJobMigrations;\\n  mapping(address => mapping(address => uint256)) internal _migrationCreatedAt;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function migrateJob(address _fromJob, address _toJob) external override onlyJobOwner(_fromJob) {\\n    if (_fromJob == _toJob) revert JobMigrationImpossible();\\n\\n    pendingJobMigrations[_fromJob] = _toJob;\\n    _migrationCreatedAt[_fromJob][_toJob] = block.timestamp;\\n\\n    emit JobMigrationRequested(_fromJob, _toJob);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function acceptJobMigration(address _fromJob, address _toJob) external override onlyJobOwner(_toJob) {\\n    if (disputes[_fromJob] || disputes[_toJob]) revert JobDisputed();\\n    if (pendingJobMigrations[_fromJob] != _toJob) revert JobMigrationUnavailable();\\n    if (block.timestamp < _migrationCreatedAt[_fromJob][_toJob] + _MIGRATION_COOLDOWN) revert JobMigrationLocked();\\n\\n    // force job credits update for both jobs\\n    _settleJobAccountance(_fromJob);\\n    _settleJobAccountance(_toJob);\\n\\n    // migrate tokens\\n    while (_jobTokens[_fromJob].length() > 0) {\\n      address _tokenToMigrate = _jobTokens[_fromJob].at(0);\\n      jobTokenCredits[_toJob][_tokenToMigrate] += jobTokenCredits[_fromJob][_tokenToMigrate];\\n      delete jobTokenCredits[_fromJob][_tokenToMigrate];\\n      _jobTokens[_fromJob].remove(_tokenToMigrate);\\n      _jobTokens[_toJob].add(_tokenToMigrate);\\n    }\\n\\n    // migrate liquidities\\n    while (_jobLiquidities[_fromJob].length() > 0) {\\n      address _liquidity = _jobLiquidities[_fromJob].at(0);\\n\\n      liquidityAmount[_toJob][_liquidity] += liquidityAmount[_fromJob][_liquidity];\\n      delete liquidityAmount[_fromJob][_liquidity];\\n\\n      _jobLiquidities[_toJob].add(_liquidity);\\n      _jobLiquidities[_fromJob].remove(_liquidity);\\n    }\\n\\n    // migrate job balances\\n    _jobPeriodCredits[_toJob] += _jobPeriodCredits[_fromJob];\\n    delete _jobPeriodCredits[_fromJob];\\n\\n    _jobLiquidityCredits[_toJob] += _jobLiquidityCredits[_fromJob];\\n    delete _jobLiquidityCredits[_fromJob];\\n\\n    // stop _fromJob from being a job\\n    delete rewardedAt[_fromJob];\\n    _jobs.remove(_fromJob);\\n\\n    // delete unused data slots\\n    delete jobOwner[_fromJob];\\n    delete jobPendingOwner[_fromJob];\\n    delete _migrationCreatedAt[_fromJob][_toJob];\\n    delete pendingJobMigrations[_fromJob];\\n\\n    emit JobMigrationSuccessful(_fromJob, _toJob);\\n  }\\n}\\n\",\"keccak256\":\"0xd46c3c9ce970098d8d75f11966894a341824aceb40583fcfbbc0ebda93d869f9\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobMigration.sol';\\nimport '../../../interfaces/IKeep3rHelper.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\n\\nabstract contract Keep3rJobWorkable is IKeep3rJobWorkable, Keep3rJobMigration {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  uint256 internal _initialGas;\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function isKeeper(address _keeper) external override returns (bool _isKeeper) {\\n    _initialGas = _getGasLeft();\\n    if (_keepers.contains(_keeper)) {\\n      emit KeeperValidation(_initialGas);\\n      return true;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) public override returns (bool _isBondedKeeper) {\\n    _initialGas = _getGasLeft();\\n    if (\\n      _keepers.contains(_keeper) &&\\n      bonds[_keeper][_bond] >= _minBond &&\\n      workCompleted[_keeper] >= _earned &&\\n      block.timestamp - firstSeen[_keeper] >= _age\\n    ) {\\n      emit KeeperValidation(_initialGas);\\n      return true;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function worked(address _keeper) external virtual override {\\n    address _job = msg.sender;\\n    if (disputes[_job]) revert JobDisputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n\\n    if (_updateJobCreditsIfNeeded(_job)) {\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    (uint256 _boost, uint256 _oneEthQuote, uint256 _extraGas) = IKeep3rHelper(keep3rHelper).getPaymentParams(bonds[_keeper][keep3rV1]);\\n\\n    uint256 _gasLeft = _getGasLeft();\\n    uint256 _payment = _calculatePayment(_gasLeft, _extraGas, _oneEthQuote, _boost);\\n\\n    if (_payment > _jobLiquidityCredits[_job]) {\\n      _rewardJobCredits(_job);\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n      _gasLeft = _getGasLeft();\\n      _payment = _calculatePayment(_gasLeft, _extraGas, _oneEthQuote, _boost);\\n    }\\n\\n    _bondedPayment(_job, _keeper, _payment);\\n    emit KeeperWork(keep3rV1, _job, _keeper, _payment, _gasLeft);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function bondedPayment(address _keeper, uint256 _payment) public override {\\n    address _job = msg.sender;\\n\\n    if (disputes[_job]) revert JobDisputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n\\n    if (_updateJobCreditsIfNeeded(_job)) {\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    if (_payment > _jobLiquidityCredits[_job]) {\\n      _rewardJobCredits(_job);\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    _bondedPayment(_job, _keeper, _payment);\\n    emit KeeperWork(keep3rV1, _job, _keeper, _payment, _getGasLeft());\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external override {\\n    address _job = msg.sender;\\n\\n    if (disputes[_job]) revert JobDisputed();\\n    if (disputes[_keeper]) revert Disputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientFunds();\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_keeper, _amount);\\n    emit KeeperWork(_token, _job, _keeper, _amount, _getGasLeft());\\n  }\\n\\n  function _bondedPayment(\\n    address _job,\\n    address _keeper,\\n    uint256 _payment\\n  ) internal {\\n    if (_payment > _jobLiquidityCredits[_job]) revert InsufficientFunds();\\n\\n    workedAt[_job] = block.timestamp;\\n    _jobLiquidityCredits[_job] -= _payment;\\n    bonds[_keeper][keep3rV1] += _payment;\\n    workCompleted[_keeper] += _payment;\\n  }\\n\\n  /// @notice Calculate amount to be payed in KP3R, taking into account multiple parameters\\n  /// @param _gasLeft Amount of gas left after working the job\\n  /// @param _extraGas Amount of expected unaccounted gas\\n  /// @param _oneEthQuote Amount of KP3R equivalent to 1 ETH\\n  /// @param _boost Reward given to the keeper for having bonded KP3R tokens\\n  /// @return _payment Amount to be payed in KP3R tokens\\n  function _calculatePayment(\\n    uint256 _gasLeft,\\n    uint256 _extraGas,\\n    uint256 _oneEthQuote,\\n    uint256 _boost\\n  ) internal view returns (uint256 _payment) {\\n    uint256 _accountedGas = _initialGas - _gasLeft + _extraGas;\\n    _payment = (((_accountedGas * _boost) / _BASE) * _oneEthQuote) / 1 ether;\\n  }\\n\\n  /// @notice Return the gas left and add 1/64 in order to match real gas left at first level of depth (EIP-150)\\n  /// @return _gasLeft Amount of gas left recording taking into account EIP-150\\n  function _getGasLeft() internal view returns (uint256 _gasLeft) {\\n    _gasLeft = (gasleft() * 64) / 63;\\n  }\\n}\\n\",\"keccak256\":\"0x8f67c23ec95bbce4501ccb0667109a00eaab9413514c58ad62c8e03ba1ea077a\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobDisputable.sol';\\nimport './Keep3rJobWorkable.sol';\\nimport './Keep3rJobManager.sol';\\n\\nabstract contract Keep3rJobs is Keep3rJobDisputable, Keep3rJobManager, Keep3rJobWorkable {}\\n\",\"keccak256\":\"0xc9939ffd28f6402b60ef4dd2b23cb5eb88099e4ce374248e1f2c80c5c7039df1\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rKeeperFundable.sol';\\nimport '../Keep3rDisputable.sol';\\nimport '../../../interfaces/external/IKeep3rV1.sol';\\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\\n\\nabstract contract Keep3rKeeperDisputable is IKeep3rKeeperDisputable, Keep3rDisputable, Keep3rKeeperFundable {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rKeeperDisputable\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) public override onlySlasher {\\n    if (!disputes[_keeper]) revert NotDisputed();\\n    _slash(_keeper, _bonded, _bondAmount, _unbondAmount);\\n    emit KeeperSlash(_keeper, msg.sender, _bondAmount + _unbondAmount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperDisputable\\n  function revoke(address _keeper) external override onlySlasher {\\n    if (!disputes[_keeper]) revert NotDisputed();\\n    _keepers.remove(_keeper);\\n    _slash(_keeper, keep3rV1, bonds[_keeper][keep3rV1], pendingUnbonds[_keeper][keep3rV1]);\\n    emit KeeperRevoke(_keeper, msg.sender);\\n  }\\n\\n  function _slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) internal {\\n    if (_bonded != keep3rV1) {\\n      try IERC20(_bonded).transfer(governance, _bondAmount + _unbondAmount) returns (bool) {} catch (bytes memory) {}\\n    }\\n    bonds[_keeper][_bonded] -= _bondAmount;\\n    pendingUnbonds[_keeper][_bonded] -= _unbondAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x1b983519e5367b29d8cd4698c56ed9c18013f757bf0a6a2656572547aaf20208\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\\n\\nimport '../../../interfaces/external/IKeep3rV1.sol';\\nimport '../../../interfaces/external/IKeep3rV1Proxy.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\n\\nabstract contract Keep3rKeeperFundable is IKeep3rKeeperFundable, ReentrancyGuard, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function bond(address _bonding, uint256 _amount) external override nonReentrant {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (_jobs.contains(msg.sender)) revert AlreadyAJob();\\n    canActivateAfter[msg.sender][_bonding] = block.timestamp + bondTime;\\n\\n    uint256 _before = IERC20(_bonding).balanceOf(address(this));\\n    IERC20(_bonding).safeTransferFrom(msg.sender, address(this), _amount);\\n    _amount = IERC20(_bonding).balanceOf(address(this)) - _before;\\n\\n    hasBonded[msg.sender] = true;\\n    pendingBonds[msg.sender][_bonding] += _amount;\\n\\n    emit Bonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function activate(address _bonding) external override {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (canActivateAfter[msg.sender][_bonding] == 0) revert BondsUnexistent();\\n    if (canActivateAfter[msg.sender][_bonding] >= block.timestamp) revert BondsLocked();\\n\\n    delete canActivateAfter[msg.sender][_bonding];\\n\\n    uint256 _amount = _activate(msg.sender, _bonding);\\n    emit Activation(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function unbond(address _bonding, uint256 _amount) external override {\\n    canWithdrawAfter[msg.sender][_bonding] = block.timestamp + unbondTime;\\n    bonds[msg.sender][_bonding] -= _amount;\\n    pendingUnbonds[msg.sender][_bonding] += _amount;\\n\\n    emit Unbonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function withdraw(address _bonding) external override nonReentrant {\\n    if (pendingUnbonds[msg.sender][_bonding] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[msg.sender][_bonding] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[msg.sender]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[msg.sender][_bonding];\\n\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1Proxy(keep3rV1Proxy).mint(_amount);\\n    }\\n\\n    delete pendingUnbonds[msg.sender][_bonding];\\n    delete canWithdrawAfter[msg.sender][_bonding];\\n\\n    IERC20(_bonding).safeTransfer(msg.sender, _amount);\\n\\n    emit Withdrawal(msg.sender, _bonding, _amount);\\n  }\\n\\n  function _activate(address _keeper, address _bonding) internal virtual returns (uint256 _amount) {\\n    if (firstSeen[_keeper] == 0) {\\n      firstSeen[_keeper] = block.timestamp;\\n    }\\n    _keepers.add(_keeper);\\n    _amount = pendingBonds[_keeper][_bonding];\\n    delete pendingBonds[_keeper][_bonding];\\n\\n    // bond provided tokens\\n    bonds[_keeper][_bonding] += _amount;\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1(keep3rV1).burn(_amount);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcd56d53eacaa3dbffc2cb573562482ba05b51246bf273f6bde9fb5de52c54eb2\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rKeeperDisputable.sol';\\n\\nabstract contract Keep3rKeepers is Keep3rKeeperDisputable {}\\n\",\"keccak256\":\"0xced9f9ec9610bb34b2e87fc1f05f036d37cee5a9df61d4fe527d92b1d9c1e244\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n// solhint-disable func-name-mixedcase\\ninterface IKeep3rV1 is IERC20, IERC20Metadata {\\n  // Structs\\n  struct Checkpoint {\\n    uint32 fromBlock;\\n    uint256 votes;\\n  }\\n\\n  // Events\\n  event DelegateChanged(address indexed _delegator, address indexed _fromDelegate, address indexed _toDelegate);\\n  event DelegateVotesChanged(address indexed _delegate, uint256 _previousBalance, uint256 _newBalance);\\n  event SubmitJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event ApplyCredit(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event RemoveJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event UnbondJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event JobAdded(address indexed _job, uint256 _block, address _governance);\\n  event JobRemoved(address indexed _job, uint256 _block, address _governance);\\n  event KeeperWorked(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _block, uint256 _amount);\\n  event KeeperBonding(address indexed _keeper, uint256 _block, uint256 _active, uint256 _bond);\\n  event KeeperBonded(address indexed _keeper, uint256 _block, uint256 _activated, uint256 _bond);\\n  event KeeperUnbonding(address indexed _keeper, uint256 _block, uint256 _deactive, uint256 _bond);\\n  event KeeperUnbound(address indexed _keeper, uint256 _block, uint256 _deactivated, uint256 _bond);\\n  event KeeperSlashed(address indexed _keeper, address indexed _slasher, uint256 _block, uint256 _slash);\\n  event KeeperDispute(address indexed _keeper, uint256 _block);\\n  event KeeperResolved(address indexed _keeper, uint256 _block);\\n  event TokenCreditAddition(address indexed _credit, address indexed _job, address indexed _creditor, uint256 _block, uint256 _amount);\\n\\n  // Variables\\n  function KPRH() external returns (address);\\n\\n  function delegates(address _delegator) external view returns (address);\\n\\n  function checkpoints(address _account, uint32 _checkpoint) external view returns (Checkpoint memory);\\n\\n  function numCheckpoints(address _account) external view returns (uint32);\\n\\n  function DOMAIN_TYPEHASH() external returns (bytes32);\\n\\n  function DOMAINSEPARATOR() external returns (bytes32);\\n\\n  function DELEGATION_TYPEHASH() external returns (bytes32);\\n\\n  function PERMIT_TYPEHASH() external returns (bytes32);\\n\\n  function nonces(address _user) external view returns (uint256);\\n\\n  function BOND() external returns (uint256);\\n\\n  function UNBOND() external returns (uint256);\\n\\n  function LIQUIDITYBOND() external returns (uint256);\\n\\n  function FEE() external returns (uint256);\\n\\n  function BASE() external returns (uint256);\\n\\n  function ETH() external returns (address);\\n\\n  function bondings(address _user, address _bonding) external view returns (uint256);\\n\\n  function canWithdrawAfter(address _user, address _bonding) external view returns (uint256);\\n\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function pendingbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function bonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function votes(address _delegator) external view returns (uint256);\\n\\n  function firstSeen(address _keeper) external view returns (uint256);\\n\\n  function disputes(address _keeper) external view returns (bool);\\n\\n  function lastJob(address _keeper) external view returns (uint256);\\n\\n  function workCompleted(address _keeper) external view returns (uint256);\\n\\n  function jobs(address _job) external view returns (bool);\\n\\n  function credits(address _job, address _credit) external view returns (uint256);\\n\\n  function liquidityProvided(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmountsUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function jobProposalDelay(address _job) external view returns (uint256);\\n\\n  function liquidityApplied(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmount(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function keepers(address _keeper) external view returns (bool);\\n\\n  function blacklist(address _keeper) external view returns (bool);\\n\\n  function keeperList(uint256 _index) external view returns (address);\\n\\n  function jobList(uint256 _index) external view returns (address);\\n\\n  function governance() external returns (address);\\n\\n  function pendingGovernance() external returns (address);\\n\\n  function liquidityAccepted(address _liquidity) external view returns (bool);\\n\\n  function liquidityPairs(uint256 _index) external view returns (address);\\n\\n  // Methods\\n  function getCurrentVotes(address _account) external view returns (uint256);\\n\\n  function addCreditETH(address _job) external payable;\\n\\n  function addCredit(\\n    address _credit,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function pairs() external view returns (address[] memory);\\n\\n  function addLiquidityToJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function applyCreditToJob(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external;\\n\\n  function unbondLiquidityFromJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function removeLiquidityFromJob(address _liquidity, address _job) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function burn(uint256 _amount) external;\\n\\n  function worked(address _keeper) external;\\n\\n  function receipt(\\n    address _credit,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function receiptETH(address _keeper, uint256 _amount) external;\\n\\n  function addJob(address _job) external;\\n\\n  function getJobs() external view returns (address[] memory);\\n\\n  function removeJob(address _job) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function setGovernance(address _governance) external;\\n\\n  function acceptGovernance() external;\\n\\n  function isKeeper(address _keeper) external returns (bool);\\n\\n  function isMinKeeper(\\n    address _keeper,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  function getKeepers() external view returns (address[] memory);\\n\\n  function activate(address _bonding) external;\\n\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function withdraw(address _bonding) external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xa9806cd6666ab1b7375ef72446964a72397fd4cefc7cc8c5b37caa7c50df0246\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../peripherals/IGovernable.sol';\\n\\ninterface IKeep3rV1Proxy is IGovernable {\\n  // Structs\\n  struct Recipient {\\n    address recipient;\\n    uint256 caps;\\n  }\\n\\n  // Variables\\n  function keep3rV1() external view returns (address);\\n\\n  function minter() external view returns (address);\\n\\n  function next(address) external view returns (uint256);\\n\\n  function caps(address) external view returns (uint256);\\n\\n  function recipients() external view returns (address[] memory);\\n\\n  function recipientsCaps() external view returns (Recipient[] memory);\\n\\n  // Errors\\n  error Cooldown();\\n  error NoDrawableAmount();\\n  error ZeroAddress();\\n  error OnlyMinter();\\n\\n  // Methods\\n  function addRecipient(address recipient, uint256 amount) external;\\n\\n  function removeRecipient(address recipient) external;\\n\\n  function draw() external returns (uint256 _amount);\\n\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  function setMinter(address _minter) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function mint(address _account, uint256 _amount) external;\\n\\n  function setKeep3rV1Governance(address _governance) external;\\n\\n  function acceptKeep3rV1Governance() external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function addJob(address _job) external;\\n\\n  function removeJob(address _job) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xfb2e81fe347b39aabce849ef2d42c6df846b7ef0ed5ae952c85bbb708da99408\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IDustCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\ninterface IDustCollector is IBaseErrors {\\n  /// @notice Emitted when dust is sent\\n  /// @param _token The token that will be transferred\\n  /// @param _amount The amount of the token that will be transferred\\n  /// @param _to The address which will receive the funds\\n  event DustSent(address _token, uint256 _amount, address _to);\\n\\n  /// @notice Allows an authorized user to transfer the tokens or eth that may have been left in a contract\\n  /// @param _token The token that will be transferred\\n  /// @param _amount The amount of the token that will be transferred\\n  /// @param _to The address that will receive the idle funds\\n  function sendDust(\\n    address _token,\\n    uint256 _amount,\\n    address _to\\n  ) external;\\n}\\n\",\"keccak256\":\"0x38dce228111f2a3c6b26ac09c5652c3f1f184c4cfe50d11ff0958ef6a50683bb\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Creates/resolves disputes for jobs or keepers\\n///         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\\n///         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\\ninterface IKeep3rDisputable {\\n  /// @notice Emitted when a keeper or a job is disputed\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _disputer The user that called the function and disputed the keeper\\n  event Dispute(address indexed _jobOrKeeper, address indexed _disputer);\\n\\n  /// @notice Emitted when a dispute is resolved\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _resolver The user that called the function and resolved the dispute\\n  event Resolve(address indexed _jobOrKeeper, address indexed _resolver);\\n\\n  /// @notice Throws when a job or keeper is already disputed\\n  error AlreadyDisputed();\\n\\n  /// @notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute\\n  error NotDisputed();\\n\\n  /// @notice Allows governance to create a dispute for a given keeper/job\\n  /// @param _jobOrKeeper The address in dispute\\n  function dispute(address _jobOrKeeper) external;\\n\\n  /// @notice Allows governance to resolve a dispute on a keeper/job\\n  /// @param _jobOrKeeper The address cleared\\n  function resolve(address _jobOrKeeper) external;\\n}\\n\",\"keccak256\":\"0x002b9b4c75e62d48d74b6447649d39eb5c1e128d2523bb11e08e9cd3e27b1f70\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6297,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "jobTokenCreditsAddedAt",
                "offset": 0,
                "slot": "37",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6540,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_approvedLiquidities",
                "offset": 0,
                "slot": "38",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 6548,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "liquidityAmount",
                "offset": 0,
                "slot": "40",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6554,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "rewardedAt",
                "offset": 0,
                "slot": "41",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6560,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "workedAt",
                "offset": 0,
                "slot": "42",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6566,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_tick",
                "offset": 0,
                "slot": "43",
                "type": "t_mapping(t_address,t_struct(TickCache)13178_storage)"
              },
              {
                "astId": 8024,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "pendingJobMigrations",
                "offset": 0,
                "slot": "44",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8030,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_migrationCreatedAt",
                "offset": 0,
                "slot": "45",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 8427,
                "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                "label": "_initialGas",
                "offset": 0,
                "slot": "46",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_int56": {
                "encoding": "inplace",
                "label": "int56",
                "numberOfBytes": "7"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_struct(TickCache)13178_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)",
                "numberOfBytes": "32",
                "value": "t_struct(TickCache)13178_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(TickCache)13178_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rJobFundableLiquidity.TickCache",
                "members": [
                  {
                    "astId": 13173,
                    "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                    "label": "current",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13175,
                    "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                    "label": "difference",
                    "offset": 7,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13177,
                    "contract": "solidity/contracts/Keep3r.sol:Keep3r",
                    "label": "period",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyAJob()": [
                {
                  "notice": "Throws when the address that is trying to register as a job is already a job"
                }
              ],
              "AlreadyAKeeper()": [
                {
                  "notice": "Throws when the address that is trying to register as a keeper is already a keeper"
                }
              ],
              "AlreadyDisputed()": [
                {
                  "notice": "Throws when a job or keeper is already disputed"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "InsufficientFunds()": [
                {
                  "notice": "Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobAlreadyAdded()": [
                {
                  "notice": "Throws when trying to add a job that has already been added"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobMigrationImpossible()": [
                {
                  "notice": "Throws when the address of the job that requests to migrate wants to migrate to its same address"
                }
              ],
              "JobMigrationLocked()": [
                {
                  "notice": "Throws when cooldown between migrations has not yet passed"
                }
              ],
              "JobMigrationUnavailable()": [
                {
                  "notice": "Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobTokenInsufficient()": [
                {
                  "notice": "Throws when someone tries to slash more tokens than the job has"
                }
              ],
              "JobTokenUnexistent()": [
                {
                  "notice": "Throws when the token trying to be slashed doesn't exist"
                }
              ],
              "JobUnapproved()": [
                {
                  "notice": "Throws if the address claiming to be a job is not in the list of approved jobs"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "NotDisputed()": [
                {
                  "notice": "Throws when a job or keeper is not disputed and someone tries to resolve the dispute"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "Activation(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#activate is called"
              },
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Dispute(address,address)": {
                "notice": "Emitted when a keeper or a job is disputed"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "DustSent(address,uint256,address)": {
                "notice": "Emitted when dust is sent"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobAddition(address,address)": {
                "notice": "Emitted when Keep3rJobManager#addJob is called"
              },
              "JobMigrationRequested(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#migrateJob function is called"
              },
              "JobMigrationSuccessful(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#acceptJobMigration function is called"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "JobSlashLiquidity(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called"
              },
              "JobSlashToken(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashTokenFromJob is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "KeeperRevoke(address,address)": {
                "notice": "Emitted when Keep3rKeeperDisputable#revoke is called"
              },
              "KeeperSlash(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperDisputable#slash is called"
              },
              "KeeperValidation(uint256)": {
                "notice": "Emitted when a keeper is validated before a job"
              },
              "KeeperWork(address,address,address,uint256,uint256)": {
                "notice": "Emitted when a keeper works a job"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "Resolve(address,address)": {
                "notice": "Emitted when a dispute is resolved"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              },
              "Withdrawal(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#withdraw is called"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobMigration(address,address)": {
                "notice": "Completes the migration process for a job"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "activate(address)": {
                "notice": "End of the bonding process after bonding time has passed"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addJob(address)": {
                "notice": "Allows any caller to add a new job"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bond(address,uint256)": {
                "notice": "Beginning of the bonding process"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bondedPayment(address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "directTokenPayment(address,address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "dispute(address)": {
                "notice": "Allows governance to create a dispute for a given keeper/job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "notice": "Confirms if the current keeper is registered and has a minimum bond of any asset."
              },
              "isKeeper(address)": {
                "notice": "Confirms if the current keeper is registered"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "migrateJob(address,address)": {
                "notice": "Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingJobMigrations(address)": {
                "notice": "Maps the jobs that have requested a migration to the address they have requested to migrate to"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "resolve(address)": {
                "notice": "Allows governance to resolve a dispute on a keeper/job"
              },
              "revoke(address)": {
                "notice": "Blacklists a keeper from participating in the network"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "sendDust(address,uint256,address)": {
                "notice": "Allows an authorized user to transfer the tokens or eth that may have been left in a contract"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slash(address,address,uint256,uint256)": {
                "notice": "Allows governance to slash a keeper based on a dispute"
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "notice": "Allows governance or a slasher to slash liquidity from a job"
              },
              "slashTokenFromJob(address,address,uint256)": {
                "notice": "Allows governance or slasher to slash a job specific token"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbond(address,uint256)": {
                "notice": "Beginning of the unbonding process"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdraw(address)": {
                "notice": "Withdraw funds after unbonding has finished"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              },
              "worked(address)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/Keep3rHelper.sol": {
        "Keep3rHelper": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV2",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "InvalidKp3rPool",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairInvalid",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV2",
                  "type": "address"
                }
              ],
              "name": "Keep3rV2Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_address",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "_isKP3RToken0",
                  "type": "bool"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_maxBoost",
                  "type": "uint256"
                }
              ],
              "name": "MaxBoostChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_minBoost",
                  "type": "uint256"
                }
              ],
              "name": "MinBoostChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint32",
                  "name": "_quoteTwapTime",
                  "type": "uint32"
                }
              ],
              "name": "QuoteTwapTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_targetBond",
                  "type": "uint256"
                }
              ],
              "name": "TargetBondChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_workExtraGas",
                  "type": "uint256"
                }
              ],
              "name": "WorkExtraGasChange",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "BOOST_BASE",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "KP3R",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amountBonded",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "int56",
                  "name": "_tickDifference",
                  "type": "int56"
                },
                {
                  "internalType": "uint256",
                  "name": "_timeInterval",
                  "type": "uint256"
                }
              ],
              "name": "getKP3RsAtTick",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_kp3rAmount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bonds",
                  "type": "uint256"
                }
              ],
              "name": "getPaymentParams",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_boost",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_oneEthQuote",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_extra",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "name": "getPoolTokens",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_token0",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token1",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint128",
                  "name": "_baseAmount",
                  "type": "uint128"
                },
                {
                  "internalType": "int56",
                  "name": "_tickDifference",
                  "type": "int56"
                },
                {
                  "internalType": "uint256",
                  "name": "_timeInterval",
                  "type": "uint256"
                }
              ],
              "name": "getQuoteAtTick",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_quoteAmount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_gasUsed",
                  "type": "uint256"
                }
              ],
              "name": "getRewardAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_gasUsed",
                  "type": "uint256"
                }
              ],
              "name": "getRewardAmountFor",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_kp3r",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bonds",
                  "type": "uint256"
                }
              ],
              "name": "getRewardBoostFor",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardBoost",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "name": "isKP3RToken0",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isKP3RToken0",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV2",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "poolAddress",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "isKP3RToken0",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "maxBoost",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "minBoost",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                },
                {
                  "internalType": "uint32[]",
                  "name": "_secondsAgo",
                  "type": "uint32[]"
                }
              ],
              "name": "observe",
              "outputs": [
                {
                  "internalType": "int56",
                  "name": "_tickCumulative1",
                  "type": "int56"
                },
                {
                  "internalType": "int56",
                  "name": "_tickCumulative2",
                  "type": "int56"
                },
                {
                  "internalType": "bool",
                  "name": "_success",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_eth",
                  "type": "uint256"
                }
              ],
              "name": "quote",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "quoteTwapTime",
              "outputs": [
                {
                  "internalType": "uint32",
                  "name": "",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV2",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV2",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_poolAddress",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_maxBoost",
                  "type": "uint256"
                }
              ],
              "name": "setMaxBoost",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_minBoost",
                  "type": "uint256"
                }
              ],
              "name": "setMinBoost",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint32",
                  "name": "_quoteTwapTime",
                  "type": "uint32"
                }
              ],
              "name": "setQuoteTwapTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_targetBond",
                  "type": "uint256"
                }
              ],
              "name": "setTargetBond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_workExtraGas",
                  "type": "uint256"
                }
              ],
              "name": "setWorkExtraGas",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "targetBond",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "workExtraGas",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "bonds(address)": {
                "params": {
                  "_keeper": "The address of the keeper to check"
                },
                "returns": {
                  "_amountBonded": "The amount of KP3R the keeper has bonded"
                }
              },
              "getKP3RsAtTick(uint256,int56,uint256)": {
                "params": {
                  "_liquidityAmount": "Amount of liquidity to be converted",
                  "_tickDifference": "Tick value used to calculate the quote",
                  "_timeInterval": "Time value used to calculate the quote"
                },
                "returns": {
                  "_kp3rAmount": "Amount of KP3R tokens underlying on the given liquidity"
                }
              },
              "getPaymentParams(uint256)": {
                "params": {
                  "_bonds": "Amount of bonded KP3R owned by the keeper"
                },
                "returns": {
                  "_boost": "Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R",
                  "_extra": "Amount of extra gas that should be added to the gas spent",
                  "_oneEthQuote": "Amount of KP3R tokens equivalent to 1 ETH"
                }
              },
              "getPoolTokens(address)": {
                "params": {
                  "_pool": "Address of the correspondant pool"
                },
                "returns": {
                  "_token0": "Address of the first token of the pair",
                  "_token1": "Address of the second token of the pair"
                }
              },
              "getQuoteAtTick(uint128,int56,uint256)": {
                "params": {
                  "_baseAmount": "Amount of token to be converted",
                  "_tickDifference": "Tick value used to calculate the quote",
                  "_timeInterval": "Time value used to calculate the quote"
                },
                "returns": {
                  "_quoteAmount": "Amount of credits deserved for the baseAmount at the tick value"
                }
              },
              "getRewardAmount(uint256)": {
                "params": {
                  "_gasUsed": "The amount of gas used that will be rewarded"
                },
                "returns": {
                  "_amount": "The amount of KP3R that should be awarded to tx.origin"
                }
              },
              "getRewardAmountFor(address,uint256)": {
                "params": {
                  "_gasUsed": "The amount of gas used that will be rewarded",
                  "_keeper": "The address of the keeper to check"
                },
                "returns": {
                  "_kp3r": "The amount of KP3R that should be awarded to the keeper"
                }
              },
              "getRewardBoostFor(uint256)": {
                "params": {
                  "_bonds": "The amount of KP3R tokens bonded by the keeper"
                },
                "returns": {
                  "_rewardBoost": "The reward boost that corresponds to the keeper"
                }
              },
              "isKP3RToken0(address)": {
                "params": {
                  "_pool": "Address of the correspondant pool"
                },
                "returns": {
                  "_isKP3RToken0": "Boolean indicating the order of the tokens in the pair"
                }
              },
              "observe(address,uint32[])": {
                "params": {
                  "_pool": "Address of the pool to observe",
                  "_secondsAgo": "Array with time references to observe"
                },
                "returns": {
                  "_success": "Boolean indicating if the observe call was succesfull",
                  "_tickCumulative1": "Cummulative sum of ticks until first time reference",
                  "_tickCumulative2": "Cummulative sum of ticks until second time reference"
                }
              },
              "quote(uint256)": {
                "details": "This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas",
                "params": {
                  "_eth": "The amount of ETH"
                },
                "returns": {
                  "_amountOut": "The amount of KP3R"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setKeep3rV2(address)": {
                "params": {
                  "_keep3rV2": "The address of Keep3r V2"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_poolAddress": "The address of the KP3R-WETH pool"
                }
              },
              "setMaxBoost(uint256)": {
                "params": {
                  "_maxBoost": "The maximum boost multiplier"
                }
              },
              "setMinBoost(uint256)": {
                "params": {
                  "_minBoost": "The minimum boost multiplier"
                }
              },
              "setQuoteTwapTime(uint32)": {
                "params": {
                  "_quoteTwapTime": "The twap time for quoting"
                }
              },
              "setTargetBond(uint256)": {
                "params": {
                  "_targetBond": "The target bond amount"
                }
              },
              "setWorkExtraGas(uint256)": {
                "params": {
                  "_workExtraGas": "The work extra gas"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_2497": {
                  "entryPoint": null,
                  "id": 2497,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_3034": {
                  "entryPoint": null,
                  "id": 3034,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_setKp3rWethPool_3206": {
                  "entryPoint": 247,
                  "id": 3206,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 683,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 712,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address_fromMemory": {
                  "entryPoint": 749,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:704:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "277:127:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "323:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "332:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "335:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "325:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "325:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "325:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "298:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "307:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "294:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "294:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "319:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "290:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "290:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "287:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "348:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "388:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "358:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "358:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "348:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "243:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "254:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "266:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:208:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "507:195:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "553:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "562:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "565:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "555:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "555:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "555:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "528:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "537:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "524:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "524:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "549:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "520:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "520:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "517:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "578:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "618:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "588:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "588:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "578:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "637:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "681:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "692:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "677:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "677:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "647:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "647:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "637:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "465:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "476:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "488:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "496:6:84",
                            "type": ""
                          }
                        ],
                        "src": "409:293:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "6080604052612af8600255612ee0600355680ad78ebc5ac620000060045561c3506005556006805463ffffffff19166102581790553480156200004157600080fd5b5060405162001e6e38038062001e6e8339810160408190526200006491620002ed565b8181806001600160a01b0381166200008e5760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392831617905560068054600160201b600160c01b03191664010000000092851692909202919091179055620000ed7311b7a6bc0259ed6cf9db8f499988f9ecc7167bf5620000f7565b5050505062000325565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200015157600080fd5b505afa15801562000166573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018c9190620002c8565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620001f257600080fd5b505afa15801562000207573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022d9190620002c8565b6001600160a01b03161490508115801562000246575080155b156200026557604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b80516001600160a01b0381168114620002c357600080fd5b919050565b600060208284031215620002db57600080fd5b620002e682620002ab565b9392505050565b600080604083850312156200030157600080fd5b6200030c83620002ab565b91506200031c60208401620002ab565b90509250929050565b611b3980620003356000396000f3fe608060405234801561001057600080fd5b50600436106101855760003560e01c8063696a437b116100df578063696a437b146102c45780637b40c913146102e75780638561579c146103145780639aaad6791461031d578063a0d2710714610342578063ab033ea914610355578063ab5dce0014610368578063ab8cedc51461037b578063b2e0df961461038e578063b93f5af0146103a1578063c84993af146103b4578063ca4f2803146103c7578063dc686d91146103e8578063ed1bd76c14610420578063f39c38a014610433578063fe10d7741461044657600080fd5b806305e0b9a01461018a5780630c525835146101bb578063117cfc1b146101d0578063160e1e31146101ea5780632248e82d146101fd578063238efcbc1461021e57806325f09e61146102265780632742b9e71461022f578063289adb441461023857806337090c2f1461024b5780633cc7ab30146102545780633facf24214610267578063435b21c114610270578063516c33231461029e5780635aa6e675146102b1575b600080fd5b6101a5731ceb5cb57c4d4e2b2433641b95dd330a33185a4481565b6040516101b29190611850565b60405180910390f35b6101ce6101c93660046117dc565b610459565b005b6006546101a590600160201b90046001600160a01b031681565b6101ce6101f83660046115ab565b6104c0565b61021061020b366004611698565b61053b565b6040519081526020016101b2565b6101ce61056e565b61021061271081565b61021060045481565b6101ce6102463660046117dc565b6105fa565b61021060035481565b6101ce6102623660046115ab565b61065a565b61021060055481565b61028361027e3660046117dc565b6106e5565b604080519384526020840192909252908201526060016101b2565b6102106102ac3660046117dc565b610713565b6000546101a5906001600160a01b031681565b6102d76102d23660046115ab565b610778565b60405190151581526020016101b2565b600754610306906001600160a01b03811690600160a01b900460ff1682565b6040516101b292919061187e565b61021060025481565b60065461032d9063ffffffff1681565b60405163ffffffff90911681526020016101b2565b61021061035036600461180e565b6107fe565b6101ce6103633660046115ab565b61083a565b6101ce6103763660046117dc565b6108b0565b61021061038936600461178f565b610910565b6101ce61039c3660046117dc565b6109b4565b6101ce6103af366004611835565b610a14565b6102106103c23660046117dc565b610a87565b6103da6103d53660046115ab565b610a99565b6040516101b2929190611864565b6103fb6103f63660046115e5565b610b87565b60408051600694850b81529290930b60208301521515918101919091526060016101b2565b61021061042e3660046117dc565b610c92565b6001546101a5906001600160a01b031681565b6102106104543660046115ab565b610ded565b6000546001600160a01b03163314610484576040516354348f0360e01b815260040160405180910390fd5b60028190556040518181527f0919fdaaac0f59c6bc7eeef4f975d6163475220f1e4820d0bce99c84c51cac1d906020015b60405180910390a150565b6000546001600160a01b031633146104eb576040516354348f0360e01b815260040160405180910390fd5b6104f481610e8b565b6007546040517f554c636366d5fc882a9ab4b7b9d5181781d1a7076abe50ed410365620dcf4108916104b5916001600160a01b03821691600160a01b900460ff169061187e565b60008061054a6102ac85610ded565b905061056661271061055c8386611990565b61042e919061197c565b949350505050565b6001546001600160a01b0316331461059957604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916105f091611850565b60405180910390a1565b6000546001600160a01b03163314610625576040516354348f0360e01b815260040160405180910390fd5b60058190556040518181527fed847bdbab1a30becee18585f23c759bd06156561390d2e7fbffd18e74b56c9b906020016104b5565b6000546001600160a01b03163314610685576040516354348f0360e01b815260040160405180910390fd5b60068054600160201b600160c01b031916600160201b6001600160a01b03848116820292909217928390556040517fcf744e4fc39d49b6d8103035078629b8a3be95adc007b0d663e96bdff777b10a936104b59392900490911690611850565b60008060006106fb670de0b6b3a7640000610c92565b915061070684610713565b6005549095929450925050565b600061072182600454611035565b915060006107656002546004548560025460035461073f91906119ff565b6107499190611990565b610753919061197c565b6002546107609190611936565b61104b565b90506107714882611990565b9392505050565b600080600061078684610a99565b90925090506001600160a01b038216731ceb5cb57c4d4e2b2433641b95dd330a33185a4414156107ba575060019392505050565b6001600160a01b038116731ceb5cb57c4d4e2b2433641b95dd330a33185a44146107f757604051637d7c8f2760e11b815260040160405180910390fd5b5050919050565b60008061081761081284600687900b61194e565b61105b565b9050610831600160601b86836001600160a01b0316611469565b95945050505050565b6000546001600160a01b03163314610865576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906104b5908390611850565b6000546001600160a01b031633146108db576040516354348f0360e01b815260040160405180910390fd5b60048190556040518181527feac367d684b6ac6c6ae7e3e852c06f17e6354e0f1e7122832c3e6d17e0a2b71e906020016104b5565b60008061092461081284600687900b61194e565b90506001600160801b036001600160a01b038216116109745760006109526001600160a01b03831680611990565b905061096c600160c01b876001600160801b031683611469565b9250506109ac565b600061098e6001600160a01b03831680600160401b611469565b90506109a8600160801b876001600160801b031683611469565b9250505b509392505050565b6000546001600160a01b031633146109df576040516354348f0360e01b815260040160405180910390fd5b60038190556040518181527fa1292b4e7a0d916ccfd2bc83858b05f328e344d1f0f507d97ac66723ac7c2aaa906020016104b5565b6000546001600160a01b03163314610a3f576040516354348f0360e01b815260040160405180910390fd5b6006805463ffffffff191663ffffffff83169081179091556040519081527fc806e26fb64e3a95f4b70abf4d87280555696244d01068b5f45b0e515aceb1de906020016104b5565b6000610a93328361053b565b92915050565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad557600080fd5b505afa158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d91906115c8565b836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610b4657600080fd5b505afa158015610b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7e91906115c8565b91509150915091565b6000806000846001600160a01b031663883bdbfd856040518263ffffffff1660e01b8152600401610bb89190611899565b60006040518083038186803b158015610bd057600080fd5b505afa925050508015610c0557506040513d6000823e601f3d908101601f19168201604052610c0291908101906116c4565b60015b610c3f573d808015610c33576040519150601f19603f3d011682016040523d82523d6000602084013e610c38565b606091505b5050610c8b565b81600081518110610c5257610c52611ab0565b60200260200101519450600182511115610c845781600181518110610c7957610c79611ab0565b602002602001015193505b6001925050505b9250925092565b604080516002808252606082018352600092839291906020830190803683375050600654825192935063ffffffff16918391506001908110610cd657610cd6611ab0565b63ffffffff9092166020928302919091019091015260075460405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd90610d1c908590600401611899565b60006040518083038186803b158015610d3457600080fd5b505afa158015610d48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d7091908101906116c4565b509050600081600181518110610d8857610d88611ab0565b602002602001015182600081518110610da357610da3611ab0565b6020026020010151610db591906119af565b600754909150610831908690600160a01b900460ff16610ddd57610dd883611a6a565b610ddf565b825b60065463ffffffff16610910565b60065460405163a39744b560e01b8152600091600160201b90046001600160a01b03169063a39744b590610e3b908590731ceb5cb57c4d4e2b2433641b95dd330a33185a4490600401611864565b60206040518083038186803b158015610e5357600080fd5b505afa158015610e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9391906117f5565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ee457600080fd5b505afa158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c91906115c8565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610f8157600080fd5b505afa158015610f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb991906115c8565b6001600160a01b031614905081158015610fd1575080155b15610fef57604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b60008183106110445781610771565b5090919050565b6000818310156110445781610771565b60008060008360020b12611072578260020b61107f565b8260020b61107f90611a4d565b905061108e620d89e719611a2a565b60020b8111156110c85760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b6000600182166110dc57600160801b6110ee565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561112357608061111e826ffff97272373d413259a46990580e213a611990565b901c90505b600482161561114d576080611148826ffff2e50f5f656932ef12357cf3c7fdcc611990565b901c90505b6008821615611177576080611172826fffe5caca7e10e4e61c3624eaa0941cd0611990565b901c90505b60108216156111a157608061119c826fffcb9843d60f6159c9db58835c926644611990565b901c90505b60208216156111cb5760806111c6826fff973b41fa98c081472e6896dfb254c0611990565b901c90505b60408216156111f55760806111f0826fff2ea16466c96a3843ec78b326b52861611990565b901c90505b608082161561121f57608061121a826ffe5dee046a99a2a811c461f1969c3053611990565b901c90505b61010082161561124a576080611245826ffcbe86c7900a88aedcffc83b479aa3a4611990565b901c90505b610200821615611275576080611270826ff987a7253ac413176f2b074cf7815e54611990565b901c90505b6104008216156112a057608061129b826ff3392b0822b70005940c7a398e4b70f3611990565b901c90505b6108008216156112cb5760806112c6826fe7159475a2c29b7443b29c7fa6e889d9611990565b901c90505b6110008216156112f65760806112f1826fd097f3bdfd2022b8845ad8f792aa5825611990565b901c90505b61200082161561132157608061131c826fa9f746462d870fdf8a65dc1f90e061e5611990565b901c90505b61400082161561134c576080611347826f70d869a156d2a1b890bb3df62baf32f7611990565b901c90505b618000821615611377576080611372826f31be135f97d08fd981231505542fcfa6611990565b901c90505b620100008216156113a357608061139e826f09aa508b5b7a84e1c677de54f3e99bc9611990565b901c90505b620200008216156113ce5760806113c9826e5d6af8dedb81196699c329225ee604611990565b901c90505b620400008216156113f85760806113f3826d2216e584f5fa1ea926041bedfe98611990565b901c90505b6208000082161561142057608061141b826b048a170391f7dc42444e8fa2611990565b901c90505b60008460020b131561143b576114388160001961197c565b90505b611449600160201b82611a16565b15611455576001611458565b60005b6105669060ff16602083901c611936565b6000808060001985870985870292508281108382030391505080600014156114a3576000841161149857600080fd5b508290049050610771565b8084116114af57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082601f83011261152857600080fd5b8151602061153d61153883611913565b6118e3565b80838252828201915082860187848660051b890101111561155d57600080fd5b60005b8581101561158557815161157381611adc565b84529284019290840190600101611560565b5090979650505050505050565b803563ffffffff811681146115a657600080fd5b919050565b6000602082840312156115bd57600080fd5b813561077181611adc565b6000602082840312156115da57600080fd5b815161077181611adc565b600080604083850312156115f857600080fd5b823561160381611adc565b91506020838101356001600160401b0381111561161f57600080fd5b8401601f8101861361163057600080fd5b803561163e61153882611913565b80828252848201915084840189868560051b870101111561165e57600080fd5b600094505b838510156116885761167481611592565b835260019490940193918501918501611663565b5080955050505050509250929050565b600080604083850312156116ab57600080fd5b82356116b681611adc565b946020939093013593505050565b600080604083850312156116d757600080fd5b82516001600160401b03808211156116ee57600080fd5b818501915085601f83011261170257600080fd5b8151602061171261153883611913565b8083825282820191508286018a848660051b890101111561173257600080fd5b600096505b8487101561175e57805161174a81611af4565b835260019690960195918301918301611737565b509188015191965090935050508082111561177857600080fd5b5061178585828601611517565b9150509250929050565b6000806000606084860312156117a457600080fd5b83356001600160801b03811681146117bb57600080fd5b925060208401356117cb81611af4565b929592945050506040919091013590565b6000602082840312156117ee57600080fd5b5035919050565b60006020828403121561180757600080fd5b5051919050565b60008060006060848603121561182357600080fd5b8335925060208401356117cb81611af4565b60006020828403121561184757600080fd5b61077182611592565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156118d757835163ffffffff16835292840192918401916001016118b5565b50909695505050505050565b604051601f8201601f191681016001600160401b038111828210171561190b5761190b611ac6565b604052919050565b60006001600160401b0382111561192c5761192c611ac6565b5060051b60200190565b6000821982111561194957611949611a84565b500190565b60008261195d5761195d611a9a565b600160ff1b82146000198414161561197757611977611a84565b500590565b60008261198b5761198b611a9a565b500490565b60008160001904831182151516156119aa576119aa611a84565b500290565b60008160060b8360060b6000811281667fffffffffffff19018312811516156119da576119da611a84565b81667fffffffffffff0183138116156119f5576119f5611a84565b5090039392505050565b600082821015611a1157611a11611a84565b500390565b600082611a2557611a25611a9a565b500690565b60008160020b627fffff19811415611a4457611a44611a84565b60000392915050565b6000600160ff1b821415611a6357611a63611a84565b5060000390565b60008160060b667fffffffffffff19811415611a4457611a445b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611af157600080fd5b50565b8060060b8114611af157600080fdfea26469706673582212201ce9813d9e2811d4cdcbc439195c497ca5249aa81ce2d1ba00c2a042ea7184df64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x2AF8 PUSH1 0x2 SSTORE PUSH2 0x2EE0 PUSH1 0x3 SSTORE PUSH9 0xAD78EBC5AC6200000 PUSH1 0x4 SSTORE PUSH2 0xC350 PUSH1 0x5 SSTORE PUSH1 0x6 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH2 0x258 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1E6E CODESIZE SUB DUP1 PUSH3 0x1E6E DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x64 SWAP2 PUSH3 0x2ED JUMP JUMPDEST DUP2 DUP2 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x8E JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH5 0x100000000 SWAP3 DUP6 AND SWAP3 SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0xED PUSH20 0x11B7A6BC0259ED6CF9DB8F499988F9ECC7167BF5 PUSH3 0xF7 JUMP JUMPDEST POP POP POP POP PUSH3 0x325 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x166 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x18C SWAP2 SWAP1 PUSH3 0x2C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x207 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x22D SWAP2 SWAP1 PUSH3 0x2C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH3 0x246 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH3 0x265 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7C395FED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP1 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x2E6 DUP3 PUSH3 0x2AB JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x301 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x30C DUP4 PUSH3 0x2AB JUMP JUMPDEST SWAP2 POP PUSH3 0x31C PUSH1 0x20 DUP5 ADD PUSH3 0x2AB JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x1B39 DUP1 PUSH3 0x335 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x185 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x696A437B GT PUSH2 0xDF JUMPI DUP1 PUSH4 0x696A437B EQ PUSH2 0x2C4 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x2E7 JUMPI DUP1 PUSH4 0x8561579C EQ PUSH2 0x314 JUMPI DUP1 PUSH4 0x9AAAD679 EQ PUSH2 0x31D JUMPI DUP1 PUSH4 0xA0D27107 EQ PUSH2 0x342 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0xAB5DCE00 EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0xAB8CEDC5 EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0xB2E0DF96 EQ PUSH2 0x38E JUMPI DUP1 PUSH4 0xB93F5AF0 EQ PUSH2 0x3A1 JUMPI DUP1 PUSH4 0xC84993AF EQ PUSH2 0x3B4 JUMPI DUP1 PUSH4 0xCA4F2803 EQ PUSH2 0x3C7 JUMPI DUP1 PUSH4 0xDC686D91 EQ PUSH2 0x3E8 JUMPI DUP1 PUSH4 0xED1BD76C EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x433 JUMPI DUP1 PUSH4 0xFE10D774 EQ PUSH2 0x446 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5E0B9A0 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0xC525835 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x117CFC1B EQ PUSH2 0x1D0 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x2248E82D EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x21E JUMPI DUP1 PUSH4 0x25F09E61 EQ PUSH2 0x226 JUMPI DUP1 PUSH4 0x2742B9E7 EQ PUSH2 0x22F JUMPI DUP1 PUSH4 0x289ADB44 EQ PUSH2 0x238 JUMPI DUP1 PUSH4 0x37090C2F EQ PUSH2 0x24B JUMPI DUP1 PUSH4 0x3CC7AB30 EQ PUSH2 0x254 JUMPI DUP1 PUSH4 0x3FACF242 EQ PUSH2 0x267 JUMPI DUP1 PUSH4 0x435B21C1 EQ PUSH2 0x270 JUMPI DUP1 PUSH4 0x516C3323 EQ PUSH2 0x29E JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x2B1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1A5 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1B2 SWAP2 SWAP1 PUSH2 0x1850 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1CE PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0x459 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x1A5 SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x1F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x4C0 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1698 JUMP JUMPDEST PUSH2 0x53B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B2 JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x56E JUMP JUMPDEST PUSH2 0x210 PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0x210 PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x246 CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0x5FA JUMP JUMPDEST PUSH2 0x210 PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x262 CALLDATASIZE PUSH1 0x4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x65A JUMP JUMPDEST PUSH2 0x210 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x283 PUSH2 0x27E CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0x6E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x1B2 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x2AC CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0x713 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x1A5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2D7 PUSH2 0x2D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x778 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0x306 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1B2 SWAP3 SWAP2 SWAP1 PUSH2 0x187E JUMP JUMPDEST PUSH2 0x210 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x32D SWAP1 PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B2 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x350 CALLDATASIZE PUSH1 0x4 PUSH2 0x180E JUMP JUMPDEST PUSH2 0x7FE JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x83A JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x376 CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0x8B0 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x389 CALLDATASIZE PUSH1 0x4 PUSH2 0x178F JUMP JUMPDEST PUSH2 0x910 JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x39C CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0x9B4 JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x3AF CALLDATASIZE PUSH1 0x4 PUSH2 0x1835 JUMP JUMPDEST PUSH2 0xA14 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x3C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0xA87 JUMP JUMPDEST PUSH2 0x3DA PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0xA99 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1B2 SWAP3 SWAP2 SWAP1 PUSH2 0x1864 JUMP JUMPDEST PUSH2 0x3FB PUSH2 0x3F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E5 JUMP JUMPDEST PUSH2 0xB87 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x6 SWAP5 DUP6 SIGNEXTEND DUP2 MSTORE SWAP3 SWAP1 SWAP4 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD PUSH2 0x1B2 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0xC92 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1A5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x454 CALLDATASIZE PUSH1 0x4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0xDED JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x484 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x919FDAAAC0F59C6BC7EEEF4F975D6163475220F1E4820D0BCE99C84C51CAC1D SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4F4 DUP2 PUSH2 0xE8B JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH32 0x554C636366D5FC882A9AB4B7B9D5181781D1A7076ABE50ED410365620DCF4108 SWAP2 PUSH2 0x4B5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 PUSH2 0x187E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x54A PUSH2 0x2AC DUP6 PUSH2 0xDED JUMP JUMPDEST SWAP1 POP PUSH2 0x566 PUSH2 0x2710 PUSH2 0x55C DUP4 DUP7 PUSH2 0x1990 JUMP JUMPDEST PUSH2 0x42E SWAP2 SWAP1 PUSH2 0x197C JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x599 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x5F0 SWAP2 PUSH2 0x1850 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x625 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xED847BDBAB1A30BECEE18585F23C759BD06156561390D2E7FBFFD18E74B56C9B SWAP1 PUSH1 0x20 ADD PUSH2 0x4B5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x685 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND DUP3 MUL SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xCF744E4FC39D49B6D8103035078629B8A3BE95ADC007B0D663E96BDFF777B10A SWAP4 PUSH2 0x4B5 SWAP4 SWAP3 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 PUSH2 0x1850 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x6FB PUSH8 0xDE0B6B3A7640000 PUSH2 0xC92 JUMP JUMPDEST SWAP2 POP PUSH2 0x706 DUP5 PUSH2 0x713 JUMP JUMPDEST PUSH1 0x5 SLOAD SWAP1 SWAP6 SWAP3 SWAP5 POP SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x721 DUP3 PUSH1 0x4 SLOAD PUSH2 0x1035 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 PUSH2 0x765 PUSH1 0x2 SLOAD PUSH1 0x4 SLOAD DUP6 PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH2 0x73F SWAP2 SWAP1 PUSH2 0x19FF JUMP JUMPDEST PUSH2 0x749 SWAP2 SWAP1 PUSH2 0x1990 JUMP JUMPDEST PUSH2 0x753 SWAP2 SWAP1 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x760 SWAP2 SWAP1 PUSH2 0x1936 JUMP JUMPDEST PUSH2 0x104B JUMP JUMPDEST SWAP1 POP PUSH2 0x771 BASEFEE DUP3 PUSH2 0x1990 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x786 DUP5 PUSH2 0xA99 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 EQ ISZERO PUSH2 0x7BA JUMPI POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 EQ PUSH2 0x7F7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7D7C8F27 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x817 PUSH2 0x812 DUP5 PUSH1 0x6 DUP8 SWAP1 SIGNEXTEND PUSH2 0x194E JUMP JUMPDEST PUSH2 0x105B JUMP JUMPDEST SWAP1 POP PUSH2 0x831 PUSH1 0x1 PUSH1 0x60 SHL DUP7 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1469 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x865 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x4B5 SWAP1 DUP4 SWAP1 PUSH2 0x1850 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xEAC367D684B6AC6C6AE7E3E852C06F17E6354E0F1E7122832C3E6D17E0A2B71E SWAP1 PUSH1 0x20 ADD PUSH2 0x4B5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x924 PUSH2 0x812 DUP5 PUSH1 0x6 DUP8 SWAP1 SIGNEXTEND PUSH2 0x194E JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND GT PUSH2 0x974 JUMPI PUSH1 0x0 PUSH2 0x952 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 PUSH2 0x1990 JUMP JUMPDEST SWAP1 POP PUSH2 0x96C PUSH1 0x1 PUSH1 0xC0 SHL DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP4 PUSH2 0x1469 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x9AC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x98E PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 PUSH1 0x1 PUSH1 0x40 SHL PUSH2 0x1469 JUMP JUMPDEST SWAP1 POP PUSH2 0x9A8 PUSH1 0x1 PUSH1 0x80 SHL DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP4 PUSH2 0x1469 JUMP JUMPDEST SWAP3 POP POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9DF JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xA1292B4E7A0D916CCFD2BC83858B05F328E344D1F0F507D97AC66723AC7C2AAA SWAP1 PUSH1 0x20 ADD PUSH2 0x4B5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA3F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC806E26FB64E3A95F4B70ABF4D87280555696244D01068B5F45B0E515ACEB1DE SWAP1 PUSH1 0x20 ADD PUSH2 0x4B5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA93 ORIGIN DUP4 PUSH2 0x53B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAE9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0D SWAP2 SWAP1 PUSH2 0x15C8 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB5A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB7E SWAP2 SWAP1 PUSH2 0x15C8 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x883BDBFD DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBB8 SWAP2 SWAP1 PUSH2 0x1899 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0xC05 JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xC02 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x16C4 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0xC3F JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0xC33 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC38 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP PUSH2 0xC8B JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xC52 JUMPI PUSH2 0xC52 PUSH2 0x1AB0 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP5 POP PUSH1 0x1 DUP3 MLOAD GT ISZERO PUSH2 0xC84 JUMPI DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xC79 JUMPI PUSH2 0xC79 PUSH2 0x1AB0 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x6 SLOAD DUP3 MLOAD SWAP3 SWAP4 POP PUSH4 0xFFFFFFFF AND SWAP2 DUP4 SWAP2 POP PUSH1 0x1 SWAP1 DUP2 LT PUSH2 0xCD6 JUMPI PUSH2 0xCD6 PUSH2 0x1AB0 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x883BDBFD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x883BDBFD SWAP1 PUSH2 0xD1C SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1899 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD48 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xD70 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x16C4 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xD88 JUMPI PUSH2 0xD88 PUSH2 0x1AB0 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xDA3 JUMPI PUSH2 0xDA3 PUSH2 0x1AB0 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xDB5 SWAP2 SWAP1 PUSH2 0x19AF JUMP JUMPDEST PUSH1 0x7 SLOAD SWAP1 SWAP2 POP PUSH2 0x831 SWAP1 DUP7 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xDDD JUMPI PUSH2 0xDD8 DUP4 PUSH2 0x1A6A JUMP JUMPDEST PUSH2 0xDDF JUMP JUMPDEST DUP3 JUMPDEST PUSH1 0x6 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x910 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA39744B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA39744B5 SWAP1 PUSH2 0xE3B SWAP1 DUP6 SWAP1 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 SWAP1 PUSH1 0x4 ADD PUSH2 0x1864 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE67 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA93 SWAP2 SWAP1 PUSH2 0x17F5 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEF8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF1C SWAP2 SWAP1 PUSH2 0x15C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF95 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFB9 SWAP2 SWAP1 PUSH2 0x15C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xFD1 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xFEF JUMPI PUSH1 0x40 MLOAD PUSH4 0x7C395FED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP1 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1044 JUMPI DUP2 PUSH2 0x771 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT ISZERO PUSH2 0x1044 JUMPI DUP2 PUSH2 0x771 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH2 0x1072 JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0x107F JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0x107F SWAP1 PUSH2 0x1A4D JUMP JUMPDEST SWAP1 POP PUSH2 0x108E PUSH3 0xD89E7 NOT PUSH2 0x1A2A JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH2 0x10C8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH2 0x10DC JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH2 0x10EE JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH2 0x1123 JUMPI PUSH1 0x80 PUSH2 0x111E DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH2 0x114D JUMPI PUSH1 0x80 PUSH2 0x1148 DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH2 0x1177 JUMPI PUSH1 0x80 PUSH2 0x1172 DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH2 0x11A1 JUMPI PUSH1 0x80 PUSH2 0x119C DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH2 0x11CB JUMPI PUSH1 0x80 PUSH2 0x11C6 DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH2 0x11F5 JUMPI PUSH1 0x80 PUSH2 0x11F0 DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH2 0x121F JUMPI PUSH1 0x80 PUSH2 0x121A DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH2 0x124A JUMPI PUSH1 0x80 PUSH2 0x1245 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH2 0x1275 JUMPI PUSH1 0x80 PUSH2 0x1270 DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH2 0x12A0 JUMPI PUSH1 0x80 PUSH2 0x129B DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH2 0x12CB JUMPI PUSH1 0x80 PUSH2 0x12C6 DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH2 0x12F6 JUMPI PUSH1 0x80 PUSH2 0x12F1 DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH2 0x1321 JUMPI PUSH1 0x80 PUSH2 0x131C DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH2 0x134C JUMPI PUSH1 0x80 PUSH2 0x1347 DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH2 0x1377 JUMPI PUSH1 0x80 PUSH2 0x1372 DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH2 0x13A3 JUMPI PUSH1 0x80 PUSH2 0x139E DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH2 0x13CE JUMPI PUSH1 0x80 PUSH2 0x13C9 DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH2 0x13F8 JUMPI PUSH1 0x80 PUSH2 0x13F3 DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH2 0x1420 JUMPI PUSH1 0x80 PUSH2 0x141B DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH2 0x143B JUMPI PUSH2 0x1438 DUP2 PUSH1 0x0 NOT PUSH2 0x197C JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x1449 PUSH1 0x1 PUSH1 0x20 SHL DUP3 PUSH2 0x1A16 JUMP JUMPDEST ISZERO PUSH2 0x1455 JUMPI PUSH1 0x1 PUSH2 0x1458 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x566 SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH2 0x1936 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x14A3 JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x1498 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x771 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x14AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1528 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 PUSH2 0x153D PUSH2 0x1538 DUP4 PUSH2 0x1913 JUMP JUMPDEST PUSH2 0x18E3 JUMP JUMPDEST DUP1 DUP4 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 POP DUP3 DUP7 ADD DUP8 DUP5 DUP7 PUSH1 0x5 SHL DUP10 ADD ADD GT ISZERO PUSH2 0x155D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1585 JUMPI DUP2 MLOAD PUSH2 0x1573 DUP2 PUSH2 0x1ADC JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1560 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x15A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x15BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x771 DUP2 PUSH2 0x1ADC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x15DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x771 DUP2 PUSH2 0x1ADC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x15F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1603 DUP2 PUSH2 0x1ADC JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x161F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 ADD PUSH1 0x1F DUP2 ADD DUP7 SGT PUSH2 0x1630 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x163E PUSH2 0x1538 DUP3 PUSH2 0x1913 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE DUP5 DUP3 ADD SWAP2 POP DUP5 DUP5 ADD DUP10 DUP7 DUP6 PUSH1 0x5 SHL DUP8 ADD ADD GT ISZERO PUSH2 0x165E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP5 POP JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x1688 JUMPI PUSH2 0x1674 DUP2 PUSH2 0x1592 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP6 ADD SWAP2 DUP6 ADD PUSH2 0x1663 JUMP JUMPDEST POP DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x16AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x16B6 DUP2 PUSH2 0x1ADC JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x16D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x16EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1702 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 PUSH2 0x1712 PUSH2 0x1538 DUP4 PUSH2 0x1913 JUMP JUMPDEST DUP1 DUP4 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 POP DUP3 DUP7 ADD DUP11 DUP5 DUP7 PUSH1 0x5 SHL DUP10 ADD ADD GT ISZERO PUSH2 0x1732 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP7 POP JUMPDEST DUP5 DUP8 LT ISZERO PUSH2 0x175E JUMPI DUP1 MLOAD PUSH2 0x174A DUP2 PUSH2 0x1AF4 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x1737 JUMP JUMPDEST POP SWAP2 DUP9 ADD MLOAD SWAP2 SWAP7 POP SWAP1 SWAP4 POP POP POP DUP1 DUP3 GT ISZERO PUSH2 0x1778 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1785 DUP6 DUP3 DUP7 ADD PUSH2 0x1517 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x17A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x17BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x17CB DUP2 PUSH2 0x1AF4 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x17EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1807 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1823 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x17CB DUP2 PUSH2 0x1AF4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1847 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x771 DUP3 PUSH2 0x1592 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x18D7 JUMPI DUP4 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x18B5 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x190B JUMPI PUSH2 0x190B PUSH2 0x1AC6 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x192C JUMPI PUSH2 0x192C PUSH2 0x1AC6 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1949 JUMPI PUSH2 0x1949 PUSH2 0x1A84 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x195D JUMPI PUSH2 0x195D PUSH2 0x1A9A JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ PUSH1 0x0 NOT DUP5 EQ AND ISZERO PUSH2 0x1977 JUMPI PUSH2 0x1977 PUSH2 0x1A84 JUMP JUMPDEST POP SDIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x198B JUMPI PUSH2 0x198B PUSH2 0x1A9A JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x19AA JUMPI PUSH2 0x19AA PUSH2 0x1A84 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x19DA JUMPI PUSH2 0x19DA PUSH2 0x1A84 JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x19F5 JUMPI PUSH2 0x19F5 PUSH2 0x1A84 JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1A11 JUMPI PUSH2 0x1A11 PUSH2 0x1A84 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1A25 JUMPI PUSH2 0x1A25 PUSH2 0x1A9A JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH2 0x1A44 JUMPI PUSH2 0x1A44 PUSH2 0x1A84 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH2 0x1A63 JUMPI PUSH2 0x1A63 PUSH2 0x1A84 JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x1A44 JUMPI PUSH2 0x1A44 JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1AF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 PUSH1 0x6 SIGNEXTEND DUP2 EQ PUSH2 0x1AF1 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHR 0xE9 DUP2 RETURNDATASIZE SWAP15 0x28 GT 0xD4 0xCD 0xCB 0xC4 CODECOPY NOT 0x5C 0x49 PUSH29 0xA5249AA81CE2D1BA00C2A042EA7184DF64736F6C634300080700330000 ",
              "sourceMap": "2559:4308:18:-:0;;;851:6:19;816:41;;939:6;904:41;;1029:9;992:46;;1124:6;1085:45;;1177:49;;;-1:-1:-1;;1177:49:19;1216:10;1177:49;;;2626:101:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2701:9;2712:11;;-1:-1:-1;;;;;357:25:28;;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;-1:-1:-1;;;;;422:24:28;;;;;;1504:8:19::1;:20:::0;;-1:-1:-1;;;;;;;;1504:20:19::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;1530:60:::1;1547:42;1530:16;:60::i;:::-;1422:173:::0;;2626:101:18;;2559:4308;;3117:338:19;3180:18;628:42;-1:-1:-1;;;;;3201:45:19;3216:12;-1:-1:-1;;;;;3201:35:19;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3201:45:19;;3180:66;;3252:18;628:42;-1:-1:-1;;;;;3273:45:19;3288:12;-1:-1:-1;;;;;3273:35:19;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3273:45:19;;3252:66;;3330:13;3329:14;:32;;;;;3348:13;3347:14;3329:32;3325:62;;;3370:17;;-1:-1:-1;;;3370:17:19;;;;;;;;;;;3325:62;-1:-1:-1;3409:41:19;;;;;;;;;-1:-1:-1;;;;;3409:41:19;;;;;;;;;;;;;;;;;3394:12;:56;;-1:-1:-1;;;;;;3394:56:19;;;;-1:-1:-1;;;3394:56:19;;;;;;;;;3117:338::o;14:177:84:-;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:208::-;266:6;319:2;307:9;298:7;294:23;290:32;287:52;;;335:1;332;325:12;287:52;358:40;388:9;358:40;:::i;:::-;348:50;196:208;-1:-1:-1;;;196:208:84:o;409:293::-;488:6;496;549:2;537:9;528:7;524:23;520:32;517:52;;;565:1;562;555:12;517:52;588:40;618:9;588:40;:::i;:::-;578:50;;647:49;692:2;681:9;677:18;647:49;:::i;:::-;637:59;;409:293;;;;;:::o;:::-;2559:4308:18;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@BOOST_BASE_2981": {
                  "entryPoint": null,
                  "id": 2981,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@KP3R_2976": {
                  "entryPoint": null,
                  "id": 2976,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_getBasefee_2955": {
                  "entryPoint": null,
                  "id": 2955,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_setKp3rWethPool_3206": {
                  "entryPoint": 3723,
                  "id": 3206,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 1390,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bonds_2581": {
                  "entryPoint": 3565,
                  "id": 2581,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getKP3RsAtTick_2864": {
                  "entryPoint": 2046,
                  "id": 2864,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@getPaymentParams_2824": {
                  "entryPoint": 1765,
                  "id": 2824,
                  "parameterSlots": 1,
                  "returnSlots": 3
                },
                "@getPoolTokens_2695": {
                  "entryPoint": 2713,
                  "id": 2695,
                  "parameterSlots": 1,
                  "returnSlots": 2
                },
                "@getQuoteAtTick_2945": {
                  "entryPoint": 2320,
                  "id": 2945,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@getRewardAmountFor_2612": {
                  "entryPoint": 1339,
                  "id": 2612,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@getRewardAmount_2628": {
                  "entryPoint": 2695,
                  "id": 2628,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getRewardBoostFor_2671": {
                  "entryPoint": 1811,
                  "id": 2671,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getSqrtRatioAtTick_5048": {
                  "entryPoint": 4187,
                  "id": 5048,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@isKP3RToken0_2734": {
                  "entryPoint": 1912,
                  "id": 2734,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@keep3rV2_3010": {
                  "entryPoint": null,
                  "id": 3010,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@kp3rWethPool_3015": {
                  "entryPoint": null,
                  "id": 3015,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@maxBoost_2991": {
                  "entryPoint": null,
                  "id": 2991,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@max_1252": {
                  "entryPoint": 4171,
                  "id": 1252,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@minBoost_2986": {
                  "entryPoint": null,
                  "id": 2986,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@min_1270": {
                  "entryPoint": 4149,
                  "id": 1270,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@mulDiv_4263": {
                  "entryPoint": 5225,
                  "id": 4263,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@observe_2794": {
                  "entryPoint": 2951,
                  "id": 2794,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@quoteTwapTime_3006": {
                  "entryPoint": null,
                  "id": 3006,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@quote_2563": {
                  "entryPoint": 3218,
                  "id": 2563,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@setGovernance_5308": {
                  "entryPoint": 2106,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV2_3127": {
                  "entryPoint": 1626,
                  "id": 3127,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_3055": {
                  "entryPoint": 1216,
                  "id": 3055,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setMaxBoost_3091": {
                  "entryPoint": 2484,
                  "id": 3091,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setMinBoost_3073": {
                  "entryPoint": 1113,
                  "id": 3073,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setQuoteTwapTime_3163": {
                  "entryPoint": 2580,
                  "id": 3163,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setTargetBond_3109": {
                  "entryPoint": 2224,
                  "id": 3109,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setWorkExtraGas_3145": {
                  "entryPoint": 1530,
                  "id": 3145,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@targetBond_2996": {
                  "entryPoint": null,
                  "id": 2996,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@workExtraGas_3001": {
                  "entryPoint": null,
                  "id": 3001,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_array_uint160_dyn_fromMemory": {
                  "entryPoint": 5399,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 5547,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 5576,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_array$_t_uint32_$dyn_memory_ptr": {
                  "entryPoint": 5605,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 5784,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_array$_t_int56_$dyn_memory_ptrt_array$_t_uint160_$dyn_memory_ptr_fromMemory": {
                  "entryPoint": 5828,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_uint128t_int56t_uint256": {
                  "entryPoint": 6031,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 6108,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256_fromMemory": {
                  "entryPoint": 6133,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256t_int56t_uint256": {
                  "entryPoint": 6158,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_uint32": {
                  "entryPoint": 6197,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_uint32": {
                  "entryPoint": 5522,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 6224,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": {
                  "entryPoint": 6244,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed": {
                  "entryPoint": 6270,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_uint32_$dyn_memory_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 6297,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_int56_t_int56_t_bool__to_t_int56_t_int56_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "allocate_memory": {
                  "entryPoint": 6371,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "array_allocation_size_array_int56_dyn": {
                  "entryPoint": 6419,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 6454,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_int256": {
                  "entryPoint": 6478,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 6524,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 6544,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_int56": {
                  "entryPoint": 6575,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 6655,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "mod_t_uint256": {
                  "entryPoint": 6678,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "negate_t_int24": {
                  "entryPoint": 6698,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "negate_t_int256": {
                  "entryPoint": 6733,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "negate_t_int56": {
                  "entryPoint": 6762,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 6788,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x12": {
                  "entryPoint": 6810,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x32": {
                  "entryPoint": 6832,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": 6854,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_address": {
                  "entryPoint": 6876,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "validator_revert_int56": {
                  "entryPoint": 6900,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:11520:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "89:668:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "138:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "147:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "150:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "140:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "140:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "140:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "117:6:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "125:4:84",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "113:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "113:17:84"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "132:3:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "109:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "109:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "102:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "102:35:84"
                              },
                              "nodeType": "YulIf",
                              "src": "99:55:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "163:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "179:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "173:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "173:13:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "167:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "195:14:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "205:4:84",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "199:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "218:69:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_array_int56_dyn",
                                      "nodeType": "YulIdentifier",
                                      "src": "245:37:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "245:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "229:15:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "229:58:84"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "222:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "296:16:84",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "309:3:84"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "300:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "328:3:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "333:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "321:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "321:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "321:15:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "345:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "356:3:84"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "361:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "352:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "352:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "345:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "373:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "388:6:84"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "396:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "384:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "384:15:84"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "377:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "453:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "462:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "465:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "455:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "455:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "455:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "422:6:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "434:1:84",
                                                "type": "",
                                                "value": "5"
                                              },
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "437:2:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "430:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "430:10:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "418:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "418:23:84"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "443:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "414:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "414:32:84"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "448:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "411:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "411:41:84"
                              },
                              "nodeType": "YulIf",
                              "src": "408:61:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "478:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "487:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "482:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "542:186:84",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "556:23:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "575:3:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "569:5:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "569:10:84"
                                    },
                                    "variables": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulTypedName",
                                        "src": "560:5:84",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "617:5:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "validator_revert_address",
                                        "nodeType": "YulIdentifier",
                                        "src": "592:24:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "592:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "592:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "643:3:84"
                                        },
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "648:5:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "636:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "636:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "636:18:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "667:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "678:3:84"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "683:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "674:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "674:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "667:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "699:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "710:3:84"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "715:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "706:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "706:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "699:3:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "508:1:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "511:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "505:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "505:9:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "515:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "517:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "526:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "529:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "522:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "522:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "517:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "501:3:84",
                                "statements": []
                              },
                              "src": "497:231:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "737:14:84",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "746:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "737:5:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_array_uint160_dyn_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "63:6:84",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "71:3:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "79:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:743:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "810:115:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "820:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "842:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "829:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "829:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "820:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "903:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "912:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "915:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "905:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "905:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "905:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "871:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "882:5:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "889:10:84",
                                            "type": "",
                                            "value": "0xffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "878:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "878:22:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "868:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "868:33:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "861:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "861:41:84"
                              },
                              "nodeType": "YulIf",
                              "src": "858:61:84"
                            }
                          ]
                        },
                        "name": "abi_decode_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "789:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "800:5:84",
                            "type": ""
                          }
                        ],
                        "src": "762:163:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1000:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1046:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1055:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1058:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1048:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1048:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1048:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1021:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1030:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1017:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1017:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1042:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1013:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1013:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1010:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1071:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1097:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1084:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1084:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1075:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1141:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1116:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1116:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1116:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1156:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1166:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1156:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "966:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "977:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "989:6:84",
                            "type": ""
                          }
                        ],
                        "src": "930:247:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1263:170:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1309:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1318:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1321:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1311:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1311:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1311:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1284:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1293:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1280:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1280:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1305:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1276:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1276:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1273:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1334:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1353:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1347:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1347:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1338:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1397:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1372:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1372:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1372:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1412:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1422:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1412:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1229:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1240:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1252:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1182:251:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1549:928:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1595:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1604:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1607:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1597:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1597:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1597:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1570:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1579:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1566:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1566:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1591:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1562:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1562:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1559:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1620:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1646:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1633:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1633:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1624:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1690:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1665:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1665:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1665:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1705:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1715:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1705:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1729:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1739:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1733:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1750:46:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1781:9:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1792:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1777:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1777:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1764:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1764:32:84"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1754:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1839:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1848:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1851:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1841:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1841:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1841:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1811:6:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1819:18:84",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1808:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1808:30:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1805:50:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1864:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1878:9:84"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1889:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1874:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1874:22:84"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1868:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1944:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1953:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1956:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1946:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1946:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1946:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1923:2:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1927:4:84",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1919:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1919:13:84"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1934:7:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1915:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1915:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1908:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1908:35:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1905:55:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1969:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1992:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1979:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1979:16:84"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1973:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2004:69:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "2069:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_array_int56_dyn",
                                      "nodeType": "YulIdentifier",
                                      "src": "2031:37:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2031:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2015:15:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2015:58:84"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "2008:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2082:16:84",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "2095:3:84"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2086:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "2114:3:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2119:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2107:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2107:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2107:15:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2131:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "2142:3:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2147:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2138:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2138:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "2131:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2159:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2174:2:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2178:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2170:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2170:11:84"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "2163:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2235:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2244:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2247:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2237:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2237:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2237:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2204:2:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2212:1:84",
                                                "type": "",
                                                "value": "5"
                                              },
                                              {
                                                "name": "_3",
                                                "nodeType": "YulIdentifier",
                                                "src": "2215:2:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "2208:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2208:10:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2200:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2200:19:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2221:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2196:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2196:28:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2226:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2193:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2193:41:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2190:61:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2260:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2269:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "2264:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2324:123:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "2345:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "name": "src",
                                              "nodeType": "YulIdentifier",
                                              "src": "2368:3:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "abi_decode_uint32",
                                            "nodeType": "YulIdentifier",
                                            "src": "2350:17:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2350:22:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2338:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2338:35:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2338:35:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "2386:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "2397:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2402:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2393:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2393:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "2386:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "2418:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "2429:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2434:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2425:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2425:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "2418:3:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "2290:1:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2293:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2287:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2287:9:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "2297:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "2299:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "2308:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2311:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2304:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2304:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "2299:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "2283:3:84",
                                "statements": []
                              },
                              "src": "2279:168:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2456:15:84",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "2466:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2456:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_array$_t_uint32_$dyn_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1507:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1518:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1530:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1538:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1438:1039:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2569:228:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2615:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2624:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2627:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2617:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2617:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2617:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2590:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2599:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2586:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2586:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2611:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2582:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2582:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2579:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2640:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2666:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2653:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2653:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2644:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2710:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2685:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2685:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2685:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2725:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2735:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2725:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2749:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2776:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2787:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2772:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2772:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2759:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2759:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2749:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2527:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2538:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2550:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2558:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2482:315:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2948:1068:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2994:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3003:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3006:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2996:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2996:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2996:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2969:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2978:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2965:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2965:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2990:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2961:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2961:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2958:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3019:30:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3039:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3033:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3033:16:84"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "3023:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3058:28:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3068:18:84",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3062:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3113:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3122:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3125:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3115:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3115:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3115:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "3101:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3109:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3098:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3098:14:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3095:34:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3138:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3152:9:84"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "3163:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3148:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3148:22:84"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "3142:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3218:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3227:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3230:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3220:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3220:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3220:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "3197:2:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3201:4:84",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3193:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3193:13:84"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3208:7:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "3189:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3189:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "3182:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3182:35:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3179:55:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3243:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "3259:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3253:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3253:9:84"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "3247:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3271:14:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3281:4:84",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "3275:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3294:69:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "3359:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_array_int56_dyn",
                                      "nodeType": "YulIdentifier",
                                      "src": "3321:37:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3321:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3305:15:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3305:58:84"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "3298:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3372:16:84",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "3385:3:84"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3376:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "3404:3:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "3409:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3397:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3397:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3397:15:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3421:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "3432:3:84"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "3437:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3428:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3428:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "3421:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3449:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "3464:2:84"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "3468:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3460:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3460:11:84"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "3453:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3525:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3534:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3537:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3527:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3527:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3527:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "3494:2:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3502:1:84",
                                                "type": "",
                                                "value": "5"
                                              },
                                              {
                                                "name": "_3",
                                                "nodeType": "YulIdentifier",
                                                "src": "3505:2:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "3498:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3498:10:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3490:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3490:19:84"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "3511:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3486:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3486:28:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3516:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3483:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3483:41:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3480:61:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3550:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3559:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "3554:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3614:184:84",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "3628:23:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "3647:3:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "3641:5:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3641:10:84"
                                    },
                                    "variables": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulTypedName",
                                        "src": "3632:5:84",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "3687:5:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "validator_revert_int56",
                                        "nodeType": "YulIdentifier",
                                        "src": "3664:22:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3664:29:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3664:29:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "3713:3:84"
                                        },
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "3718:5:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3706:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3706:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3706:18:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3737:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "3748:3:84"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "3753:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3744:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3744:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "3737:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3769:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "3780:3:84"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "3785:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3776:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3776:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "3769:3:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "3580:1:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "3583:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3577:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3577:9:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "3587:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3589:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "3598:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3601:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3594:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3594:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "3589:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "3573:3:84",
                                "statements": []
                              },
                              "src": "3569:229:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3807:15:84",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "3817:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3807:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3831:41:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3857:9:84"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "3868:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3853:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3853:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3847:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3847:25:84"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3835:8:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3901:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3910:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3913:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3903:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3903:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3903:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3887:8:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3897:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3884:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3884:16:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3881:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3926:84:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3980:9:84"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3991:8:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3976:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3976:24:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4002:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_uint160_dyn_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3936:39:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3936:74:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3926:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_int56_$dyn_memory_ptrt_array$_t_uint160_$dyn_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2906:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2917:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2929:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2937:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2802:1214:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4123:389:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4144:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4153:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4140:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4140:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4165:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4136:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4136:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4133:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4194:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4220:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4207:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4207:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4198:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4293:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4302:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4305:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4295:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4295:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4295:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "4252:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "4263:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "4278:3:84",
                                                    "type": "",
                                                    "value": "128"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "4283:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4274:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4274:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4287:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "4270:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4270:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "4259:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4259:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "4249:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4249:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "4242:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4242:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4239:70:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4318:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4328:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4318:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4342:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4374:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4385:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4370:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4370:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4357:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4357:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4346:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4421:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_int56",
                                  "nodeType": "YulIdentifier",
                                  "src": "4398:22:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4398:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4398:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4438:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "4448:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4438:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4464:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4491:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4502:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4487:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4487:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4474:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4474:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4464:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint128t_int56t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4073:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4084:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4096:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4104:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4112:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4021:491:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4587:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4633:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4642:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4645:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4635:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4635:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4635:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4608:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4617:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4604:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4604:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4629:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4600:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4600:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4597:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4658:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4681:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4668:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4668:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4658:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4553:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4564:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4576:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4517:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4783:103:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4829:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4838:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4841:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4831:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4831:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4831:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4804:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4813:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4800:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4800:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4825:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4796:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4796:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4793:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4854:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4870:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4864:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4864:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4854:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4749:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4760:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4772:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4702:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4993:277:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5039:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5048:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5051:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5041:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5041:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5041:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5014:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5023:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5010:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5010:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5035:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5006:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5006:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5003:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5064:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5087:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5074:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5074:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5064:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5106:45:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5136:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5147:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5132:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5132:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5119:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5119:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5110:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5183:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_int56",
                                  "nodeType": "YulIdentifier",
                                  "src": "5160:22:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5160:29:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5160:29:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5198:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5208:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5198:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5222:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5249:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5260:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5245:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5245:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5232:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5232:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5222:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_int56t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4943:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4954:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4966:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4974:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4982:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4891:379:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5344:115:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5390:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5399:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5402:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5392:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5392:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5392:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5365:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5374:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5361:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5361:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5386:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5357:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5357:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5354:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5415:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5443:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "5425:17:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5425:28:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5415:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5310:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5321:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5333:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5275:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5565:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5575:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5587:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5598:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5583:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5583:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5575:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5617:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5632:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5648:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5653:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "5644:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5644:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5657:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "5640:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5640:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5628:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5628:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5610:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5610:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5610:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5534:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5545:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5556:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5464:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5801:175:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5811:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5823:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5834:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5819:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5819:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5811:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5846:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5864:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5869:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "5860:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5860:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5873:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "5856:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5856:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5850:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5891:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5906:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5914:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5902:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5902:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5884:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5884:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5884:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5938:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5949:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5934:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5934:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5958:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5966:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5954:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5954:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5927:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5927:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5927:43:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5762:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5773:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5781:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5792:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5672:304:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6104:161:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6114:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6126:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6137:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6122:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6122:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6114:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6156:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6171:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6187:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6192:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "6183:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6183:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6196:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "6179:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6179:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6167:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6167:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6149:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6149:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6149:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6220:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6231:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6216:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6216:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "6250:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "6243:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6243:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "6236:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6236:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6209:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6209:50:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6209:50:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6065:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6076:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6084:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6095:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5981:284:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6419:498:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6429:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6439:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6433:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6450:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6468:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6479:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6464:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6464:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6454:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6498:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6509:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6491:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6491:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6491:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6521:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "6532:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "6525:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6547:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6567:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6561:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6561:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6551:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6590:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6598:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6583:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6583:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6583:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6614:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6625:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6636:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6621:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6621:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "6614:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6648:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6666:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6674:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6662:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6662:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "6652:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6686:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6695:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6690:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6754:137:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "6775:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6790:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "6784:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6784:13:84"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "6799:10:84",
                                              "type": "",
                                              "value": "0xffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "6780:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6780:30:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6768:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6768:43:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6768:43:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6824:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "6835:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "6840:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6831:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6831:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6824:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6856:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "6870:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "6878:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6866:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6866:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6856:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6716:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6719:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6713:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6713:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "6727:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6729:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "6738:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6741:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6734:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6734:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "6729:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6709:3:84",
                                "statements": []
                              },
                              "src": "6705:186:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6900:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "6908:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6900:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_uint32_$dyn_memory_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6388:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6399:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6410:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6270:647:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7017:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7027:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7039:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7050:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7035:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7035:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7027:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7069:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "7094:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "7087:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7087:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "7080:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7080:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7062:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7062:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7062:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6986:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6997:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7008:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6922:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7257:208:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7267:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7279:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7290:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7275:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7267:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7309:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7331:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7334:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "7320:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7320:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7302:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7302:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7302:40:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7362:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7373:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7358:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7358:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7389:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7392:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "7378:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7378:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7351:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7351:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7351:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7420:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7431:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7416:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7416:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value2",
                                            "nodeType": "YulIdentifier",
                                            "src": "7450:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "7443:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7443:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "7436:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7436:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7409:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7409:50:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7409:50:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_int56_t_int56_t_bool__to_t_int56_t_int56_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7210:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7221:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7229:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7237:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7248:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7114:351:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7644:150:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7661:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7672:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7654:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7654:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7654:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7695:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7706:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7691:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7691:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7711:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7684:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7684:29:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7684:29:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7733:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7744:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7729:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7729:18:84"
                                  },
                                  {
                                    "hexValue": "54",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7749:3:84",
                                    "type": "",
                                    "value": "T"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7722:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7722:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7722:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7762:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7774:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7785:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7770:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7770:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7762:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7621:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7635:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7470:324:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7900:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7910:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7922:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7933:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7918:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7918:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7910:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7952:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7963:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7945:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7945:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7945:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7869:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7880:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7891:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7799:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8138:162:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8148:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8160:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8171:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8156:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8156:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8148:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8190:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8201:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8183:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8183:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8183:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8228:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8239:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8224:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8224:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8244:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8217:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8217:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8217:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8271:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8282:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8267:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8267:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "8287:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8260:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8260:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8260:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8091:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8102:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8110:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8118:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8129:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7981:319:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8404:93:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8414:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8426:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8437:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8422:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8422:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8414:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8456:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8471:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8479:10:84",
                                        "type": "",
                                        "value": "0xffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8467:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8467:23:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8449:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8449:42:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8449:42:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8373:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8384:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8395:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8305:192:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8547:230:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8557:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8573:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8567:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8567:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "8557:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8585:58:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "8607:6:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "size",
                                            "nodeType": "YulIdentifier",
                                            "src": "8623:4:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "8629:2:84",
                                            "type": "",
                                            "value": "31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "8619:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8619:13:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "8638:2:84",
                                            "type": "",
                                            "value": "31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "8634:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8634:7:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8615:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8615:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8603:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8603:40:84"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "8589:10:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8718:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "8720:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8720:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8720:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "8661:10:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8673:18:84",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "8658:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8658:34:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "8697:10:84"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "8709:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "8694:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8694:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "8655:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8655:62:84"
                              },
                              "nodeType": "YulIf",
                              "src": "8652:88:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8756:2:84",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "8760:10:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8749:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8749:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8749:22:84"
                            }
                          ]
                        },
                        "name": "allocate_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "8527:4:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "8536:6:84",
                            "type": ""
                          }
                        ],
                        "src": "8502:275:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8849:114:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8893:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "8895:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8895:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8895:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8865:6:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8873:18:84",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8862:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8862:30:84"
                              },
                              "nodeType": "YulIf",
                              "src": "8859:56:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8924:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8940:1:84",
                                        "type": "",
                                        "value": "5"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "8943:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8936:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8936:14:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8952:4:84",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8932:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8932:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "8924:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_allocation_size_array_int56_dyn",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "8829:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "8840:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8782:181:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9016:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9043:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "9045:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9045:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9045:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9032:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "9039:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "9035:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9035:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9029:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9029:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9026:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9074:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9085:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9088:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9081:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9081:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "9074:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "8999:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9002:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "9008:3:84",
                            "type": ""
                          }
                        ],
                        "src": "8968:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9146:148:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9169:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "9171:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9171:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9171:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9166:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "9159:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9159:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9156:35:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9242:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "9244:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9244:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9244:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "x",
                                        "nodeType": "YulIdentifier",
                                        "src": "9210:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9217:3:84",
                                            "type": "",
                                            "value": "255"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9222:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "9213:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9213:11:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "9207:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9207:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "9230:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9237:1:84",
                                            "type": "",
                                            "value": "0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "9233:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9233:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "9227:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9227:13:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "9203:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9203:38:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9200:64:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9273:15:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9283:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9286:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sdiv",
                                  "nodeType": "YulIdentifier",
                                  "src": "9278:4:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9278:10:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "9273:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_int256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9131:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9134:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "9140:1:84",
                            "type": ""
                          }
                        ],
                        "src": "9101:193:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9345:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9368:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "9370:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9370:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9370:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9365:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "9358:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9358:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9355:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9399:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9408:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9411:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "9404:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9404:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "9399:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9330:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9333:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "9339:1:84",
                            "type": ""
                          }
                        ],
                        "src": "9299:120:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9476:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9535:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "9537:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9537:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9537:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "9507:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "9500:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9500:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "9493:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9493:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "9515:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9526:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "9522:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9522:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "9530:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "9518:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9518:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "9512:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9512:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "9489:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9489:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9486:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9566:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9581:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9584:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "9577:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9577:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "9566:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9455:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9458:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "9464:7:84",
                            "type": ""
                          }
                        ],
                        "src": "9424:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9644:312:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9654:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9676:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9679:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "9665:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9665:16:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9658:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9690:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9712:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9715:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "9701:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9701:16:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9694:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9726:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9740:3:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9745:1:84",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9736:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9736:11:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9730:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9818:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "9820:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9820:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9820:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9770:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "9763:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9763:10:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9779:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9792:16:84",
                                                "type": "",
                                                "value": "0x7fffffffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "9788:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9788:21:84"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "9811:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "9784:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9784:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "9775:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9775:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "9759:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9759:58:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9756:84:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9898:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "9900:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9900:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9900:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9856:2:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9864:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9873:16:84",
                                            "type": "",
                                            "value": "0x7fffffffffffff"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "9891:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "9869:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9869:26:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sgt",
                                      "nodeType": "YulIdentifier",
                                      "src": "9860:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9860:36:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "9852:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9852:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9849:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9929:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9941:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9946:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "9937:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9937:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "9929:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9626:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9629:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "9635:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9597:359:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10010:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10032:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10034:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10034:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10034:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10026:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10029:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10023:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10023:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10020:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10063:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10075:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10078:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "10071:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10071:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "10063:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9992:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9995:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "10001:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9961:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10129:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10152:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "10154:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10154:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10154:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10149:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10142:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10142:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10139:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10183:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10192:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10195:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "10188:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10188:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "10183:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10114:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10117:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "10123:1:84",
                            "type": ""
                          }
                        ],
                        "src": "10091:112:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10250:142:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10260:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10286:1:84",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "10289:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "10275:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10275:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10264:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10333:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10335:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10335:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10335:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10310:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10323:7:84",
                                        "type": "",
                                        "value": "8388607"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "10319:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10319:12:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "10307:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10307:25:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10304:51:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10364:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10375:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10378:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "10371:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10371:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "10364:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "10232:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "10242:3:84",
                            "type": ""
                          }
                        ],
                        "src": "10208:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10440:93:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10476:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10478:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10478:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10478:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "10456:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10467:3:84",
                                        "type": "",
                                        "value": "255"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10472:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "10463:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10463:11:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "10453:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10453:22:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10450:48:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10507:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10518:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "10521:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "10514:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10514:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "10507:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "10422:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "10432:3:84",
                            "type": ""
                          }
                        ],
                        "src": "10397:136:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10580:151:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10590:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10616:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "10619:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "10605:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10605:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10594:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10672:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10674:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10674:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10674:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10640:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10653:16:84",
                                        "type": "",
                                        "value": "0x7fffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "10649:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10649:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "10637:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10637:34:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10634:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10703:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10714:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10717:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "10710:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10710:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "10703:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "10562:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "10572:3:84",
                            "type": ""
                          }
                        ],
                        "src": "10538:193:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10768:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10785:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10792:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10797:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "10788:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10788:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10778:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10778:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10778:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10825:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10828:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10818:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10818:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10818:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10849:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10852:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "10842:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10842:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10842:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "10736:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10900:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10917:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10924:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10929:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "10920:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10920:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10910:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10910:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10910:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10957:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10960:4:84",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10950:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10950:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10950:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10981:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10984:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "10974:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10974:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10974:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "10868:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11032:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11049:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11056:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11061:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11052:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11052:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11042:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11042:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11042:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11089:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11092:4:84",
                                    "type": "",
                                    "value": "0x32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11082:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11082:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11082:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11113:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11116:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "11106:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11106:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11106:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x32",
                        "nodeType": "YulFunctionDefinition",
                        "src": "11000:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11164:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11181:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11188:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11193:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11184:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11184:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11174:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11174:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11174:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11221:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11224:4:84",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11214:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11214:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11214:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11245:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11248:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "11238:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11238:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11238:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "11132:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11309:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11373:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11382:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11385:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11375:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11375:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11375:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "11332:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "11343:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "11358:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "11363:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11354:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "11354:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11367:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "11350:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11350:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "11339:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11339:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "11329:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11329:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "11322:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11322:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11319:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "11298:5:84",
                            "type": ""
                          }
                        ],
                        "src": "11264:131:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11443:75:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11496:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11505:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11508:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11498:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11498:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11498:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "11466:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "11484:1:84",
                                            "type": "",
                                            "value": "6"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "11487:5:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "11473:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11473:20:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "11463:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11463:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "11456:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11456:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11453:59:84"
                            }
                          ]
                        },
                        "name": "validator_revert_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "11432:5:84",
                            "type": ""
                          }
                        ],
                        "src": "11400:118:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_array_uint160_dyn_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_int56_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let src := add(offset, _2)\n        if gt(add(add(offset, shl(5, _1)), _2), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, 1) }\n        {\n            let value := mload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, _2)\n            src := add(src, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_array$_t_uint32_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        let dst := allocate_memory(array_allocation_size_array_int56_dyn(_3))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, _1)\n        let src := add(_2, _1)\n        if gt(add(add(_2, shl(5, _3)), _1), dataEnd) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _3) { i := add(i, 1) }\n        {\n            mstore(dst, abi_decode_uint32(src))\n            dst := add(dst, _1)\n            src := add(src, _1)\n        }\n        value1 := dst_1\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_array$_t_int56_$dyn_memory_ptrt_array$_t_uint160_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        let _4 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_int56_dyn(_3))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, _4)\n        let src := add(_2, _4)\n        if gt(add(add(_2, shl(5, _3)), _4), dataEnd) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _3) { i := add(i, 1) }\n        {\n            let value := mload(src)\n            validator_revert_int56(value)\n            mstore(dst, value)\n            dst := add(dst, _4)\n            src := add(src, _4)\n        }\n        value0 := dst_1\n        let offset_1 := mload(add(headStart, _4))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_array_uint160_dyn_fromMemory(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_uint128t_int56t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(128, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_int56(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_int56t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_int56(value)\n        value1 := value\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n    }\n    function abi_encode_tuple_t_array$_t_uint32_$dyn_memory_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_int56_t_int56_t_bool__to_t_int56_t_int56_t_bool__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, signextend(6, value0))\n        mstore(add(headStart, 32), signextend(6, value1))\n        mstore(add(headStart, 64), iszero(iszero(value2)))\n    }\n    function abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 1)\n        mstore(add(headStart, 64), \"T\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_array_int56_dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_int256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        if and(eq(x, shl(255, 1)), eq(y, not(0))) { panic_error_0x11() }\n        r := sdiv(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_int56(x, y) -> diff\n    {\n        let x_1 := signextend(6, x)\n        let y_1 := signextend(6, y)\n        let _1 := slt(y_1, 0)\n        if and(iszero(_1), slt(x_1, add(not(0x7fffffffffffff), y_1))) { panic_error_0x11() }\n        if and(_1, sgt(x_1, add(0x7fffffffffffff, y_1))) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function negate_t_int24(value) -> ret\n    {\n        let value_1 := signextend(2, value)\n        if eq(value_1, not(8388607)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function negate_t_int256(value) -> ret\n    {\n        if eq(value, shl(255, 1)) { panic_error_0x11() }\n        ret := sub(0, value)\n    }\n    function negate_t_int56(value) -> ret\n    {\n        let value_1 := signextend(6, value)\n        if eq(value_1, not(0x7fffffffffffff)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function validator_revert_int56(value)\n    {\n        if iszero(eq(value, signextend(6, value))) { revert(0, 0) }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106101855760003560e01c8063696a437b116100df578063696a437b146102c45780637b40c913146102e75780638561579c146103145780639aaad6791461031d578063a0d2710714610342578063ab033ea914610355578063ab5dce0014610368578063ab8cedc51461037b578063b2e0df961461038e578063b93f5af0146103a1578063c84993af146103b4578063ca4f2803146103c7578063dc686d91146103e8578063ed1bd76c14610420578063f39c38a014610433578063fe10d7741461044657600080fd5b806305e0b9a01461018a5780630c525835146101bb578063117cfc1b146101d0578063160e1e31146101ea5780632248e82d146101fd578063238efcbc1461021e57806325f09e61146102265780632742b9e71461022f578063289adb441461023857806337090c2f1461024b5780633cc7ab30146102545780633facf24214610267578063435b21c114610270578063516c33231461029e5780635aa6e675146102b1575b600080fd5b6101a5731ceb5cb57c4d4e2b2433641b95dd330a33185a4481565b6040516101b29190611850565b60405180910390f35b6101ce6101c93660046117dc565b610459565b005b6006546101a590600160201b90046001600160a01b031681565b6101ce6101f83660046115ab565b6104c0565b61021061020b366004611698565b61053b565b6040519081526020016101b2565b6101ce61056e565b61021061271081565b61021060045481565b6101ce6102463660046117dc565b6105fa565b61021060035481565b6101ce6102623660046115ab565b61065a565b61021060055481565b61028361027e3660046117dc565b6106e5565b604080519384526020840192909252908201526060016101b2565b6102106102ac3660046117dc565b610713565b6000546101a5906001600160a01b031681565b6102d76102d23660046115ab565b610778565b60405190151581526020016101b2565b600754610306906001600160a01b03811690600160a01b900460ff1682565b6040516101b292919061187e565b61021060025481565b60065461032d9063ffffffff1681565b60405163ffffffff90911681526020016101b2565b61021061035036600461180e565b6107fe565b6101ce6103633660046115ab565b61083a565b6101ce6103763660046117dc565b6108b0565b61021061038936600461178f565b610910565b6101ce61039c3660046117dc565b6109b4565b6101ce6103af366004611835565b610a14565b6102106103c23660046117dc565b610a87565b6103da6103d53660046115ab565b610a99565b6040516101b2929190611864565b6103fb6103f63660046115e5565b610b87565b60408051600694850b81529290930b60208301521515918101919091526060016101b2565b61021061042e3660046117dc565b610c92565b6001546101a5906001600160a01b031681565b6102106104543660046115ab565b610ded565b6000546001600160a01b03163314610484576040516354348f0360e01b815260040160405180910390fd5b60028190556040518181527f0919fdaaac0f59c6bc7eeef4f975d6163475220f1e4820d0bce99c84c51cac1d906020015b60405180910390a150565b6000546001600160a01b031633146104eb576040516354348f0360e01b815260040160405180910390fd5b6104f481610e8b565b6007546040517f554c636366d5fc882a9ab4b7b9d5181781d1a7076abe50ed410365620dcf4108916104b5916001600160a01b03821691600160a01b900460ff169061187e565b60008061054a6102ac85610ded565b905061056661271061055c8386611990565b61042e919061197c565b949350505050565b6001546001600160a01b0316331461059957604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916105f091611850565b60405180910390a1565b6000546001600160a01b03163314610625576040516354348f0360e01b815260040160405180910390fd5b60058190556040518181527fed847bdbab1a30becee18585f23c759bd06156561390d2e7fbffd18e74b56c9b906020016104b5565b6000546001600160a01b03163314610685576040516354348f0360e01b815260040160405180910390fd5b60068054600160201b600160c01b031916600160201b6001600160a01b03848116820292909217928390556040517fcf744e4fc39d49b6d8103035078629b8a3be95adc007b0d663e96bdff777b10a936104b59392900490911690611850565b60008060006106fb670de0b6b3a7640000610c92565b915061070684610713565b6005549095929450925050565b600061072182600454611035565b915060006107656002546004548560025460035461073f91906119ff565b6107499190611990565b610753919061197c565b6002546107609190611936565b61104b565b90506107714882611990565b9392505050565b600080600061078684610a99565b90925090506001600160a01b038216731ceb5cb57c4d4e2b2433641b95dd330a33185a4414156107ba575060019392505050565b6001600160a01b038116731ceb5cb57c4d4e2b2433641b95dd330a33185a44146107f757604051637d7c8f2760e11b815260040160405180910390fd5b5050919050565b60008061081761081284600687900b61194e565b61105b565b9050610831600160601b86836001600160a01b0316611469565b95945050505050565b6000546001600160a01b03163314610865576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906104b5908390611850565b6000546001600160a01b031633146108db576040516354348f0360e01b815260040160405180910390fd5b60048190556040518181527feac367d684b6ac6c6ae7e3e852c06f17e6354e0f1e7122832c3e6d17e0a2b71e906020016104b5565b60008061092461081284600687900b61194e565b90506001600160801b036001600160a01b038216116109745760006109526001600160a01b03831680611990565b905061096c600160c01b876001600160801b031683611469565b9250506109ac565b600061098e6001600160a01b03831680600160401b611469565b90506109a8600160801b876001600160801b031683611469565b9250505b509392505050565b6000546001600160a01b031633146109df576040516354348f0360e01b815260040160405180910390fd5b60038190556040518181527fa1292b4e7a0d916ccfd2bc83858b05f328e344d1f0f507d97ac66723ac7c2aaa906020016104b5565b6000546001600160a01b03163314610a3f576040516354348f0360e01b815260040160405180910390fd5b6006805463ffffffff191663ffffffff83169081179091556040519081527fc806e26fb64e3a95f4b70abf4d87280555696244d01068b5f45b0e515aceb1de906020016104b5565b6000610a93328361053b565b92915050565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad557600080fd5b505afa158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d91906115c8565b836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610b4657600080fd5b505afa158015610b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7e91906115c8565b91509150915091565b6000806000846001600160a01b031663883bdbfd856040518263ffffffff1660e01b8152600401610bb89190611899565b60006040518083038186803b158015610bd057600080fd5b505afa925050508015610c0557506040513d6000823e601f3d908101601f19168201604052610c0291908101906116c4565b60015b610c3f573d808015610c33576040519150601f19603f3d011682016040523d82523d6000602084013e610c38565b606091505b5050610c8b565b81600081518110610c5257610c52611ab0565b60200260200101519450600182511115610c845781600181518110610c7957610c79611ab0565b602002602001015193505b6001925050505b9250925092565b604080516002808252606082018352600092839291906020830190803683375050600654825192935063ffffffff16918391506001908110610cd657610cd6611ab0565b63ffffffff9092166020928302919091019091015260075460405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd90610d1c908590600401611899565b60006040518083038186803b158015610d3457600080fd5b505afa158015610d48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d7091908101906116c4565b509050600081600181518110610d8857610d88611ab0565b602002602001015182600081518110610da357610da3611ab0565b6020026020010151610db591906119af565b600754909150610831908690600160a01b900460ff16610ddd57610dd883611a6a565b610ddf565b825b60065463ffffffff16610910565b60065460405163a39744b560e01b8152600091600160201b90046001600160a01b03169063a39744b590610e3b908590731ceb5cb57c4d4e2b2433641b95dd330a33185a4490600401611864565b60206040518083038186803b158015610e5357600080fd5b505afa158015610e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9391906117f5565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ee457600080fd5b505afa158015610ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1c91906115c8565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610f8157600080fd5b505afa158015610f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb991906115c8565b6001600160a01b031614905081158015610fd1575080155b15610fef57604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b60008183106110445781610771565b5090919050565b6000818310156110445781610771565b60008060008360020b12611072578260020b61107f565b8260020b61107f90611a4d565b905061108e620d89e719611a2a565b60020b8111156110c85760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b6000600182166110dc57600160801b6110ee565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561112357608061111e826ffff97272373d413259a46990580e213a611990565b901c90505b600482161561114d576080611148826ffff2e50f5f656932ef12357cf3c7fdcc611990565b901c90505b6008821615611177576080611172826fffe5caca7e10e4e61c3624eaa0941cd0611990565b901c90505b60108216156111a157608061119c826fffcb9843d60f6159c9db58835c926644611990565b901c90505b60208216156111cb5760806111c6826fff973b41fa98c081472e6896dfb254c0611990565b901c90505b60408216156111f55760806111f0826fff2ea16466c96a3843ec78b326b52861611990565b901c90505b608082161561121f57608061121a826ffe5dee046a99a2a811c461f1969c3053611990565b901c90505b61010082161561124a576080611245826ffcbe86c7900a88aedcffc83b479aa3a4611990565b901c90505b610200821615611275576080611270826ff987a7253ac413176f2b074cf7815e54611990565b901c90505b6104008216156112a057608061129b826ff3392b0822b70005940c7a398e4b70f3611990565b901c90505b6108008216156112cb5760806112c6826fe7159475a2c29b7443b29c7fa6e889d9611990565b901c90505b6110008216156112f65760806112f1826fd097f3bdfd2022b8845ad8f792aa5825611990565b901c90505b61200082161561132157608061131c826fa9f746462d870fdf8a65dc1f90e061e5611990565b901c90505b61400082161561134c576080611347826f70d869a156d2a1b890bb3df62baf32f7611990565b901c90505b618000821615611377576080611372826f31be135f97d08fd981231505542fcfa6611990565b901c90505b620100008216156113a357608061139e826f09aa508b5b7a84e1c677de54f3e99bc9611990565b901c90505b620200008216156113ce5760806113c9826e5d6af8dedb81196699c329225ee604611990565b901c90505b620400008216156113f85760806113f3826d2216e584f5fa1ea926041bedfe98611990565b901c90505b6208000082161561142057608061141b826b048a170391f7dc42444e8fa2611990565b901c90505b60008460020b131561143b576114388160001961197c565b90505b611449600160201b82611a16565b15611455576001611458565b60005b6105669060ff16602083901c611936565b6000808060001985870985870292508281108382030391505080600014156114a3576000841161149857600080fd5b508290049050610771565b8084116114af57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082601f83011261152857600080fd5b8151602061153d61153883611913565b6118e3565b80838252828201915082860187848660051b890101111561155d57600080fd5b60005b8581101561158557815161157381611adc565b84529284019290840190600101611560565b5090979650505050505050565b803563ffffffff811681146115a657600080fd5b919050565b6000602082840312156115bd57600080fd5b813561077181611adc565b6000602082840312156115da57600080fd5b815161077181611adc565b600080604083850312156115f857600080fd5b823561160381611adc565b91506020838101356001600160401b0381111561161f57600080fd5b8401601f8101861361163057600080fd5b803561163e61153882611913565b80828252848201915084840189868560051b870101111561165e57600080fd5b600094505b838510156116885761167481611592565b835260019490940193918501918501611663565b5080955050505050509250929050565b600080604083850312156116ab57600080fd5b82356116b681611adc565b946020939093013593505050565b600080604083850312156116d757600080fd5b82516001600160401b03808211156116ee57600080fd5b818501915085601f83011261170257600080fd5b8151602061171261153883611913565b8083825282820191508286018a848660051b890101111561173257600080fd5b600096505b8487101561175e57805161174a81611af4565b835260019690960195918301918301611737565b509188015191965090935050508082111561177857600080fd5b5061178585828601611517565b9150509250929050565b6000806000606084860312156117a457600080fd5b83356001600160801b03811681146117bb57600080fd5b925060208401356117cb81611af4565b929592945050506040919091013590565b6000602082840312156117ee57600080fd5b5035919050565b60006020828403121561180757600080fd5b5051919050565b60008060006060848603121561182357600080fd5b8335925060208401356117cb81611af4565b60006020828403121561184757600080fd5b61077182611592565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156118d757835163ffffffff16835292840192918401916001016118b5565b50909695505050505050565b604051601f8201601f191681016001600160401b038111828210171561190b5761190b611ac6565b604052919050565b60006001600160401b0382111561192c5761192c611ac6565b5060051b60200190565b6000821982111561194957611949611a84565b500190565b60008261195d5761195d611a9a565b600160ff1b82146000198414161561197757611977611a84565b500590565b60008261198b5761198b611a9a565b500490565b60008160001904831182151516156119aa576119aa611a84565b500290565b60008160060b8360060b6000811281667fffffffffffff19018312811516156119da576119da611a84565b81667fffffffffffff0183138116156119f5576119f5611a84565b5090039392505050565b600082821015611a1157611a11611a84565b500390565b600082611a2557611a25611a9a565b500690565b60008160020b627fffff19811415611a4457611a44611a84565b60000392915050565b6000600160ff1b821415611a6357611a63611a84565b5060000390565b60008160060b667fffffffffffff19811415611a4457611a445b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611af157600080fd5b50565b8060060b8114611af157600080fdfea26469706673582212201ce9813d9e2811d4cdcbc439195c497ca5249aa81ce2d1ba00c2a042ea7184df64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x185 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x696A437B GT PUSH2 0xDF JUMPI DUP1 PUSH4 0x696A437B EQ PUSH2 0x2C4 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x2E7 JUMPI DUP1 PUSH4 0x8561579C EQ PUSH2 0x314 JUMPI DUP1 PUSH4 0x9AAAD679 EQ PUSH2 0x31D JUMPI DUP1 PUSH4 0xA0D27107 EQ PUSH2 0x342 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0xAB5DCE00 EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0xAB8CEDC5 EQ PUSH2 0x37B JUMPI DUP1 PUSH4 0xB2E0DF96 EQ PUSH2 0x38E JUMPI DUP1 PUSH4 0xB93F5AF0 EQ PUSH2 0x3A1 JUMPI DUP1 PUSH4 0xC84993AF EQ PUSH2 0x3B4 JUMPI DUP1 PUSH4 0xCA4F2803 EQ PUSH2 0x3C7 JUMPI DUP1 PUSH4 0xDC686D91 EQ PUSH2 0x3E8 JUMPI DUP1 PUSH4 0xED1BD76C EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x433 JUMPI DUP1 PUSH4 0xFE10D774 EQ PUSH2 0x446 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5E0B9A0 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0xC525835 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x117CFC1B EQ PUSH2 0x1D0 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x2248E82D EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x21E JUMPI DUP1 PUSH4 0x25F09E61 EQ PUSH2 0x226 JUMPI DUP1 PUSH4 0x2742B9E7 EQ PUSH2 0x22F JUMPI DUP1 PUSH4 0x289ADB44 EQ PUSH2 0x238 JUMPI DUP1 PUSH4 0x37090C2F EQ PUSH2 0x24B JUMPI DUP1 PUSH4 0x3CC7AB30 EQ PUSH2 0x254 JUMPI DUP1 PUSH4 0x3FACF242 EQ PUSH2 0x267 JUMPI DUP1 PUSH4 0x435B21C1 EQ PUSH2 0x270 JUMPI DUP1 PUSH4 0x516C3323 EQ PUSH2 0x29E JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x2B1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1A5 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1B2 SWAP2 SWAP1 PUSH2 0x1850 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1CE PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0x459 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x1A5 SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x1F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x4C0 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1698 JUMP JUMPDEST PUSH2 0x53B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B2 JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x56E JUMP JUMPDEST PUSH2 0x210 PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0x210 PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x246 CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0x5FA JUMP JUMPDEST PUSH2 0x210 PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x262 CALLDATASIZE PUSH1 0x4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x65A JUMP JUMPDEST PUSH2 0x210 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x283 PUSH2 0x27E CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0x6E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x1B2 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x2AC CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0x713 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x1A5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2D7 PUSH2 0x2D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x778 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0x306 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1B2 SWAP3 SWAP2 SWAP1 PUSH2 0x187E JUMP JUMPDEST PUSH2 0x210 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x32D SWAP1 PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B2 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x350 CALLDATASIZE PUSH1 0x4 PUSH2 0x180E JUMP JUMPDEST PUSH2 0x7FE JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x83A JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x376 CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0x8B0 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x389 CALLDATASIZE PUSH1 0x4 PUSH2 0x178F JUMP JUMPDEST PUSH2 0x910 JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x39C CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0x9B4 JUMP JUMPDEST PUSH2 0x1CE PUSH2 0x3AF CALLDATASIZE PUSH1 0x4 PUSH2 0x1835 JUMP JUMPDEST PUSH2 0xA14 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x3C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0xA87 JUMP JUMPDEST PUSH2 0x3DA PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0xA99 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1B2 SWAP3 SWAP2 SWAP1 PUSH2 0x1864 JUMP JUMPDEST PUSH2 0x3FB PUSH2 0x3F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E5 JUMP JUMPDEST PUSH2 0xB87 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x6 SWAP5 DUP6 SIGNEXTEND DUP2 MSTORE SWAP3 SWAP1 SWAP4 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD PUSH2 0x1B2 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x17DC JUMP JUMPDEST PUSH2 0xC92 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1A5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x454 CALLDATASIZE PUSH1 0x4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0xDED JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x484 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x919FDAAAC0F59C6BC7EEEF4F975D6163475220F1E4820D0BCE99C84C51CAC1D SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4F4 DUP2 PUSH2 0xE8B JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH32 0x554C636366D5FC882A9AB4B7B9D5181781D1A7076ABE50ED410365620DCF4108 SWAP2 PUSH2 0x4B5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 PUSH2 0x187E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x54A PUSH2 0x2AC DUP6 PUSH2 0xDED JUMP JUMPDEST SWAP1 POP PUSH2 0x566 PUSH2 0x2710 PUSH2 0x55C DUP4 DUP7 PUSH2 0x1990 JUMP JUMPDEST PUSH2 0x42E SWAP2 SWAP1 PUSH2 0x197C JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x599 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x5F0 SWAP2 PUSH2 0x1850 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x625 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xED847BDBAB1A30BECEE18585F23C759BD06156561390D2E7FBFFD18E74B56C9B SWAP1 PUSH1 0x20 ADD PUSH2 0x4B5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x685 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND DUP3 MUL SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xCF744E4FC39D49B6D8103035078629B8A3BE95ADC007B0D663E96BDFF777B10A SWAP4 PUSH2 0x4B5 SWAP4 SWAP3 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 PUSH2 0x1850 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x6FB PUSH8 0xDE0B6B3A7640000 PUSH2 0xC92 JUMP JUMPDEST SWAP2 POP PUSH2 0x706 DUP5 PUSH2 0x713 JUMP JUMPDEST PUSH1 0x5 SLOAD SWAP1 SWAP6 SWAP3 SWAP5 POP SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x721 DUP3 PUSH1 0x4 SLOAD PUSH2 0x1035 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 PUSH2 0x765 PUSH1 0x2 SLOAD PUSH1 0x4 SLOAD DUP6 PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH2 0x73F SWAP2 SWAP1 PUSH2 0x19FF JUMP JUMPDEST PUSH2 0x749 SWAP2 SWAP1 PUSH2 0x1990 JUMP JUMPDEST PUSH2 0x753 SWAP2 SWAP1 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x760 SWAP2 SWAP1 PUSH2 0x1936 JUMP JUMPDEST PUSH2 0x104B JUMP JUMPDEST SWAP1 POP PUSH2 0x771 BASEFEE DUP3 PUSH2 0x1990 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x786 DUP5 PUSH2 0xA99 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 EQ ISZERO PUSH2 0x7BA JUMPI POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 EQ PUSH2 0x7F7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7D7C8F27 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x817 PUSH2 0x812 DUP5 PUSH1 0x6 DUP8 SWAP1 SIGNEXTEND PUSH2 0x194E JUMP JUMPDEST PUSH2 0x105B JUMP JUMPDEST SWAP1 POP PUSH2 0x831 PUSH1 0x1 PUSH1 0x60 SHL DUP7 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1469 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x865 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x4B5 SWAP1 DUP4 SWAP1 PUSH2 0x1850 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xEAC367D684B6AC6C6AE7E3E852C06F17E6354E0F1E7122832C3E6D17E0A2B71E SWAP1 PUSH1 0x20 ADD PUSH2 0x4B5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x924 PUSH2 0x812 DUP5 PUSH1 0x6 DUP8 SWAP1 SIGNEXTEND PUSH2 0x194E JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND GT PUSH2 0x974 JUMPI PUSH1 0x0 PUSH2 0x952 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 PUSH2 0x1990 JUMP JUMPDEST SWAP1 POP PUSH2 0x96C PUSH1 0x1 PUSH1 0xC0 SHL DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP4 PUSH2 0x1469 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x9AC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x98E PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 PUSH1 0x1 PUSH1 0x40 SHL PUSH2 0x1469 JUMP JUMPDEST SWAP1 POP PUSH2 0x9A8 PUSH1 0x1 PUSH1 0x80 SHL DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP4 PUSH2 0x1469 JUMP JUMPDEST SWAP3 POP POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9DF JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xA1292B4E7A0D916CCFD2BC83858B05F328E344D1F0F507D97AC66723AC7C2AAA SWAP1 PUSH1 0x20 ADD PUSH2 0x4B5 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA3F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC806E26FB64E3A95F4B70ABF4D87280555696244D01068B5F45B0E515ACEB1DE SWAP1 PUSH1 0x20 ADD PUSH2 0x4B5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA93 ORIGIN DUP4 PUSH2 0x53B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAE9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0D SWAP2 SWAP1 PUSH2 0x15C8 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB5A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB7E SWAP2 SWAP1 PUSH2 0x15C8 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x883BDBFD DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBB8 SWAP2 SWAP1 PUSH2 0x1899 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0xC05 JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xC02 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x16C4 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0xC3F JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0xC33 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC38 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP PUSH2 0xC8B JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xC52 JUMPI PUSH2 0xC52 PUSH2 0x1AB0 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP5 POP PUSH1 0x1 DUP3 MLOAD GT ISZERO PUSH2 0xC84 JUMPI DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xC79 JUMPI PUSH2 0xC79 PUSH2 0x1AB0 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x6 SLOAD DUP3 MLOAD SWAP3 SWAP4 POP PUSH4 0xFFFFFFFF AND SWAP2 DUP4 SWAP2 POP PUSH1 0x1 SWAP1 DUP2 LT PUSH2 0xCD6 JUMPI PUSH2 0xCD6 PUSH2 0x1AB0 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x883BDBFD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x883BDBFD SWAP1 PUSH2 0xD1C SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1899 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD48 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xD70 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x16C4 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xD88 JUMPI PUSH2 0xD88 PUSH2 0x1AB0 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xDA3 JUMPI PUSH2 0xDA3 PUSH2 0x1AB0 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xDB5 SWAP2 SWAP1 PUSH2 0x19AF JUMP JUMPDEST PUSH1 0x7 SLOAD SWAP1 SWAP2 POP PUSH2 0x831 SWAP1 DUP7 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xDDD JUMPI PUSH2 0xDD8 DUP4 PUSH2 0x1A6A JUMP JUMPDEST PUSH2 0xDDF JUMP JUMPDEST DUP3 JUMPDEST PUSH1 0x6 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x910 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA39744B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA39744B5 SWAP1 PUSH2 0xE3B SWAP1 DUP6 SWAP1 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 SWAP1 PUSH1 0x4 ADD PUSH2 0x1864 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE67 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA93 SWAP2 SWAP1 PUSH2 0x17F5 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEF8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF1C SWAP2 SWAP1 PUSH2 0x15C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF95 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFB9 SWAP2 SWAP1 PUSH2 0x15C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0xFD1 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0xFEF JUMPI PUSH1 0x40 MLOAD PUSH4 0x7C395FED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP1 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1044 JUMPI DUP2 PUSH2 0x771 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT ISZERO PUSH2 0x1044 JUMPI DUP2 PUSH2 0x771 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH2 0x1072 JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0x107F JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0x107F SWAP1 PUSH2 0x1A4D JUMP JUMPDEST SWAP1 POP PUSH2 0x108E PUSH3 0xD89E7 NOT PUSH2 0x1A2A JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH2 0x10C8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH2 0x10DC JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH2 0x10EE JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH2 0x1123 JUMPI PUSH1 0x80 PUSH2 0x111E DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH2 0x114D JUMPI PUSH1 0x80 PUSH2 0x1148 DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH2 0x1177 JUMPI PUSH1 0x80 PUSH2 0x1172 DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH2 0x11A1 JUMPI PUSH1 0x80 PUSH2 0x119C DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH2 0x11CB JUMPI PUSH1 0x80 PUSH2 0x11C6 DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH2 0x11F5 JUMPI PUSH1 0x80 PUSH2 0x11F0 DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH2 0x121F JUMPI PUSH1 0x80 PUSH2 0x121A DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH2 0x124A JUMPI PUSH1 0x80 PUSH2 0x1245 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH2 0x1275 JUMPI PUSH1 0x80 PUSH2 0x1270 DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH2 0x12A0 JUMPI PUSH1 0x80 PUSH2 0x129B DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH2 0x12CB JUMPI PUSH1 0x80 PUSH2 0x12C6 DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH2 0x12F6 JUMPI PUSH1 0x80 PUSH2 0x12F1 DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH2 0x1321 JUMPI PUSH1 0x80 PUSH2 0x131C DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH2 0x134C JUMPI PUSH1 0x80 PUSH2 0x1347 DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH2 0x1377 JUMPI PUSH1 0x80 PUSH2 0x1372 DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH2 0x13A3 JUMPI PUSH1 0x80 PUSH2 0x139E DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH2 0x13CE JUMPI PUSH1 0x80 PUSH2 0x13C9 DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH2 0x13F8 JUMPI PUSH1 0x80 PUSH2 0x13F3 DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH2 0x1420 JUMPI PUSH1 0x80 PUSH2 0x141B DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH2 0x1990 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH2 0x143B JUMPI PUSH2 0x1438 DUP2 PUSH1 0x0 NOT PUSH2 0x197C JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x1449 PUSH1 0x1 PUSH1 0x20 SHL DUP3 PUSH2 0x1A16 JUMP JUMPDEST ISZERO PUSH2 0x1455 JUMPI PUSH1 0x1 PUSH2 0x1458 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x566 SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH2 0x1936 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x14A3 JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x1498 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x771 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x14AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1528 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 PUSH2 0x153D PUSH2 0x1538 DUP4 PUSH2 0x1913 JUMP JUMPDEST PUSH2 0x18E3 JUMP JUMPDEST DUP1 DUP4 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 POP DUP3 DUP7 ADD DUP8 DUP5 DUP7 PUSH1 0x5 SHL DUP10 ADD ADD GT ISZERO PUSH2 0x155D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1585 JUMPI DUP2 MLOAD PUSH2 0x1573 DUP2 PUSH2 0x1ADC JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1560 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x15A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x15BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x771 DUP2 PUSH2 0x1ADC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x15DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x771 DUP2 PUSH2 0x1ADC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x15F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1603 DUP2 PUSH2 0x1ADC JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x161F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 ADD PUSH1 0x1F DUP2 ADD DUP7 SGT PUSH2 0x1630 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x163E PUSH2 0x1538 DUP3 PUSH2 0x1913 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE DUP5 DUP3 ADD SWAP2 POP DUP5 DUP5 ADD DUP10 DUP7 DUP6 PUSH1 0x5 SHL DUP8 ADD ADD GT ISZERO PUSH2 0x165E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP5 POP JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x1688 JUMPI PUSH2 0x1674 DUP2 PUSH2 0x1592 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP6 ADD SWAP2 DUP6 ADD PUSH2 0x1663 JUMP JUMPDEST POP DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x16AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x16B6 DUP2 PUSH2 0x1ADC JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x16D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x16EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1702 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 PUSH2 0x1712 PUSH2 0x1538 DUP4 PUSH2 0x1913 JUMP JUMPDEST DUP1 DUP4 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 POP DUP3 DUP7 ADD DUP11 DUP5 DUP7 PUSH1 0x5 SHL DUP10 ADD ADD GT ISZERO PUSH2 0x1732 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP7 POP JUMPDEST DUP5 DUP8 LT ISZERO PUSH2 0x175E JUMPI DUP1 MLOAD PUSH2 0x174A DUP2 PUSH2 0x1AF4 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x1737 JUMP JUMPDEST POP SWAP2 DUP9 ADD MLOAD SWAP2 SWAP7 POP SWAP1 SWAP4 POP POP POP DUP1 DUP3 GT ISZERO PUSH2 0x1778 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1785 DUP6 DUP3 DUP7 ADD PUSH2 0x1517 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x17A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x17BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x17CB DUP2 PUSH2 0x1AF4 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x17EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1807 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1823 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x17CB DUP2 PUSH2 0x1AF4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1847 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x771 DUP3 PUSH2 0x1592 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x18D7 JUMPI DUP4 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x18B5 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x190B JUMPI PUSH2 0x190B PUSH2 0x1AC6 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x192C JUMPI PUSH2 0x192C PUSH2 0x1AC6 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1949 JUMPI PUSH2 0x1949 PUSH2 0x1A84 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x195D JUMPI PUSH2 0x195D PUSH2 0x1A9A JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ PUSH1 0x0 NOT DUP5 EQ AND ISZERO PUSH2 0x1977 JUMPI PUSH2 0x1977 PUSH2 0x1A84 JUMP JUMPDEST POP SDIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x198B JUMPI PUSH2 0x198B PUSH2 0x1A9A JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x19AA JUMPI PUSH2 0x19AA PUSH2 0x1A84 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x19DA JUMPI PUSH2 0x19DA PUSH2 0x1A84 JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x19F5 JUMPI PUSH2 0x19F5 PUSH2 0x1A84 JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1A11 JUMPI PUSH2 0x1A11 PUSH2 0x1A84 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1A25 JUMPI PUSH2 0x1A25 PUSH2 0x1A9A JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH2 0x1A44 JUMPI PUSH2 0x1A44 PUSH2 0x1A84 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH2 0x1A63 JUMPI PUSH2 0x1A63 PUSH2 0x1A84 JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x1A44 JUMPI PUSH2 0x1A44 JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1AF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 PUSH1 0x6 SIGNEXTEND DUP2 EQ PUSH2 0x1AF1 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHR 0xE9 DUP2 RETURNDATASIZE SWAP15 0x28 GT 0xD4 0xCD 0xCB 0xC4 CODECOPY NOT 0x5C 0x49 PUSH29 0xA5249AA81CE2D1BA00C2A042EA7184DF64736F6C634300080700330000 ",
              "sourceMap": "2559:4308:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;588:82:19;;628:42;588:82;;;;;;;;;:::i;:::-;;;;;;;;1890:139;;;;;;:::i;:::-;;:::i;:::-;;1273:32;;;;;-1:-1:-1;;;1273:32:19;;-1:-1:-1;;;;;1273:32:19;;;1641:203;;;;;;:::i;:::-;;:::i;3442:222:18:-;;;;;;:::i;:::-;;:::i;:::-;;;7945:25:84;;;7933:2;7918:18;3442:222:18;7799:177:84;680:175:28;;;:::i;717:52:19:-;;763:6;717:52;;992:46;;;;;;2642:163;;;;;;:::i;:::-;;:::i;904:41::-;;;;;;2457:139;;;;;;:::i;:::-;;:::i;1085:45::-;;;;;;5357:277:18;;;;;;:::i;:::-;;:::i;:::-;;;;8183:25:84;;;8239:2;8224:18;;8217:34;;;;8267:18;;;8260:34;8171:2;8156:18;5357:277:18;7981:319:84;3934:281:18;;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;-1:-1:-1;;;;;199:34:28;;;4471:304:18;;;;;;:::i;:::-;;:::i;:::-;;;7087:14:84;;7080:22;7062:41;;7050:2;7035:18;4471:304:18;6922:187:84;1352:65:19;;;;;-1:-1:-1;;;;;1352:65:19;;;-1:-1:-1;;;1352:65:19;;;;;;;;;;;;;;:::i;816:41::-;;;;;;1177:49;;;;;;;;;;;;8479:10:84;8467:23;;;8449:42;;8437:2;8422:18;1177:49:19;8305:192:84;5670:348:18;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;2260:151:19:-;;;;;;:::i;:::-;;:::i;6054:621:18:-;;;;;;:::i;:::-;;:::i;2075:139:19:-;;;;;;:::i;:::-;;:::i;2851:168::-;;;;;;:::i;:::-;;:::i;3700:198:18:-;;;;;;:::i;:::-;;:::i;4251:184::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4811:510::-;;;;;;:::i;:::-;;:::i;:::-;;;;7331:1:84;7320:21;;;7302:40;;7378:21;;;;7373:2;7358:18;;7351:49;7443:14;7436:22;7416:18;;;7409:50;;;;7290:2;7275:18;4811:510:18;7114:351:84;2763:466:18;;;;;;:::i;:::-;;:::i;268:41:28:-;;;;;-1:-1:-1;;;;;268:41:28;;;3265:141:18;;;;;;:::i;:::-;;:::i;1890:139:19:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1969:8:19::1;:20:::0;;;2000:24:::1;::::0;7945:25:84;;;2000:24:19::1;::::0;7933:2:84;7918:18;2000:24:19::1;;;;;;;;1890:139:::0;:::o;1641:203::-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1727:30:19::1;1744:12;1727:16;:30::i;:::-;1787:12;:24:::0;1768:71:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;1787:24:19;::::1;::::0;-1:-1:-1;;;1813:25:19;::::1;;;::::0;1768:71:::1;:::i;3442:222:18:-:0;3535:13;3556:14;3573:33;3591:14;3597:7;3591:5;:14::i;3573:33::-;3556:50;-1:-1:-1;3620:39:18;763:6:19;3627:17:18;3556:50;3627:8;:17;:::i;:::-;3626:32;;;;:::i;3620:39::-;3612:47;3442:222;-1:-1:-1;;;;3442:222:18:o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;::::1;754:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;2642:163:19:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2729:12:19::1;:28:::0;;;2768:32:::1;::::0;7945:25:84;;;2768:32:19::1;::::0;7933:2:84;7918:18;2768:32:19::1;7799:177:84::0;2457:139:19;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2536:8:19::1;:20:::0;;-1:-1:-1;;;;;;;;2536:20:19::1;-1:-1:-1::0;;;;;;;;2536:20:19;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;2567:24:::1;::::0;::::1;::::0;::::1;::::0;2582:8;;::::1;::::0;;::::1;::::0;2567:24:::1;:::i;5357:277:18:-:0;5454:14;5476:20;5504:14;5548;5554:7;5548:5;:14::i;:::-;5533:29;;5577:25;5595:6;5577:17;:25::i;:::-;5617:12;;5568:34;;5357:277;;-1:-1:-1;5617:12:18;-1:-1:-1;;5357:277:18:o;3934:281::-;4007:20;4044:28;4053:6;4061:10;;4044:8;:28::i;:::-;4035:37;;4078:12;4093:76;4102:8;;4158:10;;4148:6;4136:8;;4125;;:19;;;;:::i;:::-;4124:30;;;;:::i;:::-;4123:45;;;;:::i;:::-;4112:8;;:56;;;;:::i;:::-;4093:8;:76::i;:::-;4078:91;-1:-1:-1;4190:20:18;6847:13;4078:91;4190:20;:::i;:::-;4175:35;3934:281;-1:-1:-1;;;3934:281:18:o;4471:304::-;4538:18;4564:15;4585;4627:20;4641:5;4627:13;:20::i;:::-;4606:41;;-1:-1:-1;4606:41:18;-1:-1:-1;;;;;;4657:15:18;;628:42:19;4657:15:18;4653:118;;;-1:-1:-1;4689:4:18;;4471:304;-1:-1:-1;;;4471:304:18:o;4653:118::-;-1:-1:-1;;;;;4710:15:18;;628:42:19;4710:15:18;4706:65;;4742:22;;-1:-1:-1;;;4742:22:18;;;;;;;;;;;4706:65;4558:217;;4471:304;;;:::o;5670:348::-;5812:19;;5862:75;5896:39;5921:13;5896:39;;;;;:::i;:::-;5862:27;:75::i;:::-;5839:98;;5957:56;-1:-1:-1;;;5982:16:18;6000:12;-1:-1:-1;;;;;5957:56:18;:15;:56::i;:::-;5943:70;5670:348;-1:-1:-1;;;;;5670:348:18:o;485:161:28:-;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;2260:151:19:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2343:10:19::1;:24:::0;;;2378:28:::1;::::0;7945:25:84;;;2378:28:19::1;::::0;7933:2:84;7918:18;2378:28:19::1;7799:177:84::0;6054:621:18;6191:20;;6242:75;6276:39;6301:13;6276:39;;;;;:::i;6242:75::-;6219:98;-1:-1:-1;;;;;;;;;;;6328:33:18;;;6324:347;;6371:17;6391:36;-1:-1:-1;;;;;6391:36:18;;;;:::i;:::-;6371:56;;6450:49;-1:-1:-1;;;6476:11:18;-1:-1:-1;;;;;6450:49:18;6489:9;6450:15;:49::i;:::-;6435:64;;6363:143;6324:347;;;6520:17;6540:52;-1:-1:-1;;;;;6540:52:18;;;-1:-1:-1;;;6540:15:18;:52::i;:::-;6520:72;;6615:49;-1:-1:-1;;;6641:11:18;-1:-1:-1;;;;;6615:49:18;6654:9;6615:15;:49::i;:::-;6600:64;;6512:159;6324:347;6213:462;6054:621;;;;;:::o;2075:139:19:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2154:8:19::1;:20:::0;;;2185:24:::1;::::0;7945:25:84;;;2185:24:19::1;::::0;7933:2:84;7918:18;2185:24:19::1;7799:177:84::0;2851:168:19;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2939:13:19::1;:30:::0;;-1:-1:-1;;2939:30:19::1;;::::0;::::1;::::0;;::::1;::::0;;;2980:34:::1;::::0;8449:42:84;;;2980:34:19::1;::::0;8437:2:84;8422:18;2980:34:19::1;8305:192:84::0;3700:198:18;3775:15;3854:39;3873:9;3884:8;3854:18;:39::i;:::-;3847:46;3700:198;-1:-1:-1;;3700:198:18:o;4251:184::-;4319:15;4336;4382:5;-1:-1:-1;;;;;4367:28:18;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4414:5;-1:-1:-1;;;;;4399:28:18;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4359:71;;;;4251:184;;;:::o;4811:510::-;4925:22;4955;4985:13;5032:5;-1:-1:-1;;;;;5017:29:18;;5047:11;5017:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5017:42:18;;;;;;;;;;;;:::i;:::-;;;5013:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5294:23;5013:304;;;5147:16;5164:1;5147:19;;;;;;;;:::i;:::-;;;;;;;5128:38;;5204:1;5178:16;:23;:27;5174:90;;;5236:16;5253:1;5236:19;;;;;;;;:::i;:::-;;;;;;;5217:38;;5174:90;5282:4;5271:15;;5060:233;;5013:304;4811:510;;;;;:::o;2763:466::-;2879:15;;;2892:1;2879:15;;;;;;;;2822:18;;;;2879:15;2892:1;2879:15;;;;;;;;-1:-1:-1;;2918:13:18;;2900:15;;;;-1:-1:-1;2918:13:18;;;2900:15;;-1:-1:-1;2918:13:18;;2900:15;;;;;;:::i;:::-;:31;;;;:15;;;;;;;;;;;:31;2991:12;:24;2976:62;;-1:-1:-1;;;2976:62:18;;2939:31;;-1:-1:-1;;;;;2991:24:18;;2976:48;;:62;;3025:12;;2976:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2976:62:18;;;;;;;;;;;;:::i;:::-;2938:100;;;3044:17;3086:16;3103:1;3086:19;;;;;;;;:::i;:::-;;;;;;;3064:16;3081:1;3064:19;;;;;;;;:::i;:::-;;;;;;;:41;;;;:::i;:::-;3154:12;:25;3044:61;;-1:-1:-1;3124:100:18;;3147:4;;-1:-1:-1;;;3154:25:18;;;;:54;;3196:12;3197:11;3196:12;:::i;:::-;3154:54;;;3182:11;3154:54;3210:13;;;;3124:14;:100::i;3265:141::-;3371:8;;3363:38;;-1:-1:-1;;;3363:38:18;;3327:21;;-1:-1:-1;;;3371:8:18;;-1:-1:-1;;;;;3371:8:18;;3363:23;;:38;;3387:7;;628:42:19;;3371:8:18;3363:38;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3117:338:19:-;3180:18;628:42;-1:-1:-1;;;;;3201:45:19;3216:12;-1:-1:-1;;;;;3201:35:19;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3201:45:19;;3180:66;;3252:18;628:42;-1:-1:-1;;;;;3273:45:19;3288:12;-1:-1:-1;;;;;3273:35:19;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3273:45:19;;3252:66;;3330:13;3329:14;:32;;;;;3348:13;3347:14;3329:32;3325:62;;;3370:17;;-1:-1:-1;;;3370:17:19;;;;;;;;;;;3325:62;-1:-1:-1;3409:41:19;;;;;;;;;-1:-1:-1;;;;;3409:41:19;;;;;;;;;;;;;;;;;3394:12;:56;;-1:-1:-1;;;;;;3394:56:19;;;;-1:-1:-1;;;3394:56:19;;;;;;;;;3117:338::o;391:104:7:-;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:7;;468:20;-1:-1:-1;391:104:7:o;215:105::-;273:7;304:1;299;:6;;:14;;312:1;299:14;;1363:2473:26;1426:20;1454:15;1479:1;1472:4;:8;;;:57;;1523:4;1516:12;;1472:57;;;1499:4;1492:12;;1491:13;;;:::i;:::-;1454:75;-1:-1:-1;657:9:26;-1:-1:-1;;657:9:26;:::i;:::-;1562:16;;1543:7;:36;;1535:50;;;;-1:-1:-1;;;1535:50:26;;7672:2:84;1535:50:26;;;7654:21:84;7711:1;7691:18;;;7684:29;-1:-1:-1;;;7729:18:84;;;7722:31;7770:18;;1535:50:26;;;;;;;;1592:13;1618:3;1608:13;;:93;;-1:-1:-1;;;1608:93:26;;;1629:34;1608:93;-1:-1:-1;;;;;1592:109:26;;-1:-1:-1;1721:3:26;1711:13;;:18;1707:83;;1787:3;1740:42;:5;1748:34;1740:42;:::i;:::-;1739:51;;1731:59;;1707:83;1810:3;1800:13;;:18;1796:83;;1876:3;1829:42;:5;1837:34;1829:42;:::i;:::-;1828:51;;1820:59;;1796:83;1899:3;1889:13;;:18;1885:83;;1965:3;1918:42;:5;1926:34;1918:42;:::i;:::-;1917:51;;1909:59;;1885:83;1988:4;1978:14;;:19;1974:84;;2055:3;2008:42;:5;2016:34;2008:42;:::i;:::-;2007:51;;1999:59;;1974:84;2078:4;2068:14;;:19;2064:84;;2145:3;2098:42;:5;2106:34;2098:42;:::i;:::-;2097:51;;2089:59;;2064:84;2168:4;2158:14;;:19;2154:84;;2235:3;2188:42;:5;2196:34;2188:42;:::i;:::-;2187:51;;2179:59;;2154:84;2258:4;2248:14;;:19;2244:84;;2325:3;2278:42;:5;2286:34;2278:42;:::i;:::-;2277:51;;2269:59;;2244:84;2348:5;2338:15;;:20;2334:85;;2416:3;2369:42;:5;2377:34;2369:42;:::i;:::-;2368:51;;2360:59;;2334:85;2439:5;2429:15;;:20;2425:85;;2507:3;2460:42;:5;2468:34;2460:42;:::i;:::-;2459:51;;2451:59;;2425:85;2530:5;2520:15;;:20;2516:85;;2598:3;2551:42;:5;2559:34;2551:42;:::i;:::-;2550:51;;2542:59;;2516:85;2621:5;2611:15;;:20;2607:85;;2689:3;2642:42;:5;2650:34;2642:42;:::i;:::-;2641:51;;2633:59;;2607:85;2712:6;2702:16;;:21;2698:86;;2781:3;2734:42;:5;2742:34;2734:42;:::i;:::-;2733:51;;2725:59;;2698:86;2804:6;2794:16;;:21;2790:86;;2873:3;2826:42;:5;2834:34;2826:42;:::i;:::-;2825:51;;2817:59;;2790:86;2896:6;2886:16;;:21;2882:86;;2965:3;2918:42;:5;2926:34;2918:42;:::i;:::-;2917:51;;2909:59;;2882:86;2988:6;2978:16;;:21;2974:86;;3057:3;3010:42;:5;3018:34;3010:42;:::i;:::-;3009:51;;3001:59;;2974:86;3080:7;3070:17;;:22;3066:86;;3149:3;3103:41;:5;3111:33;3103:41;:::i;:::-;3102:50;;3094:58;;3066:86;3172:7;3162:17;;:22;3158:85;;3240:3;3195:40;:5;3203:32;3195:40;:::i;:::-;3194:49;;3186:57;;3158:85;3263:7;3253:17;;:22;3249:83;;3329:3;3286:38;:5;3294:30;3286:38;:::i;:::-;3285:47;;3277:55;;3249:83;3352:7;3342:17;;:22;3338:78;;3413:3;3375:33;:5;3383:25;3375:33;:::i;:::-;3374:42;;3366:50;;3338:78;3434:1;3427:4;:8;;;3423:47;;;3445:25;3465:5;-1:-1:-1;;3445:25:26;:::i;:::-;3437:33;;3423:47;3799:17;-1:-1:-1;;;3799:5:26;:17;:::i;:::-;:22;:30;;3828:1;3799:30;;;3824:1;3799:30;3782:48;;;;3792:2;3783:11;;;3782:48;:::i;735:3600:23:-;833:14;;;-1:-1:-1;;1336:1:23;1333;1326:20;1371:1;1368;1364:9;1355:18;;1418:5;1414:2;1411:13;1403:5;1399:2;1395:14;1391:34;1382:43;;;1501:5;1510:1;1501:10;1497:155;;;1545:1;1531:11;:15;1523:24;;;;;;-1:-1:-1;1588:23:23;;;;-1:-1:-1;1630:13:23;;1497:155;1773:5;1759:11;:19;1751:28;;;;;;2044:17;2114:11;2111:1;2108;2101:25;3338:1;3319;2473;2458:12;;:16;;2457:32;;2575:22;;;;3319:15;;;3318:21;;3557:17;;;3553:21;;3546:28;3613:17;;;3609:21;;3602:28;3670:17;;;3666:21;;3659:28;3727:17;;;3723:21;;3716:28;3784:17;;;3780:21;;3773:28;3842:17;;;3838:21;;;3831:28;2442:12;2923;;;2919:23;;;2915:31;;;2233:20;;;2222:32;;;2970:12;;;;2272:21;;2693:16;;;;2961:21;;;;4292:11;;735:3600;-1:-1:-1;;;;735:3600:23:o;14:743:84:-;79:5;132:3;125:4;117:6;113:17;109:27;99:55;;150:1;147;140:12;99:55;179:6;173:13;205:4;229:58;245:41;283:2;245:41;:::i;:::-;229:58;:::i;:::-;309:3;333:2;328:3;321:15;361:2;356:3;352:12;345:19;;396:2;388:6;384:15;448:3;443:2;437;434:1;430:10;422:6;418:23;414:32;411:41;408:61;;;465:1;462;455:12;408:61;487:1;497:231;511:2;508:1;505:9;497:231;;;575:3;569:10;592:31;617:5;592:31;:::i;:::-;636:18;;674:12;;;;706;;;;529:1;522:9;497:231;;;-1:-1:-1;746:5:84;;14:743;-1:-1:-1;;;;;;;14:743:84:o;762:163::-;829:20;;889:10;878:22;;868:33;;858:61;;915:1;912;905:12;858:61;762:163;;;:::o;930:247::-;989:6;1042:2;1030:9;1021:7;1017:23;1013:32;1010:52;;;1058:1;1055;1048:12;1010:52;1097:9;1084:23;1116:31;1141:5;1116:31;:::i;1182:251::-;1252:6;1305:2;1293:9;1284:7;1280:23;1276:32;1273:52;;;1321:1;1318;1311:12;1273:52;1353:9;1347:16;1372:31;1397:5;1372:31;:::i;1438:1039::-;1530:6;1538;1591:2;1579:9;1570:7;1566:23;1562:32;1559:52;;;1607:1;1604;1597:12;1559:52;1646:9;1633:23;1665:31;1690:5;1665:31;:::i;:::-;1715:5;-1:-1:-1;1739:2:84;1777:18;;;1764:32;-1:-1:-1;;;;;1808:30:84;;1805:50;;;1851:1;1848;1841:12;1805:50;1874:22;;1927:4;1919:13;;1915:27;-1:-1:-1;1905:55:84;;1956:1;1953;1946:12;1905:55;1992:2;1979:16;2015:58;2031:41;2069:2;2031:41;:::i;2015:58::-;2095:3;2119:2;2114:3;2107:15;2147:2;2142:3;2138:12;2131:19;;2178:2;2174;2170:11;2226:7;2221:2;2215;2212:1;2208:10;2204:2;2200:19;2196:28;2193:41;2190:61;;;2247:1;2244;2237:12;2190:61;2269:1;2260:10;;2279:168;2293:2;2290:1;2287:9;2279:168;;;2350:22;2368:3;2350:22;:::i;:::-;2338:35;;2311:1;2304:9;;;;;2393:12;;;;2425;;2279:168;;;2283:3;2466:5;2456:15;;;;;;;1438:1039;;;;;:::o;2482:315::-;2550:6;2558;2611:2;2599:9;2590:7;2586:23;2582:32;2579:52;;;2627:1;2624;2617:12;2579:52;2666:9;2653:23;2685:31;2710:5;2685:31;:::i;:::-;2735:5;2787:2;2772:18;;;;2759:32;;-1:-1:-1;;;2482:315:84:o;2802:1214::-;2929:6;2937;2990:2;2978:9;2969:7;2965:23;2961:32;2958:52;;;3006:1;3003;2996:12;2958:52;3039:9;3033:16;-1:-1:-1;;;;;3109:2:84;3101:6;3098:14;3095:34;;;3125:1;3122;3115:12;3095:34;3163:6;3152:9;3148:22;3138:32;;3208:7;3201:4;3197:2;3193:13;3189:27;3179:55;;3230:1;3227;3220:12;3179:55;3259:2;3253:9;3281:4;3305:58;3321:41;3359:2;3321:41;:::i;3305:58::-;3385:3;3409:2;3404:3;3397:15;3437:2;3432:3;3428:12;3421:19;;3468:2;3464;3460:11;3516:7;3511:2;3505;3502:1;3498:10;3494:2;3490:19;3486:28;3483:41;3480:61;;;3537:1;3534;3527:12;3480:61;3559:1;3550:10;;3569:229;3583:2;3580:1;3577:9;3569:229;;;3647:3;3641:10;3664:29;3687:5;3664:29;:::i;:::-;3706:18;;3601:1;3594:9;;;;;3744:12;;;;3776;;3569:229;;;-1:-1:-1;3853:18:84;;;3847:25;3817:5;;-1:-1:-1;3847:25:84;;-1:-1:-1;;;3884:16:84;;;3881:36;;;3913:1;3910;3903:12;3881:36;;3936:74;4002:7;3991:8;3980:9;3976:24;3936:74;:::i;:::-;3926:84;;;2802:1214;;;;;:::o;4021:491::-;4096:6;4104;4112;4165:2;4153:9;4144:7;4140:23;4136:32;4133:52;;;4181:1;4178;4171:12;4133:52;4207:23;;-1:-1:-1;;;;;4259:31:84;;4249:42;;4239:70;;4305:1;4302;4295:12;4239:70;4328:5;-1:-1:-1;4385:2:84;4370:18;;4357:32;4398:31;4357:32;4398:31;:::i;:::-;4021:491;;4448:7;;-1:-1:-1;;;4502:2:84;4487:18;;;;4474:32;;4021:491::o;4517:180::-;4576:6;4629:2;4617:9;4608:7;4604:23;4600:32;4597:52;;;4645:1;4642;4635:12;4597:52;-1:-1:-1;4668:23:84;;4517:180;-1:-1:-1;4517:180:84:o;4702:184::-;4772:6;4825:2;4813:9;4804:7;4800:23;4796:32;4793:52;;;4841:1;4838;4831:12;4793:52;-1:-1:-1;4864:16:84;;4702:184;-1:-1:-1;4702:184:84:o;4891:379::-;4966:6;4974;4982;5035:2;5023:9;5014:7;5010:23;5006:32;5003:52;;;5051:1;5048;5041:12;5003:52;5087:9;5074:23;5064:33;;5147:2;5136:9;5132:18;5119:32;5160:29;5183:5;5160:29;:::i;5275:184::-;5333:6;5386:2;5374:9;5365:7;5361:23;5357:32;5354:52;;;5402:1;5399;5392:12;5354:52;5425:28;5443:9;5425:28;:::i;5464:203::-;-1:-1:-1;;;;;5628:32:84;;;;5610:51;;5598:2;5583:18;;5464:203::o;5672:304::-;-1:-1:-1;;;;;5902:15:84;;;5884:34;;5954:15;;5949:2;5934:18;;5927:43;5834:2;5819:18;;5672:304::o;5981:284::-;-1:-1:-1;;;;;6167:32:84;;;;6149:51;;6243:14;6236:22;6231:2;6216:18;;6209:50;6137:2;6122:18;;5981:284::o;6270:647::-;6439:2;6491:21;;;6561:13;;6464:18;;;6583:22;;;6410:4;;6439:2;6662:15;;;;6636:2;6621:18;;;6410:4;6705:186;6719:6;6716:1;6713:13;6705:186;;;6784:13;;6799:10;6780:30;6768:43;;6866:15;;;;6831:12;;;;6741:1;6734:9;6705:186;;;-1:-1:-1;6908:3:84;;6270:647;-1:-1:-1;;;;;;6270:647:84:o;8502:275::-;8573:2;8567:9;8638:2;8619:13;;-1:-1:-1;;8615:27:84;8603:40;;-1:-1:-1;;;;;8658:34:84;;8694:22;;;8655:62;8652:88;;;8720:18;;:::i;:::-;8756:2;8749:22;8502:275;;-1:-1:-1;8502:275:84:o;8782:181::-;8840:4;-1:-1:-1;;;;;8865:6:84;8862:30;8859:56;;;8895:18;;:::i;:::-;-1:-1:-1;8940:1:84;8936:14;8952:4;8932:25;;8782:181::o;8968:128::-;9008:3;9039:1;9035:6;9032:1;9029:13;9026:39;;;9045:18;;:::i;:::-;-1:-1:-1;9081:9:84;;8968:128::o;9101:193::-;9140:1;9166;9156:35;;9171:18;;:::i;:::-;-1:-1:-1;;;9207:18:84;;-1:-1:-1;;9227:13:84;;9203:38;9200:64;;;9244:18;;:::i;:::-;-1:-1:-1;9278:10:84;;9101:193::o;9299:120::-;9339:1;9365;9355:35;;9370:18;;:::i;:::-;-1:-1:-1;9404:9:84;;9299:120::o;9424:168::-;9464:7;9530:1;9526;9522:6;9518:14;9515:1;9512:21;9507:1;9500:9;9493:17;9489:45;9486:71;;;9537:18;;:::i;:::-;-1:-1:-1;9577:9:84;;9424:168::o;9597:359::-;9635:4;9679:1;9676;9665:16;9715:1;9712;9701:16;9745:1;9740:3;9736:11;9811:3;9792:16;9788:21;9784:31;9779:3;9775:41;9770:2;9763:10;9759:58;9756:84;;;9820:18;;:::i;:::-;9891:3;9873:16;9869:26;9864:3;9860:36;9856:2;9852:45;9849:71;;;9900:18;;:::i;:::-;-1:-1:-1;9937:13:84;;;9597:359;-1:-1:-1;;;9597:359:84:o;9961:125::-;10001:4;10029:1;10026;10023:8;10020:34;;;10034:18;;:::i;:::-;-1:-1:-1;10071:9:84;;9961:125::o;10091:112::-;10123:1;10149;10139:35;;10154:18;;:::i;:::-;-1:-1:-1;10188:9:84;;10091:112::o;10208:184::-;10242:3;10289:5;10286:1;10275:20;10323:7;10319:12;10310:7;10307:25;10304:51;;;10335:18;;:::i;:::-;10375:1;10371:15;;10208:184;-1:-1:-1;;10208:184:84:o;10397:136::-;10432:3;-1:-1:-1;;;10453:22:84;;10450:48;;;10478:18;;:::i;:::-;-1:-1:-1;10518:1:84;10514:13;;10397:136::o;10538:193::-;10572:3;10619:5;10616:1;10605:20;10653:16;10649:21;10640:7;10637:34;10634:60;;;10674:18;10736:127;10797:10;10792:3;10788:20;10785:1;10778:31;10828:4;10825:1;10818:15;10852:4;10849:1;10842:15;10868:127;10929:10;10924:3;10920:20;10917:1;10910:31;10960:4;10957:1;10950:15;10984:4;10981:1;10974:15;11000:127;11061:10;11056:3;11052:20;11049:1;11042:31;11092:4;11089:1;11082:15;11116:4;11113:1;11106:15;11132:127;11193:10;11188:3;11184:20;11181:1;11174:31;11224:4;11221:1;11214:15;11248:4;11245:1;11238:15;11264:131;-1:-1:-1;;;;;11339:31:84;;11329:42;;11319:70;;11385:1;11382;11375:12;11319:70;11264:131;:::o;11400:118::-;11487:5;11484:1;11473:20;11466:5;11463:31;11453:59;;11508:1;11505;11498:12"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1393800",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "BOOST_BASE()": "328",
                "KP3R()": "241",
                "acceptGovernance()": "51993",
                "bonds(address)": "infinite",
                "getKP3RsAtTick(uint256,int56,uint256)": "infinite",
                "getPaymentParams(uint256)": "infinite",
                "getPoolTokens(address)": "infinite",
                "getQuoteAtTick(uint128,int56,uint256)": "infinite",
                "getRewardAmount(uint256)": "infinite",
                "getRewardAmountFor(address,uint256)": "infinite",
                "getRewardBoostFor(uint256)": "infinite",
                "governance()": "2670",
                "isKP3RToken0(address)": "infinite",
                "keep3rV2()": "2423",
                "kp3rWethPool()": "2436",
                "maxBoost()": "2494",
                "minBoost()": "2339",
                "observe(address,uint32[])": "infinite",
                "pendingGovernance()": "2669",
                "quote(uint256)": "infinite",
                "quoteTwapTime()": "2379",
                "setGovernance(address)": "27919",
                "setKeep3rV2(address)": "28088",
                "setKp3rWethPool(address)": "infinite",
                "setMaxBoost(uint256)": "25717",
                "setMinBoost(uint256)": "25553",
                "setQuoteTwapTime(uint32)": "27938",
                "setTargetBond(uint256)": "25673",
                "setWorkExtraGas(uint256)": "25718",
                "targetBond()": "2450",
                "workExtraGas()": "2538"
              },
              "internal": {
                "_getBasefee()": "infinite"
              }
            },
            "methodIdentifiers": {
              "BOOST_BASE()": "25f09e61",
              "KP3R()": "05e0b9a0",
              "acceptGovernance()": "238efcbc",
              "bonds(address)": "fe10d774",
              "getKP3RsAtTick(uint256,int56,uint256)": "a0d27107",
              "getPaymentParams(uint256)": "435b21c1",
              "getPoolTokens(address)": "ca4f2803",
              "getQuoteAtTick(uint128,int56,uint256)": "ab8cedc5",
              "getRewardAmount(uint256)": "c84993af",
              "getRewardAmountFor(address,uint256)": "2248e82d",
              "getRewardBoostFor(uint256)": "516c3323",
              "governance()": "5aa6e675",
              "isKP3RToken0(address)": "696a437b",
              "keep3rV2()": "117cfc1b",
              "kp3rWethPool()": "7b40c913",
              "maxBoost()": "37090c2f",
              "minBoost()": "8561579c",
              "observe(address,uint32[])": "dc686d91",
              "pendingGovernance()": "f39c38a0",
              "quote(uint256)": "ed1bd76c",
              "quoteTwapTime()": "9aaad679",
              "setGovernance(address)": "ab033ea9",
              "setKeep3rV2(address)": "3cc7ab30",
              "setKp3rWethPool(address)": "160e1e31",
              "setMaxBoost(uint256)": "b2e0df96",
              "setMinBoost(uint256)": "0c525835",
              "setQuoteTwapTime(uint32)": "b93f5af0",
              "setTargetBond(uint256)": "ab5dce00",
              "setWorkExtraGas(uint256)": "289adb44",
              "targetBond()": "2742b9e7",
              "workExtraGas()": "3facf242"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidKp3rPool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV2\",\"type\":\"address\"}],\"name\":\"Keep3rV2Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_isKP3RToken0\",\"type\":\"bool\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_maxBoost\",\"type\":\"uint256\"}],\"name\":\"MaxBoostChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minBoost\",\"type\":\"uint256\"}],\"name\":\"MinBoostChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_quoteTwapTime\",\"type\":\"uint32\"}],\"name\":\"QuoteTwapTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_targetBond\",\"type\":\"uint256\"}],\"name\":\"TargetBondChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_workExtraGas\",\"type\":\"uint256\"}],\"name\":\"WorkExtraGasChange\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BOOST_BASE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KP3R\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountBonded\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityAmount\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"_tickDifference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"_timeInterval\",\"type\":\"uint256\"}],\"name\":\"getKP3RsAtTick\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_kp3rAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bonds\",\"type\":\"uint256\"}],\"name\":\"getPaymentParams\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_boost\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_oneEthQuote\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_extra\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_baseAmount\",\"type\":\"uint128\"},{\"internalType\":\"int56\",\"name\":\"_tickDifference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"_timeInterval\",\"type\":\"uint256\"}],\"name\":\"getQuoteAtTick\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_quoteAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasUsed\",\"type\":\"uint256\"}],\"name\":\"getRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasUsed\",\"type\":\"uint256\"}],\"name\":\"getRewardAmountFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_kp3r\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bonds\",\"type\":\"uint256\"}],\"name\":\"getRewardBoostFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardBoost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"isKP3RToken0\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isKP3RToken0\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isKP3RToken0\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxBoost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minBoost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"},{\"internalType\":\"uint32[]\",\"name\":\"_secondsAgo\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"_tickCumulative1\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"_tickCumulative2\",\"type\":\"int56\"},{\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_eth\",\"type\":\"uint256\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"quoteTwapTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV2\",\"type\":\"address\"}],\"name\":\"setKeep3rV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolAddress\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxBoost\",\"type\":\"uint256\"}],\"name\":\"setMaxBoost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minBoost\",\"type\":\"uint256\"}],\"name\":\"setMinBoost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_quoteTwapTime\",\"type\":\"uint32\"}],\"name\":\"setQuoteTwapTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_targetBond\",\"type\":\"uint256\"}],\"name\":\"setTargetBond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_workExtraGas\",\"type\":\"uint256\"}],\"name\":\"setWorkExtraGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetBond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"workExtraGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"bonds(address)\":{\"params\":{\"_keeper\":\"The address of the keeper to check\"},\"returns\":{\"_amountBonded\":\"The amount of KP3R the keeper has bonded\"}},\"getKP3RsAtTick(uint256,int56,uint256)\":{\"params\":{\"_liquidityAmount\":\"Amount of liquidity to be converted\",\"_tickDifference\":\"Tick value used to calculate the quote\",\"_timeInterval\":\"Time value used to calculate the quote\"},\"returns\":{\"_kp3rAmount\":\"Amount of KP3R tokens underlying on the given liquidity\"}},\"getPaymentParams(uint256)\":{\"params\":{\"_bonds\":\"Amount of bonded KP3R owned by the keeper\"},\"returns\":{\"_boost\":\"Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\",\"_extra\":\"Amount of extra gas that should be added to the gas spent\",\"_oneEthQuote\":\"Amount of KP3R tokens equivalent to 1 ETH\"}},\"getPoolTokens(address)\":{\"params\":{\"_pool\":\"Address of the correspondant pool\"},\"returns\":{\"_token0\":\"Address of the first token of the pair\",\"_token1\":\"Address of the second token of the pair\"}},\"getQuoteAtTick(uint128,int56,uint256)\":{\"params\":{\"_baseAmount\":\"Amount of token to be converted\",\"_tickDifference\":\"Tick value used to calculate the quote\",\"_timeInterval\":\"Time value used to calculate the quote\"},\"returns\":{\"_quoteAmount\":\"Amount of credits deserved for the baseAmount at the tick value\"}},\"getRewardAmount(uint256)\":{\"params\":{\"_gasUsed\":\"The amount of gas used that will be rewarded\"},\"returns\":{\"_amount\":\"The amount of KP3R that should be awarded to tx.origin\"}},\"getRewardAmountFor(address,uint256)\":{\"params\":{\"_gasUsed\":\"The amount of gas used that will be rewarded\",\"_keeper\":\"The address of the keeper to check\"},\"returns\":{\"_kp3r\":\"The amount of KP3R that should be awarded to the keeper\"}},\"getRewardBoostFor(uint256)\":{\"params\":{\"_bonds\":\"The amount of KP3R tokens bonded by the keeper\"},\"returns\":{\"_rewardBoost\":\"The reward boost that corresponds to the keeper\"}},\"isKP3RToken0(address)\":{\"params\":{\"_pool\":\"Address of the correspondant pool\"},\"returns\":{\"_isKP3RToken0\":\"Boolean indicating the order of the tokens in the pair\"}},\"observe(address,uint32[])\":{\"params\":{\"_pool\":\"Address of the pool to observe\",\"_secondsAgo\":\"Array with time references to observe\"},\"returns\":{\"_success\":\"Boolean indicating if the observe call was succesfull\",\"_tickCumulative1\":\"Cummulative sum of ticks until first time reference\",\"_tickCumulative2\":\"Cummulative sum of ticks until second time reference\"}},\"quote(uint256)\":{\"details\":\"This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\",\"params\":{\"_eth\":\"The amount of ETH\"},\"returns\":{\"_amountOut\":\"The amount of KP3R\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setKeep3rV2(address)\":{\"params\":{\"_keep3rV2\":\"The address of Keep3r V2\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_poolAddress\":\"The address of the KP3R-WETH pool\"}},\"setMaxBoost(uint256)\":{\"params\":{\"_maxBoost\":\"The maximum boost multiplier\"}},\"setMinBoost(uint256)\":{\"params\":{\"_minBoost\":\"The minimum boost multiplier\"}},\"setQuoteTwapTime(uint32)\":{\"params\":{\"_quoteTwapTime\":\"The twap time for quoting\"}},\"setTargetBond(uint256)\":{\"params\":{\"_targetBond\":\"The target bond amount\"}},\"setWorkExtraGas(uint256)\":{\"params\":{\"_workExtraGas\":\"The work extra gas\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKp3rPool()\":[{\"notice\":\"Throws when pool does not have KP3R as token0 nor token1\"}],\"LiquidityPairInvalid()\":[{\"notice\":\"Throws when none of the tokens in the liquidity pair is KP3R\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}]},\"events\":{\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"Keep3rV2Change(address)\":{\"notice\":\"Emitted when the Keep3r V2 address is changed\"},\"Kp3rWethPoolChange(address,bool)\":{\"notice\":\"Emitted when the kp3r weth pool is changed\"},\"MaxBoostChange(uint256)\":{\"notice\":\"Emitted when the maximum boost multiplier is changed\"},\"MinBoostChange(uint256)\":{\"notice\":\"Emitted when the minimum boost multiplier is changed\"},\"QuoteTwapTimeChange(uint32)\":{\"notice\":\"Emitted when the quote twap time is changed\"},\"TargetBondChange(uint256)\":{\"notice\":\"Emitted when the target bond amount is changed\"},\"WorkExtraGasChange(uint256)\":{\"notice\":\"Emitted when the work extra gas amount is changed\"}},\"kind\":\"user\",\"methods\":{\"BOOST_BASE()\":{\"notice\":\"The boost base used to calculate the boost rewards for the keeper\"},\"KP3R()\":{\"notice\":\"Address of KP3R token\"},\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"bonds(address)\":{\"notice\":\"Returns the amount of KP3R the keeper has bonded\"},\"getKP3RsAtTick(uint256,int56,uint256)\":{\"notice\":\"Given a tick and a liquidity amount, calculates the underlying KP3R tokens\"},\"getPaymentParams(uint256)\":{\"notice\":\"Get multiplier, quote, and extra, in order to calculate keeper payment\"},\"getPoolTokens(address)\":{\"notice\":\"Given a pool address, returns the underlying tokens of the pair\"},\"getQuoteAtTick(uint128,int56,uint256)\":{\"notice\":\"Given a tick and a token amount, calculates the output in correspondant token\"},\"getRewardAmount(uint256)\":{\"notice\":\"Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\"},\"getRewardAmountFor(address,uint256)\":{\"notice\":\"Calculates the reward (in KP3R) that corresponds to a keeper for using gas\"},\"getRewardBoostFor(uint256)\":{\"notice\":\"Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"isKP3RToken0(address)\":{\"notice\":\"Defines the order of the tokens in the pair for twap calculations\"},\"keep3rV2()\":{\"notice\":\"Address of Keep3r V2\"},\"kp3rWethPool()\":{\"notice\":\"KP3R-WETH pool that is being used as oracle\"},\"maxBoost()\":{\"notice\":\"The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE\"},\"minBoost()\":{\"notice\":\"The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE\"},\"observe(address,uint32[])\":{\"notice\":\"Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"quote(uint256)\":{\"notice\":\"Calculates the amount of KP3R that corresponds to the ETH passed into the function\"},\"quoteTwapTime()\":{\"notice\":\"The twap time for quoting\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setKeep3rV2(address)\":{\"notice\":\"Sets the Keep3r V2 address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets KP3R-WETH pool\"},\"setMaxBoost(uint256)\":{\"notice\":\"Sets the maximum boost multiplier\"},\"setMinBoost(uint256)\":{\"notice\":\"Sets the minimum boost multiplier\"},\"setQuoteTwapTime(uint32)\":{\"notice\":\"Sets the quote twap time\"},\"setTargetBond(uint256)\":{\"notice\":\"Sets the target bond amount\"},\"setWorkExtraGas(uint256)\":{\"notice\":\"Sets the work extra gas amount\"},\"targetBond()\":{\"notice\":\"The targeted amount of bonded KP3Rs to max-up reward multiplier         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional\"},\"workExtraGas()\":{\"notice\":\"The amount of unaccounted gas that is going to be added to keeper payments\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/Keep3rHelper.sol\":\"Keep3rHelper\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\nimport './pool/IUniswapV3PoolImmutables.sol';\\nimport './pool/IUniswapV3PoolState.sol';\\nimport './pool/IUniswapV3PoolDerivedState.sol';\\nimport './pool/IUniswapV3PoolActions.sol';\\nimport './pool/IUniswapV3PoolOwnerActions.sol';\\nimport './pool/IUniswapV3PoolEvents.sol';\\n\\n/// @title The interface for a Uniswap V3 Pool\\n/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform\\n/// to the ERC20 specification\\n/// @dev The pool interface is broken up into many smaller pieces\\ninterface IUniswapV3Pool is\\n    IUniswapV3PoolImmutables,\\n    IUniswapV3PoolState,\\n    IUniswapV3PoolDerivedState,\\n    IUniswapV3PoolActions,\\n    IUniswapV3PoolOwnerActions,\\n    IUniswapV3PoolEvents\\n{\\n\\n}\\n\",\"keccak256\":\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissionless pool actions\\n/// @notice Contains pool methods that can be called by anyone\\ninterface IUniswapV3PoolActions {\\n    /// @notice Sets the initial price for the pool\\n    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\\n    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96\\n    function initialize(uint160 sqrtPriceX96) external;\\n\\n    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback\\n    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\\n    /// on tickLower, tickUpper, the amount of liquidity, and the current price.\\n    /// @param recipient The address for which the liquidity will be created\\n    /// @param tickLower The lower tick of the position in which to add liquidity\\n    /// @param tickUpper The upper tick of the position in which to add liquidity\\n    /// @param amount The amount of liquidity to mint\\n    /// @param data Any data that should be passed through to the callback\\n    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    function mint(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount,\\n        bytes calldata data\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Collects tokens owed to a position\\n    /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\\n    /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\\n    /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\\n    /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\\n    /// @param recipient The address which should receive the fees collected\\n    /// @param tickLower The lower tick of the position for which to collect fees\\n    /// @param tickUpper The upper tick of the position for which to collect fees\\n    /// @param amount0Requested How much token0 should be withdrawn from the fees owed\\n    /// @param amount1Requested How much token1 should be withdrawn from the fees owed\\n    /// @return amount0 The amount of fees collected in token0\\n    /// @return amount1 The amount of fees collected in token1\\n    function collect(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n\\n    /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\\n    /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\\n    /// @dev Fees must be collected separately via a call to #collect\\n    /// @param tickLower The lower tick of the position for which to burn liquidity\\n    /// @param tickUpper The upper tick of the position for which to burn liquidity\\n    /// @param amount How much liquidity to burn\\n    /// @return amount0 The amount of token0 sent to the recipient\\n    /// @return amount1 The amount of token1 sent to the recipient\\n    function burn(\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Swap token0 for token1, or token1 for token0\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\\n    /// @param recipient The address to receive the output of the swap\\n    /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\\n    /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\\n    /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\\n    /// value after the swap. If one for zero, the price cannot be greater than this value after the swap\\n    /// @param data Any data to be passed through to the callback\\n    /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\\n    /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive\\n    function swap(\\n        address recipient,\\n        bool zeroForOne,\\n        int256 amountSpecified,\\n        uint160 sqrtPriceLimitX96,\\n        bytes calldata data\\n    ) external returns (int256 amount0, int256 amount1);\\n\\n    /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback\\n    /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\\n    /// with 0 amount{0,1} and sending the donation amount(s) from the callback\\n    /// @param recipient The address which will receive the token0 and token1 amounts\\n    /// @param amount0 The amount of token0 to send\\n    /// @param amount1 The amount of token1 to send\\n    /// @param data Any data to be passed through to the callback\\n    function flash(\\n        address recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        bytes calldata data\\n    ) external;\\n\\n    /// @notice Increase the maximum number of price and liquidity observations that this pool will store\\n    /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\\n    /// the input observationCardinalityNext.\\n    /// @param observationCardinalityNext The desired minimum number of observations for the pool to store\\n    function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;\\n}\\n\",\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that is not stored\\n/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the\\n/// blockchain. The functions here may have variable gas costs.\\ninterface IUniswapV3PoolDerivedState {\\n    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\\n    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\\n    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\\n    /// you must call it with secondsAgos = [3600, 0].\\n    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\\n    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\\n    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\\n    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\\n    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\\n    /// timestamp\\n    function observe(uint32[] calldata secondsAgos)\\n        external\\n        view\\n        returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\\n\\n    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\\n    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\\n    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\\n    /// snapshot is taken and the second snapshot is taken.\\n    /// @param tickLower The lower tick of the range\\n    /// @param tickUpper The upper tick of the range\\n    /// @return tickCumulativeInside The snapshot of the tick accumulator for the range\\n    /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\\n    /// @return secondsInside The snapshot of seconds per liquidity for the range\\n    function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)\\n        external\\n        view\\n        returns (\\n            int56 tickCumulativeInside,\\n            uint160 secondsPerLiquidityInsideX128,\\n            uint32 secondsInside\\n        );\\n}\\n\",\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Events emitted by a pool\\n/// @notice Contains all events emitted by the pool\\ninterface IUniswapV3PoolEvents {\\n    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool\\n    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\\n    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\\n    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\\n    event Initialize(uint160 sqrtPriceX96, int24 tick);\\n\\n    /// @notice Emitted when liquidity is minted for a given position\\n    /// @param sender The address that minted the liquidity\\n    /// @param owner The owner of the position and recipient of any minted liquidity\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity minted to the position range\\n    /// @param amount0 How much token0 was required for the minted liquidity\\n    /// @param amount1 How much token1 was required for the minted liquidity\\n    event Mint(\\n        address sender,\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted when fees are collected by the owner of a position\\n    /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\\n    /// @param owner The owner of the position for which fees are collected\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount0 The amount of token0 fees collected\\n    /// @param amount1 The amount of token1 fees collected\\n    event Collect(\\n        address indexed owner,\\n        address recipient,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount0,\\n        uint128 amount1\\n    );\\n\\n    /// @notice Emitted when a position's liquidity is removed\\n    /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\\n    /// @param owner The owner of the position for which liquidity is removed\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity to remove\\n    /// @param amount0 The amount of token0 withdrawn\\n    /// @param amount1 The amount of token1 withdrawn\\n    event Burn(\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted by the pool for any swaps between token0 and token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the output of the swap\\n    /// @param amount0 The delta of the token0 balance of the pool\\n    /// @param amount1 The delta of the token1 balance of the pool\\n    /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\\n    /// @param liquidity The liquidity of the pool after the swap\\n    /// @param tick The log base 1.0001 of price of the pool after the swap\\n    event Swap(\\n        address indexed sender,\\n        address indexed recipient,\\n        int256 amount0,\\n        int256 amount1,\\n        uint160 sqrtPriceX96,\\n        uint128 liquidity,\\n        int24 tick\\n    );\\n\\n    /// @notice Emitted by the pool for any flashes of token0/token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the tokens from flash\\n    /// @param amount0 The amount of token0 that was flashed\\n    /// @param amount1 The amount of token1 that was flashed\\n    /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\\n    /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\\n    event Flash(\\n        address indexed sender,\\n        address indexed recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        uint256 paid0,\\n        uint256 paid1\\n    );\\n\\n    /// @notice Emitted by the pool for increases to the number of observations that can be stored\\n    /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\\n    /// just before a mint/swap/burn.\\n    /// @param observationCardinalityNextOld The previous value of the next observation cardinality\\n    /// @param observationCardinalityNextNew The updated value of the next observation cardinality\\n    event IncreaseObservationCardinalityNext(\\n        uint16 observationCardinalityNextOld,\\n        uint16 observationCardinalityNextNew\\n    );\\n\\n    /// @notice Emitted when the protocol fee is changed by the pool\\n    /// @param feeProtocol0Old The previous value of the token0 protocol fee\\n    /// @param feeProtocol1Old The previous value of the token1 protocol fee\\n    /// @param feeProtocol0New The updated value of the token0 protocol fee\\n    /// @param feeProtocol1New The updated value of the token1 protocol fee\\n    event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);\\n\\n    /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner\\n    /// @param sender The address that collects the protocol fees\\n    /// @param recipient The address that receives the collected protocol fees\\n    /// @param amount0 The amount of token0 protocol fees that is withdrawn\\n    /// @param amount0 The amount of token1 protocol fees that is withdrawn\\n    event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that never changes\\n/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values\\ninterface IUniswapV3PoolImmutables {\\n    /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\\n    /// @return The contract address\\n    function factory() external view returns (address);\\n\\n    /// @notice The first of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token0() external view returns (address);\\n\\n    /// @notice The second of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token1() external view returns (address);\\n\\n    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6\\n    /// @return The fee\\n    function fee() external view returns (uint24);\\n\\n    /// @notice The pool tick spacing\\n    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\\n    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\\n    /// This value is an int24 to avoid casting even though it is always positive.\\n    /// @return The tick spacing\\n    function tickSpacing() external view returns (int24);\\n\\n    /// @notice The maximum amount of position liquidity that can use any tick in the range\\n    /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\\n    /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\\n    /// @return The max amount of liquidity per tick\\n    function maxLiquidityPerTick() external view returns (uint128);\\n}\\n\",\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissioned pool actions\\n/// @notice Contains pool methods that may only be called by the factory owner\\ninterface IUniswapV3PoolOwnerActions {\\n    /// @notice Set the denominator of the protocol's % share of the fees\\n    /// @param feeProtocol0 new protocol fee for token0 of the pool\\n    /// @param feeProtocol1 new protocol fee for token1 of the pool\\n    function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;\\n\\n    /// @notice Collect the protocol fee accrued to the pool\\n    /// @param recipient The address to which collected protocol fees should be sent\\n    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\\n    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\\n    /// @return amount0 The protocol fee collected in token0\\n    /// @return amount1 The protocol fee collected in token1\\n    function collectProtocol(\\n        address recipient,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that can change\\n/// @notice These methods compose the pool's state, and can change with any frequency including multiple times\\n/// per transaction\\ninterface IUniswapV3PoolState {\\n    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\\n    /// when accessed externally.\\n    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\\n    /// tick The current tick of the pool, i.e. according to the last tick transition that was run.\\n    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\\n    /// boundary.\\n    /// observationIndex The index of the last oracle observation that was written,\\n    /// observationCardinality The current maximum number of observations stored in the pool,\\n    /// observationCardinalityNext The next maximum number of observations, to be updated when the observation.\\n    /// feeProtocol The protocol fee for both tokens of the pool.\\n    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\\n    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\\n    /// unlocked Whether the pool is currently locked to reentrancy\\n    function slot0()\\n        external\\n        view\\n        returns (\\n            uint160 sqrtPriceX96,\\n            int24 tick,\\n            uint16 observationIndex,\\n            uint16 observationCardinality,\\n            uint16 observationCardinalityNext,\\n            uint8 feeProtocol,\\n            bool unlocked\\n        );\\n\\n    /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal0X128() external view returns (uint256);\\n\\n    /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal1X128() external view returns (uint256);\\n\\n    /// @notice The amounts of token0 and token1 that are owed to the protocol\\n    /// @dev Protocol fees will never exceed uint128 max in either token\\n    function protocolFees() external view returns (uint128 token0, uint128 token1);\\n\\n    /// @notice The currently in range liquidity available to the pool\\n    /// @dev This value has no relationship to the total liquidity across all ticks\\n    function liquidity() external view returns (uint128);\\n\\n    /// @notice Look up information about a specific tick in the pool\\n    /// @param tick The tick to look up\\n    /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\\n    /// tick upper,\\n    /// liquidityNet how much liquidity changes when the pool price crosses the tick,\\n    /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\\n    /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\\n    /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\\n    /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\\n    /// secondsOutside the seconds spent on the other side of the tick from the current tick,\\n    /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\\n    /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\\n    /// In addition, these values are only relative and must be used only in comparison to previous snapshots for\\n    /// a specific position.\\n    function ticks(int24 tick)\\n        external\\n        view\\n        returns (\\n            uint128 liquidityGross,\\n            int128 liquidityNet,\\n            uint256 feeGrowthOutside0X128,\\n            uint256 feeGrowthOutside1X128,\\n            int56 tickCumulativeOutside,\\n            uint160 secondsPerLiquidityOutsideX128,\\n            uint32 secondsOutside,\\n            bool initialized\\n        );\\n\\n    /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information\\n    function tickBitmap(int16 wordPosition) external view returns (uint256);\\n\\n    /// @notice Returns the information about a position by the position's key\\n    /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\\n    /// @return _liquidity The amount of liquidity in the position,\\n    /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\\n    /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\\n    /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\\n    /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\\n    function positions(bytes32 key)\\n        external\\n        view\\n        returns (\\n            uint128 _liquidity,\\n            uint256 feeGrowthInside0LastX128,\\n            uint256 feeGrowthInside1LastX128,\\n            uint128 tokensOwed0,\\n            uint128 tokensOwed1\\n        );\\n\\n    /// @notice Returns data about a specific observation index\\n    /// @param index The element of the observations array to fetch\\n    /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\\n    /// ago, rather than at a specific index in the array.\\n    /// @return blockTimestamp The timestamp of the observation,\\n    /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\\n    /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\\n    /// Returns initialized whether the observation has been initialized and the values are safe to use\\n    function observations(uint256 index)\\n        external\\n        view\\n        returns (\\n            uint32 blockTimestamp,\\n            int56 tickCumulative,\\n            uint160 secondsPerLiquidityCumulativeX128,\\n            bool initialized\\n        );\\n}\\n\",\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/Keep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/*\\n\\nCoded for The Keep3r Network with \\u2665 by\\n\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2557\\u2003\\u2003\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\n\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u255a\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2554\\u2550\\u2588\\u2588\\u2588\\u2588\\u2551\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\n\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2003\\u2003\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\n\\nhttps://defi.sucks\\n\\n*/\\n\\npragma solidity >=0.8.7 <0.9.0;\\n\\nimport './libraries/FullMath.sol';\\nimport './libraries/TickMath.sol';\\nimport '../interfaces/IKeep3r.sol';\\nimport '../interfaces/IKeep3rHelper.sol';\\nimport './Keep3rHelperParameters.sol';\\n\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\\n\\ncontract Keep3rHelper is IKeep3rHelper, Keep3rHelperParameters {\\n  constructor(address _keep3rV2, address _governance) Keep3rHelperParameters(_keep3rV2, _governance) {}\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function quote(uint256 _eth) public view override returns (uint256 _amountOut) {\\n    uint32[] memory _secondsAgos = new uint32[](2);\\n    _secondsAgos[1] = quoteTwapTime;\\n\\n    (int56[] memory _tickCumulatives, ) = IUniswapV3Pool(kp3rWethPool.poolAddress).observe(_secondsAgos);\\n    int56 _difference = _tickCumulatives[0] - _tickCumulatives[1];\\n    _amountOut = getQuoteAtTick(uint128(_eth), kp3rWethPool.isKP3RToken0 ? _difference : -_difference, quoteTwapTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function bonds(address _keeper) public view override returns (uint256 _amountBonded) {\\n    return IKeep3r(keep3rV2).bonds(_keeper, KP3R);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) public view override returns (uint256 _kp3r) {\\n    uint256 _boost = getRewardBoostFor(bonds(_keeper));\\n    _kp3r = quote((_gasUsed * _boost) / BOOST_BASE);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getRewardAmount(uint256 _gasUsed) external view override returns (uint256 _amount) {\\n    // solhint-disable-next-line avoid-tx-origin\\n    return getRewardAmountFor(tx.origin, _gasUsed);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getRewardBoostFor(uint256 _bonds) public view override returns (uint256 _rewardBoost) {\\n    _bonds = Math.min(_bonds, targetBond);\\n    uint256 _cap = Math.max(minBoost, minBoost + ((maxBoost - minBoost) * _bonds) / targetBond);\\n    _rewardBoost = _cap * _getBasefee();\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getPoolTokens(address _pool) public view override returns (address _token0, address _token1) {\\n    return (IUniswapV3Pool(_pool).token0(), IUniswapV3Pool(_pool).token1());\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function isKP3RToken0(address _pool) public view override returns (bool _isKP3RToken0) {\\n    address _token0;\\n    address _token1;\\n    (_token0, _token1) = getPoolTokens(_pool);\\n    if (_token0 == KP3R) {\\n      return true;\\n    } else if (_token1 != KP3R) {\\n      revert LiquidityPairInvalid();\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    public\\n    view\\n    override\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    )\\n  {\\n    try IUniswapV3Pool(_pool).observe(_secondsAgo) returns (int56[] memory _uniswapResponse, uint160[] memory) {\\n      _tickCumulative1 = _uniswapResponse[0];\\n      if (_uniswapResponse.length > 1) {\\n        _tickCumulative2 = _uniswapResponse[1];\\n      }\\n      _success = true;\\n    } catch (bytes memory) {}\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    override\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    )\\n  {\\n    _oneEthQuote = quote(1 ether);\\n    _boost = getRewardBoostFor(_bonds);\\n    _extra = workExtraGas;\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) public pure override returns (uint256 _kp3rAmount) {\\n    uint160 sqrtRatioX96 = TickMath.getSqrtRatioAtTick(int24(_tickDifference / int256(_timeInterval)));\\n    _kp3rAmount = FullMath.mulDiv(1 << 96, _liquidityAmount, sqrtRatioX96);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) public pure override returns (uint256 _quoteAmount) {\\n    uint160 sqrtRatioX96 = TickMath.getSqrtRatioAtTick(int24(_tickDifference / int256(_timeInterval)));\\n\\n    if (sqrtRatioX96 <= type(uint128).max) {\\n      uint256 ratioX192 = uint256(sqrtRatioX96) * sqrtRatioX96;\\n      _quoteAmount = FullMath.mulDiv(1 << 192, _baseAmount, ratioX192);\\n    } else {\\n      uint256 ratioX128 = FullMath.mulDiv(sqrtRatioX96, sqrtRatioX96, 1 << 64);\\n      _quoteAmount = FullMath.mulDiv(1 << 128, _baseAmount, ratioX128);\\n    }\\n  }\\n\\n  /// @notice Gets the block's base fee\\n  /// @return _baseFee The block's basefee\\n  function _getBasefee() internal view virtual returns (uint256 _baseFee) {\\n    return block.basefee;\\n  }\\n}\\n\",\"keccak256\":\"0x3808fda0edb99cbafee5c96f29e36fec06dda9a459e8448e8d1b502d25b04c7f\",\"license\":\"MIT\"},\"solidity/contracts/Keep3rHelperParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.7 <0.9.0;\\n\\nimport './libraries/FullMath.sol';\\nimport './libraries/TickMath.sol';\\nimport '../interfaces/IKeep3r.sol';\\nimport '../interfaces/external/IKeep3rV1.sol';\\nimport '../interfaces/IKeep3rHelperParameters.sol';\\nimport './peripherals/Governable.sol';\\nimport './Keep3rHelperParameters.sol';\\n\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\\n\\ncontract Keep3rHelperParameters is IKeep3rHelperParameters, Governable {\\n  /// @inheritdoc IKeep3rHelperParameters\\n  address public constant override KP3R = 0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public constant override BOOST_BASE = 10_000;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public override minBoost = 11_000;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public override maxBoost = 12_000;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public override targetBond = 200 ether;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public override workExtraGas = 50_000;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint32 public override quoteTwapTime = 10 minutes;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  address public override keep3rV2;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  IKeep3rHelperParameters.Kp3rWethPool public override kp3rWethPool;\\n\\n  constructor(address _keep3rV2, address _governance) Governable(_governance) {\\n    keep3rV2 = _keep3rV2;\\n    _setKp3rWethPool(0x11B7a6bc0259ed6Cf9DB8F499988F9eCc7167bf5);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setKp3rWethPool(address _poolAddress) external override onlyGovernance {\\n    _setKp3rWethPool(_poolAddress);\\n    emit Kp3rWethPoolChange(kp3rWethPool.poolAddress, kp3rWethPool.isKP3RToken0);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setMinBoost(uint256 _minBoost) external override onlyGovernance {\\n    minBoost = _minBoost;\\n    emit MinBoostChange(minBoost);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setMaxBoost(uint256 _maxBoost) external override onlyGovernance {\\n    maxBoost = _maxBoost;\\n    emit MaxBoostChange(maxBoost);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setTargetBond(uint256 _targetBond) external override onlyGovernance {\\n    targetBond = _targetBond;\\n    emit TargetBondChange(targetBond);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setKeep3rV2(address _keep3rV2) external override onlyGovernance {\\n    keep3rV2 = _keep3rV2;\\n    emit Keep3rV2Change(keep3rV2);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setWorkExtraGas(uint256 _workExtraGas) external override onlyGovernance {\\n    workExtraGas = _workExtraGas;\\n    emit WorkExtraGasChange(workExtraGas);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setQuoteTwapTime(uint32 _quoteTwapTime) external override onlyGovernance {\\n    quoteTwapTime = _quoteTwapTime;\\n    emit QuoteTwapTimeChange(quoteTwapTime);\\n  }\\n\\n  /// @notice Sets KP3R-WETH pool\\n  /// @param _poolAddress The address of the KP3R-WETH pool\\n  function _setKp3rWethPool(address _poolAddress) internal {\\n    bool _isKP3RToken0 = IUniswapV3Pool(_poolAddress).token0() == KP3R;\\n    bool _isKP3RToken1 = IUniswapV3Pool(_poolAddress).token1() == KP3R;\\n\\n    if (!_isKP3RToken0 && !_isKP3RToken1) revert InvalidKp3rPool();\\n\\n    kp3rWethPool = Kp3rWethPool(_poolAddress, _isKP3RToken0);\\n  }\\n}\\n\",\"keccak256\":\"0xb5c365c428fc8a3157225799f6b581e450b74f6ae05b0f30dba286ff1e470e88\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/libraries/TickMath.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n// solhint-disable\\n\\n/// @title Math library for computing sqrt prices from ticks and vice versa\\n/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\\n///         prices between 2**-128 and 2**128\\nlibrary TickMath {\\n  /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\\n  int24 internal constant MIN_TICK = -887272;\\n  /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\\n  int24 internal constant MAX_TICK = -MIN_TICK;\\n\\n  /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\\n  uint160 internal constant MIN_SQRT_RATIO = 4295128739;\\n  /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\\n  uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;\\n\\n  /// @notice Calculates sqrt(1.0001^tick) * 2^96\\n  /// @dev Throws if |tick| > max tick\\n  /// @param tick The input tick for the above formula\\n  /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the given tick\\n  function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {\\n    uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));\\n    require(absTick <= uint256(int256(MAX_TICK)), 'T');\\n\\n    uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;\\n    if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;\\n    if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;\\n    if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;\\n    if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;\\n    if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;\\n    if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;\\n    if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;\\n    if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;\\n    if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;\\n    if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;\\n    if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;\\n    if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;\\n    if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;\\n    if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;\\n    if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;\\n    if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;\\n    if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;\\n    if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;\\n    if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;\\n\\n    if (tick > 0) ratio = type(uint256).max / ratio;\\n\\n    // Divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.\\n    // we then downcast because we know the result always fits within 160 bits due to our tick input constraint\\n    // we round up in the division so getTickAtSqrtRatio of the output price is always consistent\\n    sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));\\n  }\\n\\n  /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\\n  /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may ever return.\\n  /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\\n  /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio\\n  function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {\\n    // Second inequality must be < because the price can never reach the price at the max tick\\n    require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');\\n    uint256 ratio = uint256(sqrtPriceX96) << 32;\\n\\n    uint256 r = ratio;\\n    uint256 msb = 0;\\n\\n    assembly {\\n      let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(5, gt(r, 0xFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(4, gt(r, 0xFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(3, gt(r, 0xFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(2, gt(r, 0xF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(1, gt(r, 0x3))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := gt(r, 0x1)\\n      msb := or(msb, f)\\n    }\\n\\n    if (msb >= 128) r = ratio >> (msb - 127);\\n    else r = ratio << (127 - msb);\\n\\n    int256 log_2 = (int256(msb) - 128) << 64;\\n\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(63, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(62, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(61, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(60, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(59, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(58, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(57, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(56, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(55, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(54, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(53, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(52, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(51, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(50, f))\\n    }\\n\\n    int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number\\n\\n    int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);\\n    int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);\\n\\n    tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;\\n  }\\n}\\n\",\"keccak256\":\"0x11b965ba576ff91b4a6e9533c0f334f2b7b6024ee1c54e36d21799de5580899d\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3r.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './peripherals/IKeep3rJobs.sol';\\nimport './peripherals/IKeep3rKeepers.sol';\\nimport './peripherals/IKeep3rAccountance.sol';\\nimport './peripherals/IKeep3rRoles.sol';\\nimport './peripherals/IKeep3rParameters.sol';\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rV2 contract\\n/// @notice This contract inherits all the functionality of Keep3rV2\\ninterface IKeep3r is IKeep3rJobs, IKeep3rKeepers, IKeep3rAccountance, IKeep3rRoles, IKeep3rParameters {\\n\\n}\\n\",\"keccak256\":\"0x57e234140074d771239eeb6f08b6fc049c838c2a34aefadbbd542672e63bc686\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelperParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelperParameters contract\\n/// @notice Contains all the helper functions used throughout the different files.\\ninterface IKeep3rHelperParameters {\\n  // Structs\\n\\n  /// @dev KP3R-WETH Pool address and isKP3RToken0\\n  /// @dev Created in order to save gas by avoiding calls to pool's token0 method\\n  struct Kp3rWethPool {\\n    address poolAddress;\\n    bool isKP3RToken0;\\n  }\\n\\n  // Errors\\n\\n  /// @notice Throws when pool does not have KP3R as token0 nor token1\\n  error InvalidKp3rPool();\\n\\n  // Events\\n\\n  /// @notice Emitted when the kp3r weth pool is changed\\n  /// @param _address Address of the new kp3r weth pool\\n  /// @param _isKP3RToken0 True if calling the token0 method of the pool returns the KP3R token address\\n  event Kp3rWethPoolChange(address _address, bool _isKP3RToken0);\\n\\n  /// @notice Emitted when the minimum boost multiplier is changed\\n  /// @param _minBoost The minimum boost multiplier\\n  event MinBoostChange(uint256 _minBoost);\\n\\n  /// @notice Emitted when the maximum boost multiplier is changed\\n  /// @param _maxBoost The maximum boost multiplier\\n  event MaxBoostChange(uint256 _maxBoost);\\n\\n  /// @notice Emitted when the target bond amount is changed\\n  /// @param _targetBond The target bond amount\\n  event TargetBondChange(uint256 _targetBond);\\n\\n  /// @notice Emitted when the Keep3r V2 address is changed\\n  /// @param _keep3rV2 The address of Keep3r V2\\n  event Keep3rV2Change(address _keep3rV2);\\n\\n  /// @notice Emitted when the work extra gas amount is changed\\n  /// @param _workExtraGas The work extra gas\\n  event WorkExtraGasChange(uint256 _workExtraGas);\\n\\n  /// @notice Emitted when the quote twap time is changed\\n  /// @param _quoteTwapTime The twap time for quoting\\n  event QuoteTwapTimeChange(uint32 _quoteTwapTime);\\n\\n  // Variables\\n\\n  /// @notice Address of KP3R token\\n  /// @return _kp3r Address of KP3R token\\n  // solhint-disable func-name-mixedcase\\n  function KP3R() external view returns (address _kp3r);\\n\\n  /// @notice The boost base used to calculate the boost rewards for the keeper\\n  /// @return _base The boost base number\\n  function BOOST_BASE() external view returns (uint256 _base);\\n\\n  /// @notice KP3R-WETH pool that is being used as oracle\\n  /// @return poolAddress Address of the pool\\n  /// @return isKP3RToken0 True if calling the token0 method of the pool returns the KP3R token address\\n  function kp3rWethPool() external view returns (address poolAddress, bool isKP3RToken0);\\n\\n  /// @notice The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job\\n  ///         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE\\n  /// @return _multiplier The minimum boost multiplier\\n  function minBoost() external view returns (uint256 _multiplier);\\n\\n  /// @notice The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job\\n  ///         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE\\n  /// @return _multiplier The maximum boost multiplier\\n  function maxBoost() external view returns (uint256 _multiplier);\\n\\n  /// @notice The targeted amount of bonded KP3Rs to max-up reward multiplier\\n  ///         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get\\n  ///                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional\\n  /// @return _target The amount of KP3R that comforms the targetBond\\n  function targetBond() external view returns (uint256 _target);\\n\\n  /// @notice The amount of unaccounted gas that is going to be added to keeper payments\\n  /// @return _workExtraGas The work unaccounted gas amount\\n  function workExtraGas() external view returns (uint256 _workExtraGas);\\n\\n  /// @notice The twap time for quoting\\n  /// @return _quoteTwapTime The twap time\\n  function quoteTwapTime() external view returns (uint32 _quoteTwapTime);\\n\\n  /// @notice Address of Keep3r V2\\n  /// @return _keep3rV2 Address of Keep3r V2\\n  function keep3rV2() external view returns (address _keep3rV2);\\n\\n  // Methods\\n\\n  /// @notice Sets KP3R-WETH pool\\n  /// @param _poolAddress The address of the KP3R-WETH pool\\n  function setKp3rWethPool(address _poolAddress) external;\\n\\n  /// @notice Sets the minimum boost multiplier\\n  /// @param _minBoost The minimum boost multiplier\\n  function setMinBoost(uint256 _minBoost) external;\\n\\n  /// @notice Sets the maximum boost multiplier\\n  /// @param _maxBoost The maximum boost multiplier\\n  function setMaxBoost(uint256 _maxBoost) external;\\n\\n  /// @notice Sets the target bond amount\\n  /// @param _targetBond The target bond amount\\n  function setTargetBond(uint256 _targetBond) external;\\n\\n  /// @notice Sets the Keep3r V2 address\\n  /// @param _keep3rV2 The address of Keep3r V2\\n  function setKeep3rV2(address _keep3rV2) external;\\n\\n  /// @notice Sets the work extra gas amount\\n  /// @param _workExtraGas The work extra gas\\n  function setWorkExtraGas(uint256 _workExtraGas) external;\\n\\n  /// @notice Sets the quote twap time\\n  /// @param _quoteTwapTime The twap time for quoting\\n  function setQuoteTwapTime(uint32 _quoteTwapTime) external;\\n}\\n\",\"keccak256\":\"0x187ab1606deb0ffaa49342c2964ddc93022651a2936a19642475a3ec6bce29b9\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n// solhint-disable func-name-mixedcase\\ninterface IKeep3rV1 is IERC20, IERC20Metadata {\\n  // Structs\\n  struct Checkpoint {\\n    uint32 fromBlock;\\n    uint256 votes;\\n  }\\n\\n  // Events\\n  event DelegateChanged(address indexed _delegator, address indexed _fromDelegate, address indexed _toDelegate);\\n  event DelegateVotesChanged(address indexed _delegate, uint256 _previousBalance, uint256 _newBalance);\\n  event SubmitJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event ApplyCredit(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event RemoveJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event UnbondJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event JobAdded(address indexed _job, uint256 _block, address _governance);\\n  event JobRemoved(address indexed _job, uint256 _block, address _governance);\\n  event KeeperWorked(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _block, uint256 _amount);\\n  event KeeperBonding(address indexed _keeper, uint256 _block, uint256 _active, uint256 _bond);\\n  event KeeperBonded(address indexed _keeper, uint256 _block, uint256 _activated, uint256 _bond);\\n  event KeeperUnbonding(address indexed _keeper, uint256 _block, uint256 _deactive, uint256 _bond);\\n  event KeeperUnbound(address indexed _keeper, uint256 _block, uint256 _deactivated, uint256 _bond);\\n  event KeeperSlashed(address indexed _keeper, address indexed _slasher, uint256 _block, uint256 _slash);\\n  event KeeperDispute(address indexed _keeper, uint256 _block);\\n  event KeeperResolved(address indexed _keeper, uint256 _block);\\n  event TokenCreditAddition(address indexed _credit, address indexed _job, address indexed _creditor, uint256 _block, uint256 _amount);\\n\\n  // Variables\\n  function KPRH() external returns (address);\\n\\n  function delegates(address _delegator) external view returns (address);\\n\\n  function checkpoints(address _account, uint32 _checkpoint) external view returns (Checkpoint memory);\\n\\n  function numCheckpoints(address _account) external view returns (uint32);\\n\\n  function DOMAIN_TYPEHASH() external returns (bytes32);\\n\\n  function DOMAINSEPARATOR() external returns (bytes32);\\n\\n  function DELEGATION_TYPEHASH() external returns (bytes32);\\n\\n  function PERMIT_TYPEHASH() external returns (bytes32);\\n\\n  function nonces(address _user) external view returns (uint256);\\n\\n  function BOND() external returns (uint256);\\n\\n  function UNBOND() external returns (uint256);\\n\\n  function LIQUIDITYBOND() external returns (uint256);\\n\\n  function FEE() external returns (uint256);\\n\\n  function BASE() external returns (uint256);\\n\\n  function ETH() external returns (address);\\n\\n  function bondings(address _user, address _bonding) external view returns (uint256);\\n\\n  function canWithdrawAfter(address _user, address _bonding) external view returns (uint256);\\n\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function pendingbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function bonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function votes(address _delegator) external view returns (uint256);\\n\\n  function firstSeen(address _keeper) external view returns (uint256);\\n\\n  function disputes(address _keeper) external view returns (bool);\\n\\n  function lastJob(address _keeper) external view returns (uint256);\\n\\n  function workCompleted(address _keeper) external view returns (uint256);\\n\\n  function jobs(address _job) external view returns (bool);\\n\\n  function credits(address _job, address _credit) external view returns (uint256);\\n\\n  function liquidityProvided(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmountsUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function jobProposalDelay(address _job) external view returns (uint256);\\n\\n  function liquidityApplied(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmount(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function keepers(address _keeper) external view returns (bool);\\n\\n  function blacklist(address _keeper) external view returns (bool);\\n\\n  function keeperList(uint256 _index) external view returns (address);\\n\\n  function jobList(uint256 _index) external view returns (address);\\n\\n  function governance() external returns (address);\\n\\n  function pendingGovernance() external returns (address);\\n\\n  function liquidityAccepted(address _liquidity) external view returns (bool);\\n\\n  function liquidityPairs(uint256 _index) external view returns (address);\\n\\n  // Methods\\n  function getCurrentVotes(address _account) external view returns (uint256);\\n\\n  function addCreditETH(address _job) external payable;\\n\\n  function addCredit(\\n    address _credit,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function pairs() external view returns (address[] memory);\\n\\n  function addLiquidityToJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function applyCreditToJob(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external;\\n\\n  function unbondLiquidityFromJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function removeLiquidityFromJob(address _liquidity, address _job) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function burn(uint256 _amount) external;\\n\\n  function worked(address _keeper) external;\\n\\n  function receipt(\\n    address _credit,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function receiptETH(address _keeper, uint256 _amount) external;\\n\\n  function addJob(address _job) external;\\n\\n  function getJobs() external view returns (address[] memory);\\n\\n  function removeJob(address _job) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function setGovernance(address _governance) external;\\n\\n  function acceptGovernance() external;\\n\\n  function isKeeper(address _keeper) external returns (bool);\\n\\n  function isMinKeeper(\\n    address _keeper,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  function getKeepers() external view returns (address[] memory);\\n\\n  function activate(address _bonding) external;\\n\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function withdraw(address _bonding) external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xa9806cd6666ab1b7375ef72446964a72397fd4cefc7cc8c5b37caa7c50df0246\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5266,
                "contract": "solidity/contracts/Keep3rHelper.sol:Keep3rHelper",
                "label": "governance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/Keep3rHelper.sol:Keep3rHelper",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 2986,
                "contract": "solidity/contracts/Keep3rHelper.sol:Keep3rHelper",
                "label": "minBoost",
                "offset": 0,
                "slot": "2",
                "type": "t_uint256"
              },
              {
                "astId": 2991,
                "contract": "solidity/contracts/Keep3rHelper.sol:Keep3rHelper",
                "label": "maxBoost",
                "offset": 0,
                "slot": "3",
                "type": "t_uint256"
              },
              {
                "astId": 2996,
                "contract": "solidity/contracts/Keep3rHelper.sol:Keep3rHelper",
                "label": "targetBond",
                "offset": 0,
                "slot": "4",
                "type": "t_uint256"
              },
              {
                "astId": 3001,
                "contract": "solidity/contracts/Keep3rHelper.sol:Keep3rHelper",
                "label": "workExtraGas",
                "offset": 0,
                "slot": "5",
                "type": "t_uint256"
              },
              {
                "astId": 3006,
                "contract": "solidity/contracts/Keep3rHelper.sol:Keep3rHelper",
                "label": "quoteTwapTime",
                "offset": 0,
                "slot": "6",
                "type": "t_uint32"
              },
              {
                "astId": 3010,
                "contract": "solidity/contracts/Keep3rHelper.sol:Keep3rHelper",
                "label": "keep3rV2",
                "offset": 4,
                "slot": "6",
                "type": "t_address"
              },
              {
                "astId": 3015,
                "contract": "solidity/contracts/Keep3rHelper.sol:Keep3rHelper",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "7",
                "type": "t_struct(Kp3rWethPool)11533_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_struct(Kp3rWethPool)11533_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rHelperParameters.Kp3rWethPool",
                "members": [
                  {
                    "astId": 11530,
                    "contract": "solidity/contracts/Keep3rHelper.sol:Keep3rHelper",
                    "label": "poolAddress",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_address"
                  },
                  {
                    "astId": 11532,
                    "contract": "solidity/contracts/Keep3rHelper.sol:Keep3rHelper",
                    "label": "isKP3RToken0",
                    "offset": 20,
                    "slot": "0",
                    "type": "t_bool"
                  }
                ],
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              },
              "t_uint32": {
                "encoding": "inplace",
                "label": "uint32",
                "numberOfBytes": "4"
              }
            }
          },
          "userdoc": {
            "errors": {
              "InvalidKp3rPool()": [
                {
                  "notice": "Throws when pool does not have KP3R as token0 nor token1"
                }
              ],
              "LiquidityPairInvalid()": [
                {
                  "notice": "Throws when none of the tokens in the liquidity pair is KP3R"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ]
            },
            "events": {
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "Keep3rV2Change(address)": {
                "notice": "Emitted when the Keep3r V2 address is changed"
              },
              "Kp3rWethPoolChange(address,bool)": {
                "notice": "Emitted when the kp3r weth pool is changed"
              },
              "MaxBoostChange(uint256)": {
                "notice": "Emitted when the maximum boost multiplier is changed"
              },
              "MinBoostChange(uint256)": {
                "notice": "Emitted when the minimum boost multiplier is changed"
              },
              "QuoteTwapTimeChange(uint32)": {
                "notice": "Emitted when the quote twap time is changed"
              },
              "TargetBondChange(uint256)": {
                "notice": "Emitted when the target bond amount is changed"
              },
              "WorkExtraGasChange(uint256)": {
                "notice": "Emitted when the work extra gas amount is changed"
              }
            },
            "kind": "user",
            "methods": {
              "BOOST_BASE()": {
                "notice": "The boost base used to calculate the boost rewards for the keeper"
              },
              "KP3R()": {
                "notice": "Address of KP3R token"
              },
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "bonds(address)": {
                "notice": "Returns the amount of KP3R the keeper has bonded"
              },
              "getKP3RsAtTick(uint256,int56,uint256)": {
                "notice": "Given a tick and a liquidity amount, calculates the underlying KP3R tokens"
              },
              "getPaymentParams(uint256)": {
                "notice": "Get multiplier, quote, and extra, in order to calculate keeper payment"
              },
              "getPoolTokens(address)": {
                "notice": "Given a pool address, returns the underlying tokens of the pair"
              },
              "getQuoteAtTick(uint128,int56,uint256)": {
                "notice": "Given a tick and a token amount, calculates the output in correspondant token"
              },
              "getRewardAmount(uint256)": {
                "notice": "Calculates the reward (in KP3R) that corresponds to tx.origin for using gas"
              },
              "getRewardAmountFor(address,uint256)": {
                "notice": "Calculates the reward (in KP3R) that corresponds to a keeper for using gas"
              },
              "getRewardBoostFor(uint256)": {
                "notice": "Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "isKP3RToken0(address)": {
                "notice": "Defines the order of the tokens in the pair for twap calculations"
              },
              "keep3rV2()": {
                "notice": "Address of Keep3r V2"
              },
              "kp3rWethPool()": {
                "notice": "KP3R-WETH pool that is being used as oracle"
              },
              "maxBoost()": {
                "notice": "The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE"
              },
              "minBoost()": {
                "notice": "The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE"
              },
              "observe(address,uint32[])": {
                "notice": "Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "quote(uint256)": {
                "notice": "Calculates the amount of KP3R that corresponds to the ETH passed into the function"
              },
              "quoteTwapTime()": {
                "notice": "The twap time for quoting"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setKeep3rV2(address)": {
                "notice": "Sets the Keep3r V2 address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets KP3R-WETH pool"
              },
              "setMaxBoost(uint256)": {
                "notice": "Sets the maximum boost multiplier"
              },
              "setMinBoost(uint256)": {
                "notice": "Sets the minimum boost multiplier"
              },
              "setQuoteTwapTime(uint32)": {
                "notice": "Sets the quote twap time"
              },
              "setTargetBond(uint256)": {
                "notice": "Sets the target bond amount"
              },
              "setWorkExtraGas(uint256)": {
                "notice": "Sets the work extra gas amount"
              },
              "targetBond()": {
                "notice": "The targeted amount of bonded KP3Rs to max-up reward multiplier         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional"
              },
              "workExtraGas()": {
                "notice": "The amount of unaccounted gas that is going to be added to keeper payments"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/Keep3rHelperParameters.sol": {
        "Keep3rHelperParameters": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV2",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "InvalidKp3rPool",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV2",
                  "type": "address"
                }
              ],
              "name": "Keep3rV2Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_address",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "_isKP3RToken0",
                  "type": "bool"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_maxBoost",
                  "type": "uint256"
                }
              ],
              "name": "MaxBoostChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_minBoost",
                  "type": "uint256"
                }
              ],
              "name": "MinBoostChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint32",
                  "name": "_quoteTwapTime",
                  "type": "uint32"
                }
              ],
              "name": "QuoteTwapTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_targetBond",
                  "type": "uint256"
                }
              ],
              "name": "TargetBondChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_workExtraGas",
                  "type": "uint256"
                }
              ],
              "name": "WorkExtraGasChange",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "BOOST_BASE",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "KP3R",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV2",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "poolAddress",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "isKP3RToken0",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "maxBoost",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "minBoost",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "quoteTwapTime",
              "outputs": [
                {
                  "internalType": "uint32",
                  "name": "",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV2",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV2",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_poolAddress",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_maxBoost",
                  "type": "uint256"
                }
              ],
              "name": "setMaxBoost",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_minBoost",
                  "type": "uint256"
                }
              ],
              "name": "setMinBoost",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint32",
                  "name": "_quoteTwapTime",
                  "type": "uint32"
                }
              ],
              "name": "setQuoteTwapTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_targetBond",
                  "type": "uint256"
                }
              ],
              "name": "setTargetBond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_workExtraGas",
                  "type": "uint256"
                }
              ],
              "name": "setWorkExtraGas",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "targetBond",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "workExtraGas",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setKeep3rV2(address)": {
                "params": {
                  "_keep3rV2": "The address of Keep3r V2"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_poolAddress": "The address of the KP3R-WETH pool"
                }
              },
              "setMaxBoost(uint256)": {
                "params": {
                  "_maxBoost": "The maximum boost multiplier"
                }
              },
              "setMinBoost(uint256)": {
                "params": {
                  "_minBoost": "The minimum boost multiplier"
                }
              },
              "setQuoteTwapTime(uint32)": {
                "params": {
                  "_quoteTwapTime": "The twap time for quoting"
                }
              },
              "setTargetBond(uint256)": {
                "params": {
                  "_targetBond": "The target bond amount"
                }
              },
              "setWorkExtraGas(uint256)": {
                "params": {
                  "_workExtraGas": "The work extra gas"
                }
              }
            },
            "stateVariables": {
              "BOOST_BASE": {
                "return": "_base The boost base number",
                "returns": {
                  "_0": "_base The boost base number"
                }
              },
              "KP3R": {
                "return": "_kp3r Address of KP3R token",
                "returns": {
                  "_0": "_kp3r Address of KP3R token"
                }
              },
              "keep3rV2": {
                "return": "_keep3rV2 Address of Keep3r V2",
                "returns": {
                  "_0": "_keep3rV2 Address of Keep3r V2"
                }
              },
              "kp3rWethPool": {
                "returns": {
                  "isKP3RToken0": "True if calling the token0 method of the pool returns the KP3R token address",
                  "poolAddress": "Address of the pool"
                }
              },
              "maxBoost": {
                "return": "_multiplier The maximum boost multiplier",
                "returns": {
                  "_0": "_multiplier The maximum boost multiplier"
                }
              },
              "minBoost": {
                "return": "_multiplier The minimum boost multiplier",
                "returns": {
                  "_0": "_multiplier The minimum boost multiplier"
                }
              },
              "quoteTwapTime": {
                "return": "_quoteTwapTime The twap time",
                "returns": {
                  "_0": "_quoteTwapTime The twap time"
                }
              },
              "targetBond": {
                "return": "_target The amount of KP3R that comforms the targetBond",
                "returns": {
                  "_0": "_target The amount of KP3R that comforms the targetBond"
                }
              },
              "workExtraGas": {
                "return": "_workExtraGas The work unaccounted gas amount",
                "returns": {
                  "_0": "_workExtraGas The work unaccounted gas amount"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_3034": {
                  "entryPoint": null,
                  "id": 3034,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_setKp3rWethPool_3206": {
                  "entryPoint": 236,
                  "id": 3206,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 662,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 690,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address_fromMemory": {
                  "entryPoint": 724,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:704:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "277:127:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "323:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "332:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "335:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "325:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "325:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "325:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "298:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "307:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "294:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "294:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "319:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "290:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "290:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "287:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "348:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "388:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "358:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "358:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "348:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "243:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "254:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "266:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:208:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "507:195:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "553:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "562:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "565:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "555:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "555:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "555:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "528:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "537:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "524:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "524:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "549:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "520:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "520:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "517:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "578:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "618:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "588:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "588:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "578:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "637:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "681:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "692:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "677:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "677:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "647:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "647:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "637:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "465:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "476:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "488:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "496:6:84",
                            "type": ""
                          }
                        ],
                        "src": "409:293:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "6080604052612af8600255612ee0600355680ad78ebc5ac620000060045561c3506005556006805463ffffffff191661025817905534801561004057600080fd5b5060405162000c6138038062000c61833981016040819052610061916102d4565b806001600160a01b0381166100885760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392831617905560068054600160201b600160c01b031916640100000000928516929092029190911790556100e57311b7a6bc0259ed6cf9db8f499988f9ecc7167bf56100ec565b5050610307565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561014557600080fd5b505afa158015610159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017d91906102b2565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156101e257600080fd5b505afa1580156101f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061021a91906102b2565b6001600160a01b031614905081158015610232575080155b1561025057604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b80516001600160a01b03811681146102ad57600080fd5b919050565b6000602082840312156102c457600080fd5b6102cd82610296565b9392505050565b600080604083850312156102e757600080fd5b6102f083610296565b91506102fe60208401610296565b90509250929050565b61094a80620003176000396000f3fe608060405234801561001057600080fd5b50600436106100fc5760003560e01c806305e0b9a0146101015780630c52583514610132578063117cfc1b14610147578063160e1e3114610161578063238efcbc1461017457806325f09e611461017c5780632742b9e714610193578063289adb441461019c57806337090c2f146101af5780633cc7ab30146101b85780633facf242146101cb5780635aa6e675146101d45780637b40c913146101e75780638561579c146102145780639aaad6791461021d578063ab033ea914610242578063ab5dce0014610255578063b2e0df9614610268578063b93f5af01461027b578063f39c38a01461028e575b600080fd5b61011c731ceb5cb57c4d4e2b2433641b95dd330a33185a4481565b60405161012991906108cd565b60405180910390f35b61014561014036600461088e565b6102a1565b005b60065461011c90600160201b90046001600160a01b031681565b61014561016f36600461084d565b610308565b610145610383565b61018561271081565b604051908152602001610129565b61018560045481565b6101456101aa36600461088e565b61040f565b61018560035481565b6101456101c636600461084d565b61046f565b61018560055481565b60005461011c906001600160a01b031681565b600754610206906001600160a01b03811690600160a01b900460ff1682565b6040516101299291906108e1565b61018560025481565b60065461022d9063ffffffff1681565b60405163ffffffff9091168152602001610129565b61014561025036600461084d565b6104fa565b61014561026336600461088e565b610570565b61014561027636600461088e565b6105d0565b6101456102893660046108a7565b610630565b60015461011c906001600160a01b031681565b6000546001600160a01b031633146102cc576040516354348f0360e01b815260040160405180910390fd5b60028190556040518181527f0919fdaaac0f59c6bc7eeef4f975d6163475220f1e4820d0bce99c84c51cac1d906020015b60405180910390a150565b6000546001600160a01b03163314610333576040516354348f0360e01b815260040160405180910390fd5b61033c816106a3565b6007546040517f554c636366d5fc882a9ab4b7b9d5181781d1a7076abe50ed410365620dcf4108916102fd916001600160a01b03821691600160a01b900460ff16906108e1565b6001546001600160a01b031633146103ae57604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b691610405916108cd565b60405180910390a1565b6000546001600160a01b0316331461043a576040516354348f0360e01b815260040160405180910390fd5b60058190556040518181527fed847bdbab1a30becee18585f23c759bd06156561390d2e7fbffd18e74b56c9b906020016102fd565b6000546001600160a01b0316331461049a576040516354348f0360e01b815260040160405180910390fd5b60068054600160201b600160c01b031916600160201b6001600160a01b03848116820292909217928390556040517fcf744e4fc39d49b6d8103035078629b8a3be95adc007b0d663e96bdff777b10a936102fd93929004909116906108cd565b6000546001600160a01b03163314610525576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906102fd9083906108cd565b6000546001600160a01b0316331461059b576040516354348f0360e01b815260040160405180910390fd5b60048190556040518181527feac367d684b6ac6c6ae7e3e852c06f17e6354e0f1e7122832c3e6d17e0a2b71e906020016102fd565b6000546001600160a01b031633146105fb576040516354348f0360e01b815260040160405180910390fd5b60038190556040518181527fa1292b4e7a0d916ccfd2bc83858b05f328e344d1f0f507d97ac66723ac7c2aaa906020016102fd565b6000546001600160a01b0316331461065b576040516354348f0360e01b815260040160405180910390fd5b6006805463ffffffff191663ffffffff83169081179091556040519081527fc806e26fb64e3a95f4b70abf4d87280555696244d01068b5f45b0e515aceb1de906020016102fd565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156106fc57600080fd5b505afa158015610710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107349190610871565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561079957600080fd5b505afa1580156107ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d19190610871565b6001600160a01b0316149050811580156107e9575080155b1561080757604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b60006020828403121561085f57600080fd5b813561086a816108fc565b9392505050565b60006020828403121561088357600080fd5b815161086a816108fc565b6000602082840312156108a057600080fd5b5035919050565b6000602082840312156108b957600080fd5b813563ffffffff8116811461086a57600080fd5b6001600160a01b0391909116815260200190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b038116811461091157600080fd5b5056fea2646970667358221220dbcd68c3c0dd92c42dd5bd4488bab73fd1a9f0fcac2ef9883941cebca211851864736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x2AF8 PUSH1 0x2 SSTORE PUSH2 0x2EE0 PUSH1 0x3 SSTORE PUSH9 0xAD78EBC5AC6200000 PUSH1 0x4 SSTORE PUSH2 0xC350 PUSH1 0x5 SSTORE PUSH1 0x6 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH2 0x258 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xC61 CODESIZE SUB DUP1 PUSH3 0xC61 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x61 SWAP2 PUSH2 0x2D4 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x88 JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH5 0x100000000 SWAP3 DUP6 AND SWAP3 SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xE5 PUSH20 0x11B7A6BC0259ED6CF9DB8F499988F9ECC7167BF5 PUSH2 0xEC JUMP JUMPDEST POP POP PUSH2 0x307 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x145 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x159 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17D SWAP2 SWAP1 PUSH2 0x2B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21A SWAP2 SWAP1 PUSH2 0x2B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0x232 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0x250 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7C395FED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP1 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2CD DUP3 PUSH2 0x296 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F0 DUP4 PUSH2 0x296 JUMP JUMPDEST SWAP2 POP PUSH2 0x2FE PUSH1 0x20 DUP5 ADD PUSH2 0x296 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x94A DUP1 PUSH3 0x317 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xFC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5E0B9A0 EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0xC525835 EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x117CFC1B EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0x25F09E61 EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x2742B9E7 EQ PUSH2 0x193 JUMPI DUP1 PUSH4 0x289ADB44 EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0x37090C2F EQ PUSH2 0x1AF JUMPI DUP1 PUSH4 0x3CC7AB30 EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x3FACF242 EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0x8561579C EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0x9AAAD679 EQ PUSH2 0x21D JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x242 JUMPI DUP1 PUSH4 0xAB5DCE00 EQ PUSH2 0x255 JUMPI DUP1 PUSH4 0xB2E0DF96 EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0xB93F5AF0 EQ PUSH2 0x27B JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x28E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11C PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x129 SWAP2 SWAP1 PUSH2 0x8CD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x145 PUSH2 0x140 CALLDATASIZE PUSH1 0x4 PUSH2 0x88E JUMP JUMPDEST PUSH2 0x2A1 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x11C SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x16F CALLDATASIZE PUSH1 0x4 PUSH2 0x84D JUMP JUMPDEST PUSH2 0x308 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x383 JUMP JUMPDEST PUSH2 0x185 PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x185 PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x1AA CALLDATASIZE PUSH1 0x4 PUSH2 0x88E JUMP JUMPDEST PUSH2 0x40F JUMP JUMPDEST PUSH2 0x185 PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x1C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x84D JUMP JUMPDEST PUSH2 0x46F JUMP JUMPDEST PUSH2 0x185 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x11C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0x206 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x129 SWAP3 SWAP2 SWAP1 PUSH2 0x8E1 JUMP JUMPDEST PUSH2 0x185 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x22D SWAP1 PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x250 CALLDATASIZE PUSH1 0x4 PUSH2 0x84D JUMP JUMPDEST PUSH2 0x4FA JUMP JUMPDEST PUSH2 0x145 PUSH2 0x263 CALLDATASIZE PUSH1 0x4 PUSH2 0x88E JUMP JUMPDEST PUSH2 0x570 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x276 CALLDATASIZE PUSH1 0x4 PUSH2 0x88E JUMP JUMPDEST PUSH2 0x5D0 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x289 CALLDATASIZE PUSH1 0x4 PUSH2 0x8A7 JUMP JUMPDEST PUSH2 0x630 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x11C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2CC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x919FDAAAC0F59C6BC7EEEF4F975D6163475220F1E4820D0BCE99C84C51CAC1D SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x333 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x33C DUP2 PUSH2 0x6A3 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH32 0x554C636366D5FC882A9AB4B7B9D5181781D1A7076ABE50ED410365620DCF4108 SWAP2 PUSH2 0x2FD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 PUSH2 0x8E1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3AE JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x405 SWAP2 PUSH2 0x8CD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x43A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xED847BDBAB1A30BECEE18585F23C759BD06156561390D2E7FBFFD18E74B56C9B SWAP1 PUSH1 0x20 ADD PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x49A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND DUP3 MUL SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xCF744E4FC39D49B6D8103035078629B8A3BE95ADC007B0D663E96BDFF777B10A SWAP4 PUSH2 0x2FD SWAP4 SWAP3 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 PUSH2 0x8CD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x525 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x2FD SWAP1 DUP4 SWAP1 PUSH2 0x8CD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x59B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xEAC367D684B6AC6C6AE7E3E852C06F17E6354E0F1E7122832C3E6D17E0A2B71E SWAP1 PUSH1 0x20 ADD PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xA1292B4E7A0D916CCFD2BC83858B05F328E344D1F0F507D97AC66723AC7C2AAA SWAP1 PUSH1 0x20 ADD PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x65B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC806E26FB64E3A95F4B70ABF4D87280555696244D01068B5F45B0E515ACEB1DE SWAP1 PUSH1 0x20 ADD PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x710 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x734 SWAP2 SWAP1 PUSH2 0x871 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x799 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7D1 SWAP2 SWAP1 PUSH2 0x871 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0x7E9 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0x807 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7C395FED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP1 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x85F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x86A DUP2 PUSH2 0x8FC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x883 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x86A DUP2 PUSH2 0x8FC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x86A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0xCD PUSH9 0xC3C0DD92C42DD5BD44 DUP9 0xBA 0xB7 EXTCODEHASH 0xD1 0xA9 CREATE 0xFC 0xAC 0x2E 0xF9 DUP9 CODECOPY COINBASE 0xCE 0xBC LOG2 GT DUP6 XOR PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "471:2986:19:-:0;;;851:6;816:41;;939:6;904:41;;1029:9;992:46;;1124:6;1085:45;;1177:49;;;-1:-1:-1;;1177:49:19;1216:10;1177:49;;;1422:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1485:11;-1:-1:-1;;;;;357:25:28;;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;-1:-1:-1;;;;;422:24:28;;;;;;1504:8:19::1;:20:::0;;-1:-1:-1;;;;;;;;1504:20:19::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;1530:60:::1;1547:42;1530:16;:60::i;:::-;1422:173:::0;;471:2986;;3117:338;3180:18;628:42;-1:-1:-1;;;;;3201:45:19;3216:12;-1:-1:-1;;;;;3201:35:19;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3201:45:19;;3180:66;;3252:18;628:42;-1:-1:-1;;;;;3273:45:19;3288:12;-1:-1:-1;;;;;3273:35:19;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3273:45:19;;3252:66;;3330:13;3329:14;:32;;;;;3348:13;3347:14;3329:32;3325:62;;;3370:17;;-1:-1:-1;;;3370:17:19;;;;;;;;;;;3325:62;-1:-1:-1;3409:41:19;;;;;;;;;-1:-1:-1;;;;;3409:41:19;;;;;;;;;;;;;;;;;3394:12;:56;;-1:-1:-1;;;;;;3394:56:19;;;;-1:-1:-1;;;3394:56:19;;;;;;;;;3117:338::o;14:177:84:-;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:208::-;266:6;319:2;307:9;298:7;294:23;290:32;287:52;;;335:1;332;325:12;287:52;358:40;388:9;358:40;:::i;:::-;348:50;196:208;-1:-1:-1;;;196:208:84:o;409:293::-;488:6;496;549:2;537:9;528:7;524:23;520:32;517:52;;;565:1;562;555:12;517:52;588:40;618:9;588:40;:::i;:::-;578:50;;647:49;692:2;681:9;677:18;647:49;:::i;:::-;637:59;;409:293;;;;;:::o;:::-;471:2986:19;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@BOOST_BASE_2981": {
                  "entryPoint": null,
                  "id": 2981,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@KP3R_2976": {
                  "entryPoint": null,
                  "id": 2976,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_setKp3rWethPool_3206": {
                  "entryPoint": 1699,
                  "id": 3206,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 899,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV2_3010": {
                  "entryPoint": null,
                  "id": 3010,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@kp3rWethPool_3015": {
                  "entryPoint": null,
                  "id": 3015,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@maxBoost_2991": {
                  "entryPoint": null,
                  "id": 2991,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@minBoost_2986": {
                  "entryPoint": null,
                  "id": 2986,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@quoteTwapTime_3006": {
                  "entryPoint": null,
                  "id": 3006,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 1274,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV2_3127": {
                  "entryPoint": 1135,
                  "id": 3127,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_3055": {
                  "entryPoint": 776,
                  "id": 3055,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setMaxBoost_3091": {
                  "entryPoint": 1488,
                  "id": 3091,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setMinBoost_3073": {
                  "entryPoint": 673,
                  "id": 3073,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setQuoteTwapTime_3163": {
                  "entryPoint": 1584,
                  "id": 3163,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setTargetBond_3109": {
                  "entryPoint": 1392,
                  "id": 3109,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setWorkExtraGas_3145": {
                  "entryPoint": 1039,
                  "id": 3145,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@targetBond_2996": {
                  "entryPoint": null,
                  "id": 2996,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@workExtraGas_3001": {
                  "entryPoint": null,
                  "id": 3001,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 2125,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 2161,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 2190,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint32": {
                  "entryPoint": 2215,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 2253,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed": {
                  "entryPoint": 2273,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "validator_revert_address": {
                  "entryPoint": 2300,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1997:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "84:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "130:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "139:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "142:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "132:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "132:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "132:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "105:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "114:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "101:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "101:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "126:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "97:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "97:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "94:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "155:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "181:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "168:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "168:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "159:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "225:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "200:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "200:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "200:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "240:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "250:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "240:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "50:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "61:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "73:6:84",
                            "type": ""
                          }
                        ],
                        "src": "14:247:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "347:170:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "393:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "402:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "405:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "395:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "395:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "395:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "368:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "377:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "364:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "364:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "389:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "360:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "360:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "357:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "418:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "437:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "431:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "431:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "422:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "481:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "456:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "456:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "456:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "496:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "506:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "496:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "313:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "324:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "336:6:84",
                            "type": ""
                          }
                        ],
                        "src": "266:251:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "592:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "638:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "647:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "650:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "640:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "640:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "640:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "613:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "622:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "609:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "609:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "634:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "605:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "605:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "602:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "663:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "686:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "673:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "673:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "663:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "558:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "569:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "581:6:84",
                            "type": ""
                          }
                        ],
                        "src": "522:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "776:207:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "822:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "831:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "834:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "824:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "824:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "824:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "797:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "806:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "793:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "793:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "818:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "789:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "789:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "786:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "847:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "873:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "860:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "860:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "851:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "937:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "946:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "949:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "939:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "939:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "939:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "905:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "916:5:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "923:10:84",
                                            "type": "",
                                            "value": "0xffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "912:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "912:22:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "902:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "902:33:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "895:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "895:41:84"
                              },
                              "nodeType": "YulIf",
                              "src": "892:61:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "962:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "972:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "962:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "742:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "753:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "765:6:84",
                            "type": ""
                          }
                        ],
                        "src": "707:276:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1089:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1099:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1111:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1122:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1107:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1107:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1099:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1141:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1156:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1172:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1177:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1168:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1168:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1181:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1164:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1164:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1152:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1152:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1134:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1134:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1134:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1058:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1069:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1080:4:84",
                            "type": ""
                          }
                        ],
                        "src": "988:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1319:161:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1329:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1341:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1352:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1337:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1337:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1329:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1371:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1386:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1402:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1407:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1398:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1398:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1411:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1394:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1394:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1382:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1382:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1364:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1364:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1364:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1435:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1446:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1431:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1431:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "1465:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "1458:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1458:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "1451:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1451:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1424:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1424:50:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1424:50:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1280:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1291:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1299:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1310:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1196:284:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1586:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1596:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1608:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1619:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1604:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1604:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1596:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1638:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1649:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1631:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1631:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1631:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1555:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1566:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1577:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1485:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1766:93:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1776:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1788:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1799:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1784:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1784:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1776:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1818:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1833:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1841:10:84",
                                        "type": "",
                                        "value": "0xffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1829:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1829:23:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1811:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1811:42:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1811:42:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1735:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1746:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1757:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1667:192:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1909:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1973:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1982:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1985:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1975:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1975:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1975:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1932:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "1943:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1958:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1963:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1954:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1954:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1967:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "1950:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1950:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "1939:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1939:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1929:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1929:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1922:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1922:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1919:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1898:5:84",
                            "type": ""
                          }
                        ],
                        "src": "1864:131:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100fc5760003560e01c806305e0b9a0146101015780630c52583514610132578063117cfc1b14610147578063160e1e3114610161578063238efcbc1461017457806325f09e611461017c5780632742b9e714610193578063289adb441461019c57806337090c2f146101af5780633cc7ab30146101b85780633facf242146101cb5780635aa6e675146101d45780637b40c913146101e75780638561579c146102145780639aaad6791461021d578063ab033ea914610242578063ab5dce0014610255578063b2e0df9614610268578063b93f5af01461027b578063f39c38a01461028e575b600080fd5b61011c731ceb5cb57c4d4e2b2433641b95dd330a33185a4481565b60405161012991906108cd565b60405180910390f35b61014561014036600461088e565b6102a1565b005b60065461011c90600160201b90046001600160a01b031681565b61014561016f36600461084d565b610308565b610145610383565b61018561271081565b604051908152602001610129565b61018560045481565b6101456101aa36600461088e565b61040f565b61018560035481565b6101456101c636600461084d565b61046f565b61018560055481565b60005461011c906001600160a01b031681565b600754610206906001600160a01b03811690600160a01b900460ff1682565b6040516101299291906108e1565b61018560025481565b60065461022d9063ffffffff1681565b60405163ffffffff9091168152602001610129565b61014561025036600461084d565b6104fa565b61014561026336600461088e565b610570565b61014561027636600461088e565b6105d0565b6101456102893660046108a7565b610630565b60015461011c906001600160a01b031681565b6000546001600160a01b031633146102cc576040516354348f0360e01b815260040160405180910390fd5b60028190556040518181527f0919fdaaac0f59c6bc7eeef4f975d6163475220f1e4820d0bce99c84c51cac1d906020015b60405180910390a150565b6000546001600160a01b03163314610333576040516354348f0360e01b815260040160405180910390fd5b61033c816106a3565b6007546040517f554c636366d5fc882a9ab4b7b9d5181781d1a7076abe50ed410365620dcf4108916102fd916001600160a01b03821691600160a01b900460ff16906108e1565b6001546001600160a01b031633146103ae57604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b691610405916108cd565b60405180910390a1565b6000546001600160a01b0316331461043a576040516354348f0360e01b815260040160405180910390fd5b60058190556040518181527fed847bdbab1a30becee18585f23c759bd06156561390d2e7fbffd18e74b56c9b906020016102fd565b6000546001600160a01b0316331461049a576040516354348f0360e01b815260040160405180910390fd5b60068054600160201b600160c01b031916600160201b6001600160a01b03848116820292909217928390556040517fcf744e4fc39d49b6d8103035078629b8a3be95adc007b0d663e96bdff777b10a936102fd93929004909116906108cd565b6000546001600160a01b03163314610525576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906102fd9083906108cd565b6000546001600160a01b0316331461059b576040516354348f0360e01b815260040160405180910390fd5b60048190556040518181527feac367d684b6ac6c6ae7e3e852c06f17e6354e0f1e7122832c3e6d17e0a2b71e906020016102fd565b6000546001600160a01b031633146105fb576040516354348f0360e01b815260040160405180910390fd5b60038190556040518181527fa1292b4e7a0d916ccfd2bc83858b05f328e344d1f0f507d97ac66723ac7c2aaa906020016102fd565b6000546001600160a01b0316331461065b576040516354348f0360e01b815260040160405180910390fd5b6006805463ffffffff191663ffffffff83169081179091556040519081527fc806e26fb64e3a95f4b70abf4d87280555696244d01068b5f45b0e515aceb1de906020016102fd565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156106fc57600080fd5b505afa158015610710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107349190610871565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561079957600080fd5b505afa1580156107ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d19190610871565b6001600160a01b0316149050811580156107e9575080155b1561080757604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b60006020828403121561085f57600080fd5b813561086a816108fc565b9392505050565b60006020828403121561088357600080fd5b815161086a816108fc565b6000602082840312156108a057600080fd5b5035919050565b6000602082840312156108b957600080fd5b813563ffffffff8116811461086a57600080fd5b6001600160a01b0391909116815260200190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b038116811461091157600080fd5b5056fea2646970667358221220dbcd68c3c0dd92c42dd5bd4488bab73fd1a9f0fcac2ef9883941cebca211851864736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xFC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5E0B9A0 EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0xC525835 EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x117CFC1B EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0x25F09E61 EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x2742B9E7 EQ PUSH2 0x193 JUMPI DUP1 PUSH4 0x289ADB44 EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0x37090C2F EQ PUSH2 0x1AF JUMPI DUP1 PUSH4 0x3CC7AB30 EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x3FACF242 EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0x8561579C EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0x9AAAD679 EQ PUSH2 0x21D JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x242 JUMPI DUP1 PUSH4 0xAB5DCE00 EQ PUSH2 0x255 JUMPI DUP1 PUSH4 0xB2E0DF96 EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0xB93F5AF0 EQ PUSH2 0x27B JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x28E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11C PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x129 SWAP2 SWAP1 PUSH2 0x8CD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x145 PUSH2 0x140 CALLDATASIZE PUSH1 0x4 PUSH2 0x88E JUMP JUMPDEST PUSH2 0x2A1 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x11C SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x16F CALLDATASIZE PUSH1 0x4 PUSH2 0x84D JUMP JUMPDEST PUSH2 0x308 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x383 JUMP JUMPDEST PUSH2 0x185 PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x185 PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x1AA CALLDATASIZE PUSH1 0x4 PUSH2 0x88E JUMP JUMPDEST PUSH2 0x40F JUMP JUMPDEST PUSH2 0x185 PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x1C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x84D JUMP JUMPDEST PUSH2 0x46F JUMP JUMPDEST PUSH2 0x185 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x11C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0x206 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x129 SWAP3 SWAP2 SWAP1 PUSH2 0x8E1 JUMP JUMPDEST PUSH2 0x185 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x22D SWAP1 PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x250 CALLDATASIZE PUSH1 0x4 PUSH2 0x84D JUMP JUMPDEST PUSH2 0x4FA JUMP JUMPDEST PUSH2 0x145 PUSH2 0x263 CALLDATASIZE PUSH1 0x4 PUSH2 0x88E JUMP JUMPDEST PUSH2 0x570 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x276 CALLDATASIZE PUSH1 0x4 PUSH2 0x88E JUMP JUMPDEST PUSH2 0x5D0 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x289 CALLDATASIZE PUSH1 0x4 PUSH2 0x8A7 JUMP JUMPDEST PUSH2 0x630 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x11C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2CC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x919FDAAAC0F59C6BC7EEEF4F975D6163475220F1E4820D0BCE99C84C51CAC1D SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x333 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x33C DUP2 PUSH2 0x6A3 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH32 0x554C636366D5FC882A9AB4B7B9D5181781D1A7076ABE50ED410365620DCF4108 SWAP2 PUSH2 0x2FD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 PUSH2 0x8E1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3AE JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x405 SWAP2 PUSH2 0x8CD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x43A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xED847BDBAB1A30BECEE18585F23C759BD06156561390D2E7FBFFD18E74B56C9B SWAP1 PUSH1 0x20 ADD PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x49A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND DUP3 MUL SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xCF744E4FC39D49B6D8103035078629B8A3BE95ADC007B0D663E96BDFF777B10A SWAP4 PUSH2 0x2FD SWAP4 SWAP3 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 PUSH2 0x8CD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x525 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x2FD SWAP1 DUP4 SWAP1 PUSH2 0x8CD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x59B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xEAC367D684B6AC6C6AE7E3E852C06F17E6354E0F1E7122832C3E6D17E0A2B71E SWAP1 PUSH1 0x20 ADD PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xA1292B4E7A0D916CCFD2BC83858B05F328E344D1F0F507D97AC66723AC7C2AAA SWAP1 PUSH1 0x20 ADD PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x65B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC806E26FB64E3A95F4B70ABF4D87280555696244D01068B5F45B0E515ACEB1DE SWAP1 PUSH1 0x20 ADD PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x710 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x734 SWAP2 SWAP1 PUSH2 0x871 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x799 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7D1 SWAP2 SWAP1 PUSH2 0x871 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0x7E9 JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0x807 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7C395FED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP1 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x85F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x86A DUP2 PUSH2 0x8FC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x883 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x86A DUP2 PUSH2 0x8FC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x86A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0xCD PUSH9 0xC3C0DD92C42DD5BD44 DUP9 0xBA 0xB7 EXTCODEHASH 0xD1 0xA9 CREATE 0xFC 0xAC 0x2E 0xF9 DUP9 CODECOPY COINBASE 0xCE 0xBC LOG2 GT DUP6 XOR PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "471:2986:19:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;588:82;;628:42;588:82;;;;;;;;;:::i;:::-;;;;;;;;1890:139;;;;;;:::i;:::-;;:::i;:::-;;1273:32;;;;;-1:-1:-1;;;1273:32:19;;-1:-1:-1;;;;;1273:32:19;;;1641:203;;;;;;:::i;:::-;;:::i;680:175:28:-;;;:::i;717:52:19:-;;763:6;717:52;;;;;1631:25:84;;;1619:2;1604:18;717:52:19;1485:177:84;992:46:19;;;;;;2642:163;;;;;;:::i;:::-;;:::i;904:41::-;;;;;;2457:139;;;;;;:::i;:::-;;:::i;1085:45::-;;;;;;199:34:28;;;;;-1:-1:-1;;;;;199:34:28;;;1352:65:19;;;;;-1:-1:-1;;;;;1352:65:19;;;-1:-1:-1;;;1352:65:19;;;;;;;;;;;;;;:::i;816:41::-;;;;;;1177:49;;;;;;;;;;;;1841:10:84;1829:23;;;1811:42;;1799:2;1784:18;1177:49:19;1667:192:84;485:161:28;;;;;;:::i;:::-;;:::i;2260:151:19:-;;;;;;:::i;:::-;;:::i;2075:139::-;;;;;;:::i;:::-;;:::i;2851:168::-;;;;;;:::i;:::-;;:::i;268:41:28:-;;;;;-1:-1:-1;;;;;268:41:28;;;1890:139:19;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1969:8:19::1;:20:::0;;;2000:24:::1;::::0;1631:25:84;;;2000:24:19::1;::::0;1619:2:84;1604:18;2000:24:19::1;;;;;;;;1890:139:::0;:::o;1641:203::-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1727:30:19::1;1744:12;1727:16;:30::i;:::-;1787:12;:24:::0;1768:71:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;1787:24:19;::::1;::::0;-1:-1:-1;;;1813:25:19;::::1;;;::::0;1768:71:::1;:::i;680:175:28:-:0;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;::::1;754:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;2642:163:19:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2729:12:19::1;:28:::0;;;2768:32:::1;::::0;1631:25:84;;;2768:32:19::1;::::0;1619:2:84;1604:18;2768:32:19::1;1485:177:84::0;2457:139:19;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2536:8:19::1;:20:::0;;-1:-1:-1;;;;;;;;2536:20:19::1;-1:-1:-1::0;;;;;;;;2536:20:19;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;2567:24:::1;::::0;::::1;::::0;::::1;::::0;2582:8;;::::1;::::0;;::::1;::::0;2567:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;2260:151:19:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2343:10:19::1;:24:::0;;;2378:28:::1;::::0;1631:25:84;;;2378:28:19::1;::::0;1619:2:84;1604:18;2378:28:19::1;1485:177:84::0;2075:139:19;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2154:8:19::1;:20:::0;;;2185:24:::1;::::0;1631:25:84;;;2185:24:19::1;::::0;1619:2:84;1604:18;2185:24:19::1;1485:177:84::0;2851:168:19;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2939:13:19::1;:30:::0;;-1:-1:-1;;2939:30:19::1;;::::0;::::1;::::0;;::::1;::::0;;;2980:34:::1;::::0;1811:42:84;;;2980:34:19::1;::::0;1799:2:84;1784:18;2980:34:19::1;1667:192:84::0;3117:338:19;3180:18;628:42;-1:-1:-1;;;;;3201:45:19;3216:12;-1:-1:-1;;;;;3201:35:19;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3201:45:19;;3180:66;;3252:18;628:42;-1:-1:-1;;;;;3273:45:19;3288:12;-1:-1:-1;;;;;3273:35:19;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3273:45:19;;3252:66;;3330:13;3329:14;:32;;;;;3348:13;3347:14;3329:32;3325:62;;;3370:17;;-1:-1:-1;;;3370:17:19;;;;;;;;;;;3325:62;-1:-1:-1;3409:41:19;;;;;;;;;-1:-1:-1;;;;;3409:41:19;;;;;;;;;;;;;;;;;3394:12;:56;;-1:-1:-1;;;;;;3394:56:19;;;;-1:-1:-1;;;3394:56:19;;;;;;;;;3117:338::o;14:247:84:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;:::-;250:5;14:247;-1:-1:-1;;;14:247:84:o;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:180::-;581:6;634:2;622:9;613:7;609:23;605:32;602:52;;;650:1;647;640:12;602:52;-1:-1:-1;673:23:84;;522:180;-1:-1:-1;522:180:84:o;707:276::-;765:6;818:2;806:9;797:7;793:23;789:32;786:52;;;834:1;831;824:12;786:52;873:9;860:23;923:10;916:5;912:22;905:5;902:33;892:61;;949:1;946;939:12;988:203;-1:-1:-1;;;;;1152:32:84;;;;1134:51;;1122:2;1107:18;;988:203::o;1196:284::-;-1:-1:-1;;;;;1382:32:84;;;;1364:51;;1458:14;1451:22;1446:2;1431:18;;1424:50;1352:2;1337:18;;1196:284::o;1864:131::-;-1:-1:-1;;;;;1939:31:84;;1929:42;;1919:70;;1985:1;1982;1975:12;1919:70;1864:131;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "475600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "BOOST_BASE()": "283",
                "KP3R()": "218",
                "acceptGovernance()": "51948",
                "governance()": "2581",
                "keep3rV2()": "2400",
                "kp3rWethPool()": "2656",
                "maxBoost()": "2449",
                "minBoost()": "2559",
                "pendingGovernance()": "2757",
                "quoteTwapTime()": "2599",
                "setGovernance(address)": "28117",
                "setKeep3rV2(address)": "28043",
                "setKp3rWethPool(address)": "infinite",
                "setMaxBoost(uint256)": "25893",
                "setMinBoost(uint256)": "25530",
                "setQuoteTwapTime(uint32)": "28079",
                "setTargetBond(uint256)": "25871",
                "setWorkExtraGas(uint256)": "25673",
                "targetBond()": "2405",
                "workExtraGas()": "2493"
              },
              "internal": {
                "_setKp3rWethPool(address)": "infinite"
              }
            },
            "methodIdentifiers": {
              "BOOST_BASE()": "25f09e61",
              "KP3R()": "05e0b9a0",
              "acceptGovernance()": "238efcbc",
              "governance()": "5aa6e675",
              "keep3rV2()": "117cfc1b",
              "kp3rWethPool()": "7b40c913",
              "maxBoost()": "37090c2f",
              "minBoost()": "8561579c",
              "pendingGovernance()": "f39c38a0",
              "quoteTwapTime()": "9aaad679",
              "setGovernance(address)": "ab033ea9",
              "setKeep3rV2(address)": "3cc7ab30",
              "setKp3rWethPool(address)": "160e1e31",
              "setMaxBoost(uint256)": "b2e0df96",
              "setMinBoost(uint256)": "0c525835",
              "setQuoteTwapTime(uint32)": "b93f5af0",
              "setTargetBond(uint256)": "ab5dce00",
              "setWorkExtraGas(uint256)": "289adb44",
              "targetBond()": "2742b9e7",
              "workExtraGas()": "3facf242"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidKp3rPool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV2\",\"type\":\"address\"}],\"name\":\"Keep3rV2Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_isKP3RToken0\",\"type\":\"bool\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_maxBoost\",\"type\":\"uint256\"}],\"name\":\"MaxBoostChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minBoost\",\"type\":\"uint256\"}],\"name\":\"MinBoostChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_quoteTwapTime\",\"type\":\"uint32\"}],\"name\":\"QuoteTwapTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_targetBond\",\"type\":\"uint256\"}],\"name\":\"TargetBondChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_workExtraGas\",\"type\":\"uint256\"}],\"name\":\"WorkExtraGasChange\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BOOST_BASE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KP3R\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isKP3RToken0\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxBoost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minBoost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"quoteTwapTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV2\",\"type\":\"address\"}],\"name\":\"setKeep3rV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolAddress\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxBoost\",\"type\":\"uint256\"}],\"name\":\"setMaxBoost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minBoost\",\"type\":\"uint256\"}],\"name\":\"setMinBoost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_quoteTwapTime\",\"type\":\"uint32\"}],\"name\":\"setQuoteTwapTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_targetBond\",\"type\":\"uint256\"}],\"name\":\"setTargetBond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_workExtraGas\",\"type\":\"uint256\"}],\"name\":\"setWorkExtraGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetBond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"workExtraGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setKeep3rV2(address)\":{\"params\":{\"_keep3rV2\":\"The address of Keep3r V2\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_poolAddress\":\"The address of the KP3R-WETH pool\"}},\"setMaxBoost(uint256)\":{\"params\":{\"_maxBoost\":\"The maximum boost multiplier\"}},\"setMinBoost(uint256)\":{\"params\":{\"_minBoost\":\"The minimum boost multiplier\"}},\"setQuoteTwapTime(uint32)\":{\"params\":{\"_quoteTwapTime\":\"The twap time for quoting\"}},\"setTargetBond(uint256)\":{\"params\":{\"_targetBond\":\"The target bond amount\"}},\"setWorkExtraGas(uint256)\":{\"params\":{\"_workExtraGas\":\"The work extra gas\"}}},\"stateVariables\":{\"BOOST_BASE\":{\"return\":\"_base The boost base number\",\"returns\":{\"_0\":\"_base The boost base number\"}},\"KP3R\":{\"return\":\"_kp3r Address of KP3R token\",\"returns\":{\"_0\":\"_kp3r Address of KP3R token\"}},\"keep3rV2\":{\"return\":\"_keep3rV2 Address of Keep3r V2\",\"returns\":{\"_0\":\"_keep3rV2 Address of Keep3r V2\"}},\"kp3rWethPool\":{\"returns\":{\"isKP3RToken0\":\"True if calling the token0 method of the pool returns the KP3R token address\",\"poolAddress\":\"Address of the pool\"}},\"maxBoost\":{\"return\":\"_multiplier The maximum boost multiplier\",\"returns\":{\"_0\":\"_multiplier The maximum boost multiplier\"}},\"minBoost\":{\"return\":\"_multiplier The minimum boost multiplier\",\"returns\":{\"_0\":\"_multiplier The minimum boost multiplier\"}},\"quoteTwapTime\":{\"return\":\"_quoteTwapTime The twap time\",\"returns\":{\"_0\":\"_quoteTwapTime The twap time\"}},\"targetBond\":{\"return\":\"_target The amount of KP3R that comforms the targetBond\",\"returns\":{\"_0\":\"_target The amount of KP3R that comforms the targetBond\"}},\"workExtraGas\":{\"return\":\"_workExtraGas The work unaccounted gas amount\",\"returns\":{\"_0\":\"_workExtraGas The work unaccounted gas amount\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKp3rPool()\":[{\"notice\":\"Throws when pool does not have KP3R as token0 nor token1\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}]},\"events\":{\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"Keep3rV2Change(address)\":{\"notice\":\"Emitted when the Keep3r V2 address is changed\"},\"Kp3rWethPoolChange(address,bool)\":{\"notice\":\"Emitted when the kp3r weth pool is changed\"},\"MaxBoostChange(uint256)\":{\"notice\":\"Emitted when the maximum boost multiplier is changed\"},\"MinBoostChange(uint256)\":{\"notice\":\"Emitted when the minimum boost multiplier is changed\"},\"QuoteTwapTimeChange(uint32)\":{\"notice\":\"Emitted when the quote twap time is changed\"},\"TargetBondChange(uint256)\":{\"notice\":\"Emitted when the target bond amount is changed\"},\"WorkExtraGasChange(uint256)\":{\"notice\":\"Emitted when the work extra gas amount is changed\"}},\"kind\":\"user\",\"methods\":{\"BOOST_BASE()\":{\"notice\":\"The boost base used to calculate the boost rewards for the keeper\"},\"KP3R()\":{\"notice\":\"Address of KP3R token\"},\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"keep3rV2()\":{\"notice\":\"Address of Keep3r V2\"},\"kp3rWethPool()\":{\"notice\":\"KP3R-WETH pool that is being used as oracle\"},\"maxBoost()\":{\"notice\":\"The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE\"},\"minBoost()\":{\"notice\":\"The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"quoteTwapTime()\":{\"notice\":\"The twap time for quoting\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setKeep3rV2(address)\":{\"notice\":\"Sets the Keep3r V2 address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets KP3R-WETH pool\"},\"setMaxBoost(uint256)\":{\"notice\":\"Sets the maximum boost multiplier\"},\"setMinBoost(uint256)\":{\"notice\":\"Sets the minimum boost multiplier\"},\"setQuoteTwapTime(uint32)\":{\"notice\":\"Sets the quote twap time\"},\"setTargetBond(uint256)\":{\"notice\":\"Sets the target bond amount\"},\"setWorkExtraGas(uint256)\":{\"notice\":\"Sets the work extra gas amount\"},\"targetBond()\":{\"notice\":\"The targeted amount of bonded KP3Rs to max-up reward multiplier         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional\"},\"workExtraGas()\":{\"notice\":\"The amount of unaccounted gas that is going to be added to keeper payments\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/Keep3rHelperParameters.sol\":\"Keep3rHelperParameters\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\nimport './pool/IUniswapV3PoolImmutables.sol';\\nimport './pool/IUniswapV3PoolState.sol';\\nimport './pool/IUniswapV3PoolDerivedState.sol';\\nimport './pool/IUniswapV3PoolActions.sol';\\nimport './pool/IUniswapV3PoolOwnerActions.sol';\\nimport './pool/IUniswapV3PoolEvents.sol';\\n\\n/// @title The interface for a Uniswap V3 Pool\\n/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform\\n/// to the ERC20 specification\\n/// @dev The pool interface is broken up into many smaller pieces\\ninterface IUniswapV3Pool is\\n    IUniswapV3PoolImmutables,\\n    IUniswapV3PoolState,\\n    IUniswapV3PoolDerivedState,\\n    IUniswapV3PoolActions,\\n    IUniswapV3PoolOwnerActions,\\n    IUniswapV3PoolEvents\\n{\\n\\n}\\n\",\"keccak256\":\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissionless pool actions\\n/// @notice Contains pool methods that can be called by anyone\\ninterface IUniswapV3PoolActions {\\n    /// @notice Sets the initial price for the pool\\n    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\\n    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96\\n    function initialize(uint160 sqrtPriceX96) external;\\n\\n    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback\\n    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\\n    /// on tickLower, tickUpper, the amount of liquidity, and the current price.\\n    /// @param recipient The address for which the liquidity will be created\\n    /// @param tickLower The lower tick of the position in which to add liquidity\\n    /// @param tickUpper The upper tick of the position in which to add liquidity\\n    /// @param amount The amount of liquidity to mint\\n    /// @param data Any data that should be passed through to the callback\\n    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    function mint(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount,\\n        bytes calldata data\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Collects tokens owed to a position\\n    /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\\n    /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\\n    /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\\n    /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\\n    /// @param recipient The address which should receive the fees collected\\n    /// @param tickLower The lower tick of the position for which to collect fees\\n    /// @param tickUpper The upper tick of the position for which to collect fees\\n    /// @param amount0Requested How much token0 should be withdrawn from the fees owed\\n    /// @param amount1Requested How much token1 should be withdrawn from the fees owed\\n    /// @return amount0 The amount of fees collected in token0\\n    /// @return amount1 The amount of fees collected in token1\\n    function collect(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n\\n    /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\\n    /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\\n    /// @dev Fees must be collected separately via a call to #collect\\n    /// @param tickLower The lower tick of the position for which to burn liquidity\\n    /// @param tickUpper The upper tick of the position for which to burn liquidity\\n    /// @param amount How much liquidity to burn\\n    /// @return amount0 The amount of token0 sent to the recipient\\n    /// @return amount1 The amount of token1 sent to the recipient\\n    function burn(\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Swap token0 for token1, or token1 for token0\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\\n    /// @param recipient The address to receive the output of the swap\\n    /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\\n    /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\\n    /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\\n    /// value after the swap. If one for zero, the price cannot be greater than this value after the swap\\n    /// @param data Any data to be passed through to the callback\\n    /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\\n    /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive\\n    function swap(\\n        address recipient,\\n        bool zeroForOne,\\n        int256 amountSpecified,\\n        uint160 sqrtPriceLimitX96,\\n        bytes calldata data\\n    ) external returns (int256 amount0, int256 amount1);\\n\\n    /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback\\n    /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\\n    /// with 0 amount{0,1} and sending the donation amount(s) from the callback\\n    /// @param recipient The address which will receive the token0 and token1 amounts\\n    /// @param amount0 The amount of token0 to send\\n    /// @param amount1 The amount of token1 to send\\n    /// @param data Any data to be passed through to the callback\\n    function flash(\\n        address recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        bytes calldata data\\n    ) external;\\n\\n    /// @notice Increase the maximum number of price and liquidity observations that this pool will store\\n    /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\\n    /// the input observationCardinalityNext.\\n    /// @param observationCardinalityNext The desired minimum number of observations for the pool to store\\n    function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;\\n}\\n\",\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that is not stored\\n/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the\\n/// blockchain. The functions here may have variable gas costs.\\ninterface IUniswapV3PoolDerivedState {\\n    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\\n    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\\n    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\\n    /// you must call it with secondsAgos = [3600, 0].\\n    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\\n    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\\n    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\\n    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\\n    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\\n    /// timestamp\\n    function observe(uint32[] calldata secondsAgos)\\n        external\\n        view\\n        returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\\n\\n    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\\n    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\\n    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\\n    /// snapshot is taken and the second snapshot is taken.\\n    /// @param tickLower The lower tick of the range\\n    /// @param tickUpper The upper tick of the range\\n    /// @return tickCumulativeInside The snapshot of the tick accumulator for the range\\n    /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\\n    /// @return secondsInside The snapshot of seconds per liquidity for the range\\n    function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)\\n        external\\n        view\\n        returns (\\n            int56 tickCumulativeInside,\\n            uint160 secondsPerLiquidityInsideX128,\\n            uint32 secondsInside\\n        );\\n}\\n\",\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Events emitted by a pool\\n/// @notice Contains all events emitted by the pool\\ninterface IUniswapV3PoolEvents {\\n    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool\\n    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\\n    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\\n    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\\n    event Initialize(uint160 sqrtPriceX96, int24 tick);\\n\\n    /// @notice Emitted when liquidity is minted for a given position\\n    /// @param sender The address that minted the liquidity\\n    /// @param owner The owner of the position and recipient of any minted liquidity\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity minted to the position range\\n    /// @param amount0 How much token0 was required for the minted liquidity\\n    /// @param amount1 How much token1 was required for the minted liquidity\\n    event Mint(\\n        address sender,\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted when fees are collected by the owner of a position\\n    /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\\n    /// @param owner The owner of the position for which fees are collected\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount0 The amount of token0 fees collected\\n    /// @param amount1 The amount of token1 fees collected\\n    event Collect(\\n        address indexed owner,\\n        address recipient,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount0,\\n        uint128 amount1\\n    );\\n\\n    /// @notice Emitted when a position's liquidity is removed\\n    /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\\n    /// @param owner The owner of the position for which liquidity is removed\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity to remove\\n    /// @param amount0 The amount of token0 withdrawn\\n    /// @param amount1 The amount of token1 withdrawn\\n    event Burn(\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted by the pool for any swaps between token0 and token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the output of the swap\\n    /// @param amount0 The delta of the token0 balance of the pool\\n    /// @param amount1 The delta of the token1 balance of the pool\\n    /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\\n    /// @param liquidity The liquidity of the pool after the swap\\n    /// @param tick The log base 1.0001 of price of the pool after the swap\\n    event Swap(\\n        address indexed sender,\\n        address indexed recipient,\\n        int256 amount0,\\n        int256 amount1,\\n        uint160 sqrtPriceX96,\\n        uint128 liquidity,\\n        int24 tick\\n    );\\n\\n    /// @notice Emitted by the pool for any flashes of token0/token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the tokens from flash\\n    /// @param amount0 The amount of token0 that was flashed\\n    /// @param amount1 The amount of token1 that was flashed\\n    /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\\n    /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\\n    event Flash(\\n        address indexed sender,\\n        address indexed recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        uint256 paid0,\\n        uint256 paid1\\n    );\\n\\n    /// @notice Emitted by the pool for increases to the number of observations that can be stored\\n    /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\\n    /// just before a mint/swap/burn.\\n    /// @param observationCardinalityNextOld The previous value of the next observation cardinality\\n    /// @param observationCardinalityNextNew The updated value of the next observation cardinality\\n    event IncreaseObservationCardinalityNext(\\n        uint16 observationCardinalityNextOld,\\n        uint16 observationCardinalityNextNew\\n    );\\n\\n    /// @notice Emitted when the protocol fee is changed by the pool\\n    /// @param feeProtocol0Old The previous value of the token0 protocol fee\\n    /// @param feeProtocol1Old The previous value of the token1 protocol fee\\n    /// @param feeProtocol0New The updated value of the token0 protocol fee\\n    /// @param feeProtocol1New The updated value of the token1 protocol fee\\n    event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);\\n\\n    /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner\\n    /// @param sender The address that collects the protocol fees\\n    /// @param recipient The address that receives the collected protocol fees\\n    /// @param amount0 The amount of token0 protocol fees that is withdrawn\\n    /// @param amount0 The amount of token1 protocol fees that is withdrawn\\n    event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that never changes\\n/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values\\ninterface IUniswapV3PoolImmutables {\\n    /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\\n    /// @return The contract address\\n    function factory() external view returns (address);\\n\\n    /// @notice The first of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token0() external view returns (address);\\n\\n    /// @notice The second of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token1() external view returns (address);\\n\\n    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6\\n    /// @return The fee\\n    function fee() external view returns (uint24);\\n\\n    /// @notice The pool tick spacing\\n    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\\n    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\\n    /// This value is an int24 to avoid casting even though it is always positive.\\n    /// @return The tick spacing\\n    function tickSpacing() external view returns (int24);\\n\\n    /// @notice The maximum amount of position liquidity that can use any tick in the range\\n    /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\\n    /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\\n    /// @return The max amount of liquidity per tick\\n    function maxLiquidityPerTick() external view returns (uint128);\\n}\\n\",\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissioned pool actions\\n/// @notice Contains pool methods that may only be called by the factory owner\\ninterface IUniswapV3PoolOwnerActions {\\n    /// @notice Set the denominator of the protocol's % share of the fees\\n    /// @param feeProtocol0 new protocol fee for token0 of the pool\\n    /// @param feeProtocol1 new protocol fee for token1 of the pool\\n    function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;\\n\\n    /// @notice Collect the protocol fee accrued to the pool\\n    /// @param recipient The address to which collected protocol fees should be sent\\n    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\\n    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\\n    /// @return amount0 The protocol fee collected in token0\\n    /// @return amount1 The protocol fee collected in token1\\n    function collectProtocol(\\n        address recipient,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that can change\\n/// @notice These methods compose the pool's state, and can change with any frequency including multiple times\\n/// per transaction\\ninterface IUniswapV3PoolState {\\n    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\\n    /// when accessed externally.\\n    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\\n    /// tick The current tick of the pool, i.e. according to the last tick transition that was run.\\n    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\\n    /// boundary.\\n    /// observationIndex The index of the last oracle observation that was written,\\n    /// observationCardinality The current maximum number of observations stored in the pool,\\n    /// observationCardinalityNext The next maximum number of observations, to be updated when the observation.\\n    /// feeProtocol The protocol fee for both tokens of the pool.\\n    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\\n    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\\n    /// unlocked Whether the pool is currently locked to reentrancy\\n    function slot0()\\n        external\\n        view\\n        returns (\\n            uint160 sqrtPriceX96,\\n            int24 tick,\\n            uint16 observationIndex,\\n            uint16 observationCardinality,\\n            uint16 observationCardinalityNext,\\n            uint8 feeProtocol,\\n            bool unlocked\\n        );\\n\\n    /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal0X128() external view returns (uint256);\\n\\n    /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal1X128() external view returns (uint256);\\n\\n    /// @notice The amounts of token0 and token1 that are owed to the protocol\\n    /// @dev Protocol fees will never exceed uint128 max in either token\\n    function protocolFees() external view returns (uint128 token0, uint128 token1);\\n\\n    /// @notice The currently in range liquidity available to the pool\\n    /// @dev This value has no relationship to the total liquidity across all ticks\\n    function liquidity() external view returns (uint128);\\n\\n    /// @notice Look up information about a specific tick in the pool\\n    /// @param tick The tick to look up\\n    /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\\n    /// tick upper,\\n    /// liquidityNet how much liquidity changes when the pool price crosses the tick,\\n    /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\\n    /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\\n    /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\\n    /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\\n    /// secondsOutside the seconds spent on the other side of the tick from the current tick,\\n    /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\\n    /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\\n    /// In addition, these values are only relative and must be used only in comparison to previous snapshots for\\n    /// a specific position.\\n    function ticks(int24 tick)\\n        external\\n        view\\n        returns (\\n            uint128 liquidityGross,\\n            int128 liquidityNet,\\n            uint256 feeGrowthOutside0X128,\\n            uint256 feeGrowthOutside1X128,\\n            int56 tickCumulativeOutside,\\n            uint160 secondsPerLiquidityOutsideX128,\\n            uint32 secondsOutside,\\n            bool initialized\\n        );\\n\\n    /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information\\n    function tickBitmap(int16 wordPosition) external view returns (uint256);\\n\\n    /// @notice Returns the information about a position by the position's key\\n    /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\\n    /// @return _liquidity The amount of liquidity in the position,\\n    /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\\n    /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\\n    /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\\n    /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\\n    function positions(bytes32 key)\\n        external\\n        view\\n        returns (\\n            uint128 _liquidity,\\n            uint256 feeGrowthInside0LastX128,\\n            uint256 feeGrowthInside1LastX128,\\n            uint128 tokensOwed0,\\n            uint128 tokensOwed1\\n        );\\n\\n    /// @notice Returns data about a specific observation index\\n    /// @param index The element of the observations array to fetch\\n    /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\\n    /// ago, rather than at a specific index in the array.\\n    /// @return blockTimestamp The timestamp of the observation,\\n    /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\\n    /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\\n    /// Returns initialized whether the observation has been initialized and the values are safe to use\\n    function observations(uint256 index)\\n        external\\n        view\\n        returns (\\n            uint32 blockTimestamp,\\n            int56 tickCumulative,\\n            uint160 secondsPerLiquidityCumulativeX128,\\n            bool initialized\\n        );\\n}\\n\",\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/Keep3rHelperParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.7 <0.9.0;\\n\\nimport './libraries/FullMath.sol';\\nimport './libraries/TickMath.sol';\\nimport '../interfaces/IKeep3r.sol';\\nimport '../interfaces/external/IKeep3rV1.sol';\\nimport '../interfaces/IKeep3rHelperParameters.sol';\\nimport './peripherals/Governable.sol';\\nimport './Keep3rHelperParameters.sol';\\n\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\\n\\ncontract Keep3rHelperParameters is IKeep3rHelperParameters, Governable {\\n  /// @inheritdoc IKeep3rHelperParameters\\n  address public constant override KP3R = 0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public constant override BOOST_BASE = 10_000;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public override minBoost = 11_000;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public override maxBoost = 12_000;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public override targetBond = 200 ether;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public override workExtraGas = 50_000;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint32 public override quoteTwapTime = 10 minutes;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  address public override keep3rV2;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  IKeep3rHelperParameters.Kp3rWethPool public override kp3rWethPool;\\n\\n  constructor(address _keep3rV2, address _governance) Governable(_governance) {\\n    keep3rV2 = _keep3rV2;\\n    _setKp3rWethPool(0x11B7a6bc0259ed6Cf9DB8F499988F9eCc7167bf5);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setKp3rWethPool(address _poolAddress) external override onlyGovernance {\\n    _setKp3rWethPool(_poolAddress);\\n    emit Kp3rWethPoolChange(kp3rWethPool.poolAddress, kp3rWethPool.isKP3RToken0);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setMinBoost(uint256 _minBoost) external override onlyGovernance {\\n    minBoost = _minBoost;\\n    emit MinBoostChange(minBoost);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setMaxBoost(uint256 _maxBoost) external override onlyGovernance {\\n    maxBoost = _maxBoost;\\n    emit MaxBoostChange(maxBoost);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setTargetBond(uint256 _targetBond) external override onlyGovernance {\\n    targetBond = _targetBond;\\n    emit TargetBondChange(targetBond);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setKeep3rV2(address _keep3rV2) external override onlyGovernance {\\n    keep3rV2 = _keep3rV2;\\n    emit Keep3rV2Change(keep3rV2);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setWorkExtraGas(uint256 _workExtraGas) external override onlyGovernance {\\n    workExtraGas = _workExtraGas;\\n    emit WorkExtraGasChange(workExtraGas);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setQuoteTwapTime(uint32 _quoteTwapTime) external override onlyGovernance {\\n    quoteTwapTime = _quoteTwapTime;\\n    emit QuoteTwapTimeChange(quoteTwapTime);\\n  }\\n\\n  /// @notice Sets KP3R-WETH pool\\n  /// @param _poolAddress The address of the KP3R-WETH pool\\n  function _setKp3rWethPool(address _poolAddress) internal {\\n    bool _isKP3RToken0 = IUniswapV3Pool(_poolAddress).token0() == KP3R;\\n    bool _isKP3RToken1 = IUniswapV3Pool(_poolAddress).token1() == KP3R;\\n\\n    if (!_isKP3RToken0 && !_isKP3RToken1) revert InvalidKp3rPool();\\n\\n    kp3rWethPool = Kp3rWethPool(_poolAddress, _isKP3RToken0);\\n  }\\n}\\n\",\"keccak256\":\"0xb5c365c428fc8a3157225799f6b581e450b74f6ae05b0f30dba286ff1e470e88\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/libraries/TickMath.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n// solhint-disable\\n\\n/// @title Math library for computing sqrt prices from ticks and vice versa\\n/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\\n///         prices between 2**-128 and 2**128\\nlibrary TickMath {\\n  /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\\n  int24 internal constant MIN_TICK = -887272;\\n  /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\\n  int24 internal constant MAX_TICK = -MIN_TICK;\\n\\n  /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\\n  uint160 internal constant MIN_SQRT_RATIO = 4295128739;\\n  /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\\n  uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;\\n\\n  /// @notice Calculates sqrt(1.0001^tick) * 2^96\\n  /// @dev Throws if |tick| > max tick\\n  /// @param tick The input tick for the above formula\\n  /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the given tick\\n  function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {\\n    uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));\\n    require(absTick <= uint256(int256(MAX_TICK)), 'T');\\n\\n    uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;\\n    if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;\\n    if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;\\n    if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;\\n    if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;\\n    if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;\\n    if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;\\n    if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;\\n    if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;\\n    if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;\\n    if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;\\n    if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;\\n    if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;\\n    if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;\\n    if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;\\n    if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;\\n    if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;\\n    if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;\\n    if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;\\n    if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;\\n\\n    if (tick > 0) ratio = type(uint256).max / ratio;\\n\\n    // Divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.\\n    // we then downcast because we know the result always fits within 160 bits due to our tick input constraint\\n    // we round up in the division so getTickAtSqrtRatio of the output price is always consistent\\n    sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));\\n  }\\n\\n  /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\\n  /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may ever return.\\n  /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\\n  /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio\\n  function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {\\n    // Second inequality must be < because the price can never reach the price at the max tick\\n    require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');\\n    uint256 ratio = uint256(sqrtPriceX96) << 32;\\n\\n    uint256 r = ratio;\\n    uint256 msb = 0;\\n\\n    assembly {\\n      let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(5, gt(r, 0xFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(4, gt(r, 0xFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(3, gt(r, 0xFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(2, gt(r, 0xF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(1, gt(r, 0x3))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := gt(r, 0x1)\\n      msb := or(msb, f)\\n    }\\n\\n    if (msb >= 128) r = ratio >> (msb - 127);\\n    else r = ratio << (127 - msb);\\n\\n    int256 log_2 = (int256(msb) - 128) << 64;\\n\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(63, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(62, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(61, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(60, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(59, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(58, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(57, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(56, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(55, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(54, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(53, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(52, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(51, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(50, f))\\n    }\\n\\n    int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number\\n\\n    int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);\\n    int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);\\n\\n    tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;\\n  }\\n}\\n\",\"keccak256\":\"0x11b965ba576ff91b4a6e9533c0f334f2b7b6024ee1c54e36d21799de5580899d\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3r.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './peripherals/IKeep3rJobs.sol';\\nimport './peripherals/IKeep3rKeepers.sol';\\nimport './peripherals/IKeep3rAccountance.sol';\\nimport './peripherals/IKeep3rRoles.sol';\\nimport './peripherals/IKeep3rParameters.sol';\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rV2 contract\\n/// @notice This contract inherits all the functionality of Keep3rV2\\ninterface IKeep3r is IKeep3rJobs, IKeep3rKeepers, IKeep3rAccountance, IKeep3rRoles, IKeep3rParameters {\\n\\n}\\n\",\"keccak256\":\"0x57e234140074d771239eeb6f08b6fc049c838c2a34aefadbbd542672e63bc686\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelperParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelperParameters contract\\n/// @notice Contains all the helper functions used throughout the different files.\\ninterface IKeep3rHelperParameters {\\n  // Structs\\n\\n  /// @dev KP3R-WETH Pool address and isKP3RToken0\\n  /// @dev Created in order to save gas by avoiding calls to pool's token0 method\\n  struct Kp3rWethPool {\\n    address poolAddress;\\n    bool isKP3RToken0;\\n  }\\n\\n  // Errors\\n\\n  /// @notice Throws when pool does not have KP3R as token0 nor token1\\n  error InvalidKp3rPool();\\n\\n  // Events\\n\\n  /// @notice Emitted when the kp3r weth pool is changed\\n  /// @param _address Address of the new kp3r weth pool\\n  /// @param _isKP3RToken0 True if calling the token0 method of the pool returns the KP3R token address\\n  event Kp3rWethPoolChange(address _address, bool _isKP3RToken0);\\n\\n  /// @notice Emitted when the minimum boost multiplier is changed\\n  /// @param _minBoost The minimum boost multiplier\\n  event MinBoostChange(uint256 _minBoost);\\n\\n  /// @notice Emitted when the maximum boost multiplier is changed\\n  /// @param _maxBoost The maximum boost multiplier\\n  event MaxBoostChange(uint256 _maxBoost);\\n\\n  /// @notice Emitted when the target bond amount is changed\\n  /// @param _targetBond The target bond amount\\n  event TargetBondChange(uint256 _targetBond);\\n\\n  /// @notice Emitted when the Keep3r V2 address is changed\\n  /// @param _keep3rV2 The address of Keep3r V2\\n  event Keep3rV2Change(address _keep3rV2);\\n\\n  /// @notice Emitted when the work extra gas amount is changed\\n  /// @param _workExtraGas The work extra gas\\n  event WorkExtraGasChange(uint256 _workExtraGas);\\n\\n  /// @notice Emitted when the quote twap time is changed\\n  /// @param _quoteTwapTime The twap time for quoting\\n  event QuoteTwapTimeChange(uint32 _quoteTwapTime);\\n\\n  // Variables\\n\\n  /// @notice Address of KP3R token\\n  /// @return _kp3r Address of KP3R token\\n  // solhint-disable func-name-mixedcase\\n  function KP3R() external view returns (address _kp3r);\\n\\n  /// @notice The boost base used to calculate the boost rewards for the keeper\\n  /// @return _base The boost base number\\n  function BOOST_BASE() external view returns (uint256 _base);\\n\\n  /// @notice KP3R-WETH pool that is being used as oracle\\n  /// @return poolAddress Address of the pool\\n  /// @return isKP3RToken0 True if calling the token0 method of the pool returns the KP3R token address\\n  function kp3rWethPool() external view returns (address poolAddress, bool isKP3RToken0);\\n\\n  /// @notice The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job\\n  ///         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE\\n  /// @return _multiplier The minimum boost multiplier\\n  function minBoost() external view returns (uint256 _multiplier);\\n\\n  /// @notice The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job\\n  ///         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE\\n  /// @return _multiplier The maximum boost multiplier\\n  function maxBoost() external view returns (uint256 _multiplier);\\n\\n  /// @notice The targeted amount of bonded KP3Rs to max-up reward multiplier\\n  ///         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get\\n  ///                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional\\n  /// @return _target The amount of KP3R that comforms the targetBond\\n  function targetBond() external view returns (uint256 _target);\\n\\n  /// @notice The amount of unaccounted gas that is going to be added to keeper payments\\n  /// @return _workExtraGas The work unaccounted gas amount\\n  function workExtraGas() external view returns (uint256 _workExtraGas);\\n\\n  /// @notice The twap time for quoting\\n  /// @return _quoteTwapTime The twap time\\n  function quoteTwapTime() external view returns (uint32 _quoteTwapTime);\\n\\n  /// @notice Address of Keep3r V2\\n  /// @return _keep3rV2 Address of Keep3r V2\\n  function keep3rV2() external view returns (address _keep3rV2);\\n\\n  // Methods\\n\\n  /// @notice Sets KP3R-WETH pool\\n  /// @param _poolAddress The address of the KP3R-WETH pool\\n  function setKp3rWethPool(address _poolAddress) external;\\n\\n  /// @notice Sets the minimum boost multiplier\\n  /// @param _minBoost The minimum boost multiplier\\n  function setMinBoost(uint256 _minBoost) external;\\n\\n  /// @notice Sets the maximum boost multiplier\\n  /// @param _maxBoost The maximum boost multiplier\\n  function setMaxBoost(uint256 _maxBoost) external;\\n\\n  /// @notice Sets the target bond amount\\n  /// @param _targetBond The target bond amount\\n  function setTargetBond(uint256 _targetBond) external;\\n\\n  /// @notice Sets the Keep3r V2 address\\n  /// @param _keep3rV2 The address of Keep3r V2\\n  function setKeep3rV2(address _keep3rV2) external;\\n\\n  /// @notice Sets the work extra gas amount\\n  /// @param _workExtraGas The work extra gas\\n  function setWorkExtraGas(uint256 _workExtraGas) external;\\n\\n  /// @notice Sets the quote twap time\\n  /// @param _quoteTwapTime The twap time for quoting\\n  function setQuoteTwapTime(uint32 _quoteTwapTime) external;\\n}\\n\",\"keccak256\":\"0x187ab1606deb0ffaa49342c2964ddc93022651a2936a19642475a3ec6bce29b9\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n// solhint-disable func-name-mixedcase\\ninterface IKeep3rV1 is IERC20, IERC20Metadata {\\n  // Structs\\n  struct Checkpoint {\\n    uint32 fromBlock;\\n    uint256 votes;\\n  }\\n\\n  // Events\\n  event DelegateChanged(address indexed _delegator, address indexed _fromDelegate, address indexed _toDelegate);\\n  event DelegateVotesChanged(address indexed _delegate, uint256 _previousBalance, uint256 _newBalance);\\n  event SubmitJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event ApplyCredit(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event RemoveJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event UnbondJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event JobAdded(address indexed _job, uint256 _block, address _governance);\\n  event JobRemoved(address indexed _job, uint256 _block, address _governance);\\n  event KeeperWorked(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _block, uint256 _amount);\\n  event KeeperBonding(address indexed _keeper, uint256 _block, uint256 _active, uint256 _bond);\\n  event KeeperBonded(address indexed _keeper, uint256 _block, uint256 _activated, uint256 _bond);\\n  event KeeperUnbonding(address indexed _keeper, uint256 _block, uint256 _deactive, uint256 _bond);\\n  event KeeperUnbound(address indexed _keeper, uint256 _block, uint256 _deactivated, uint256 _bond);\\n  event KeeperSlashed(address indexed _keeper, address indexed _slasher, uint256 _block, uint256 _slash);\\n  event KeeperDispute(address indexed _keeper, uint256 _block);\\n  event KeeperResolved(address indexed _keeper, uint256 _block);\\n  event TokenCreditAddition(address indexed _credit, address indexed _job, address indexed _creditor, uint256 _block, uint256 _amount);\\n\\n  // Variables\\n  function KPRH() external returns (address);\\n\\n  function delegates(address _delegator) external view returns (address);\\n\\n  function checkpoints(address _account, uint32 _checkpoint) external view returns (Checkpoint memory);\\n\\n  function numCheckpoints(address _account) external view returns (uint32);\\n\\n  function DOMAIN_TYPEHASH() external returns (bytes32);\\n\\n  function DOMAINSEPARATOR() external returns (bytes32);\\n\\n  function DELEGATION_TYPEHASH() external returns (bytes32);\\n\\n  function PERMIT_TYPEHASH() external returns (bytes32);\\n\\n  function nonces(address _user) external view returns (uint256);\\n\\n  function BOND() external returns (uint256);\\n\\n  function UNBOND() external returns (uint256);\\n\\n  function LIQUIDITYBOND() external returns (uint256);\\n\\n  function FEE() external returns (uint256);\\n\\n  function BASE() external returns (uint256);\\n\\n  function ETH() external returns (address);\\n\\n  function bondings(address _user, address _bonding) external view returns (uint256);\\n\\n  function canWithdrawAfter(address _user, address _bonding) external view returns (uint256);\\n\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function pendingbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function bonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function votes(address _delegator) external view returns (uint256);\\n\\n  function firstSeen(address _keeper) external view returns (uint256);\\n\\n  function disputes(address _keeper) external view returns (bool);\\n\\n  function lastJob(address _keeper) external view returns (uint256);\\n\\n  function workCompleted(address _keeper) external view returns (uint256);\\n\\n  function jobs(address _job) external view returns (bool);\\n\\n  function credits(address _job, address _credit) external view returns (uint256);\\n\\n  function liquidityProvided(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmountsUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function jobProposalDelay(address _job) external view returns (uint256);\\n\\n  function liquidityApplied(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmount(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function keepers(address _keeper) external view returns (bool);\\n\\n  function blacklist(address _keeper) external view returns (bool);\\n\\n  function keeperList(uint256 _index) external view returns (address);\\n\\n  function jobList(uint256 _index) external view returns (address);\\n\\n  function governance() external returns (address);\\n\\n  function pendingGovernance() external returns (address);\\n\\n  function liquidityAccepted(address _liquidity) external view returns (bool);\\n\\n  function liquidityPairs(uint256 _index) external view returns (address);\\n\\n  // Methods\\n  function getCurrentVotes(address _account) external view returns (uint256);\\n\\n  function addCreditETH(address _job) external payable;\\n\\n  function addCredit(\\n    address _credit,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function pairs() external view returns (address[] memory);\\n\\n  function addLiquidityToJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function applyCreditToJob(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external;\\n\\n  function unbondLiquidityFromJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function removeLiquidityFromJob(address _liquidity, address _job) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function burn(uint256 _amount) external;\\n\\n  function worked(address _keeper) external;\\n\\n  function receipt(\\n    address _credit,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function receiptETH(address _keeper, uint256 _amount) external;\\n\\n  function addJob(address _job) external;\\n\\n  function getJobs() external view returns (address[] memory);\\n\\n  function removeJob(address _job) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function setGovernance(address _governance) external;\\n\\n  function acceptGovernance() external;\\n\\n  function isKeeper(address _keeper) external returns (bool);\\n\\n  function isMinKeeper(\\n    address _keeper,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  function getKeepers() external view returns (address[] memory);\\n\\n  function activate(address _bonding) external;\\n\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function withdraw(address _bonding) external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xa9806cd6666ab1b7375ef72446964a72397fd4cefc7cc8c5b37caa7c50df0246\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5266,
                "contract": "solidity/contracts/Keep3rHelperParameters.sol:Keep3rHelperParameters",
                "label": "governance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/Keep3rHelperParameters.sol:Keep3rHelperParameters",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 2986,
                "contract": "solidity/contracts/Keep3rHelperParameters.sol:Keep3rHelperParameters",
                "label": "minBoost",
                "offset": 0,
                "slot": "2",
                "type": "t_uint256"
              },
              {
                "astId": 2991,
                "contract": "solidity/contracts/Keep3rHelperParameters.sol:Keep3rHelperParameters",
                "label": "maxBoost",
                "offset": 0,
                "slot": "3",
                "type": "t_uint256"
              },
              {
                "astId": 2996,
                "contract": "solidity/contracts/Keep3rHelperParameters.sol:Keep3rHelperParameters",
                "label": "targetBond",
                "offset": 0,
                "slot": "4",
                "type": "t_uint256"
              },
              {
                "astId": 3001,
                "contract": "solidity/contracts/Keep3rHelperParameters.sol:Keep3rHelperParameters",
                "label": "workExtraGas",
                "offset": 0,
                "slot": "5",
                "type": "t_uint256"
              },
              {
                "astId": 3006,
                "contract": "solidity/contracts/Keep3rHelperParameters.sol:Keep3rHelperParameters",
                "label": "quoteTwapTime",
                "offset": 0,
                "slot": "6",
                "type": "t_uint32"
              },
              {
                "astId": 3010,
                "contract": "solidity/contracts/Keep3rHelperParameters.sol:Keep3rHelperParameters",
                "label": "keep3rV2",
                "offset": 4,
                "slot": "6",
                "type": "t_address"
              },
              {
                "astId": 3015,
                "contract": "solidity/contracts/Keep3rHelperParameters.sol:Keep3rHelperParameters",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "7",
                "type": "t_struct(Kp3rWethPool)11533_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_struct(Kp3rWethPool)11533_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rHelperParameters.Kp3rWethPool",
                "members": [
                  {
                    "astId": 11530,
                    "contract": "solidity/contracts/Keep3rHelperParameters.sol:Keep3rHelperParameters",
                    "label": "poolAddress",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_address"
                  },
                  {
                    "astId": 11532,
                    "contract": "solidity/contracts/Keep3rHelperParameters.sol:Keep3rHelperParameters",
                    "label": "isKP3RToken0",
                    "offset": 20,
                    "slot": "0",
                    "type": "t_bool"
                  }
                ],
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              },
              "t_uint32": {
                "encoding": "inplace",
                "label": "uint32",
                "numberOfBytes": "4"
              }
            }
          },
          "userdoc": {
            "errors": {
              "InvalidKp3rPool()": [
                {
                  "notice": "Throws when pool does not have KP3R as token0 nor token1"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ]
            },
            "events": {
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "Keep3rV2Change(address)": {
                "notice": "Emitted when the Keep3r V2 address is changed"
              },
              "Kp3rWethPoolChange(address,bool)": {
                "notice": "Emitted when the kp3r weth pool is changed"
              },
              "MaxBoostChange(uint256)": {
                "notice": "Emitted when the maximum boost multiplier is changed"
              },
              "MinBoostChange(uint256)": {
                "notice": "Emitted when the minimum boost multiplier is changed"
              },
              "QuoteTwapTimeChange(uint32)": {
                "notice": "Emitted when the quote twap time is changed"
              },
              "TargetBondChange(uint256)": {
                "notice": "Emitted when the target bond amount is changed"
              },
              "WorkExtraGasChange(uint256)": {
                "notice": "Emitted when the work extra gas amount is changed"
              }
            },
            "kind": "user",
            "methods": {
              "BOOST_BASE()": {
                "notice": "The boost base used to calculate the boost rewards for the keeper"
              },
              "KP3R()": {
                "notice": "Address of KP3R token"
              },
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "keep3rV2()": {
                "notice": "Address of Keep3r V2"
              },
              "kp3rWethPool()": {
                "notice": "KP3R-WETH pool that is being used as oracle"
              },
              "maxBoost()": {
                "notice": "The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE"
              },
              "minBoost()": {
                "notice": "The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "quoteTwapTime()": {
                "notice": "The twap time for quoting"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setKeep3rV2(address)": {
                "notice": "Sets the Keep3r V2 address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets KP3R-WETH pool"
              },
              "setMaxBoost(uint256)": {
                "notice": "Sets the maximum boost multiplier"
              },
              "setMinBoost(uint256)": {
                "notice": "Sets the minimum boost multiplier"
              },
              "setQuoteTwapTime(uint32)": {
                "notice": "Sets the quote twap time"
              },
              "setTargetBond(uint256)": {
                "notice": "Sets the target bond amount"
              },
              "setWorkExtraGas(uint256)": {
                "notice": "Sets the work extra gas amount"
              },
              "targetBond()": {
                "notice": "The targeted amount of bonded KP3Rs to max-up reward multiplier         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional"
              },
              "workExtraGas()": {
                "notice": "The amount of unaccounted gas that is going to be added to keeper payments"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/UniV3PairManager.sol": {
        "UniV3PairManager": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "ExcessiveSlippage",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPool",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnsuccessfulTransfer",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0Min",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Min",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "burn",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "collect",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint24",
                  "name": "",
                  "type": "uint24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0Desired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Desired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0Min",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Min",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "position",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside0LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside1LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "sqrtRatioAX96",
              "outputs": [
                {
                  "internalType": "uint160",
                  "name": "",
                  "type": "uint160"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "sqrtRatioBX96",
              "outputs": [
                {
                  "internalType": "uint160",
                  "name": "",
                  "type": "uint160"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickLower",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickSpacing",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickUpper",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token0",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0Owed",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Owed",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "uniswapV3MintCallback",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "approve(address,uint256)": {
                "details": "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."
              },
              "burn(uint128,uint256,uint256,address)": {
                "params": {
                  "amount0Min": "The minimum amount of token0 we want to send to the recipient (to)",
                  "amount1Min": "The minimum amount of token1 we want to send to the recipient (to)",
                  "liquidity": "The amount of liquidity to be burned",
                  "to": "The address that will receive the due fees"
                },
                "returns": {
                  "amount0": "The calculated amount of token0 that will be sent to the recipient",
                  "amount1": "The calculated amount of token1 that will be sent to the recipient"
                }
              },
              "collect()": {
                "details": "The collected fees will be sent to governance",
                "returns": {
                  "amount0": "The amount of fees collected in token0",
                  "amount1": "The amount of fees collected in token1"
                }
              },
              "mint(uint256,uint256,uint256,uint256,address)": {
                "details": "Triggers UniV3PairManager#uniswapV3MintCallback",
                "params": {
                  "amount0Desired": "The amount of token0 we would like to provide",
                  "amount0Min": "The minimum amount of token0 we want to provide",
                  "amount1Desired": "The amount of token1 we would like to provide",
                  "amount1Min": "The minimum amount of token1 we want to provide",
                  "to": "The address to which the kLP tokens are going to be minted to"
                },
                "returns": {
                  "liquidity": "kLP tokens sent in exchange for the provision of tokens"
                }
              },
              "position()": {
                "returns": {
                  "feeGrowthInside0LastX128": "The fee growth of token0 as of the last action on the individual position",
                  "feeGrowthInside1LastX128": "The fee growth of token1 as of the last action on the individual position",
                  "liquidity": "The amount of liquidity provided to the UniswapV3 pool by the pair manager",
                  "tokensOwed0": "The uncollected amount of token0 owed to the position as of the last computation",
                  "tokensOwed1": "The uncollected amount of token1 owed to the position as of the last computation"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "transfer(address,uint256)": {
                "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
              },
              "transferFrom(address,address,uint256)": {
                "details": "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."
              },
              "uniswapV3MintCallback(uint256,uint256,bytes)": {
                "params": {
                  "amount0Owed": "The amount of token0 due to the pool for the minted liquidity",
                  "amount1Owed": "The amount of token1 due to the pool for the minted liquidity",
                  "data": "The encoded token0, token1, fee (_poolKey) and the payer (msg.sender) of the IUniV3PairManager#mint function"
                }
              }
            },
            "stateVariables": {
              "_MAX_TICK": {
                "details": "Due to tick spacing, pools with different fees may have differences between _MAX_TICK and tickUpper. Use tickUpper to find the max tick of the pool."
              },
              "allowance": {
                "details": "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."
              },
              "balanceOf": {
                "details": "Returns the amount of tokens owned by `account`."
              },
              "decimals": {
                "details": "Returns the decimals places of the token."
              },
              "factory": {
                "return": "_factory The address of the PairManager Factory",
                "returns": {
                  "_0": "_factory The address of the PairManager Factory"
                }
              },
              "fee": {
                "return": "_fee The fee of the Uniswap pool passed into the constructor",
                "returns": {
                  "_0": "_fee The fee of the Uniswap pool passed into the constructor"
                }
              },
              "name": {
                "details": "Returns the name of the token."
              },
              "pool": {
                "return": "_pool The address of the pool",
                "returns": {
                  "_0": "_pool The address of the pool"
                }
              },
              "sqrtRatioAX96": {
                "return": "_sqrtPriceA96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)         at the lowest tick",
                "returns": {
                  "_0": "_sqrtPriceA96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)         at the lowest tick"
                }
              },
              "sqrtRatioBX96": {
                "return": "_sqrtPriceBX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)         at the highest tick",
                "returns": {
                  "_0": "_sqrtPriceBX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)         at the highest tick"
                }
              },
              "symbol": {
                "details": "Returns the symbol of the token."
              },
              "tickLower": {
                "return": "_tickLower The lower tick in the Uniswap's curve",
                "returns": {
                  "_0": "_tickLower The lower tick in the Uniswap's curve"
                }
              },
              "tickSpacing": {
                "return": "_tickSpacing The pair tick spacing",
                "returns": {
                  "_0": "_tickSpacing The pair tick spacing"
                }
              },
              "tickUpper": {
                "return": "_tickUpper The highest tick in the Uniswap's curve",
                "returns": {
                  "_0": "_tickUpper The highest tick in the Uniswap's curve"
                }
              },
              "token0": {
                "return": "_token0 The address of token0",
                "returns": {
                  "_0": "_token0 The address of token0"
                }
              },
              "token1": {
                "return": "_token1 The address of token1",
                "returns": {
                  "_0": "_token1 The address of token1"
                }
              },
              "totalSupply": {
                "details": "Returns the amount of tokens in existence."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_3457": {
                  "entryPoint": null,
                  "id": 3457,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@getSqrtRatioAtTick_5048": {
                  "entryPoint": 1559,
                  "id": 5048,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 2847,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 2876,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address_fromMemory": {
                  "entryPoint": 2913,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_int24_fromMemory": {
                  "entryPoint": 2969,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_string_memory_ptr_fromMemory": {
                  "entryPoint": 3006,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint24_fromMemory": {
                  "entryPoint": 3190,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_stringliteral_88128fd802ffcab61bb615f5267c4adf0904a425ac58e0dbd5ba48ded50c3374_t_string_memory_ptr_t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 3229,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_stringliteral_a94178d1c412eed8fa1a51e4eb44d52d54f9449839aa27e515bcce7b97754416_t_string_memory_ptr_t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 3309,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 3396,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 3423,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 3446,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_int24": {
                  "entryPoint": 3480,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 3558,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "extract_byte_array_length": {
                  "entryPoint": 3609,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mod_t_int24": {
                  "entryPoint": 3670,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "mod_t_uint256": {
                  "entryPoint": 3707,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "negate_t_int24": {
                  "entryPoint": 3730,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "negate_t_int256": {
                  "entryPoint": 3768,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 3800,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x12": {
                  "entryPoint": 3822,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": 3844,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:6442:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "277:127:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "323:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "332:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "335:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "325:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "325:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "325:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "298:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "307:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "294:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "294:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "319:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "290:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "290:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "287:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "348:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "388:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "358:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "358:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "348:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "243:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "254:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "266:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:208:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "507:195:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "553:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "562:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "565:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "555:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "555:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "555:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "528:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "537:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "524:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "524:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "549:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "520:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "520:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "517:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "578:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "618:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "588:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "588:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "578:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "637:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "681:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "692:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "677:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "677:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "647:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "647:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "637:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "465:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "476:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "488:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "496:6:84",
                            "type": ""
                          }
                        ],
                        "src": "409:293:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "786:198:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "832:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "841:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "844:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "834:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "834:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "834:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "807:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "816:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "803:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "803:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "828:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "799:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "799:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "796:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "857:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "876:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "870:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "870:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "861:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "938:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "947:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "950:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "940:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "940:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "940:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "908:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "926:1:84",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "929:5:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "915:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "915:20:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "905:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "905:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "898:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "898:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "895:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "963:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "973:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "963:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int24_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "752:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "763:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "775:6:84",
                            "type": ""
                          }
                        ],
                        "src": "707:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1080:793:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1126:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1135:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1138:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1128:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1128:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1128:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1101:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1110:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1097:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1097:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1122:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1093:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1093:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1090:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1151:30:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1171:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1165:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1165:16:84"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1155:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1190:28:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1208:2:84",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1212:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1204:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1204:10:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1216:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "1200:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1200:18:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1194:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1245:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1254:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1257:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1247:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1247:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1247:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1233:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1241:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1230:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1230:14:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1227:34:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1270:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1284:9:84"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1295:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1280:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1280:22:84"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1274:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1350:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1359:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1362:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1352:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1352:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1352:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1329:2:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1333:4:84",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1325:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1325:13:84"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1340:7:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1321:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1321:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1314:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1314:35:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1311:55:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1375:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1391:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1385:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1385:9:84"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1379:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1417:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1419:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1419:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1419:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1409:2:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1413:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1406:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1406:10:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1403:36:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1448:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1462:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1458:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1458:7:84"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "1452:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1474:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1494:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1488:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1488:9:84"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1478:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1506:71:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1528:6:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_3",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1552:2:84"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1556:4:84",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1548:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1548:13:84"
                                              },
                                              {
                                                "name": "_4",
                                                "nodeType": "YulIdentifier",
                                                "src": "1563:2:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "1544:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1544:22:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1568:2:84",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1540:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1540:31:84"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "1573:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1536:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1536:40:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1524:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1524:53:84"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1510:10:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1636:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1638:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1638:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1638:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1595:10:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1607:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1592:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1592:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1615:10:84"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1627:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1612:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1612:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "1589:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1589:46:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1586:72:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1674:2:84",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1678:10:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1667:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1667:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1667:22:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1705:6:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1713:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1698:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1698:18:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1698:18:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1762:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1771:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1774:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1764:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1764:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1764:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1739:2:84"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "1743:2:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1735:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1735:11:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1748:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1731:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1731:20:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1753:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1728:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1728:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1725:53:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1813:2:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1817:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1809:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1809:11:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1826:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1834:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1822:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1822:15:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1839:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1787:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1787:55:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1787:55:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1851:16:84",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1861:6:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1851:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1046:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1057:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1069:6:84",
                            "type": ""
                          }
                        ],
                        "src": "989:884:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1958:198:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2004:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2013:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2016:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2006:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2006:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2006:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1979:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1988:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1975:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1975:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2000:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1971:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1971:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1968:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2029:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2048:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2042:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2042:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2033:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2110:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2119:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2122:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2112:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2112:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2112:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2080:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "2091:5:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2098:8:84",
                                            "type": "",
                                            "value": "0xffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2087:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2087:20:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2077:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2077:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2070:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2070:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2067:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2135:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2145:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2135:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint24_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1924:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1935:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1947:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1878:278:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2550:358:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2567:3:84"
                                  },
                                  {
                                    "hexValue": "6b4c502d",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2572:6:84",
                                    "type": "",
                                    "value": "kLP-"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2560:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2560:19:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2560:19:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2588:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2608:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2602:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2602:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "2592:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2650:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2658:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2646:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2646:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "2669:3:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2674:1:84",
                                        "type": "",
                                        "value": "4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2665:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2665:11:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2678:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2624:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2624:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2624:61:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2694:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2708:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2713:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2704:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2704:16:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2698:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2740:2:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2744:1:84",
                                        "type": "",
                                        "value": "4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2736:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2736:10:84"
                                  },
                                  {
                                    "hexValue": "2f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2748:3:84",
                                    "type": "",
                                    "value": "/"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2729:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2729:23:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2729:23:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2761:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2783:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2777:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2777:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2765:8:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2825:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2833:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2821:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2821:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2844:2:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2848:1:84",
                                        "type": "",
                                        "value": "5"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2840:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2840:10:84"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2852:8:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2799:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2799:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2799:62:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2870:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2885:2:84"
                                      },
                                      {
                                        "name": "length_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2889:8:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2881:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2881:17:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2900:1:84",
                                    "type": "",
                                    "value": "5"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2877:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2877:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "2870:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_stringliteral_88128fd802ffcab61bb615f5267c4adf0904a425ac58e0dbd5ba48ded50c3374_t_string_memory_ptr_t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "2518:3:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2523:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2531:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "2542:3:84",
                            "type": ""
                          }
                        ],
                        "src": "2161:747:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3302:369:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3319:3:84"
                                  },
                                  {
                                    "hexValue": "4b65657033724c50202d20",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3324:13:84",
                                    "type": "",
                                    "value": "Keep3rLP - "
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3312:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3312:26:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3312:26:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3347:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3367:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3361:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3361:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "3351:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "3409:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3417:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3405:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3405:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3428:3:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3433:2:84",
                                        "type": "",
                                        "value": "11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3424:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3424:12:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3438:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3383:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3383:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3383:62:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3454:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3468:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3473:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3464:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3464:16:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3458:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3500:2:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3504:2:84",
                                        "type": "",
                                        "value": "11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3496:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3496:11:84"
                                  },
                                  {
                                    "hexValue": "2f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3509:3:84",
                                    "type": "",
                                    "value": "/"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3489:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3489:24:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3489:24:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3522:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3544:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3538:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3538:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3526:8:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3586:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3594:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3582:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3582:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3605:2:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3609:2:84",
                                        "type": "",
                                        "value": "12"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3601:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3601:11:84"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3614:8:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3560:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3560:63:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3560:63:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3632:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3647:2:84"
                                      },
                                      {
                                        "name": "length_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3651:8:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3643:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3643:17:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3662:2:84",
                                    "type": "",
                                    "value": "12"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3639:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3639:26:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "3632:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_stringliteral_a94178d1c412eed8fa1a51e4eb44d52d54f9449839aa27e515bcce7b97754416_t_string_memory_ptr_t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "3270:3:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3275:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3283:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "3294:3:84",
                            "type": ""
                          }
                        ],
                        "src": "2913:758:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3850:150:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3867:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3878:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3860:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3860:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3860:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3901:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3912:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3897:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3897:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3917:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3890:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3890:29:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3890:29:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3939:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3950:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3935:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3935:18:84"
                                  },
                                  {
                                    "hexValue": "54",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3955:3:84",
                                    "type": "",
                                    "value": "T"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3928:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3928:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3928:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3968:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3980:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3991:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3976:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3976:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3968:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3827:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3841:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3676:324:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4053:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4080:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "4082:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4082:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4082:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4069:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "4076:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "4072:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4072:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4066:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4066:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4063:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4111:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4122:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "4125:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4118:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4118:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "4111:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "4036:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "4039:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "4045:3:84",
                            "type": ""
                          }
                        ],
                        "src": "4005:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4184:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4207:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "4209:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4209:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4209:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "4204:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "4197:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4197:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4194:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4238:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4247:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "4250:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "4243:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4243:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "4238:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "4169:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "4172:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "4178:1:84",
                            "type": ""
                          }
                        ],
                        "src": "4138:120:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4315:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4374:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "4376:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4376:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4376:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "4346:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "4339:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4339:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "4332:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4332:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "4354:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4365:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "4361:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4361:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "4369:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "4357:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4357:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4351:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4351:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "4328:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4328:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4325:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4405:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4420:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "4423:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "4416:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4416:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "4405:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "4294:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "4297:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "4303:7:84",
                            "type": ""
                          }
                        ],
                        "src": "4263:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4483:295:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4493:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4515:1:84",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4518:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "4504:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4504:16:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4497:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4529:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4551:1:84",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "4554:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "4540:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4540:16:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4533:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4565:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4579:3:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4584:1:84",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4575:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4575:11:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4569:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4648:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "4650:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4650:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4650:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4609:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "4602:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4602:10:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4618:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4631:7:84",
                                                "type": "",
                                                "value": "8388607"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "4627:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4627:12:84"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "4641:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "4623:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4623:22:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4614:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4614:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "4598:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4598:49:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4595:75:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4720:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "4722:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4722:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4722:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4686:2:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4694:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4703:8:84",
                                            "type": "",
                                            "value": "0x7fffff"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "4713:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "4699:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4699:18:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sgt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4690:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4690:28:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "4682:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4682:37:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4679:63:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4751:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4763:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4768:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "4759:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4759:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "4751:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "4465:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "4468:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "4474:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4436:342:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4836:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4846:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4855:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "4850:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4915:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "4940:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "4945:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "4936:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4936:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4959:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4964:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "4955:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4955:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "4949:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4949:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "4929:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4929:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4929:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "4876:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4879:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4873:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4873:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "4887:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4889:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "4898:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4901:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4894:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4894:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "4889:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "4869:3:84",
                                "statements": []
                              },
                              "src": "4865:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5004:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "5017:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "5022:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "5013:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5013:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5031:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5006:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5006:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5006:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "4993:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4996:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4990:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4990:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4987:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "4814:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "4819:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "4824:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4783:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5101:325:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5111:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5125:1:84",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "5128:4:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5121:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5121:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "5111:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5142:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "5172:4:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5178:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "5168:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5168:12:84"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "5146:18:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5219:31:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5221:27:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "5235:6:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5243:4:84",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "5231:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5231:17:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "5221:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "5199:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5192:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5192:26:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5189:61:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5309:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5330:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5337:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5342:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "5333:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5333:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5323:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5323:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5323:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5374:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5377:4:84",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5367:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5367:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5367:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5402:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5405:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5395:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5395:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5395:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "5265:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "5288:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5296:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5285:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5285:14:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "5262:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5262:38:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5259:161:84"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "5081:4:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "5090:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5046:380:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5467:130:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5477:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5499:1:84",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5502:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "5488:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5488:16:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5481:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5528:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "5530:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5530:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5530:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5523:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5516:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5516:11:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5513:37:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5559:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5580:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "x",
                                        "nodeType": "YulIdentifier",
                                        "src": "5583:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "5569:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5569:16:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5587:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "smod",
                                  "nodeType": "YulIdentifier",
                                  "src": "5564:4:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5564:27:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5559:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "5452:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "5455:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "5461:1:84",
                            "type": ""
                          }
                        ],
                        "src": "5431:166:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5640:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5663:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "5665:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5665:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5665:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5660:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5653:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5653:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5650:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5694:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5703:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5706:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "5699:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5699:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5694:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "5625:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "5628:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "5634:1:84",
                            "type": ""
                          }
                        ],
                        "src": "5602:112:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5761:142:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5771:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5797:1:84",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5800:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "5786:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5786:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5775:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5844:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "5846:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5846:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5846:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5821:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5834:7:84",
                                        "type": "",
                                        "value": "8388607"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "5830:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5830:12:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "5818:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5818:25:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5815:51:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5875:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5886:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5889:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "5882:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5882:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "5875:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "5743:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "5753:3:84",
                            "type": ""
                          }
                        ],
                        "src": "5719:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5951:93:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5987:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "5989:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5989:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5989:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5967:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5978:3:84",
                                        "type": "",
                                        "value": "255"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5983:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "5974:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5974:11:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "5964:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5964:22:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5961:48:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6018:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6029:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "6032:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "6025:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6025:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "6018:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "5933:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "5943:3:84",
                            "type": ""
                          }
                        ],
                        "src": "5908:136:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6081:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6098:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6105:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6110:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6101:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6101:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6091:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6091:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6091:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6138:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6141:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6131:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6131:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6131:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6162:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6165:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "6155:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6155:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6155:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "6049:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6213:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6230:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6237:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6242:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6233:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6233:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6223:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6223:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6223:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6270:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6273:4:84",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6263:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6263:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6263:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6294:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6297:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "6287:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6287:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6287:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "6181:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6345:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6362:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6369:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6374:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6365:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6365:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6355:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6355:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6355:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6402:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6405:4:84",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6395:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6395:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6395:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6426:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6429:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "6419:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6419:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6419:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "6313:127:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_int24_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, signextend(2, value))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_uint24_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xffffff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_packed_t_stringliteral_88128fd802ffcab61bb615f5267c4adf0904a425ac58e0dbd5ba48ded50c3374_t_string_memory_ptr_t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, \"kLP-\")\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 4), length)\n        let _1 := add(pos, length)\n        mstore(add(_1, 4), \"/\")\n        let length_1 := mload(value1)\n        copy_memory_to_memory(add(value1, 0x20), add(_1, 5), length_1)\n        end := add(add(_1, length_1), 5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_a94178d1c412eed8fa1a51e4eb44d52d54f9449839aa27e515bcce7b97754416_t_string_memory_ptr_t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, \"Keep3rLP - \")\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 11), length)\n        let _1 := add(pos, length)\n        mstore(add(_1, 11), \"/\")\n        let length_1 := mload(value1)\n        copy_memory_to_memory(add(value1, 0x20), add(_1, 12), length_1)\n        end := add(add(_1, length_1), 12)\n    }\n    function abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 1)\n        mstore(add(headStart, 64), \"T\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_int24(x, y) -> diff\n    {\n        let x_1 := signextend(2, x)\n        let y_1 := signextend(2, y)\n        let _1 := slt(y_1, 0)\n        if and(iszero(_1), slt(x_1, add(not(8388607), y_1))) { panic_error_0x11() }\n        if and(_1, sgt(x_1, add(0x7fffff, y_1))) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function mod_t_int24(x, y) -> r\n    {\n        let y_1 := signextend(2, y)\n        if iszero(y_1) { panic_error_0x12() }\n        r := smod(signextend(2, x), y_1)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function negate_t_int24(value) -> ret\n    {\n        let value_1 := signextend(2, value)\n        if eq(value_1, not(8388607)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function negate_t_int256(value) -> ret\n    {\n        if eq(value, shl(255, 1)) { panic_error_0x11() }\n        ret := sub(0, value)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "6101c06040523480156200001257600080fd5b50604051620031a2380380620031a2833981016040819052620000359162000b61565b806001600160a01b0381166200005d5760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b039283161781556040805163ddca3f4360e01b81529051919285169163ddca3f4391600480820192602092909190829003018186803b158015620000b557600080fd5b505afa158015620000ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f0919062000c76565b90506000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200012e57600080fd5b505afa15801562000143573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000169919062000b3c565b90506000846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620001a757600080fd5b505afa158015620001bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e2919062000b3c565b90506000856001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022057600080fd5b505afa15801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025b919062000b99565b905060006200026e82620d89e862000e56565b6200027d90620d89e862000d98565b905060006200028c8262000e92565b33606090811b60805289811b6001600160601b031990811660e05260e889811b6001600160e81b03191661010052600287810b810b821b6101a05286810b810b821b6101805284810b900b901b6101605287821b811660a0529086901b1660c052604080516395d89b4160e01b815290519192506001600160a01b038716916395d89b4191600480820192600092909190829003018186803b1580156200033257600080fd5b505afa15801562000347573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000371919081019062000bbe565b846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620003ab57600080fd5b505afa158015620003c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003ea919081019062000bbe565b604051602001620003fd92919062000ced565b604051602081830303815290604052600290805190602001906200042392919062000a79565b50846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200045e57600080fd5b505afa15801562000473573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200049d919081019062000bbe565b846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620004d757600080fd5b505afa158015620004ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000516919081019062000bbe565b6040516020016200052992919062000c9d565b604051602081830303815290604052600390805190602001906200054f92919062000a79565b5062000566816200061760201b62000e861760201c565b6001600160a01b0316610120816001600160a01b031660601b8152505062000599826200061760201b62000e861760201c565b606090811b6001600160601b031916610140526040805191820181526001600160a01b03968716808352959096166020820181905262ffffff9790971695018590525050600780546001600160a01b03191690921790915550600880546001600160b81b031916909217600160a01b9091021790555062000f1a9050565b60008060008360020b1262000630578260020b6200063f565b8260020b6200063f9062000eb8565b905062000650620d89e71962000e92565b60020b8111156200068b5760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b600060018216620006a157600160801b620006b3565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615620006eb576080620006e6826ffff97272373d413259a46990580e213a62000d76565b901c90505b60048216156200071857608062000713826ffff2e50f5f656932ef12357cf3c7fdcc62000d76565b901c90505b60088216156200074557608062000740826fffe5caca7e10e4e61c3624eaa0941cd062000d76565b901c90505b6010821615620007725760806200076d826fffcb9843d60f6159c9db58835c92664462000d76565b901c90505b60208216156200079f5760806200079a826fff973b41fa98c081472e6896dfb254c062000d76565b901c90505b6040821615620007cc576080620007c7826fff2ea16466c96a3843ec78b326b5286162000d76565b901c90505b6080821615620007f9576080620007f4826ffe5dee046a99a2a811c461f1969c305362000d76565b901c90505b6101008216156200082757608062000822826ffcbe86c7900a88aedcffc83b479aa3a462000d76565b901c90505b6102008216156200085557608062000850826ff987a7253ac413176f2b074cf7815e5462000d76565b901c90505b610400821615620008835760806200087e826ff3392b0822b70005940c7a398e4b70f362000d76565b901c90505b610800821615620008b1576080620008ac826fe7159475a2c29b7443b29c7fa6e889d962000d76565b901c90505b611000821615620008df576080620008da826fd097f3bdfd2022b8845ad8f792aa582562000d76565b901c90505b6120008216156200090d57608062000908826fa9f746462d870fdf8a65dc1f90e061e562000d76565b901c90505b6140008216156200093b57608062000936826f70d869a156d2a1b890bb3df62baf32f762000d76565b901c90505b6180008216156200096957608062000964826f31be135f97d08fd981231505542fcfa662000d76565b901c90505b620100008216156200099857608062000993826f09aa508b5b7a84e1c677de54f3e99bc962000d76565b901c90505b62020000821615620009c6576080620009c1826e5d6af8dedb81196699c329225ee60462000d76565b901c90505b62040000821615620009f3576080620009ee826d2216e584f5fa1ea926041bedfe9862000d76565b901c90505b6208000082161562000a1e57608062000a19826b048a170391f7dc42444e8fa262000d76565b901c90505b60008460020b131562000a3c5762000a398160001962000d5f565b90505b62000a4d6401000000008262000e7b565b1562000a5b57600162000a5e565b60005b62000a719060ff16602083901c62000d44565b949350505050565b82805462000a879062000e19565b90600052602060002090601f01602090048101928262000aab576000855562000af6565b82601f1062000ac657805160ff191683800117855562000af6565b8280016001018555821562000af6579182015b8281111562000af657825182559160200191906001019062000ad9565b5062000b0492915062000b08565b5090565b5b8082111562000b04576000815560010162000b09565b80516001600160a01b038116811462000b3757600080fd5b919050565b60006020828403121562000b4f57600080fd5b62000b5a8262000b1f565b9392505050565b6000806040838503121562000b7557600080fd5b62000b808362000b1f565b915062000b906020840162000b1f565b90509250929050565b60006020828403121562000bac57600080fd5b81518060020b811462000b5a57600080fd5b60006020828403121562000bd157600080fd5b81516001600160401b038082111562000be957600080fd5b818401915084601f83011262000bfe57600080fd5b81518181111562000c135762000c1362000f04565b604051601f8201601f19908116603f0116810190838211818310171562000c3e5762000c3e62000f04565b8160405282815287602084870101111562000c5857600080fd5b62000c6b83602083016020880162000de6565b979650505050505050565b60006020828403121562000c8957600080fd5b815162ffffff8116811462000b5a57600080fd5b636b4c502d60e01b81526000835162000cbe81600485016020880162000de6565b602f60f81b600491840191820152835162000ce181600584016020880162000de6565b01600501949350505050565b6a025b2b2b819b926281016960ad1b81526000835162000d1581600b85016020880162000de6565b602f60f81b600b91840191820152835162000d3881600c84016020880162000de6565b01600c01949350505050565b6000821982111562000d5a5762000d5a62000ed8565b500190565b60008262000d715762000d7162000eee565b500490565b600081600019048311821515161562000d935762000d9362000ed8565b500290565b60008160020b8360020b6000811281627fffff190183128115161562000dc25762000dc262000ed8565b81627fffff01831381161562000ddc5762000ddc62000ed8565b5090039392505050565b60005b8381101562000e0357818101518382015260200162000de9565b8381111562000e13576000848401525b50505050565b600181811c9082168062000e2e57607f821691505b6020821081141562000e5057634e487b7160e01b600052602260045260246000fd5b50919050565b60008260020b8062000e6c5762000e6c62000eee565b808360020b0791505092915050565b60008262000e8d5762000e8d62000eee565b500690565b60008160020b627fffff1981141562000eaf5762000eaf62000ed8565b60000392915050565b6000600160ff1b82141562000ed15762000ed162000ed8565b5060000390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160601c6101405160601c6101605160e81c6101805160e81c6101a05160e81c6121466200105c60003960006104200152600081816102bd015281816105e60152818161097b01528181610ad201528181610cc901528181610df301526115080152600081816102f7015281816105c50152818161095001528181610ab001528181610ca801528181610dd101526114e60152600081816103d101526113fe01526000818161027c01526113dd015260006104ac01526000818161022101528181610595015281816109bf01528181610a8101528181610b8801528181610bdb01528181610c1901528181610c7801528181610d9e0152818161134001526114b501526000610447015260006101ed015260006103aa01526121466000f3fe608060405234801561001057600080fd5b50600436106101645760003560e01c806395d89b41116100c957806395d89b411461034c578063a3e6dc2814610354578063a9059cbb1461037f578063ab033ea914610392578063c45a0155146103a5578063c6275261146103cc578063cf51148d146103f3578063d0c93a7c1461041b578063d21220a714610442578063d348799714610469578063dd62ed3e1461047c578063ddca3f43146104a7578063e5225381146104e2578063f39c38a0146104ea57600080fd5b806306fdde031461016957806309218e9114610187578063095ea7b3146101c55780630dfe1681146101e857806316f0115b1461021c57806318160ddd14610243578063238efcbc1461025a57806323b872dd146102645780632ea28f5b14610277578063313ce5671461029e57806355b812a8146102b857806359c4f905146102f25780635aa6e6751461031957806370a082311461032c575b600080fd5b6101716104fd565b60405161017e9190611f09565b60405180910390f35b61018f61058b565b604080516001600160801b039687168152602081019590955284019290925283166060830152909116608082015260a00161017e565b6101d86101d3366004611a98565b6106ac565b604051901515815260200161017e565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b60405161017e9190611e68565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b61024c60045481565b60405190815260200161017e565b610262610718565b005b6101d8610272366004611a57565b6107a4565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b6102a6601281565b60405160ff909116815260200161017e565b6102df7f000000000000000000000000000000000000000000000000000000000000000081565b60405160029190910b815260200161017e565b6102df7f000000000000000000000000000000000000000000000000000000000000000081565b60005461020f906001600160a01b031681565b61024c61033a366004611a01565b60066020526000908152604090205481565b61017161086d565b610367610362366004611db1565b61087a565b6040516001600160801b03909116815260200161017e565b6101d861038d366004611a98565b6108aa565b6102626103a0366004611a01565b6108c0565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b610406610401366004611bc8565b610941565b6040805192835260208301919091520161017e565b6102df7f000000000000000000000000000000000000000000000000000000000000000081565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b610262610477366004611d32565b610b6d565b61024c61048a366004611a1e565b600560209081526000928352604080842090915290825290205481565b6104ce7f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff909116815260200161017e565b610406610c45565b60015461020f906001600160a01b031681565b6002805461050a90612008565b80601f016020809104026020016040519081016040528092919081815260200182805461053690612008565b80156105835780601f1061055857610100808354040283529160200191610583565b820191906000526020600020905b81548152906001019060200180831161056657829003601f168201915b505050505081565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf307f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060405160200161061793929190611e1c565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161064b91815260200190565b60a06040518083038186803b15801561066357600080fd5b505afa158015610677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069b9190611c12565b939992985090965094509092509050565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107079086815260200190565b60405180910390a350600192915050565b6001546001600160a01b0316331461074357604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161079a91611e68565b60405180910390a1565b6001600160a01b0383166000818152600560209081526040808320338085529252822054919290919082148015906107de57506000198114155b156108545760006107ef8583611fc5565b6001600160a01b038881166000818152600560209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61085f86868661129c565b6001925050505b9392505050565b6003805461050a90612008565b600061088886868686611338565b509091506108a19050826001600160801b0383166115bf565b95945050505050565b60006108b733848461129c565b50600192915050565b6000546001600160a01b031633146108eb576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610936908390611e68565b60405180910390a150565b60405163a34123a760e01b81527f0000000000000000000000000000000000000000000000000000000000000000600290810b60048301527f0000000000000000000000000000000000000000000000000000000000000000900b60248201526001600160801b038516604482015260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a34123a7906064016040805180830381600087803b158015610a0257600080fd5b505af1158015610a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3a9190611d0e565b909250905084821080610a4c57508381105b15610a6a576040516397c7f53760e01b815260040160405180910390fd5b6040516309e3d67b60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634f1eb3d890610afe9086907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401611ecc565b6040805180830381600087803b158015610b1757600080fd5b505af1158015610b2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4f9190611b99565b5050610b6433876001600160801b0316611637565b94509492505050565b6000610b7b82840184611adf565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bc657604051634b60273560e01b815260040160405180910390fd5b8415610c00578051516020820151610c0091907f0000000000000000000000000000000000000000000000000000000000000000886116a7565b8315610c3e57610c3e81600001516020015182602001517f0000000000000000000000000000000000000000000000000000000000000000876116a7565b5050505050565b6000805481906001600160a01b03163314610c73576040516354348f0360e01b815260040160405180910390fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf307f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000604051602001610cfa93929190611e1c565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401610d2e91815260200190565b60a06040518083038186803b158015610d4657600080fd5b505afa158015610d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7e9190611c12565b6000546040516309e3d67b60e31b81529297509095506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169550634f1eb3d89450610e1f935016907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401611ecc565b6040805180830381600087803b158015610e3857600080fd5b505af1158015610e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e709190611b99565b6001600160801b03918216969116945092505050565b60008060008360020b12610e9d578260020b610eaa565b8260020b610eaa9061207a565b9050610eb9620d89e719612057565b60020b811115610ef35760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b600060018216610f0757600160801b610f19565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615610f4e576080610f49826ffff97272373d413259a46990580e213a611f7e565b901c90505b6004821615610f78576080610f73826ffff2e50f5f656932ef12357cf3c7fdcc611f7e565b901c90505b6008821615610fa2576080610f9d826fffe5caca7e10e4e61c3624eaa0941cd0611f7e565b901c90505b6010821615610fcc576080610fc7826fffcb9843d60f6159c9db58835c926644611f7e565b901c90505b6020821615610ff6576080610ff1826fff973b41fa98c081472e6896dfb254c0611f7e565b901c90505b604082161561102057608061101b826fff2ea16466c96a3843ec78b326b52861611f7e565b901c90505b608082161561104a576080611045826ffe5dee046a99a2a811c461f1969c3053611f7e565b901c90505b610100821615611075576080611070826ffcbe86c7900a88aedcffc83b479aa3a4611f7e565b901c90505b6102008216156110a057608061109b826ff987a7253ac413176f2b074cf7815e54611f7e565b901c90505b6104008216156110cb5760806110c6826ff3392b0822b70005940c7a398e4b70f3611f7e565b901c90505b6108008216156110f65760806110f1826fe7159475a2c29b7443b29c7fa6e889d9611f7e565b901c90505b61100082161561112157608061111c826fd097f3bdfd2022b8845ad8f792aa5825611f7e565b901c90505b61200082161561114c576080611147826fa9f746462d870fdf8a65dc1f90e061e5611f7e565b901c90505b614000821615611177576080611172826f70d869a156d2a1b890bb3df62baf32f7611f7e565b901c90505b6180008216156111a257608061119d826f31be135f97d08fd981231505542fcfa6611f7e565b901c90505b620100008216156111ce5760806111c9826f09aa508b5b7a84e1c677de54f3e99bc9611f7e565b901c90505b620200008216156111f95760806111f4826e5d6af8dedb81196699c329225ee604611f7e565b901c90505b6204000082161561122357608061121e826d2216e584f5fa1ea926041bedfe98611f7e565b901c90505b6208000082161561124b576080611246826b048a170391f7dc42444e8fa2611f7e565b901c90505b60008460020b13156112665761126381600019611f6a565b90505b611274600160201b82612043565b15611280576001611283565b60005b6112949060ff16602083901c611f52565b949350505050565b6001600160a01b038316600090815260066020526040812080548392906112c4908490611fc5565b90915550506001600160a01b038216600090815260066020526040812080548392906112f1908490611f52565b92505081905550816001600160a01b0316836001600160a01b03166000805160206120f18339815191528360405161132b91815260200190565b60405180910390a3505050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561139757600080fd5b505afa1580156113ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cf9190611c74565b5050505050509050611424817f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008b8b6116b9565b6040805160a080820183526007546001600160a01b039081168385018181526008548084166060808801918252600160a01b90920462ffffff9081166080808a01918252948952336020998a019081528a51998a019690965291518616888a01529051169086015290518216848201528451808503909101815291830193849052633c8a7d8d60e01b9093529296507f000000000000000000000000000000000000000000000000000000000000000090911691633c8a7d8d916115339130917f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000918b919060a401611e7c565b6040805180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115849190611d0e565b90935091508583108061159657508482105b156115b4576040516397c7f53760e01b815260040160405180910390fd5b509450945094915050565b80600460008282546115d19190611f52565b90915550506001600160a01b038216600090815260066020526040812080548392906115fe908490611f52565b90915550506040518181526001600160a01b038316906000906000805160206120f1833981519152906020015b60405180910390a35050565b80600460008282546116499190611fc5565b90915550506001600160a01b03821660009081526006602052604081208054839290611676908490611fc5565b90915550506040518181526000906001600160a01b038416906000805160206120f18339815191529060200161162b565b6116b38484848461177b565b50505050565b6000836001600160a01b0316856001600160a01b031611156116d9579293925b846001600160a01b0316866001600160a01b031611611704576116fd858585611875565b90506108a1565b836001600160a01b0316866001600160a01b0316101561176657600061172b878686611875565b9050600061173a8789866118df565b9050806001600160801b0316826001600160801b03161061175b578061175d565b815b925050506108a1565b6117718585846118df565b9695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916117df9190611e4c565b6000604051808303816000865af19150503d806000811461181c576040519150601f19603f3d011682016040523d82523d6000602084013e611821565b606091505b509150915081158061184f575080511580159061184f57508080602001905181019061184d9190611ac4565b155b1561186d576040516316369daf60e31b815260040160405180910390fd5b505050505050565b6000826001600160a01b0316846001600160a01b03161115611895579192915b60006118b8856001600160a01b0316856001600160a01b0316600160601b611915565b90506108a16118da84836118cc8989611f9d565b6001600160a01b0316611915565b6119c4565b6000826001600160a01b0316846001600160a01b031611156118ff579192915b6112946118da83600160601b6118cc8888611f9d565b60008080600019858709858702925082811083820303915050806000141561194f576000841161194457600080fd5b508290049050610866565b80841161195b57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b806001600160801b03811681146119da57600080fd5b919050565b805180151581146119da57600080fd5b805161ffff811681146119da57600080fd5b600060208284031215611a1357600080fd5b8135610866816120c3565b60008060408385031215611a3157600080fd5b8235611a3c816120c3565b91506020830135611a4c816120c3565b809150509250929050565b600080600060608486031215611a6c57600080fd5b8335611a77816120c3565b92506020840135611a87816120c3565b929592945050506040919091013590565b60008060408385031215611aab57600080fd5b8235611ab6816120c3565b946020939093013593505050565b600060208284031215611ad657600080fd5b610866826119df565b60008183036080811215611af257600080fd5b604051604081018181106001600160401b0382111715611b2257634e487b7160e01b600052604160045260246000fd5b6040526060821215611b3357600080fd5b611b3b611f1c565b91508335611b48816120c3565b82526020840135611b58816120c3565b6020830152604084013562ffffff81168114611b7357600080fd5b6040830152908152606083013590611b8a826120c3565b60208101919091529392505050565b60008060408385031215611bac57600080fd5b8251611bb7816120db565b6020840151909250611a4c816120db565b60008060008060808587031215611bde57600080fd5b8435611be9816120db565b935060208501359250604085013591506060850135611c07816120c3565b939692955090935050565b600080600080600060a08688031215611c2a57600080fd5b8551611c35816120db565b8095505060208601519350604086015192506060860151611c55816120db565b6080870151909250611c66816120db565b809150509295509295909350565b600080600080600080600060e0888a031215611c8f57600080fd5b8751611c9a816120c3565b8097505060208801518060020b8114611cb257600080fd5b9550611cc0604089016119ef565b9450611cce606089016119ef565b9350611cdc608089016119ef565b925060a088015160ff81168114611cf257600080fd5b9150611d0060c089016119df565b905092959891949750929550565b60008060408385031215611d2157600080fd5b505080516020909101519092909150565b60008060008060608587031215611d4857600080fd5b843593506020850135925060408501356001600160401b0380821115611d6d57600080fd5b818701915087601f830112611d8157600080fd5b813581811115611d9057600080fd5b886020828501011115611da257600080fd5b95989497505060200194505050565b600080600080600060a08688031215611dc957600080fd5b853594506020860135935060408601359250606086013591506080860135611c66816120c3565b60008151808452611e08816020860160208601611fdc565b601f01601f19169290920160200192915050565b60609390931b6001600160601b0319168352600291820b60e890811b6014850152910b901b6017820152601a0190565b60008251611e5e818460208701611fdc565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a060808201819052600090611ec190830184611df0565b979650505050505050565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6020815260006108666020830184611df0565b604051606081016001600160401b0381118282101715611f4c57634e487b7160e01b600052604160045260246000fd5b60405290565b60008219821115611f6557611f65612097565b500190565b600082611f7957611f796120ad565b500490565b6000816000190483118215151615611f9857611f98612097565b500290565b60006001600160a01b0383811690831681811015611fbd57611fbd612097565b039392505050565b600082821015611fd757611fd7612097565b500390565b60005b83811015611ff7578181015183820152602001611fdf565b838111156116b35750506000910152565b600181811c9082168061201c57607f821691505b6020821081141561203d57634e487b7160e01b600052602260045260246000fd5b50919050565b600082612052576120526120ad565b500690565b60008160020b627fffff1981141561207157612071612097565b60000392915050565b6000600160ff1b82141561209057612090612097565b5060000390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146120d857600080fd5b50565b6001600160801b03811681146120d857600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220176e0789f293d3cdd0b53b0d393ae37177f51883457a8f3566fa6f880833500464736f6c63430008070033",
              "opcodes": "PUSH2 0x1C0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x31A2 CODESIZE SUB DUP1 PUSH3 0x31A2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0xB61 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x5D JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xDDCA3F43 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 DUP6 AND SWAP2 PUSH4 0xDDCA3F43 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xF0 SWAP2 SWAP1 PUSH3 0xC76 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x12E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x143 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x169 SWAP2 SWAP1 PUSH3 0xB3C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1E2 SWAP2 SWAP1 PUSH3 0xB3C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x235 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x25B SWAP2 SWAP1 PUSH3 0xB99 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x26E DUP3 PUSH3 0xD89E8 PUSH3 0xE56 JUMP JUMPDEST PUSH3 0x27D SWAP1 PUSH3 0xD89E8 PUSH3 0xD98 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x28C DUP3 PUSH3 0xE92 JUMP JUMPDEST CALLER PUSH1 0x60 SWAP1 DUP2 SHL PUSH1 0x80 MSTORE DUP10 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0xE0 MSTORE PUSH1 0xE8 DUP10 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE8 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x2 DUP8 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP3 SHL PUSH2 0x1A0 MSTORE DUP7 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP3 SHL PUSH2 0x180 MSTORE DUP5 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP1 SHL PUSH2 0x160 MSTORE DUP8 DUP3 SHL DUP2 AND PUSH1 0xA0 MSTORE SWAP1 DUP7 SWAP1 SHL AND PUSH1 0xC0 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x95D89B41 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x95D89B41 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x332 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x347 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x371 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBBE JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x3C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x3EA SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH3 0x3FD SWAP3 SWAP2 SWAP1 PUSH3 0xCED JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x2 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x423 SWAP3 SWAP2 SWAP1 PUSH3 0xA79 JUMP JUMPDEST POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x473 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x49D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBBE JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x4D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x4EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x516 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH3 0x529 SWAP3 SWAP2 SWAP1 PUSH3 0xC9D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x54F SWAP3 SWAP2 SWAP1 PUSH3 0xA79 JUMP JUMPDEST POP PUSH3 0x566 DUP2 PUSH3 0x617 PUSH1 0x20 SHL PUSH3 0xE86 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH3 0x599 DUP3 PUSH3 0x617 PUSH1 0x20 SHL PUSH3 0xE86 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x60 SWAP1 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 ADD DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND DUP1 DUP4 MSTORE SWAP6 SWAP1 SWAP7 AND PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH3 0xFFFFFF SWAP8 SWAP1 SWAP8 AND SWAP6 ADD DUP6 SWAP1 MSTORE POP POP PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xB8 SHL SUB NOT AND SWAP1 SWAP3 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 MUL OR SWAP1 SSTORE POP PUSH3 0xF1A SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH3 0x630 JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH3 0x63F JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH3 0x63F SWAP1 PUSH3 0xEB8 JUMP JUMPDEST SWAP1 POP PUSH3 0x650 PUSH3 0xD89E7 NOT PUSH3 0xE92 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH3 0x68B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH3 0x6A1 JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH3 0x6B3 JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH3 0x6EB JUMPI PUSH1 0x80 PUSH3 0x6E6 DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH3 0x718 JUMPI PUSH1 0x80 PUSH3 0x713 DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH3 0x745 JUMPI PUSH1 0x80 PUSH3 0x740 DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH3 0x772 JUMPI PUSH1 0x80 PUSH3 0x76D DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH3 0x79F JUMPI PUSH1 0x80 PUSH3 0x79A DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH3 0x7CC JUMPI PUSH1 0x80 PUSH3 0x7C7 DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH3 0x7F9 JUMPI PUSH1 0x80 PUSH3 0x7F4 DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH3 0x827 JUMPI PUSH1 0x80 PUSH3 0x822 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH3 0x855 JUMPI PUSH1 0x80 PUSH3 0x850 DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH3 0x883 JUMPI PUSH1 0x80 PUSH3 0x87E DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH3 0x8B1 JUMPI PUSH1 0x80 PUSH3 0x8AC DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH3 0x8DF JUMPI PUSH1 0x80 PUSH3 0x8DA DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH3 0x90D JUMPI PUSH1 0x80 PUSH3 0x908 DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH3 0x93B JUMPI PUSH1 0x80 PUSH3 0x936 DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH3 0x969 JUMPI PUSH1 0x80 PUSH3 0x964 DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH3 0x998 JUMPI PUSH1 0x80 PUSH3 0x993 DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH3 0x9C6 JUMPI PUSH1 0x80 PUSH3 0x9C1 DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH3 0x9F3 JUMPI PUSH1 0x80 PUSH3 0x9EE DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH3 0xA1E JUMPI PUSH1 0x80 PUSH3 0xA19 DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH3 0xA3C JUMPI PUSH3 0xA39 DUP2 PUSH1 0x0 NOT PUSH3 0xD5F JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH3 0xA4D PUSH5 0x100000000 DUP3 PUSH3 0xE7B JUMP JUMPDEST ISZERO PUSH3 0xA5B JUMPI PUSH1 0x1 PUSH3 0xA5E JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH3 0xA71 SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH3 0xD44 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0xA87 SWAP1 PUSH3 0xE19 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0xAAB JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0xAF6 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0xAC6 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xAF6 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xAF6 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xAF6 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xAD9 JUMP JUMPDEST POP PUSH3 0xB04 SWAP3 SWAP2 POP PUSH3 0xB08 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0xB04 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0xB09 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0xB37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xB4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xB5A DUP3 PUSH3 0xB1F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0xB75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xB80 DUP4 PUSH3 0xB1F JUMP JUMPDEST SWAP2 POP PUSH3 0xB90 PUSH1 0x20 DUP5 ADD PUSH3 0xB1F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xBAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH3 0xB5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xBD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0xBE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH3 0xBFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0xC13 JUMPI PUSH3 0xC13 PUSH3 0xF04 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0xC3E JUMPI PUSH3 0xC3E PUSH3 0xF04 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP8 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0xC58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xC6B DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xC89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH3 0xB5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x6B4C502D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH3 0xCBE DUP2 PUSH1 0x4 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST PUSH1 0x2F PUSH1 0xF8 SHL PUSH1 0x4 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH3 0xCE1 DUP2 PUSH1 0x5 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST ADD PUSH1 0x5 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH11 0x25B2B2B819B9262810169 PUSH1 0xAD SHL DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH3 0xD15 DUP2 PUSH1 0xB DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST PUSH1 0x2F PUSH1 0xF8 SHL PUSH1 0xB SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH3 0xD38 DUP2 PUSH1 0xC DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST ADD PUSH1 0xC ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH3 0xD5A JUMPI PUSH3 0xD5A PUSH3 0xED8 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0xD71 JUMPI PUSH3 0xD71 PUSH3 0xEEE JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH3 0xD93 JUMPI PUSH3 0xD93 PUSH3 0xED8 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND DUP4 PUSH1 0x2 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH3 0x7FFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH3 0xDC2 JUMPI PUSH3 0xDC2 PUSH3 0xED8 JUMP JUMPDEST DUP2 PUSH3 0x7FFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH3 0xDDC JUMPI PUSH3 0xDDC PUSH3 0xED8 JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xE03 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xDE9 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0xE13 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0xE2E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0xE50 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x2 SIGNEXTEND DUP1 PUSH3 0xE6C JUMPI PUSH3 0xE6C PUSH3 0xEEE JUMP JUMPDEST DUP1 DUP4 PUSH1 0x2 SIGNEXTEND SMOD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0xE8D JUMPI PUSH3 0xE8D PUSH3 0xEEE JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH3 0xEAF JUMPI PUSH3 0xEAF PUSH3 0xED8 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH3 0xED1 JUMPI PUSH3 0xED1 PUSH3 0xED8 JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0xE8 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH1 0x60 SHR PUSH2 0x160 MLOAD PUSH1 0xE8 SHR PUSH2 0x180 MLOAD PUSH1 0xE8 SHR PUSH2 0x1A0 MLOAD PUSH1 0xE8 SHR PUSH2 0x2146 PUSH3 0x105C PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x420 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2BD ADD MSTORE DUP2 DUP2 PUSH2 0x5E6 ADD MSTORE DUP2 DUP2 PUSH2 0x97B ADD MSTORE DUP2 DUP2 PUSH2 0xAD2 ADD MSTORE DUP2 DUP2 PUSH2 0xCC9 ADD MSTORE DUP2 DUP2 PUSH2 0xDF3 ADD MSTORE PUSH2 0x1508 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2F7 ADD MSTORE DUP2 DUP2 PUSH2 0x5C5 ADD MSTORE DUP2 DUP2 PUSH2 0x950 ADD MSTORE DUP2 DUP2 PUSH2 0xAB0 ADD MSTORE DUP2 DUP2 PUSH2 0xCA8 ADD MSTORE DUP2 DUP2 PUSH2 0xDD1 ADD MSTORE PUSH2 0x14E6 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3D1 ADD MSTORE PUSH2 0x13FE ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x27C ADD MSTORE PUSH2 0x13DD ADD MSTORE PUSH1 0x0 PUSH2 0x4AC ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x221 ADD MSTORE DUP2 DUP2 PUSH2 0x595 ADD MSTORE DUP2 DUP2 PUSH2 0x9BF ADD MSTORE DUP2 DUP2 PUSH2 0xA81 ADD MSTORE DUP2 DUP2 PUSH2 0xB88 ADD MSTORE DUP2 DUP2 PUSH2 0xBDB ADD MSTORE DUP2 DUP2 PUSH2 0xC19 ADD MSTORE DUP2 DUP2 PUSH2 0xC78 ADD MSTORE DUP2 DUP2 PUSH2 0xD9E ADD MSTORE DUP2 DUP2 PUSH2 0x1340 ADD MSTORE PUSH2 0x14B5 ADD MSTORE PUSH1 0x0 PUSH2 0x447 ADD MSTORE PUSH1 0x0 PUSH2 0x1ED ADD MSTORE PUSH1 0x0 PUSH2 0x3AA ADD MSTORE PUSH2 0x2146 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x164 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x95D89B41 GT PUSH2 0xC9 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0xA3E6DC28 EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x37F JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0xC6275261 EQ PUSH2 0x3CC JUMPI DUP1 PUSH4 0xCF51148D EQ PUSH2 0x3F3 JUMPI DUP1 PUSH4 0xD0C93A7C EQ PUSH2 0x41B JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x442 JUMPI DUP1 PUSH4 0xD3487997 EQ PUSH2 0x469 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x4A7 JUMPI DUP1 PUSH4 0xE5225381 EQ PUSH2 0x4E2 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x4EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x169 JUMPI DUP1 PUSH4 0x9218E91 EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x1E8 JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x25A JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0x2EA28F5B EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x29E JUMPI DUP1 PUSH4 0x55B812A8 EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0x59C4F905 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x319 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x32C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x171 PUSH2 0x4FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x17E SWAP2 SWAP1 PUSH2 0x1F09 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x18F PUSH2 0x58B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x1D8 PUSH2 0x1D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A98 JUMP JUMPDEST PUSH2 0x6AC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x17E SWAP2 SWAP1 PUSH2 0x1E68 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x24C PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x262 PUSH2 0x718 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1D8 PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A57 JUMP JUMPDEST PUSH2 0x7A4 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x2A6 PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x2DF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x2 SWAP2 SWAP1 SWAP2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x2DF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x20F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x24C PUSH2 0x33A CALLDATASIZE PUSH1 0x4 PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x86D JUMP JUMPDEST PUSH2 0x367 PUSH2 0x362 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DB1 JUMP JUMPDEST PUSH2 0x87A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x1D8 PUSH2 0x38D CALLDATASIZE PUSH1 0x4 PUSH2 0x1A98 JUMP JUMPDEST PUSH2 0x8AA JUMP JUMPDEST PUSH2 0x262 PUSH2 0x3A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A01 JUMP JUMPDEST PUSH2 0x8C0 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x406 PUSH2 0x401 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BC8 JUMP JUMPDEST PUSH2 0x941 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x2DF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x262 PUSH2 0x477 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D32 JUMP JUMPDEST PUSH2 0xB6D JUMP JUMPDEST PUSH2 0x24C PUSH2 0x48A CALLDATASIZE PUSH1 0x4 PUSH2 0x1A1E JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4CE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0xFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x406 PUSH2 0xC45 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x20F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH2 0x50A SWAP1 PUSH2 0x2008 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x536 SWAP1 PUSH2 0x2008 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x583 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x558 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x583 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x566 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x514EA4BF ADDRESS PUSH32 0x0 PUSH32 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x617 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x64B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x663 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x677 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x69B SWAP2 SWAP1 PUSH2 0x1C12 JUMP JUMPDEST SWAP4 SWAP10 SWAP3 SWAP9 POP SWAP1 SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x707 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x743 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x79A SWAP2 PUSH2 0x1E68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP3 KECCAK256 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x7DE JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x854 JUMPI PUSH1 0x0 PUSH2 0x7EF DUP6 DUP4 PUSH2 0x1FC5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST PUSH2 0x85F DUP7 DUP7 DUP7 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH2 0x50A SWAP1 PUSH2 0x2008 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x888 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1338 JUMP JUMPDEST POP SWAP1 SWAP2 POP PUSH2 0x8A1 SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH2 0x15BF JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B7 CALLER DUP5 DUP5 PUSH2 0x129C JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x936 SWAP1 DUP4 SWAP1 PUSH2 0x1E68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA34123A7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH32 0x0 PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 SWAP1 SIGNEXTEND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP6 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xA34123A7 SWAP1 PUSH1 0x64 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA16 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA3A SWAP2 SWAP1 PUSH2 0x1D0E JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP DUP5 DUP3 LT DUP1 PUSH2 0xA4C JUMPI POP DUP4 DUP2 LT JUMPDEST ISZERO PUSH2 0xA6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x97C7F537 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9E3D67B PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x4F1EB3D8 SWAP1 PUSH2 0xAFE SWAP1 DUP7 SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1ECC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB2B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB4F SWAP2 SWAP1 PUSH2 0x1B99 JUMP JUMPDEST POP POP PUSH2 0xB64 CALLER DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x1637 JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB7B DUP3 DUP5 ADD DUP5 PUSH2 0x1ADF JUMP JUMPDEST SWAP1 POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xBC6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B602735 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 ISZERO PUSH2 0xC00 JUMPI DUP1 MLOAD MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0xC00 SWAP2 SWAP1 PUSH32 0x0 DUP9 PUSH2 0x16A7 JUMP JUMPDEST DUP4 ISZERO PUSH2 0xC3E JUMPI PUSH2 0xC3E DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD PUSH32 0x0 DUP8 PUSH2 0x16A7 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC73 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x514EA4BF ADDRESS PUSH32 0x0 PUSH32 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xCFA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD2E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD5A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD7E SWAP2 SWAP1 PUSH2 0x1C12 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x9E3D67B PUSH1 0xE3 SHL DUP2 MSTORE SWAP3 SWAP8 POP SWAP1 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP6 POP PUSH4 0x4F1EB3D8 SWAP5 POP PUSH2 0xE1F SWAP4 POP AND SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1ECC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE70 SWAP2 SWAP1 PUSH2 0x1B99 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 AND SWAP7 SWAP2 AND SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH2 0xE9D JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0xEAA JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0xEAA SWAP1 PUSH2 0x207A JUMP JUMPDEST SWAP1 POP PUSH2 0xEB9 PUSH3 0xD89E7 NOT PUSH2 0x2057 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH2 0xEF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH2 0xF07 JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH2 0xF19 JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH2 0xF4E JUMPI PUSH1 0x80 PUSH2 0xF49 DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH2 0xF78 JUMPI PUSH1 0x80 PUSH2 0xF73 DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH2 0xFA2 JUMPI PUSH1 0x80 PUSH2 0xF9D DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH2 0xFCC JUMPI PUSH1 0x80 PUSH2 0xFC7 DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH2 0xFF6 JUMPI PUSH1 0x80 PUSH2 0xFF1 DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH2 0x1020 JUMPI PUSH1 0x80 PUSH2 0x101B DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH2 0x104A JUMPI PUSH1 0x80 PUSH2 0x1045 DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH2 0x1075 JUMPI PUSH1 0x80 PUSH2 0x1070 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH2 0x10A0 JUMPI PUSH1 0x80 PUSH2 0x109B DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH2 0x10CB JUMPI PUSH1 0x80 PUSH2 0x10C6 DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH2 0x10F6 JUMPI PUSH1 0x80 PUSH2 0x10F1 DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH2 0x1121 JUMPI PUSH1 0x80 PUSH2 0x111C DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH2 0x114C JUMPI PUSH1 0x80 PUSH2 0x1147 DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH2 0x1177 JUMPI PUSH1 0x80 PUSH2 0x1172 DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH2 0x11A2 JUMPI PUSH1 0x80 PUSH2 0x119D DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH2 0x11CE JUMPI PUSH1 0x80 PUSH2 0x11C9 DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH2 0x11F9 JUMPI PUSH1 0x80 PUSH2 0x11F4 DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH2 0x1223 JUMPI PUSH1 0x80 PUSH2 0x121E DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH2 0x124B JUMPI PUSH1 0x80 PUSH2 0x1246 DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH2 0x1266 JUMPI PUSH2 0x1263 DUP2 PUSH1 0x0 NOT PUSH2 0x1F6A JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x1274 PUSH1 0x1 PUSH1 0x20 SHL DUP3 PUSH2 0x2043 JUMP JUMPDEST ISZERO PUSH2 0x1280 JUMPI PUSH1 0x1 PUSH2 0x1283 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x1294 SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH2 0x1F52 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x12C4 SWAP1 DUP5 SWAP1 PUSH2 0x1FC5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x12F1 SWAP1 DUP5 SWAP1 PUSH2 0x1F52 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x20F1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 PUSH1 0x40 MLOAD PUSH2 0x132B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1397 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13CF SWAP2 SWAP1 PUSH2 0x1C74 JUMP JUMPDEST POP POP POP POP POP POP SWAP1 POP PUSH2 0x1424 DUP2 PUSH32 0x0 PUSH32 0x0 DUP12 DUP12 PUSH2 0x16B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 DUP6 ADD DUP2 DUP2 MSTORE PUSH1 0x8 SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP1 DUP9 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV PUSH3 0xFFFFFF SWAP1 DUP2 AND PUSH1 0x80 DUP1 DUP11 ADD SWAP2 DUP3 MSTORE SWAP5 DUP10 MSTORE CALLER PUSH1 0x20 SWAP10 DUP11 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP10 DUP11 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP2 MLOAD DUP7 AND DUP9 DUP11 ADD MSTORE SWAP1 MLOAD AND SWAP1 DUP7 ADD MSTORE SWAP1 MLOAD DUP3 AND DUP5 DUP3 ADD MSTORE DUP5 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE SWAP2 DUP4 ADD SWAP4 DUP5 SWAP1 MSTORE PUSH4 0x3C8A7D8D PUSH1 0xE0 SHL SWAP1 SWAP4 MSTORE SWAP3 SWAP7 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP2 PUSH4 0x3C8A7D8D SWAP2 PUSH2 0x1533 SWAP2 ADDRESS SWAP2 PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 DUP12 SWAP2 SWAP1 PUSH1 0xA4 ADD PUSH2 0x1E7C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x154C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1560 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1584 SWAP2 SWAP1 PUSH2 0x1D0E JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP6 DUP4 LT DUP1 PUSH2 0x1596 JUMPI POP DUP5 DUP3 LT JUMPDEST ISZERO PUSH2 0x15B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x97C7F537 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x15D1 SWAP2 SWAP1 PUSH2 0x1F52 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x15FE SWAP1 DUP5 SWAP1 PUSH2 0x1F52 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x20F1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1649 SWAP2 SWAP1 PUSH2 0x1FC5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1676 SWAP1 DUP5 SWAP1 PUSH2 0x1FC5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x20F1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD PUSH2 0x162B JUMP JUMPDEST PUSH2 0x16B3 DUP5 DUP5 DUP5 DUP5 PUSH2 0x177B JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x16D9 JUMPI SWAP3 SWAP4 SWAP3 JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT PUSH2 0x1704 JUMPI PUSH2 0x16FD DUP6 DUP6 DUP6 PUSH2 0x1875 JUMP JUMPDEST SWAP1 POP PUSH2 0x8A1 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT ISZERO PUSH2 0x1766 JUMPI PUSH1 0x0 PUSH2 0x172B DUP8 DUP7 DUP7 PUSH2 0x1875 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x173A DUP8 DUP10 DUP7 PUSH2 0x18DF JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND LT PUSH2 0x175B JUMPI DUP1 PUSH2 0x175D JUMP JUMPDEST DUP2 JUMPDEST SWAP3 POP POP POP PUSH2 0x8A1 JUMP JUMPDEST PUSH2 0x1771 DUP6 DUP6 DUP5 PUSH2 0x18DF JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP1 DUP9 AND SWAP2 PUSH2 0x17DF SWAP2 SWAP1 PUSH2 0x1E4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x181C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1821 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO DUP1 PUSH2 0x184F JUMPI POP DUP1 MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x184F JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x184D SWAP2 SWAP1 PUSH2 0x1AC4 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x186D JUMPI PUSH1 0x40 MLOAD PUSH4 0x16369DAF PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x1895 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH1 0x0 PUSH2 0x18B8 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x1915 JUMP JUMPDEST SWAP1 POP PUSH2 0x8A1 PUSH2 0x18DA DUP5 DUP4 PUSH2 0x18CC DUP10 DUP10 PUSH2 0x1F9D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1915 JUMP JUMPDEST PUSH2 0x19C4 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x18FF JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH2 0x1294 PUSH2 0x18DA DUP4 PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x18CC DUP9 DUP9 PUSH2 0x1F9D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x194F JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x1944 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x866 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x195B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x1 DUP8 NOT DUP2 ADD DUP9 AND SWAP8 DUP9 SWAP1 DIV PUSH1 0x3 DUP2 MUL DUP4 XOR DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL SWAP1 DUP2 MUL SWAP1 SWAP3 SUB SWAP1 SWAP2 MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x19DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x19DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x19DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x866 DUP2 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1A3C DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1A4C DUP2 PUSH2 0x20C3 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1A6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1A77 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1A87 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1AAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1AB6 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1AD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x866 DUP3 PUSH2 0x19DF JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB PUSH1 0x80 DUP2 SLT ISZERO PUSH2 0x1AF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x1B22 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH1 0x60 DUP3 SLT ISZERO PUSH2 0x1B33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B3B PUSH2 0x1F1C JUMP JUMPDEST SWAP2 POP DUP4 CALLDATALOAD PUSH2 0x1B48 DUP2 PUSH2 0x20C3 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1B58 DUP2 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1B73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE SWAP1 DUP2 MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x1B8A DUP3 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1BAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x1BB7 DUP2 PUSH2 0x20DB JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1A4C DUP2 PUSH2 0x20DB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1BDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1BE9 DUP2 PUSH2 0x20DB JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x1C07 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1C2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD PUSH2 0x1C35 DUP2 PUSH2 0x20DB JUMP JUMPDEST DUP1 SWAP6 POP POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x1C55 DUP2 PUSH2 0x20DB JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1C66 DUP2 PUSH2 0x20DB JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1C8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1C9A DUP2 PUSH2 0x20C3 JUMP JUMPDEST DUP1 SWAP8 POP POP PUSH1 0x20 DUP9 ADD MLOAD DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH2 0x1CB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 POP PUSH2 0x1CC0 PUSH1 0x40 DUP10 ADD PUSH2 0x19EF JUMP JUMPDEST SWAP5 POP PUSH2 0x1CCE PUSH1 0x60 DUP10 ADD PUSH2 0x19EF JUMP JUMPDEST SWAP4 POP PUSH2 0x1CDC PUSH1 0x80 DUP10 ADD PUSH2 0x19EF JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1CF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH2 0x1D00 PUSH1 0xC0 DUP10 ADD PUSH2 0x19DF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1D48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x1D6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1D81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1D90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1DA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP POP PUSH1 0x20 ADD SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1DC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x1C66 DUP2 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1E08 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1FDC JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 SWAP1 SWAP4 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND DUP4 MSTORE PUSH1 0x2 SWAP2 DUP3 SIGNEXTEND PUSH1 0xE8 SWAP1 DUP2 SHL PUSH1 0x14 DUP6 ADD MSTORE SWAP2 SIGNEXTEND SWAP1 SHL PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x1A ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1E5E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1FDC JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH1 0x2 DUP6 DUP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE DUP5 SWAP1 SIGNEXTEND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x1EC1 SWAP1 DUP4 ADD DUP5 PUSH2 0x1DF0 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x2 SWAP4 DUP5 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE SWAP2 SWAP1 SWAP3 SIGNEXTEND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 AND PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x866 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1F4C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1F65 JUMPI PUSH2 0x1F65 PUSH2 0x2097 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1F79 JUMPI PUSH2 0x1F79 PUSH2 0x20AD JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1F98 JUMPI PUSH2 0x1F98 PUSH2 0x2097 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x1FBD JUMPI PUSH2 0x1FBD PUSH2 0x2097 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1FD7 JUMPI PUSH2 0x1FD7 PUSH2 0x2097 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1FF7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1FDF JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x16B3 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x201C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x203D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2052 JUMPI PUSH2 0x2052 PUSH2 0x20AD JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH2 0x2071 JUMPI PUSH2 0x2071 PUSH2 0x2097 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH2 0x2090 JUMPI PUSH2 0x2090 PUSH2 0x2097 JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x20D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x20D8 JUMPI PUSH1 0x0 DUP1 REVERT INVALID 0xDD CALLCODE MSTORE 0xAD SHL 0xE2 0xC8 SWAP12 PUSH10 0xC2B068FC378DAA952BA7 CALL PUSH4 0xC4A11628 CREATE2 GAS 0x4D CREATE2 0x23 0xB3 0xEF LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR PUSH15 0x789F293D3CDD0B53B0D393AE37177 CREATE2 XOR DUP4 GASLIMIT PUSH27 0x8F3566FA6F880833500464736F6C63430008070033000000000000 ",
              "sourceMap": "2695:10349:20:-:0;;;4441:1001;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4500:11;-1:-1:-1;;;;;357:25:28;;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;-1:-1:-1;;;;;422:24:28;;;;;;4533:27:20::1;::::0;;-1:-1:-1;;;4533:27:20;;;;422:10:28;;4533:25:20;::::1;::::0;-1:-1:-1;;4533:27:20::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:25;:27;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4519:41;;4566:15;4599:5;-1:-1:-1::0;;;;;4584:28:20::1;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4566:48;;4620:15;4653:5;-1:-1:-1::0;;;;;4638:28:20::1;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4620:48;;4674:18;4710:5;-1:-1:-1::0;;;;;4695:33:20::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4674:56:::0;-1:-1:-1;4736:16:20::1;4768:24;4674:56:::0;3991:6:::1;4768:24;:::i;:::-;4755:38;::::0;3991:6:::1;4755:38;:::i;:::-;4736:57:::0;-1:-1:-1;4799:16:20::1;4818:11;4736:57:::0;4818:11:::1;:::i;:::-;4846:10;4836:20;::::0;;::::1;;::::0;4862:12;;;-1:-1:-1;;;;;;4862:12:20;;;::::1;::::0;4880:10:::1;::::0;;;-1:-1:-1;;;;;;4880:10:20;::::1;::::0;4896:26:::1;::::0;;::::1;::::0;::::1;::::0;::::1;;::::0;4928:22;;::::1;::::0;::::1;::::0;::::1;;::::0;4956;;::::1;::::0;::::1;::::0;::::1;;::::0;4984:16;;;;;::::1;::::0;5006;;;;;-1:-1:-1;5006:16:20;-1:-1:-1;5074:23:20;;-1:-1:-1;;;5074:23:20;;;;4956:22;;-1:-1:-1;;;;;;4984:16:20;::::1;::::0;-1:-1:-1;;5074:23:20::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;4984:16;5074:23;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;5074:23:20::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;5110:7;-1:-1:-1::0;;;;;5104:21:20::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;5104:23:20::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;5042:86;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5028:4;:101;;;;;;;;;;;;:::i;:::-;;5182:7;-1:-1:-1::0;;;;;5176:21:20::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;5176:23:20::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;5212:7;-1:-1:-1::0;;;;;5206:21:20::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;5206:23:20::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;5151:79;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5135:6;:96;;;;;;;;;;;;:::i;:::-;;5254:39;5282:10;5254:27;;;;;:39;;:::i;:::-;5238:55;::::0;-1:-1:-1;;;;;;5238:55:20;::::1;::::0;5315:39:::1;5343:10:::0;5315:27:::1;;::::0;;::::1;;;:39:::0;::::1;:::i;:::-;5299:55;::::0;;;-1:-1:-1;;;;;;5299:55:20;::::1;::::0;5371:66:::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;5371:66:20;;::::1;::::0;;;;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;-1:-1:-1;;5360:8:20::1;:77:::0;;-1:-1:-1;;;;;;5360:77:20::1;::::0;;::::1;::::0;;;-1:-1:-1;5360:77:20;;;-1:-1:-1;;;;;;5360:77:20;;;;-1:-1:-1;;;5360:77:20;;::::1;;::::0;;-1:-1:-1;2695:10349:20;;-1:-1:-1;2695:10349:20;1363:2473:26;1426:20;1454:15;1479:1;1472:4;:8;;;:57;;1523:4;1516:12;;1472:57;;;1499:4;1492:12;;1491:13;;;:::i;:::-;1454:75;-1:-1:-1;657:9:26;-1:-1:-1;;657:9:26;:::i;:::-;1562:16;;1543:7;:36;;1535:50;;;;;-1:-1:-1;;;1535:50:26;;3878:2:84;1535:50:26;;;3860:21:84;3917:1;3897:18;;;3890:29;-1:-1:-1;;;3935:18:84;;;3928:31;1535:50:26;;;;;;3976:18:84;1535:50:26;;;;1592:13;1618:3;1608:13;;:93;;-1:-1:-1;;;1608:93:26;;;1629:34;1608:93;-1:-1:-1;;;;;1592:109:26;;-1:-1:-1;1721:3:26;1711:13;;:18;1707:83;;1787:3;1740:42;:5;1748:34;1740:42;:::i;:::-;1739:51;;1731:59;;1707:83;1810:3;1800:13;;:18;1796:83;;1876:3;1829:42;:5;1837:34;1829:42;:::i;:::-;1828:51;;1820:59;;1796:83;1899:3;1889:13;;:18;1885:83;;1965:3;1918:42;:5;1926:34;1918:42;:::i;:::-;1917:51;;1909:59;;1885:83;1988:4;1978:14;;:19;1974:84;;2055:3;2008:42;:5;2016:34;2008:42;:::i;:::-;2007:51;;1999:59;;1974:84;2078:4;2068:14;;:19;2064:84;;2145:3;2098:42;:5;2106:34;2098:42;:::i;:::-;2097:51;;2089:59;;2064:84;2168:4;2158:14;;:19;2154:84;;2235:3;2188:42;:5;2196:34;2188:42;:::i;:::-;2187:51;;2179:59;;2154:84;2258:4;2248:14;;:19;2244:84;;2325:3;2278:42;:5;2286:34;2278:42;:::i;:::-;2277:51;;2269:59;;2244:84;2348:5;2338:15;;:20;2334:85;;2416:3;2369:42;:5;2377:34;2369:42;:::i;:::-;2368:51;;2360:59;;2334:85;2439:5;2429:15;;:20;2425:85;;2507:3;2460:42;:5;2468:34;2460:42;:::i;:::-;2459:51;;2451:59;;2425:85;2530:5;2520:15;;:20;2516:85;;2598:3;2551:42;:5;2559:34;2551:42;:::i;:::-;2550:51;;2542:59;;2516:85;2621:5;2611:15;;:20;2607:85;;2689:3;2642:42;:5;2650:34;2642:42;:::i;:::-;2641:51;;2633:59;;2607:85;2712:6;2702:16;;:21;2698:86;;2781:3;2734:42;:5;2742:34;2734:42;:::i;:::-;2733:51;;2725:59;;2698:86;2804:6;2794:16;;:21;2790:86;;2873:3;2826:42;:5;2834:34;2826:42;:::i;:::-;2825:51;;2817:59;;2790:86;2896:6;2886:16;;:21;2882:86;;2965:3;2918:42;:5;2926:34;2918:42;:::i;:::-;2917:51;;2909:59;;2882:86;2988:6;2978:16;;:21;2974:86;;3057:3;3010:42;:5;3018:34;3010:42;:::i;:::-;3009:51;;3001:59;;2974:86;3080:7;3070:17;;:22;3066:86;;3149:3;3103:41;:5;3111:33;3103:41;:::i;:::-;3102:50;;3094:58;;3066:86;3172:7;3162:17;;:22;3158:85;;3240:3;3195:40;:5;3203:32;3195:40;:::i;:::-;3194:49;;3186:57;;3158:85;3263:7;3253:17;;:22;3249:83;;3329:3;3286:38;:5;3294:30;3286:38;:::i;:::-;3285:47;;3277:55;;3249:83;3352:7;3342:17;;:22;3338:78;;3413:3;3375:33;:5;3383:25;3375:33;:::i;:::-;3374:42;;3366:50;;3338:78;3434:1;3427:4;:8;;;3423:47;;;3445:25;3465:5;-1:-1:-1;;3445:25:26;:::i;:::-;3437:33;;3423:47;3799:17;-1:-1:-1;;;3799:5:26;:17;:::i;:::-;:22;:30;;3828:1;3799:30;;;3824:1;3799:30;3782:48;;;;3792:2;3783:11;;;3782:48;:::i;:::-;3759:72;1363:2473;-1:-1:-1;;;;1363:2473:26:o;2695:10349:20:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2695:10349:20;;;-1:-1:-1;2695:10349:20;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:208::-;266:6;319:2;307:9;298:7;294:23;290:32;287:52;;;335:1;332;325:12;287:52;358:40;388:9;358:40;:::i;:::-;348:50;196:208;-1:-1:-1;;;196:208:84:o;409:293::-;488:6;496;549:2;537:9;528:7;524:23;520:32;517:52;;;565:1;562;555:12;517:52;588:40;618:9;588:40;:::i;:::-;578:50;;647:49;692:2;681:9;677:18;647:49;:::i;:::-;637:59;;409:293;;;;;:::o;707:277::-;775:6;828:2;816:9;807:7;803:23;799:32;796:52;;;844:1;841;834:12;796:52;876:9;870:16;929:5;926:1;915:20;908:5;905:31;895:59;;950:1;947;940:12;989:884;1069:6;1122:2;1110:9;1101:7;1097:23;1093:32;1090:52;;;1138:1;1135;1128:12;1090:52;1165:16;;-1:-1:-1;1230:14:84;;;1227:34;;;1257:1;1254;1247:12;1227:34;1295:6;1284:9;1280:22;1270:32;;1340:7;1333:4;1329:2;1325:13;1321:27;1311:55;;1362:1;1359;1352:12;1311:55;1391:2;1385:9;1413:2;1409;1406:10;1403:36;;;1419:18;;:::i;:::-;1494:2;1488:9;1462:2;1548:13;;-1:-1:-1;;1544:22:84;;;1568:2;1540:31;1536:40;1524:53;;;1592:18;;;1612:22;;;1589:46;1586:72;;;1638:18;;:::i;:::-;1678:10;1674:2;1667:22;1713:2;1705:6;1698:18;1753:7;1748:2;1743;1739;1735:11;1731:20;1728:33;1725:53;;;1774:1;1771;1764:12;1725:53;1787:55;1839:2;1834;1826:6;1822:15;1817:2;1813;1809:11;1787:55;:::i;:::-;1861:6;989:884;-1:-1:-1;;;;;;;989:884:84:o;1878:278::-;1947:6;2000:2;1988:9;1979:7;1975:23;1971:32;1968:52;;;2016:1;2013;2006:12;1968:52;2048:9;2042:16;2098:8;2091:5;2087:20;2080:5;2077:31;2067:59;;2122:1;2119;2112:12;2161:747;-1:-1:-1;;;2560:19:84;;2602:13;;2542:3;;2624:61;2602:13;2674:1;2665:11;;2658:4;2646:17;;2624:61;:::i;:::-;-1:-1:-1;;;2744:1:84;2704:16;;;2736:10;;;2729:23;2777:13;;2799:62;2777:13;2848:1;2840:10;;2833:4;2821:17;;2799:62;:::i;:::-;2881:17;2900:1;2877:25;;2161:747;-1:-1:-1;;;;2161:747:84:o;2913:758::-;-1:-1:-1;;;3312:26:84;;3361:13;;3294:3;;3383:62;3361:13;3433:2;3424:12;;3417:4;3405:17;;3383:62;:::i;:::-;-1:-1:-1;;;3504:2:84;3464:16;;;3496:11;;;3489:24;3538:13;;3560:63;3538:13;3609:2;3601:11;;3594:4;3582:17;;3560:63;:::i;:::-;3643:17;3662:2;3639:26;;2913:758;-1:-1:-1;;;;2913:758:84:o;4005:128::-;4045:3;4076:1;4072:6;4069:1;4066:13;4063:39;;;4082:18;;:::i;:::-;-1:-1:-1;4118:9:84;;4005:128::o;4138:120::-;4178:1;4204;4194:35;;4209:18;;:::i;:::-;-1:-1:-1;4243:9:84;;4138:120::o;4263:168::-;4303:7;4369:1;4365;4361:6;4357:14;4354:1;4351:21;4346:1;4339:9;4332:17;4328:45;4325:71;;;4376:18;;:::i;:::-;-1:-1:-1;4416:9:84;;4263:168::o;4436:342::-;4474:4;4518:1;4515;4504:16;4554:1;4551;4540:16;4584:1;4579:3;4575:11;4641:3;4631:7;4627:12;4623:22;4618:3;4614:32;4609:2;4602:10;4598:49;4595:75;;;4650:18;;:::i;:::-;4713:3;4703:8;4699:18;4694:3;4690:28;4686:2;4682:37;4679:63;;;4722:18;;:::i;:::-;-1:-1:-1;4759:13:84;;;4436:342;-1:-1:-1;;;4436:342:84:o;4783:258::-;4855:1;4865:113;4879:6;4876:1;4873:13;4865:113;;;4955:11;;;4949:18;4936:11;;;4929:39;4901:2;4894:10;4865:113;;;4996:6;4993:1;4990:13;4987:48;;;5031:1;5022:6;5017:3;5013:16;5006:27;4987:48;;4783:258;;;:::o;5046:380::-;5125:1;5121:12;;;;5168;;;5189:61;;5243:4;5235:6;5231:17;5221:27;;5189:61;5296:2;5288:6;5285:14;5265:18;5262:38;5259:161;;;5342:10;5337:3;5333:20;5330:1;5323:31;5377:4;5374:1;5367:15;5405:4;5402:1;5395:15;5259:161;;5046:380;;;:::o;5431:166::-;5461:1;5502;5499;5488:16;5523:3;5513:37;;5530:18;;:::i;:::-;5587:3;5583:1;5580;5569:16;5564:27;5559:32;;;5431:166;;;;:::o;5602:112::-;5634:1;5660;5650:35;;5665:18;;:::i;:::-;-1:-1:-1;5699:9:84;;5602:112::o;5719:184::-;5753:3;5800:5;5797:1;5786:20;5834:7;5830:12;5821:7;5818:25;5815:51;;;5846:18;;:::i;:::-;5886:1;5882:15;;5719:184;-1:-1:-1;;5719:184:84:o;5908:136::-;5943:3;-1:-1:-1;;;5964:22:84;;5961:48;;;5989:18;;:::i;:::-;-1:-1:-1;6029:1:84;6025:13;;5908:136::o;6049:127::-;6110:10;6105:3;6101:20;6098:1;6091:31;6141:4;6138:1;6131:15;6165:4;6162:1;6155:15;6181:127;6242:10;6237:3;6233:20;6230:1;6223:31;6273:4;6270:1;6263:15;6297:4;6294:1;6287:15;6313:127;6374:10;6369:3;6365:20;6362:1;6355:31;6405:4;6402:1;6395:15;6429:4;6426:1;6419:15;6313:127;2695:10349:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_addLiquidity_3894": {
                  "entryPoint": 4920,
                  "id": 3894,
                  "parameterSlots": 4,
                  "returnSlots": 3
                },
                "@_burn_3970": {
                  "entryPoint": 5687,
                  "id": 3970,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_mint_3942": {
                  "entryPoint": 5567,
                  "id": 3942,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_pay_3914": {
                  "entryPoint": 5799,
                  "id": 3914,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_safeTransferFrom_4050": {
                  "entryPoint": 6011,
                  "id": 4050,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_transferTokens_3999": {
                  "entryPoint": 4764,
                  "id": 3999,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 1816,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@allowance_3292": {
                  "entryPoint": null,
                  "id": 3292,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@approve_3731": {
                  "entryPoint": 1708,
                  "id": 3731,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@balanceOf_3298": {
                  "entryPoint": null,
                  "id": 3298,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@burn_3613": {
                  "entryPoint": 2369,
                  "id": 3613,
                  "parameterSlots": 4,
                  "returnSlots": 2
                },
                "@collect_3661": {
                  "entryPoint": 3141,
                  "id": 3661,
                  "parameterSlots": 0,
                  "returnSlots": 2
                },
                "@decimals_3284": {
                  "entryPoint": null,
                  "id": 3284,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@factory_3239": {
                  "entryPoint": null,
                  "id": 3239,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_3255": {
                  "entryPoint": null,
                  "id": 3255,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@getLiquidityForAmount0_4377": {
                  "entryPoint": 6261,
                  "id": 4377,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@getLiquidityForAmount1_4413": {
                  "entryPoint": 6367,
                  "id": 4413,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@getLiquidityForAmounts_4493": {
                  "entryPoint": 5817,
                  "id": 4493,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "@getSqrtRatioAtTick_5048": {
                  "entryPoint": 3718,
                  "id": 5048,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@mint_3490": {
                  "entryPoint": 2170,
                  "id": 3490,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "@mulDiv_4263": {
                  "entryPoint": 6421,
                  "id": 4263,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@name_3227": {
                  "entryPoint": 1277,
                  "id": 3227,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pool_3251": {
                  "entryPoint": null,
                  "id": 3251,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@position_3701": {
                  "entryPoint": 1419,
                  "id": 3701,
                  "parameterSlots": 0,
                  "returnSlots": 5
                },
                "@setGovernance_5308": {
                  "entryPoint": 2240,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@sqrtRatioAX96_3259": {
                  "entryPoint": null,
                  "id": 3259,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@sqrtRatioBX96_3263": {
                  "entryPoint": null,
                  "id": 3263,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@symbol_3231": {
                  "entryPoint": 2157,
                  "id": 3231,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@tickLower_3267": {
                  "entryPoint": null,
                  "id": 3267,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@tickSpacing_3275": {
                  "entryPoint": null,
                  "id": 3275,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@tickUpper_3271": {
                  "entryPoint": null,
                  "id": 3271,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@toUint128_4332": {
                  "entryPoint": 6596,
                  "id": 4332,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@token0_3243": {
                  "entryPoint": null,
                  "id": 3243,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@token1_3247": {
                  "entryPoint": null,
                  "id": 3247,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@totalSupply_3235": {
                  "entryPoint": null,
                  "id": 3235,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@transferFrom_3820": {
                  "entryPoint": 1956,
                  "id": 3820,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@transfer_3752": {
                  "entryPoint": 2218,
                  "id": 3752,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@uniswapV3MintCallback_3548": {
                  "entryPoint": 2925,
                  "id": 3548,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "abi_decode_bool_fromMemory": {
                  "entryPoint": 6623,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 6657,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 6686,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_uint256": {
                  "entryPoint": 6743,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 6808,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 6852,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_struct$_MintCallbackData_$11756_memory_ptr": {
                  "entryPoint": 6879,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint128t_uint128_fromMemory": {
                  "entryPoint": 7065,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_uint128t_uint256t_uint256t_address": {
                  "entryPoint": 7112,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_uint128t_uint256t_uint256t_uint128t_uint128_fromMemory": {
                  "entryPoint": 7186,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 5
                },
                "abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory": {
                  "entryPoint": 7284,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 7
                },
                "abi_decode_tuple_t_uint256t_uint256_fromMemory": {
                  "entryPoint": 7438,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_uint256t_uint256t_bytes_calldata_ptr": {
                  "entryPoint": 7474,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_address": {
                  "entryPoint": 7601,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 5
                },
                "abi_decode_uint16_fromMemory": {
                  "entryPoint": 6639,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_bytes": {
                  "entryPoint": 7664,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_address_t_int24_t_int24__to_t_address_t_int24_t_int24__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 7708,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 7756,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 7784,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_int24_t_int24_t_uint128_t_bytes_memory_ptr__to_t_address_t_int24_t_int24_t_uint128_t_bytes_memory_ptr__fromStack_reversed": {
                  "entryPoint": 7804,
                  "id": null,
                  "parameterSlots": 6,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_int24_t_int24_t_uint128_t_uint128__to_t_address_t_int24_t_int24_t_uint128_t_uint128__fromStack_reversed": {
                  "entryPoint": 7884,
                  "id": null,
                  "parameterSlots": 6,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_int24__to_t_int24__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_int24_t_int24_t_uint128__to_t_int24_t_int24_t_uint128__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 7945,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_struct$_MintCallbackData_$11756_memory_ptr__to_t_struct$_MintCallbackData_$11756_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint128_t_uint256_t_uint256_t_uint128_t_uint128__to_t_uint128_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 6,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint160__to_t_uint160__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint24__to_t_uint24__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "allocate_memory": {
                  "entryPoint": 7964,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 8018,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 8042,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 8062,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint160": {
                  "entryPoint": 8093,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 8133,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 8156,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "extract_byte_array_length": {
                  "entryPoint": 8200,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mod_t_uint256": {
                  "entryPoint": 8259,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "negate_t_int24": {
                  "entryPoint": 8279,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "negate_t_int256": {
                  "entryPoint": 8314,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 8343,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x12": {
                  "entryPoint": 8365,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_address": {
                  "entryPoint": 8387,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "validator_revert_uint128": {
                  "entryPoint": 8411,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:16446:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "71:107:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "81:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "96:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "90:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "90:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "81:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "156:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "165:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "168:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "158:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "158:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "158:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "146:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "139:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "139:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "132:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "132:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "122:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "122:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "115:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "115:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "112:60:84"
                            }
                          ]
                        },
                        "name": "abi_decode_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "50:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "61:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "242:104:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "252:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "267:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "261:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "261:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "252:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "324:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "333:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "336:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "326:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "326:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "326:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "296:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "307:5:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "314:6:84",
                                            "type": "",
                                            "value": "0xffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "303:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "303:18:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "293:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "293:29:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "286:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "286:37:84"
                              },
                              "nodeType": "YulIf",
                              "src": "283:57:84"
                            }
                          ]
                        },
                        "name": "abi_decode_uint16_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "221:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "232:5:84",
                            "type": ""
                          }
                        ],
                        "src": "183:163:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "421:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "467:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "476:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "479:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "469:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "469:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "469:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "442:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "451:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "438:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "438:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "463:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "434:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "434:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "431:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "492:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "518:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "505:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "505:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "496:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "562:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "537:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "537:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "537:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "577:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "587:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "577:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "387:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "398:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "410:6:84",
                            "type": ""
                          }
                        ],
                        "src": "351:247:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "690:301:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "736:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "745:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "748:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "738:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "738:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "738:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "711:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "720:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "707:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "707:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "732:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "703:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "703:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "700:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "761:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "787:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "774:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "774:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "765:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "831:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "806:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "806:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "806:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "846:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "856:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "846:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "870:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "902:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "913:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "898:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "898:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "885:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "885:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "874:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "951:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "926:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "926:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "926:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "968:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "978:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "968:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "648:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "659:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "671:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "679:6:84",
                            "type": ""
                          }
                        ],
                        "src": "603:388:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1100:352:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1146:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1155:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1158:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1148:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1148:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1148:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1121:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1130:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1117:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1117:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1142:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1113:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1113:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1110:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1171:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1197:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1184:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1184:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1175:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1241:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1216:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1216:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1216:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1256:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1266:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1256:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1280:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1312:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1323:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1308:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1308:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1295:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1295:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1284:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1361:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1336:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1336:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1336:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1378:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1388:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1378:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1404:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1431:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1442:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1427:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1427:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1414:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1414:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1404:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1050:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1061:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1073:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1081:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1089:6:84",
                            "type": ""
                          }
                        ],
                        "src": "996:456:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1544:228:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1590:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1599:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1602:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1592:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1592:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1592:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1565:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1574:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1561:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1561:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1586:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1557:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1557:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1554:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1615:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1641:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1628:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1628:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1619:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1685:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1660:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1660:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1660:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1700:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1710:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1700:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1724:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1751:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1762:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1747:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1747:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1734:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1734:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1724:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1502:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1513:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1525:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1533:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1457:315:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1855:124:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1901:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1910:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1913:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1903:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1903:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1903:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1876:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1885:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1872:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1872:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1897:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1868:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1868:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1865:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1926:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1963:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1936:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1936:37:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1926:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1821:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1832:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1844:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1777:202:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2089:1102:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2099:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2113:7:84"
                                  },
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2122:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "2109:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2109:23:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2103:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2157:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2166:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2169:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2159:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2159:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2159:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2148:2:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2152:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2144:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2144:12:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2141:32:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2182:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2202:4:84",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2196:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2196:11:84"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "2186:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2216:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2238:6:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2246:4:84",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2234:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2234:17:84"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "2220:10:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2334:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2355:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2362:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2367:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "2358:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2358:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2348:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2348:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2348:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2399:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2402:4:84",
                                          "type": "",
                                          "value": "0x41"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2392:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2392:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2392:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2427:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2430:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2420:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2420:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2420:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2269:10:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2281:18:84",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2266:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2266:34:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2305:10:84"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2317:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2302:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2302:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "2263:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2263:62:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2260:185:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2461:4:84",
                                    "type": "",
                                    "value": "0x40"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2467:10:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2454:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2454:24:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2454:24:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2504:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2513:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2516:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2506:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2506:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2506:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2494:2:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2498:4:84",
                                    "type": "",
                                    "value": "0x60"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2490:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2490:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2487:33:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2529:30:84",
                              "value": {
                                "arguments": [],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2542:15:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2542:17:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2533:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2568:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2596:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2583:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2583:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2572:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2640:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2615:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2615:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2615:33:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2664:5:84"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2671:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2657:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2657:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2657:22:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2688:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2720:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2731:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2716:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2716:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2703:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2703:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2692:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2769:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2744:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2744:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2744:33:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2797:5:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2804:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2793:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2793:14:84"
                                  },
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2809:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2786:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2786:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2786:31:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2826:49:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2858:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2869:4:84",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2854:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2854:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2841:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2841:34:84"
                              },
                              "variables": [
                                {
                                  "name": "value_3",
                                  "nodeType": "YulTypedName",
                                  "src": "2830:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2931:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2940:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2943:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2933:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2933:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2933:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "2897:7:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "2910:7:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2919:8:84",
                                            "type": "",
                                            "value": "0xffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2906:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2906:22:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2894:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2894:35:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2887:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2887:43:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2884:63:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2967:5:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2974:4:84",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2963:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2963:16:84"
                                  },
                                  {
                                    "name": "value_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2981:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2956:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2956:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2956:33:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "3005:6:84"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3013:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2998:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2998:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2998:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3028:49:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3060:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3071:4:84",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3056:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3056:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3043:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3043:34:84"
                              },
                              "variables": [
                                {
                                  "name": "value_4",
                                  "nodeType": "YulTypedName",
                                  "src": "3032:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "3111:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3086:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3086:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3086:33:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "3139:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3147:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3135:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3135:15:84"
                                  },
                                  {
                                    "name": "value_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "3152:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3128:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3128:32:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3128:32:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3169:16:84",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "3179:6:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3169:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_MintCallbackData_$11756_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2055:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2066:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2078:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1984:1207:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3294:287:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3340:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3349:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3352:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3342:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3342:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3342:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3315:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3324:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3311:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3311:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3336:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3307:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3307:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3304:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3365:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3384:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3378:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3378:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3369:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3428:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "3403:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3403:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3403:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3443:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3453:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3443:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3467:40:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3492:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3503:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3488:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3488:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3482:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3482:25:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3471:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3541:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "3516:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3516:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3516:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3558:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "3568:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3558:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint128t_uint128_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3252:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3263:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3275:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3283:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3196:385:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3707:404:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3754:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3763:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3766:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3756:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3756:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3756:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3728:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3737:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3724:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3724:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3749:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3720:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3720:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3717:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3779:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3805:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3792:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3792:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3783:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3849:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "3824:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3824:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3824:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3864:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3874:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3864:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3888:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3915:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3926:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3911:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3911:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3898:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3898:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3888:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3939:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3966:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3977:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3962:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3962:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3949:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3949:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3939:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3990:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4022:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4033:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4018:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4018:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4005:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4005:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3994:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4071:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4046:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4046:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4046:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4088:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "4098:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "4088:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint128t_uint256t_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3649:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3660:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3672:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3680:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3688:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "3696:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3586:525:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4265:494:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4312:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4321:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4324:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4314:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4314:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4314:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4286:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4295:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4282:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4282:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4307:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4278:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4278:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4275:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4337:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4356:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4350:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4350:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4341:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4400:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "4375:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4375:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4375:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4415:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4425:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4415:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4439:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4459:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4470:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4455:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4455:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4449:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4449:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4439:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4483:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4503:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4514:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4499:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4499:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4493:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4493:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4483:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4527:40:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4552:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4563:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4548:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4548:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4542:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4542:25:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4531:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4601:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "4576:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4576:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4576:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4618:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "4628:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "4618:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4644:41:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4669:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4680:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4665:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4665:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4659:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4659:26:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "4648:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "4719:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "4694:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4694:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4694:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4736:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "4746:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "4736:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint128t_uint256t_uint256t_uint128t_uint128_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4199:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4210:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4222:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4230:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4238:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4246:6:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "4254:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4116:643:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4937:730:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4984:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4993:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4996:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4986:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4986:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4986:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4958:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4967:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4954:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4954:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4979:3:84",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4950:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4950:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4947:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5009:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5028:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5022:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5022:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5013:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5072:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5047:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5047:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5047:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5087:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5097:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5087:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5111:40:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5136:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5147:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5132:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5132:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5126:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5126:25:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5115:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5207:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5216:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5219:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5209:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5209:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5209:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5173:7:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5193:1:84",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "5196:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "5182:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5182:22:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "5170:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5170:35:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5163:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5163:43:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5160:63:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5232:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "5242:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5232:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5258:58:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5301:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5312:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5297:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5297:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5268:28:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5268:48:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5258:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5325:58:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5368:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5379:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5364:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5364:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5335:28:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5335:48:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "5325:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5392:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5435:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5446:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5431:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5431:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5402:28:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5402:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "5392:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5460:41:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5485:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5496:3:84",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5481:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5481:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5475:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5475:26:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "5464:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5553:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5562:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5565:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5555:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5555:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5555:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "5523:7:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "5536:7:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5545:4:84",
                                            "type": "",
                                            "value": "0xff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "5532:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5532:18:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "5520:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5520:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5513:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5513:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5510:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5578:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "5588:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "5578:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5604:57:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5645:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5656:3:84",
                                        "type": "",
                                        "value": "192"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5641:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5641:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5614:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5614:47:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value6",
                                  "nodeType": "YulIdentifier",
                                  "src": "5604:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4855:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4866:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4878:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4886:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4894:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4902:6:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "4910:6:84",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "4918:6:84",
                            "type": ""
                          },
                          {
                            "name": "value6",
                            "nodeType": "YulTypedName",
                            "src": "4926:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4764:903:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5770:147:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5816:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5825:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5828:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5818:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5818:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5818:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5791:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5800:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5787:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5787:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5812:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5783:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5783:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5780:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5841:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5857:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5851:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5851:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5841:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5876:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5896:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5907:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5892:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5892:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5886:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5886:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5876:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5728:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5739:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5751:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5759:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5672:245:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6045:604:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6091:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6100:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6103:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6093:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6093:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6093:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6066:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6075:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "6062:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6062:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6087:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6058:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6058:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6055:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6116:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6139:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6126:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6126:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "6116:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6158:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6185:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6196:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6181:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6181:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6168:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6168:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "6158:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6209:46:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6240:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6251:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6236:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6236:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6223:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6223:32:84"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "6213:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6264:28:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6274:18:84",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6268:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6319:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6328:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6331:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6321:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6321:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6321:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "6307:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6315:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6304:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6304:14:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6301:34:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6344:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6358:9:84"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "6369:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6354:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6354:22:84"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "6348:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6424:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6433:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6436:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6426:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6426:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6426:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "6403:2:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6407:4:84",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "6399:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6399:13:84"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6414:7:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "6395:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6395:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6388:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6388:35:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6385:55:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6449:30:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6476:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6463:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6463:16:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6453:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6506:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6515:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6518:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6508:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6508:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6508:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6494:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6502:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6491:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6491:14:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6488:34:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6572:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6581:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6584:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6574:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6574:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6574:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "6545:2:84"
                                          },
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "6549:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "6541:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6541:15:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6558:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6537:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6537:24:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "6563:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6534:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6534:37:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6531:57:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6597:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6611:2:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6615:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6607:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6607:11:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6597:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6627:16:84",
                              "value": {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "6637:6:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "6627:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256t_bytes_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5987:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5998:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6010:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6018:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6026:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "6034:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5922:727:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6792:383:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6839:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6848:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6851:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6841:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6841:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6841:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6813:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6822:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "6809:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6809:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6834:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6805:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6805:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6802:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6864:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6887:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6874:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6874:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "6864:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6906:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6933:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6944:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6929:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6929:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6916:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6916:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "6906:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6957:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6984:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6995:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6980:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6980:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6967:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6967:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6957:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7008:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7035:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7046:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7031:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7031:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7018:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7018:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "7008:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7059:46:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7089:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7100:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7085:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7085:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7072:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7072:33:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "7063:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "7139:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "7114:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7114:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7114:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7154:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "7164:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "7154:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6726:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "6737:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6749:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6757:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6765:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "6773:6:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "6781:6:84",
                            "type": ""
                          }
                        ],
                        "src": "6654:521:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7229:208:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7239:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "7259:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7253:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7253:12:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "7243:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "7281:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7286:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7274:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7274:19:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7274:19:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "7328:5:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7335:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7324:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7324:16:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "7346:3:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7351:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7342:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7342:14:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7358:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "7302:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7302:63:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7302:63:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7374:57:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "7389:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "7402:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7410:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "7398:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7398:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7419:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "7415:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7415:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "7394:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7394:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7385:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7385:39:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7426:4:84",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7381:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7381:50:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "7374:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "7206:5:84",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "7213:3:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "7221:3:84",
                            "type": ""
                          }
                        ],
                        "src": "7180:257:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7609:226:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "7626:3:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7639:2:84",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "7643:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "7635:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7635:15:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "7664:2:84",
                                                    "type": "",
                                                    "value": "96"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "7668:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "7660:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "7660:10:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7672:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "7656:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7656:18:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "7652:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7652:23:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7631:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7631:45:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7619:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7619:58:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7619:58:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "7697:3:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7702:2:84",
                                        "type": "",
                                        "value": "20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7693:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7693:12:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7711:3:84",
                                        "type": "",
                                        "value": "232"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7727:1:84",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "7730:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "7716:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7716:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7707:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7707:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7686:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7686:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7686:53:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "7759:3:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7764:2:84",
                                        "type": "",
                                        "value": "23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7755:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7755:12:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7773:3:84",
                                        "type": "",
                                        "value": "232"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7789:1:84",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value2",
                                            "nodeType": "YulIdentifier",
                                            "src": "7792:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "7778:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7778:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7769:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7769:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7748:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7748:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7748:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7810:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "7821:3:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7826:2:84",
                                    "type": "",
                                    "value": "26"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7817:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7817:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "7810:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_address_t_int24_t_int24__to_t_address_t_int24_t_int24__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "7569:3:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7574:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7582:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7590:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "7601:3:84",
                            "type": ""
                          }
                        ],
                        "src": "7442:393:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7977:137:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7987:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8007:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8001:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8001:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "7991:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8049:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8057:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8045:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8045:17:84"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "8064:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8069:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "8023:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8023:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8023:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8085:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "8096:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8101:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8092:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8092:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "8085:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "7953:3:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7958:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "7969:3:84",
                            "type": ""
                          }
                        ],
                        "src": "7840:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8220:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8230:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8242:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8253:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8238:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8238:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8230:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8272:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8287:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8303:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8308:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "8299:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8299:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "8312:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "8295:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8295:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8283:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8283:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8265:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8265:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8265:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8189:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8200:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8211:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8119:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8484:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8494:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8506:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8517:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8502:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8502:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8494:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8529:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8547:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8552:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8543:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8543:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8556:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "8539:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8539:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8533:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8574:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8589:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8597:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8585:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8585:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8567:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8567:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8567:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8621:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8632:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8617:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8617:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8641:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8649:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8637:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8637:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8610:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8610:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8610:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8673:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8684:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8669:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8669:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "8689:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8662:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8662:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8662:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8437:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8448:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8456:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8464:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8475:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8327:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8930:355:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8947:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8962:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8978:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8983:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "8974:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8974:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "8987:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "8970:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8970:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8958:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8958:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8940:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8940:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8940:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9011:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9022:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9007:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9007:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9038:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9041:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9027:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9027:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9000:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9000:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9000:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9069:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9080:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9065:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9065:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9096:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "9099:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9085:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9085:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9058:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9058:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9058:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9127:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9138:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9123:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9123:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value3",
                                        "nodeType": "YulIdentifier",
                                        "src": "9147:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9163:3:84",
                                                "type": "",
                                                "value": "128"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9168:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "9159:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9159:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9172:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "9155:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9155:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "9143:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9143:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9116:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9116:60:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9116:60:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9196:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9207:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9192:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9192:19:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9213:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9185:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9185:32:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9185:32:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9226:53:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value4",
                                    "nodeType": "YulIdentifier",
                                    "src": "9251:6:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9263:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9274:3:84",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9259:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9259:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "9234:16:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9234:45:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9226:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_int24_t_int24_t_uint128_t_bytes_memory_ptr__to_t_address_t_int24_t_int24_t_uint128_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8867:9:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "8878:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "8886:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8894:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8902:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8910:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8921:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8707:578:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9495:362:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9505:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9517:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9528:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9513:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9513:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9505:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9548:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "9563:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9579:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9584:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "9575:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9575:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9588:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "9571:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9571:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "9559:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9559:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9541:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9541:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9541:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9612:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9623:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9608:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9608:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9639:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9642:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9628:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9628:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9601:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9601:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9601:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9670:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9681:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9666:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9666:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9697:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "9700:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9686:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9686:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9659:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9659:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9659:49:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9717:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9735:3:84",
                                        "type": "",
                                        "value": "128"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9740:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "9731:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9731:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9744:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "9727:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9727:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9721:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9766:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9777:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9762:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9762:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value3",
                                        "nodeType": "YulIdentifier",
                                        "src": "9786:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9794:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "9782:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9782:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9755:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9755:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9755:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9818:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9829:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9814:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9814:19:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value4",
                                        "nodeType": "YulIdentifier",
                                        "src": "9839:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9847:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "9835:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9835:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9807:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9807:44:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9807:44:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_int24_t_int24_t_uint128_t_uint128__to_t_address_t_int24_t_int24_t_uint128_t_uint128__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9432:9:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "9443:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "9451:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "9459:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9467:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9475:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9486:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9290:567:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9957:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9967:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9979:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9990:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9975:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9975:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9967:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10009:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "10034:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "10027:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10027:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "10020:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10020:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10002:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10002:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10002:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9926:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9937:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9948:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9862:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10155:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10165:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10177:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10188:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10173:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10173:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10165:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10207:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "10218:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10200:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10200:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10200:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10124:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10135:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10146:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10054:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10333:91:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10343:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10355:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10366:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10351:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10351:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10343:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10385:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10407:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "10410:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "10396:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10396:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10378:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10378:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10378:40:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_int24__to_t_int24__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10302:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10313:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10324:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10236:188:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10578:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10588:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10600:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10611:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10596:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10596:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10588:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10630:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10652:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "10655:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "10641:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10641:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10623:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10623:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10623:40:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10683:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10694:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10679:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10679:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10710:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10713:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "10699:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10699:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10672:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10672:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10672:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10741:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10752:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10737:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10737:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "10761:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10777:3:84",
                                                "type": "",
                                                "value": "128"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10782:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "10773:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "10773:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10786:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "10769:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10769:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "10757:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10757:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10730:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10730:60:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10730:60:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_int24_t_int24_t_uint128__to_t_int24_t_int24_t_uint128__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10531:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "10542:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "10550:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10558:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10569:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10429:367:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10922:98:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10939:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10950:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10932:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10932:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10932:21:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10962:52:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "10987:6:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10999:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11010:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10995:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10995:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "10970:16:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10970:44:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10962:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10891:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10902:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10913:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10801:219:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11199:150:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11216:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11227:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11209:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11209:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11209:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11250:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11261:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11246:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11246:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11266:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11239:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11239:29:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11239:29:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11288:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11299:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11284:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11284:18:84"
                                  },
                                  {
                                    "hexValue": "54",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "11304:3:84",
                                    "type": "",
                                    "value": "T"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11277:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11277:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11277:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11317:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11329:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11340:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11325:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11325:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11317:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11176:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11190:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11025:324:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11525:373:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11535:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11547:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11558:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11543:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11543:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11535:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11571:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "11587:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "11581:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11581:13:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11575:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11603:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11621:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11626:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11617:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11617:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11630:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "11613:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11613:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "11607:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11648:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "11669:2:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "11663:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11663:9:84"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "11674:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "11659:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11659:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11641:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11641:37:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11641:37:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11698:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11709:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11694:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11694:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "11730:2:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11734:4:84",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "11726:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11726:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "11720:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11720:20:84"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "11742:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "11716:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11716:29:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11687:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11687:59:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11687:59:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11766:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11777:4:84",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11762:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11762:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "11798:2:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11802:4:84",
                                                "type": "",
                                                "value": "0x40"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "11794:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11794:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "11788:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11788:20:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11810:8:84",
                                        "type": "",
                                        "value": "0xffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "11784:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11784:35:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11755:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11755:65:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11755:65:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11840:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11851:4:84",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11836:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11836:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "11872:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11880:4:84",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "11868:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11868:17:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "11862:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11862:24:84"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "11888:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "11858:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11858:33:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11829:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11829:63:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11829:63:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_MintCallbackData_$11756_memory_ptr__to_t_struct$_MintCallbackData_$11756_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11494:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11505:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11516:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11354:544:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12004:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12014:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12026:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12037:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12022:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12022:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "12014:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12056:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "12071:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12087:3:84",
                                                "type": "",
                                                "value": "128"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12092:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "12083:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "12083:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12096:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "12079:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12079:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "12067:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12067:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12049:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12049:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12049:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11973:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11984:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11995:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11903:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12324:315:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12334:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12346:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12357:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12342:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12342:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "12334:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12370:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12388:3:84",
                                        "type": "",
                                        "value": "128"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12393:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12384:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12384:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12397:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "12380:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12380:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "12374:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12415:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "12430:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "12438:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "12426:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12426:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12408:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12408:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12408:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12462:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12473:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12458:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12458:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "12478:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12451:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12451:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12451:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12505:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12516:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12501:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12501:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "12521:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12494:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12494:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12494:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12548:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12559:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12544:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12544:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value3",
                                        "nodeType": "YulIdentifier",
                                        "src": "12568:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "12576:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "12564:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12564:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12537:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12537:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12537:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12600:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12611:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12596:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12596:19:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value4",
                                        "nodeType": "YulIdentifier",
                                        "src": "12621:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "12629:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "12617:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12617:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12589:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12589:44:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12589:44:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint128_t_uint256_t_uint256_t_uint128_t_uint128__to_t_uint128_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12261:9:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "12272:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "12280:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "12288:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "12296:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "12304:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12315:4:84",
                            "type": ""
                          }
                        ],
                        "src": "12111:528:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12745:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12755:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12767:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12778:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12763:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12763:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "12755:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12797:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "12812:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12828:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12833:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "12824:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "12824:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "12837:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "12820:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12820:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "12808:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12808:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12790:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12790:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12790:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint160__to_t_uint160__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12714:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "12725:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12736:4:84",
                            "type": ""
                          }
                        ],
                        "src": "12644:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12951:91:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12961:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12973:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12984:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12969:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12969:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "12961:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13003:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "13018:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13026:8:84",
                                        "type": "",
                                        "value": "0xffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "13014:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13014:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12996:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12996:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12996:40:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint24__to_t_uint24__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12920:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "12931:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12942:4:84",
                            "type": ""
                          }
                        ],
                        "src": "12852:190:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13148:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "13158:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13170:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13181:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13166:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13166:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "13158:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13200:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "13211:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13193:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13193:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13193:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13117:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "13128:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "13139:4:84",
                            "type": ""
                          }
                        ],
                        "src": "13047:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13358:119:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "13368:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13380:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13391:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13376:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13376:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "13368:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13410:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "13421:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13403:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13403:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13403:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13448:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13459:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13444:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13444:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "13464:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13437:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13437:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13437:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13319:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "13330:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "13338:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "13349:4:84",
                            "type": ""
                          }
                        ],
                        "src": "13229:248:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13579:87:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "13589:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13601:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13612:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13597:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13597:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "13589:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13631:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "13646:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13654:4:84",
                                        "type": "",
                                        "value": "0xff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "13642:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13642:17:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13624:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13624:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13624:36:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13548:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "13559:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "13570:4:84",
                            "type": ""
                          }
                        ],
                        "src": "13482:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13712:304:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "13722:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13738:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "13732:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13732:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "13722:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13750:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "13772:6:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13780:4:84",
                                    "type": "",
                                    "value": "0x60"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13768:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13768:17:84"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "13754:10:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13868:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13889:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "13896:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "13901:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "13892:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13892:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "13882:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13882:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13882:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13933:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13936:4:84",
                                          "type": "",
                                          "value": "0x41"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "13926:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13926:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13926:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13961:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13964:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "13954:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13954:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13954:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "13803:10:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13815:18:84",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "13800:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13800:34:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "13839:10:84"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "13851:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "13836:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13836:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "13797:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13797:62:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13794:185:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13995:2:84",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "13999:10:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13988:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13988:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13988:22:84"
                            }
                          ]
                        },
                        "name": "allocate_memory",
                        "nodeType": "YulFunctionDefinition",
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "13701:6:84",
                            "type": ""
                          }
                        ],
                        "src": "13671:345:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14069:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14096:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "14098:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14098:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14098:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "14085:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "14092:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "14088:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14088:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14082:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14082:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "14079:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14127:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "14138:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "14141:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14134:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14134:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "14127:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "14052:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "14055:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "14061:3:84",
                            "type": ""
                          }
                        ],
                        "src": "14021:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14200:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14223:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "14225:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14225:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14225:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "14220:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "14213:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14213:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "14210:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14254:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "14263:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "14266:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "14259:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14259:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "14254:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "14185:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "14188:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "14194:1:84",
                            "type": ""
                          }
                        ],
                        "src": "14154:120:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14331:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14390:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "14392:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14392:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14392:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "14362:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "14355:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "14355:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "14348:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14348:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "14370:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "14381:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "14377:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "14377:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "14385:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "14373:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "14373:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "14367:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14367:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "14344:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14344:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "14341:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14421:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "14436:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "14439:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "14432:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14432:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "14421:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "14310:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "14313:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "14319:7:84",
                            "type": ""
                          }
                        ],
                        "src": "14279:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14501:182:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14511:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14529:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14534:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14525:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14525:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14538:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "14521:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14521:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "14515:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14549:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "14564:1:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14567:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "14560:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14560:10:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "14553:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14579:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "14594:1:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14597:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "14590:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14590:10:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "14583:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14625:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "14627:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14627:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14627:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14615:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14620:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14612:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14612:12:84"
                              },
                              "nodeType": "YulIf",
                              "src": "14609:38:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14656:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14668:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14673:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "14664:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14664:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "14656:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint160",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "14483:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "14486:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "14492:4:84",
                            "type": ""
                          }
                        ],
                        "src": "14452:231:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14737:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14759:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "14761:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14761:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14761:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "14753:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "14756:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14750:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14750:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "14747:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14790:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "14802:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "14805:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "14798:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14798:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "14790:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "14719:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "14722:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "14728:4:84",
                            "type": ""
                          }
                        ],
                        "src": "14688:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14871:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14881:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "14890:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "14885:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14950:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "14975:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "14980:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "14971:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "14971:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "14994:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "14999:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "14990:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "14990:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "14984:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "14984:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "14964:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14964:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14964:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "14911:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "14914:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "14908:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14908:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "14922:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "14924:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "14933:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "14936:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "14929:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14929:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "14924:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "14904:3:84",
                                "statements": []
                              },
                              "src": "14900:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15039:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "15052:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "15057:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "15048:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "15048:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15066:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "15041:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15041:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15041:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "15028:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "15031:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "15025:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15025:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "15022:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "14849:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "14854:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "14859:6:84",
                            "type": ""
                          }
                        ],
                        "src": "14818:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15136:325:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "15146:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15160:1:84",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "15163:4:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "15156:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15156:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "15146:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15177:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "15207:4:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15213:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "15203:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15203:12:84"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "15181:18:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15254:31:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "15256:27:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "15270:6:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15278:4:84",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "15266:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15266:17:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "15256:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "15234:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "15227:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15227:26:84"
                              },
                              "nodeType": "YulIf",
                              "src": "15224:61:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15344:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15365:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "15372:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "15377:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "15368:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "15368:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "15358:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15358:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15358:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15409:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15412:4:84",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "15402:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15402:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15402:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15437:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15440:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "15430:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15430:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15430:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "15300:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "15323:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15331:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "15320:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15320:14:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "15297:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15297:38:84"
                              },
                              "nodeType": "YulIf",
                              "src": "15294:161:84"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "15116:4:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "15125:6:84",
                            "type": ""
                          }
                        ],
                        "src": "15081:380:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15504:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15527:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "15529:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15529:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15529:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "15524:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "15517:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15517:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "15514:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15558:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "15567:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "15570:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "15563:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15563:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "15558:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "15489:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "15492:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "15498:1:84",
                            "type": ""
                          }
                        ],
                        "src": "15466:112:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15625:142:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15635:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15661:1:84",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "15664:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "15650:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15650:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "15639:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15708:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "15710:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15710:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15710:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "15685:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15698:7:84",
                                        "type": "",
                                        "value": "8388607"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "15694:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15694:12:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "15682:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15682:25:84"
                              },
                              "nodeType": "YulIf",
                              "src": "15679:51:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15739:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15750:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "15753:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "15746:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15746:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "15739:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "15607:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "15617:3:84",
                            "type": ""
                          }
                        ],
                        "src": "15583:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15815:93:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15851:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "15853:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15853:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15853:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "15831:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15842:3:84",
                                        "type": "",
                                        "value": "255"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15847:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "15838:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15838:11:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "15828:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15828:22:84"
                              },
                              "nodeType": "YulIf",
                              "src": "15825:48:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15882:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15893:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "15896:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "15889:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15889:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "15882:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "15797:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "15807:3:84",
                            "type": ""
                          }
                        ],
                        "src": "15772:136:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15945:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15962:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15969:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15974:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "15965:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15965:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15955:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15955:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15955:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16002:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16005:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15995:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15995:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15995:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16026:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16029:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "16019:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16019:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16019:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "15913:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16077:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16094:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16101:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16106:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "16097:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16097:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16087:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16087:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16087:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16134:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16137:4:84",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "16127:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16127:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16127:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16158:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16161:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "16151:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16151:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "16151:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "16045:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16222:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "16286:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16295:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16298:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "16288:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16288:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16288:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "16245:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "16256:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "16271:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "16276:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "16267:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "16267:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "16280:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "16263:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "16263:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "16252:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "16252:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "16242:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16242:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "16235:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16235:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "16232:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "16211:5:84",
                            "type": ""
                          }
                        ],
                        "src": "16177:131:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16358:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "16422:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16431:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16434:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "16424:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16424:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16424:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "16381:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "16392:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "16407:3:84",
                                                    "type": "",
                                                    "value": "128"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "16412:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "16403:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "16403:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "16416:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "16399:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "16399:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "16388:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "16388:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "16378:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16378:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "16371:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16371:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "16368:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_uint128",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "16347:5:84",
                            "type": ""
                          }
                        ],
                        "src": "16313:131:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_bool_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_bool_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_struct$_MintCallbackData_$11756_memory_ptr(headStart, dataEnd) -> value0\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 128) { revert(0, 0) }\n        let memPtr := mload(0x40)\n        let newFreePtr := add(memPtr, 0x40)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(0x40, newFreePtr)\n        if slt(_1, 0x60) { revert(0, 0) }\n        let value := allocate_memory()\n        let value_1 := calldataload(headStart)\n        validator_revert_address(value_1)\n        mstore(value, value_1)\n        let value_2 := calldataload(add(headStart, 32))\n        validator_revert_address(value_2)\n        mstore(add(value, 32), value_2)\n        let value_3 := calldataload(add(headStart, 0x40))\n        if iszero(eq(value_3, and(value_3, 0xffffff))) { revert(0, 0) }\n        mstore(add(value, 0x40), value_3)\n        mstore(memPtr, value)\n        let value_4 := calldataload(add(headStart, 0x60))\n        validator_revert_address(value_4)\n        mstore(add(memPtr, 32), value_4)\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_uint128t_uint128_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_uint128(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_uint128(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_uint128t_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_uint128(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_uint128t_uint256t_uint256t_uint128t_uint128_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_uint128(value)\n        value0 := value\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        let value_1 := mload(add(headStart, 96))\n        validator_revert_uint128(value_1)\n        value3 := value_1\n        let value_2 := mload(add(headStart, 128))\n        validator_revert_uint128(value_2)\n        value4 := value_2\n    }\n    function abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        if iszero(eq(value_1, signextend(2, value_1))) { revert(0, 0) }\n        value1 := value_1\n        value2 := abi_decode_uint16_fromMemory(add(headStart, 64))\n        value3 := abi_decode_uint16_fromMemory(add(headStart, 96))\n        value4 := abi_decode_uint16_fromMemory(add(headStart, 128))\n        let value_2 := mload(add(headStart, 160))\n        if iszero(eq(value_2, and(value_2, 0xff))) { revert(0, 0) }\n        value5 := value_2\n        value6 := abi_decode_bool_fromMemory(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value2 := add(_2, 32)\n        value3 := length\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let value := calldataload(add(headStart, 128))\n        validator_revert_address(value)\n        value4 := value\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_packed_t_address_t_int24_t_int24__to_t_address_t_int24_t_int24__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        mstore(pos, and(shl(96, value0), not(sub(shl(96, 1), 1))))\n        mstore(add(pos, 20), shl(232, signextend(2, value1)))\n        mstore(add(pos, 23), shl(232, signextend(2, value2)))\n        end := add(pos, 26)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_int24_t_int24_t_uint128_t_bytes_memory_ptr__to_t_address_t_int24_t_int24_t_uint128_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), signextend(2, value1))\n        mstore(add(headStart, 64), signextend(2, value2))\n        mstore(add(headStart, 96), and(value3, sub(shl(128, 1), 1)))\n        mstore(add(headStart, 128), 160)\n        tail := abi_encode_bytes(value4, add(headStart, 160))\n    }\n    function abi_encode_tuple_t_address_t_int24_t_int24_t_uint128_t_uint128__to_t_address_t_int24_t_int24_t_uint128_t_uint128__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), signextend(2, value1))\n        mstore(add(headStart, 64), signextend(2, value2))\n        let _1 := sub(shl(128, 1), 1)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_int24__to_t_int24__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, signextend(2, value0))\n    }\n    function abi_encode_tuple_t_int24_t_int24_t_uint128__to_t_int24_t_int24_t_uint128__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, signextend(2, value0))\n        mstore(add(headStart, 32), signextend(2, value1))\n        mstore(add(headStart, 64), and(value2, sub(shl(128, 1), 1)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 1)\n        mstore(add(headStart, 64), \"T\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_struct$_MintCallbackData_$11756_memory_ptr__to_t_struct$_MintCallbackData_$11756_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := mload(value0)\n        let _2 := sub(shl(160, 1), 1)\n        mstore(headStart, and(mload(_1), _2))\n        mstore(add(headStart, 0x20), and(mload(add(_1, 0x20)), _2))\n        mstore(add(headStart, 0x40), and(mload(add(_1, 0x40)), 0xffffff))\n        mstore(add(headStart, 0x60), and(mload(add(value0, 0x20)), _2))\n    }\n    function abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(128, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint128_t_uint256_t_uint256_t_uint128_t_uint128__to_t_uint128_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := sub(shl(128, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n    function abi_encode_tuple_t_uint160__to_t_uint160__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint24__to_t_uint24__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x60)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_uint160(x, y) -> diff\n    {\n        let _1 := sub(shl(160, 1), 1)\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function negate_t_int24(value) -> ret\n    {\n        let value_1 := signextend(2, value)\n        if eq(value_1, not(8388607)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function negate_t_int256(value) -> ret\n    {\n        if eq(value, shl(255, 1)) { panic_error_0x11() }\n        ret := sub(0, value)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function validator_revert_uint128(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(128, 1), 1)))) { revert(0, 0) }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "3239": [
                  {
                    "length": 32,
                    "start": 938
                  }
                ],
                "3243": [
                  {
                    "length": 32,
                    "start": 493
                  }
                ],
                "3247": [
                  {
                    "length": 32,
                    "start": 1095
                  }
                ],
                "3251": [
                  {
                    "length": 32,
                    "start": 545
                  },
                  {
                    "length": 32,
                    "start": 1429
                  },
                  {
                    "length": 32,
                    "start": 2495
                  },
                  {
                    "length": 32,
                    "start": 2689
                  },
                  {
                    "length": 32,
                    "start": 2952
                  },
                  {
                    "length": 32,
                    "start": 3035
                  },
                  {
                    "length": 32,
                    "start": 3097
                  },
                  {
                    "length": 32,
                    "start": 3192
                  },
                  {
                    "length": 32,
                    "start": 3486
                  },
                  {
                    "length": 32,
                    "start": 4928
                  },
                  {
                    "length": 32,
                    "start": 5301
                  }
                ],
                "3255": [
                  {
                    "length": 32,
                    "start": 1196
                  }
                ],
                "3259": [
                  {
                    "length": 32,
                    "start": 636
                  },
                  {
                    "length": 32,
                    "start": 5085
                  }
                ],
                "3263": [
                  {
                    "length": 32,
                    "start": 977
                  },
                  {
                    "length": 32,
                    "start": 5118
                  }
                ],
                "3267": [
                  {
                    "length": 32,
                    "start": 759
                  },
                  {
                    "length": 32,
                    "start": 1477
                  },
                  {
                    "length": 32,
                    "start": 2384
                  },
                  {
                    "length": 32,
                    "start": 2736
                  },
                  {
                    "length": 32,
                    "start": 3240
                  },
                  {
                    "length": 32,
                    "start": 3537
                  },
                  {
                    "length": 32,
                    "start": 5350
                  }
                ],
                "3271": [
                  {
                    "length": 32,
                    "start": 701
                  },
                  {
                    "length": 32,
                    "start": 1510
                  },
                  {
                    "length": 32,
                    "start": 2427
                  },
                  {
                    "length": 32,
                    "start": 2770
                  },
                  {
                    "length": 32,
                    "start": 3273
                  },
                  {
                    "length": 32,
                    "start": 3571
                  },
                  {
                    "length": 32,
                    "start": 5384
                  }
                ],
                "3275": [
                  {
                    "length": 32,
                    "start": 1056
                  }
                ]
              },
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106101645760003560e01c806395d89b41116100c957806395d89b411461034c578063a3e6dc2814610354578063a9059cbb1461037f578063ab033ea914610392578063c45a0155146103a5578063c6275261146103cc578063cf51148d146103f3578063d0c93a7c1461041b578063d21220a714610442578063d348799714610469578063dd62ed3e1461047c578063ddca3f43146104a7578063e5225381146104e2578063f39c38a0146104ea57600080fd5b806306fdde031461016957806309218e9114610187578063095ea7b3146101c55780630dfe1681146101e857806316f0115b1461021c57806318160ddd14610243578063238efcbc1461025a57806323b872dd146102645780632ea28f5b14610277578063313ce5671461029e57806355b812a8146102b857806359c4f905146102f25780635aa6e6751461031957806370a082311461032c575b600080fd5b6101716104fd565b60405161017e9190611f09565b60405180910390f35b61018f61058b565b604080516001600160801b039687168152602081019590955284019290925283166060830152909116608082015260a00161017e565b6101d86101d3366004611a98565b6106ac565b604051901515815260200161017e565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b60405161017e9190611e68565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b61024c60045481565b60405190815260200161017e565b610262610718565b005b6101d8610272366004611a57565b6107a4565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b6102a6601281565b60405160ff909116815260200161017e565b6102df7f000000000000000000000000000000000000000000000000000000000000000081565b60405160029190910b815260200161017e565b6102df7f000000000000000000000000000000000000000000000000000000000000000081565b60005461020f906001600160a01b031681565b61024c61033a366004611a01565b60066020526000908152604090205481565b61017161086d565b610367610362366004611db1565b61087a565b6040516001600160801b03909116815260200161017e565b6101d861038d366004611a98565b6108aa565b6102626103a0366004611a01565b6108c0565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b610406610401366004611bc8565b610941565b6040805192835260208301919091520161017e565b6102df7f000000000000000000000000000000000000000000000000000000000000000081565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b610262610477366004611d32565b610b6d565b61024c61048a366004611a1e565b600560209081526000928352604080842090915290825290205481565b6104ce7f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff909116815260200161017e565b610406610c45565b60015461020f906001600160a01b031681565b6002805461050a90612008565b80601f016020809104026020016040519081016040528092919081815260200182805461053690612008565b80156105835780601f1061055857610100808354040283529160200191610583565b820191906000526020600020905b81548152906001019060200180831161056657829003601f168201915b505050505081565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf307f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060405160200161061793929190611e1c565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161064b91815260200190565b60a06040518083038186803b15801561066357600080fd5b505afa158015610677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069b9190611c12565b939992985090965094509092509050565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107079086815260200190565b60405180910390a350600192915050565b6001546001600160a01b0316331461074357604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161079a91611e68565b60405180910390a1565b6001600160a01b0383166000818152600560209081526040808320338085529252822054919290919082148015906107de57506000198114155b156108545760006107ef8583611fc5565b6001600160a01b038881166000818152600560209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61085f86868661129c565b6001925050505b9392505050565b6003805461050a90612008565b600061088886868686611338565b509091506108a19050826001600160801b0383166115bf565b95945050505050565b60006108b733848461129c565b50600192915050565b6000546001600160a01b031633146108eb576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610936908390611e68565b60405180910390a150565b60405163a34123a760e01b81527f0000000000000000000000000000000000000000000000000000000000000000600290810b60048301527f0000000000000000000000000000000000000000000000000000000000000000900b60248201526001600160801b038516604482015260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a34123a7906064016040805180830381600087803b158015610a0257600080fd5b505af1158015610a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3a9190611d0e565b909250905084821080610a4c57508381105b15610a6a576040516397c7f53760e01b815260040160405180910390fd5b6040516309e3d67b60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634f1eb3d890610afe9086907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401611ecc565b6040805180830381600087803b158015610b1757600080fd5b505af1158015610b2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4f9190611b99565b5050610b6433876001600160801b0316611637565b94509492505050565b6000610b7b82840184611adf565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bc657604051634b60273560e01b815260040160405180910390fd5b8415610c00578051516020820151610c0091907f0000000000000000000000000000000000000000000000000000000000000000886116a7565b8315610c3e57610c3e81600001516020015182602001517f0000000000000000000000000000000000000000000000000000000000000000876116a7565b5050505050565b6000805481906001600160a01b03163314610c73576040516354348f0360e01b815260040160405180910390fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf307f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000604051602001610cfa93929190611e1c565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401610d2e91815260200190565b60a06040518083038186803b158015610d4657600080fd5b505afa158015610d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7e9190611c12565b6000546040516309e3d67b60e31b81529297509095506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169550634f1eb3d89450610e1f935016907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401611ecc565b6040805180830381600087803b158015610e3857600080fd5b505af1158015610e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e709190611b99565b6001600160801b03918216969116945092505050565b60008060008360020b12610e9d578260020b610eaa565b8260020b610eaa9061207a565b9050610eb9620d89e719612057565b60020b811115610ef35760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b600060018216610f0757600160801b610f19565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615610f4e576080610f49826ffff97272373d413259a46990580e213a611f7e565b901c90505b6004821615610f78576080610f73826ffff2e50f5f656932ef12357cf3c7fdcc611f7e565b901c90505b6008821615610fa2576080610f9d826fffe5caca7e10e4e61c3624eaa0941cd0611f7e565b901c90505b6010821615610fcc576080610fc7826fffcb9843d60f6159c9db58835c926644611f7e565b901c90505b6020821615610ff6576080610ff1826fff973b41fa98c081472e6896dfb254c0611f7e565b901c90505b604082161561102057608061101b826fff2ea16466c96a3843ec78b326b52861611f7e565b901c90505b608082161561104a576080611045826ffe5dee046a99a2a811c461f1969c3053611f7e565b901c90505b610100821615611075576080611070826ffcbe86c7900a88aedcffc83b479aa3a4611f7e565b901c90505b6102008216156110a057608061109b826ff987a7253ac413176f2b074cf7815e54611f7e565b901c90505b6104008216156110cb5760806110c6826ff3392b0822b70005940c7a398e4b70f3611f7e565b901c90505b6108008216156110f65760806110f1826fe7159475a2c29b7443b29c7fa6e889d9611f7e565b901c90505b61100082161561112157608061111c826fd097f3bdfd2022b8845ad8f792aa5825611f7e565b901c90505b61200082161561114c576080611147826fa9f746462d870fdf8a65dc1f90e061e5611f7e565b901c90505b614000821615611177576080611172826f70d869a156d2a1b890bb3df62baf32f7611f7e565b901c90505b6180008216156111a257608061119d826f31be135f97d08fd981231505542fcfa6611f7e565b901c90505b620100008216156111ce5760806111c9826f09aa508b5b7a84e1c677de54f3e99bc9611f7e565b901c90505b620200008216156111f95760806111f4826e5d6af8dedb81196699c329225ee604611f7e565b901c90505b6204000082161561122357608061121e826d2216e584f5fa1ea926041bedfe98611f7e565b901c90505b6208000082161561124b576080611246826b048a170391f7dc42444e8fa2611f7e565b901c90505b60008460020b13156112665761126381600019611f6a565b90505b611274600160201b82612043565b15611280576001611283565b60005b6112949060ff16602083901c611f52565b949350505050565b6001600160a01b038316600090815260066020526040812080548392906112c4908490611fc5565b90915550506001600160a01b038216600090815260066020526040812080548392906112f1908490611f52565b92505081905550816001600160a01b0316836001600160a01b03166000805160206120f18339815191528360405161132b91815260200190565b60405180910390a3505050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561139757600080fd5b505afa1580156113ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cf9190611c74565b5050505050509050611424817f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008b8b6116b9565b6040805160a080820183526007546001600160a01b039081168385018181526008548084166060808801918252600160a01b90920462ffffff9081166080808a01918252948952336020998a019081528a51998a019690965291518616888a01529051169086015290518216848201528451808503909101815291830193849052633c8a7d8d60e01b9093529296507f000000000000000000000000000000000000000000000000000000000000000090911691633c8a7d8d916115339130917f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000918b919060a401611e7c565b6040805180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115849190611d0e565b90935091508583108061159657508482105b156115b4576040516397c7f53760e01b815260040160405180910390fd5b509450945094915050565b80600460008282546115d19190611f52565b90915550506001600160a01b038216600090815260066020526040812080548392906115fe908490611f52565b90915550506040518181526001600160a01b038316906000906000805160206120f1833981519152906020015b60405180910390a35050565b80600460008282546116499190611fc5565b90915550506001600160a01b03821660009081526006602052604081208054839290611676908490611fc5565b90915550506040518181526000906001600160a01b038416906000805160206120f18339815191529060200161162b565b6116b38484848461177b565b50505050565b6000836001600160a01b0316856001600160a01b031611156116d9579293925b846001600160a01b0316866001600160a01b031611611704576116fd858585611875565b90506108a1565b836001600160a01b0316866001600160a01b0316101561176657600061172b878686611875565b9050600061173a8789866118df565b9050806001600160801b0316826001600160801b03161061175b578061175d565b815b925050506108a1565b6117718585846118df565b9695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916117df9190611e4c565b6000604051808303816000865af19150503d806000811461181c576040519150601f19603f3d011682016040523d82523d6000602084013e611821565b606091505b509150915081158061184f575080511580159061184f57508080602001905181019061184d9190611ac4565b155b1561186d576040516316369daf60e31b815260040160405180910390fd5b505050505050565b6000826001600160a01b0316846001600160a01b03161115611895579192915b60006118b8856001600160a01b0316856001600160a01b0316600160601b611915565b90506108a16118da84836118cc8989611f9d565b6001600160a01b0316611915565b6119c4565b6000826001600160a01b0316846001600160a01b031611156118ff579192915b6112946118da83600160601b6118cc8888611f9d565b60008080600019858709858702925082811083820303915050806000141561194f576000841161194457600080fd5b508290049050610866565b80841161195b57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b806001600160801b03811681146119da57600080fd5b919050565b805180151581146119da57600080fd5b805161ffff811681146119da57600080fd5b600060208284031215611a1357600080fd5b8135610866816120c3565b60008060408385031215611a3157600080fd5b8235611a3c816120c3565b91506020830135611a4c816120c3565b809150509250929050565b600080600060608486031215611a6c57600080fd5b8335611a77816120c3565b92506020840135611a87816120c3565b929592945050506040919091013590565b60008060408385031215611aab57600080fd5b8235611ab6816120c3565b946020939093013593505050565b600060208284031215611ad657600080fd5b610866826119df565b60008183036080811215611af257600080fd5b604051604081018181106001600160401b0382111715611b2257634e487b7160e01b600052604160045260246000fd5b6040526060821215611b3357600080fd5b611b3b611f1c565b91508335611b48816120c3565b82526020840135611b58816120c3565b6020830152604084013562ffffff81168114611b7357600080fd5b6040830152908152606083013590611b8a826120c3565b60208101919091529392505050565b60008060408385031215611bac57600080fd5b8251611bb7816120db565b6020840151909250611a4c816120db565b60008060008060808587031215611bde57600080fd5b8435611be9816120db565b935060208501359250604085013591506060850135611c07816120c3565b939692955090935050565b600080600080600060a08688031215611c2a57600080fd5b8551611c35816120db565b8095505060208601519350604086015192506060860151611c55816120db565b6080870151909250611c66816120db565b809150509295509295909350565b600080600080600080600060e0888a031215611c8f57600080fd5b8751611c9a816120c3565b8097505060208801518060020b8114611cb257600080fd5b9550611cc0604089016119ef565b9450611cce606089016119ef565b9350611cdc608089016119ef565b925060a088015160ff81168114611cf257600080fd5b9150611d0060c089016119df565b905092959891949750929550565b60008060408385031215611d2157600080fd5b505080516020909101519092909150565b60008060008060608587031215611d4857600080fd5b843593506020850135925060408501356001600160401b0380821115611d6d57600080fd5b818701915087601f830112611d8157600080fd5b813581811115611d9057600080fd5b886020828501011115611da257600080fd5b95989497505060200194505050565b600080600080600060a08688031215611dc957600080fd5b853594506020860135935060408601359250606086013591506080860135611c66816120c3565b60008151808452611e08816020860160208601611fdc565b601f01601f19169290920160200192915050565b60609390931b6001600160601b0319168352600291820b60e890811b6014850152910b901b6017820152601a0190565b60008251611e5e818460208701611fdc565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a060808201819052600090611ec190830184611df0565b979650505050505050565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6020815260006108666020830184611df0565b604051606081016001600160401b0381118282101715611f4c57634e487b7160e01b600052604160045260246000fd5b60405290565b60008219821115611f6557611f65612097565b500190565b600082611f7957611f796120ad565b500490565b6000816000190483118215151615611f9857611f98612097565b500290565b60006001600160a01b0383811690831681811015611fbd57611fbd612097565b039392505050565b600082821015611fd757611fd7612097565b500390565b60005b83811015611ff7578181015183820152602001611fdf565b838111156116b35750506000910152565b600181811c9082168061201c57607f821691505b6020821081141561203d57634e487b7160e01b600052602260045260246000fd5b50919050565b600082612052576120526120ad565b500690565b60008160020b627fffff1981141561207157612071612097565b60000392915050565b6000600160ff1b82141561209057612090612097565b5060000390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146120d857600080fd5b50565b6001600160801b03811681146120d857600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220176e0789f293d3cdd0b53b0d393ae37177f51883457a8f3566fa6f880833500464736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x164 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x95D89B41 GT PUSH2 0xC9 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0xA3E6DC28 EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x37F JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0xC6275261 EQ PUSH2 0x3CC JUMPI DUP1 PUSH4 0xCF51148D EQ PUSH2 0x3F3 JUMPI DUP1 PUSH4 0xD0C93A7C EQ PUSH2 0x41B JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x442 JUMPI DUP1 PUSH4 0xD3487997 EQ PUSH2 0x469 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x4A7 JUMPI DUP1 PUSH4 0xE5225381 EQ PUSH2 0x4E2 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x4EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x169 JUMPI DUP1 PUSH4 0x9218E91 EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x1E8 JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x25A JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0x2EA28F5B EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x29E JUMPI DUP1 PUSH4 0x55B812A8 EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0x59C4F905 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x319 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x32C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x171 PUSH2 0x4FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x17E SWAP2 SWAP1 PUSH2 0x1F09 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x18F PUSH2 0x58B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x1D8 PUSH2 0x1D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A98 JUMP JUMPDEST PUSH2 0x6AC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x17E SWAP2 SWAP1 PUSH2 0x1E68 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x24C PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x262 PUSH2 0x718 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1D8 PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A57 JUMP JUMPDEST PUSH2 0x7A4 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x2A6 PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x2DF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x2 SWAP2 SWAP1 SWAP2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x2DF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x20F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x24C PUSH2 0x33A CALLDATASIZE PUSH1 0x4 PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x86D JUMP JUMPDEST PUSH2 0x367 PUSH2 0x362 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DB1 JUMP JUMPDEST PUSH2 0x87A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x1D8 PUSH2 0x38D CALLDATASIZE PUSH1 0x4 PUSH2 0x1A98 JUMP JUMPDEST PUSH2 0x8AA JUMP JUMPDEST PUSH2 0x262 PUSH2 0x3A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A01 JUMP JUMPDEST PUSH2 0x8C0 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x406 PUSH2 0x401 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BC8 JUMP JUMPDEST PUSH2 0x941 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x2DF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x262 PUSH2 0x477 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D32 JUMP JUMPDEST PUSH2 0xB6D JUMP JUMPDEST PUSH2 0x24C PUSH2 0x48A CALLDATASIZE PUSH1 0x4 PUSH2 0x1A1E JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4CE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0xFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x406 PUSH2 0xC45 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x20F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH2 0x50A SWAP1 PUSH2 0x2008 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x536 SWAP1 PUSH2 0x2008 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x583 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x558 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x583 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x566 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x514EA4BF ADDRESS PUSH32 0x0 PUSH32 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x617 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x64B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x663 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x677 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x69B SWAP2 SWAP1 PUSH2 0x1C12 JUMP JUMPDEST SWAP4 SWAP10 SWAP3 SWAP9 POP SWAP1 SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x707 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x743 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x79A SWAP2 PUSH2 0x1E68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP3 KECCAK256 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x7DE JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x854 JUMPI PUSH1 0x0 PUSH2 0x7EF DUP6 DUP4 PUSH2 0x1FC5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST PUSH2 0x85F DUP7 DUP7 DUP7 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH2 0x50A SWAP1 PUSH2 0x2008 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x888 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1338 JUMP JUMPDEST POP SWAP1 SWAP2 POP PUSH2 0x8A1 SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH2 0x15BF JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B7 CALLER DUP5 DUP5 PUSH2 0x129C JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x936 SWAP1 DUP4 SWAP1 PUSH2 0x1E68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA34123A7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH32 0x0 PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 SWAP1 SIGNEXTEND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP6 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xA34123A7 SWAP1 PUSH1 0x64 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA16 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA3A SWAP2 SWAP1 PUSH2 0x1D0E JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP DUP5 DUP3 LT DUP1 PUSH2 0xA4C JUMPI POP DUP4 DUP2 LT JUMPDEST ISZERO PUSH2 0xA6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x97C7F537 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9E3D67B PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x4F1EB3D8 SWAP1 PUSH2 0xAFE SWAP1 DUP7 SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1ECC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB2B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB4F SWAP2 SWAP1 PUSH2 0x1B99 JUMP JUMPDEST POP POP PUSH2 0xB64 CALLER DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x1637 JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB7B DUP3 DUP5 ADD DUP5 PUSH2 0x1ADF JUMP JUMPDEST SWAP1 POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xBC6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B602735 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 ISZERO PUSH2 0xC00 JUMPI DUP1 MLOAD MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0xC00 SWAP2 SWAP1 PUSH32 0x0 DUP9 PUSH2 0x16A7 JUMP JUMPDEST DUP4 ISZERO PUSH2 0xC3E JUMPI PUSH2 0xC3E DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD PUSH32 0x0 DUP8 PUSH2 0x16A7 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC73 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x514EA4BF ADDRESS PUSH32 0x0 PUSH32 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xCFA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD2E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD5A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD7E SWAP2 SWAP1 PUSH2 0x1C12 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x9E3D67B PUSH1 0xE3 SHL DUP2 MSTORE SWAP3 SWAP8 POP SWAP1 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP6 POP PUSH4 0x4F1EB3D8 SWAP5 POP PUSH2 0xE1F SWAP4 POP AND SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1ECC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE70 SWAP2 SWAP1 PUSH2 0x1B99 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 AND SWAP7 SWAP2 AND SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH2 0xE9D JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0xEAA JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0xEAA SWAP1 PUSH2 0x207A JUMP JUMPDEST SWAP1 POP PUSH2 0xEB9 PUSH3 0xD89E7 NOT PUSH2 0x2057 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH2 0xEF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH2 0xF07 JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH2 0xF19 JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH2 0xF4E JUMPI PUSH1 0x80 PUSH2 0xF49 DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH2 0xF78 JUMPI PUSH1 0x80 PUSH2 0xF73 DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH2 0xFA2 JUMPI PUSH1 0x80 PUSH2 0xF9D DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH2 0xFCC JUMPI PUSH1 0x80 PUSH2 0xFC7 DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH2 0xFF6 JUMPI PUSH1 0x80 PUSH2 0xFF1 DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH2 0x1020 JUMPI PUSH1 0x80 PUSH2 0x101B DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH2 0x104A JUMPI PUSH1 0x80 PUSH2 0x1045 DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH2 0x1075 JUMPI PUSH1 0x80 PUSH2 0x1070 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH2 0x10A0 JUMPI PUSH1 0x80 PUSH2 0x109B DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH2 0x10CB JUMPI PUSH1 0x80 PUSH2 0x10C6 DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH2 0x10F6 JUMPI PUSH1 0x80 PUSH2 0x10F1 DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH2 0x1121 JUMPI PUSH1 0x80 PUSH2 0x111C DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH2 0x114C JUMPI PUSH1 0x80 PUSH2 0x1147 DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH2 0x1177 JUMPI PUSH1 0x80 PUSH2 0x1172 DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH2 0x11A2 JUMPI PUSH1 0x80 PUSH2 0x119D DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH2 0x11CE JUMPI PUSH1 0x80 PUSH2 0x11C9 DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH2 0x11F9 JUMPI PUSH1 0x80 PUSH2 0x11F4 DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH2 0x1223 JUMPI PUSH1 0x80 PUSH2 0x121E DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH2 0x124B JUMPI PUSH1 0x80 PUSH2 0x1246 DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH2 0x1266 JUMPI PUSH2 0x1263 DUP2 PUSH1 0x0 NOT PUSH2 0x1F6A JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x1274 PUSH1 0x1 PUSH1 0x20 SHL DUP3 PUSH2 0x2043 JUMP JUMPDEST ISZERO PUSH2 0x1280 JUMPI PUSH1 0x1 PUSH2 0x1283 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x1294 SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH2 0x1F52 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x12C4 SWAP1 DUP5 SWAP1 PUSH2 0x1FC5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x12F1 SWAP1 DUP5 SWAP1 PUSH2 0x1F52 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x20F1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 PUSH1 0x40 MLOAD PUSH2 0x132B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1397 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13CF SWAP2 SWAP1 PUSH2 0x1C74 JUMP JUMPDEST POP POP POP POP POP POP SWAP1 POP PUSH2 0x1424 DUP2 PUSH32 0x0 PUSH32 0x0 DUP12 DUP12 PUSH2 0x16B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 DUP6 ADD DUP2 DUP2 MSTORE PUSH1 0x8 SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP1 DUP9 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV PUSH3 0xFFFFFF SWAP1 DUP2 AND PUSH1 0x80 DUP1 DUP11 ADD SWAP2 DUP3 MSTORE SWAP5 DUP10 MSTORE CALLER PUSH1 0x20 SWAP10 DUP11 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP10 DUP11 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP2 MLOAD DUP7 AND DUP9 DUP11 ADD MSTORE SWAP1 MLOAD AND SWAP1 DUP7 ADD MSTORE SWAP1 MLOAD DUP3 AND DUP5 DUP3 ADD MSTORE DUP5 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE SWAP2 DUP4 ADD SWAP4 DUP5 SWAP1 MSTORE PUSH4 0x3C8A7D8D PUSH1 0xE0 SHL SWAP1 SWAP4 MSTORE SWAP3 SWAP7 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP2 PUSH4 0x3C8A7D8D SWAP2 PUSH2 0x1533 SWAP2 ADDRESS SWAP2 PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 DUP12 SWAP2 SWAP1 PUSH1 0xA4 ADD PUSH2 0x1E7C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x154C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1560 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1584 SWAP2 SWAP1 PUSH2 0x1D0E JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP6 DUP4 LT DUP1 PUSH2 0x1596 JUMPI POP DUP5 DUP3 LT JUMPDEST ISZERO PUSH2 0x15B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x97C7F537 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x15D1 SWAP2 SWAP1 PUSH2 0x1F52 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x15FE SWAP1 DUP5 SWAP1 PUSH2 0x1F52 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x20F1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1649 SWAP2 SWAP1 PUSH2 0x1FC5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1676 SWAP1 DUP5 SWAP1 PUSH2 0x1FC5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x20F1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD PUSH2 0x162B JUMP JUMPDEST PUSH2 0x16B3 DUP5 DUP5 DUP5 DUP5 PUSH2 0x177B JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x16D9 JUMPI SWAP3 SWAP4 SWAP3 JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT PUSH2 0x1704 JUMPI PUSH2 0x16FD DUP6 DUP6 DUP6 PUSH2 0x1875 JUMP JUMPDEST SWAP1 POP PUSH2 0x8A1 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT ISZERO PUSH2 0x1766 JUMPI PUSH1 0x0 PUSH2 0x172B DUP8 DUP7 DUP7 PUSH2 0x1875 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x173A DUP8 DUP10 DUP7 PUSH2 0x18DF JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND LT PUSH2 0x175B JUMPI DUP1 PUSH2 0x175D JUMP JUMPDEST DUP2 JUMPDEST SWAP3 POP POP POP PUSH2 0x8A1 JUMP JUMPDEST PUSH2 0x1771 DUP6 DUP6 DUP5 PUSH2 0x18DF JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP1 DUP9 AND SWAP2 PUSH2 0x17DF SWAP2 SWAP1 PUSH2 0x1E4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x181C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1821 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO DUP1 PUSH2 0x184F JUMPI POP DUP1 MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x184F JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x184D SWAP2 SWAP1 PUSH2 0x1AC4 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x186D JUMPI PUSH1 0x40 MLOAD PUSH4 0x16369DAF PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x1895 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH1 0x0 PUSH2 0x18B8 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x1915 JUMP JUMPDEST SWAP1 POP PUSH2 0x8A1 PUSH2 0x18DA DUP5 DUP4 PUSH2 0x18CC DUP10 DUP10 PUSH2 0x1F9D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1915 JUMP JUMPDEST PUSH2 0x19C4 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x18FF JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH2 0x1294 PUSH2 0x18DA DUP4 PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x18CC DUP9 DUP9 PUSH2 0x1F9D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x194F JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x1944 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x866 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x195B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x1 DUP8 NOT DUP2 ADD DUP9 AND SWAP8 DUP9 SWAP1 DIV PUSH1 0x3 DUP2 MUL DUP4 XOR DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL SWAP1 DUP2 MUL SWAP1 SWAP3 SUB SWAP1 SWAP2 MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x19DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x19DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x19DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x866 DUP2 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1A3C DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1A4C DUP2 PUSH2 0x20C3 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1A6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1A77 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1A87 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1AAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1AB6 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1AD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x866 DUP3 PUSH2 0x19DF JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB PUSH1 0x80 DUP2 SLT ISZERO PUSH2 0x1AF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x1B22 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH1 0x60 DUP3 SLT ISZERO PUSH2 0x1B33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B3B PUSH2 0x1F1C JUMP JUMPDEST SWAP2 POP DUP4 CALLDATALOAD PUSH2 0x1B48 DUP2 PUSH2 0x20C3 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1B58 DUP2 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1B73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE SWAP1 DUP2 MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x1B8A DUP3 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1BAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x1BB7 DUP2 PUSH2 0x20DB JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1A4C DUP2 PUSH2 0x20DB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1BDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1BE9 DUP2 PUSH2 0x20DB JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x1C07 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1C2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD PUSH2 0x1C35 DUP2 PUSH2 0x20DB JUMP JUMPDEST DUP1 SWAP6 POP POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x1C55 DUP2 PUSH2 0x20DB JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1C66 DUP2 PUSH2 0x20DB JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1C8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1C9A DUP2 PUSH2 0x20C3 JUMP JUMPDEST DUP1 SWAP8 POP POP PUSH1 0x20 DUP9 ADD MLOAD DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH2 0x1CB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 POP PUSH2 0x1CC0 PUSH1 0x40 DUP10 ADD PUSH2 0x19EF JUMP JUMPDEST SWAP5 POP PUSH2 0x1CCE PUSH1 0x60 DUP10 ADD PUSH2 0x19EF JUMP JUMPDEST SWAP4 POP PUSH2 0x1CDC PUSH1 0x80 DUP10 ADD PUSH2 0x19EF JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1CF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH2 0x1D00 PUSH1 0xC0 DUP10 ADD PUSH2 0x19DF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1D48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x1D6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1D81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1D90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1DA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP POP PUSH1 0x20 ADD SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1DC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x1C66 DUP2 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1E08 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1FDC JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 SWAP1 SWAP4 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND DUP4 MSTORE PUSH1 0x2 SWAP2 DUP3 SIGNEXTEND PUSH1 0xE8 SWAP1 DUP2 SHL PUSH1 0x14 DUP6 ADD MSTORE SWAP2 SIGNEXTEND SWAP1 SHL PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x1A ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1E5E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1FDC JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH1 0x2 DUP6 DUP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE DUP5 SWAP1 SIGNEXTEND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x1EC1 SWAP1 DUP4 ADD DUP5 PUSH2 0x1DF0 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x2 SWAP4 DUP5 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE SWAP2 SWAP1 SWAP3 SIGNEXTEND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 AND PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x866 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1F4C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1F65 JUMPI PUSH2 0x1F65 PUSH2 0x2097 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1F79 JUMPI PUSH2 0x1F79 PUSH2 0x20AD JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1F98 JUMPI PUSH2 0x1F98 PUSH2 0x2097 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x1FBD JUMPI PUSH2 0x1FBD PUSH2 0x2097 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1FD7 JUMPI PUSH2 0x1FD7 PUSH2 0x2097 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1FF7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1FDF JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x16B3 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x201C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x203D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2052 JUMPI PUSH2 0x2052 PUSH2 0x20AD JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH2 0x2071 JUMPI PUSH2 0x2071 PUSH2 0x2097 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH2 0x2090 JUMPI PUSH2 0x2090 PUSH2 0x2097 JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x20D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x20D8 JUMPI PUSH1 0x0 DUP1 REVERT INVALID 0xDD CALLCODE MSTORE 0xAD SHL 0xE2 0xC8 SWAP12 PUSH10 0xC2B068FC378DAA952BA7 CALL PUSH4 0xC4A11628 CREATE2 GAS 0x4D CREATE2 0x23 0xB3 0xEF LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR PUSH15 0x789F293D3CDD0B53B0D393AE37177 CREATE2 XOR DUP4 GASLIMIT PUSH27 0x8F3566FA6F880833500464736F6C63430008070033000000000000 ",
              "sourceMap": "2695:10349:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2791:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7337:446;;;:::i;:::-;;;;-1:-1:-1;;;;;12426:15:84;;;12408:34;;12473:2;12458:18;;12451:34;;;;12501:18;;12494:34;;;;12564:15;;12559:2;12544:18;;12537:43;12617:15;;;-1:-1:-1;12596:19:84;;12589:44;12357:3;12342:19;7337:446:20;12111:528:84;7812:199:20;;;;;;:::i;:::-;;:::i;:::-;;;10027:14:84;;10020:22;10002:41;;9990:2;9975:18;7812:199:20;9862:187:84;3063:40:20;;;;;;;;-1:-1:-1;;;;;8283:32:84;;;8265:51;;8253:2;8238:18;3063:40:20;8119:203:84;3215:38:20;;;;;2915:35;;;;;;;;;10200:25:84;;;10188:2;10173:18;2915:35:20;10054:177:84;680:175:28;;;:::i;:::-;;8215:495:20;;;;;;:::i;:::-;;:::i;3371:47::-;;;;;4086:44;;4128:2;4086:44;;;;;13654:4:84;13642:17;;;13624:36;;13612:2;13597:18;4086:44:20;13482:184:84;3629:41:20;;;;;;;;10407:1:84;10396:21;;;;10378:40;;10366:2;10351:18;3629:41:20;10236:188:84;3547:41:20;;;;;199:34:28;;;;;-1:-1:-1;;;;;199:34:28;;;4263:53:20;;;;;;:::i;:::-;;;;;;;;;;;;;;2856:29;;;:::i;5583:308::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;12067:32:84;;;;12049:51;;12037:2;12022:18;5583:308:20;11903:203:84;8040:146:20;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;2986:41:20:-;;;;;3459:47;;;;;6407:470;;;;;;:::i;:::-;;:::i;:::-;;;;13403:25:84;;;13459:2;13444:18;;13437:34;;;;13376:18;6407:470:20;13229:248:84;3711:43:20;;;;;3139:40;;;;;5931:436;;;;;;:::i;:::-;;:::i;4160:73::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;3294:36;;;;;;;;13026:8:84;13014:21;;;12996:40;;12984:2;12969:18;3294:36:20;12852:190:84;6917:380:20;;;:::i;268:41:28:-;;;;;-1:-1:-1;;;;;268:41:28;;;2791:27:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7337:446::-;7412:17;7437:32;7477;7517:19;7544;7685:4;-1:-1:-1;;;;;7670:30:20;;7743:4;7750:9;7761;7718:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7708:64;;;;;;7670:108;;;;;;;;;;;;;10200:25:84;;10188:2;10173:18;;10054:177;7670:108:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7578:200;;;;-1:-1:-1;7578:200:20;;-1:-1:-1;7578:200:20;-1:-1:-1;7578:200:20;;-1:-1:-1;7337:446:20;-1:-1:-1;7337:446:20:o;7812:199::-;7911:10;7889:4;7901:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;7901:30:20;;;;;;;;;;;:39;;;7952:37;;10200:25:84;;;7889:4:20;;7901:30;;7911:10;;7952:37;;10173:18:84;7952:37:20;;;;;;;-1:-1:-1;8002:4:20;7812:199;;;;:::o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;::::1;754:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;8265:51:84;;;825:25:28::1;::::0;8253:2:84;8238:18;825:25:28::1;;;;;;;680:175::o:0;8215:495:20:-;-1:-1:-1;;;;;8395:15:20;;8322:4;8395:15;;;:9;:15;;;;;;;;8352:10;8395:24;;;;;;;;8322:4;;8352:10;;8395:24;8430:15;;;;;:56;;-1:-1:-1;;;8449:37:20;;;8430:56;8426:223;;;8496:20;8519:25;8538:6;8519:16;:25;:::i;:::-;-1:-1:-1;;;;;8552:15:20;;;;;;;:9;:15;;;;;;;;:24;;;;;;;;;;;;;:39;;;8605:37;;10200:25:84;;;8605:37:20;;8552:39;;-1:-1:-1;8552:24:20;;:15;;8605:37;;;;;;;;;8488:161;8426:223;8655:33;8671:4;8677:2;8681:6;8655:15;:33::i;:::-;8701:4;8694:11;;;;8215:495;;;;;;:::o;2856:29::-;;;;;;;:::i;5583:308::-;5748:17;5791:69;5805:14;5821;5837:10;5849;5791:13;:69::i;:::-;-1:-1:-1;5773:87:20;;-1:-1:-1;5866:20:20;;-1:-1:-1;5872:2:20;-1:-1:-1;;;;;5866:20:20;;:5;:20::i;:::-;5583:308;;;;;;;:::o;8040:146::-;8113:4;8125:39;8141:10;8153:2;8157:6;8125:15;:39::i;:::-;-1:-1:-1;8177:4:20;8040:146;;;;:::o;485:161:28:-;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;::::0;;::::1;::::0;;;610::::1;::::0;8265:51:84;;;610:31:28::1;::::0;8253:2:84;8238:18;610:31:28::1;;;;;;;485:161:::0;:::o;6407:470:20:-;6600:58;;;-1:-1:-1;;;6600:58:20;;6626:9;10652:1:84;10641:21;;;6600:58:20;;;10623:40:84;6637:9:20;10699:21:84;;10679:18;;;10672:49;-1:-1:-1;;;;;10757:32:84;;10737:18;;;10730:60;6600:58:20;;-1:-1:-1;;;;6615:4:20;-1:-1:-1;;;;;6600:25:20;;-1:-1:-1;;10596:18:84;;;;;6600:58:20;;;;;;;;-1:-1:-1;6600:25:20;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6579:79;;-1:-1:-1;6579:79:20;-1:-1:-1;6669:20:20;;;;:44;;;6703:10;6693:7;:20;6669:44;6665:76;;;6722:19;;-1:-1:-1;;;6722:19:20;;;;;;;;;;;6665:76;6748:90;;-1:-1:-1;;;6748:90:20;;6763:4;-1:-1:-1;;;;;6748:28:20;;;;:90;;6777:2;;6781:9;;6792;;6811:7;;6829;;6748:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6844:28:20;;-1:-1:-1;6850:10:20;-1:-1:-1;;;;;6844:28:20;;:5;:28::i;:::-;6407:470;;;;;;;:::o;5931:436::-;6065:31;6099:36;;;;6110:4;6099:36;:::i;:::-;6065:70;-1:-1:-1;6159:4:20;-1:-1:-1;;;;;6145:18:20;:10;:18;6141:41;;6172:10;;-1:-1:-1;;;6172:10:20;;;;;;;;;;;6141:41;6192:15;;6188:84;;6214:16;;:23;6239:13;;;;6209:63;;6214:23;6254:4;6260:11;6209:4;:63::i;:::-;6282:15;;6278:84;;6299:63;6304:7;:16;;;:23;;;6329:7;:13;;;6344:4;6350:11;6299:4;:63::i;:::-;6059:308;5931:436;;;;:::o;6917:380::-;6978:15;983:10:28;;6978:15:20;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;7025:19:20::1;7046::::0;7084:4:::1;-1:-1:-1::0;;;;;7069:30:20::1;;7142:4;7149:9;7160;7117:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7107:64;;;;;;7069:108;;;;;;;;;;;;;10200:25:84::0;;10188:2;10173:18;;10054:177;7069:108:20::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7233:10;::::0;7204:88:::1;::::0;-1:-1:-1;;;7204:88:20;;7018:159;;-1:-1:-1;7018:159:20;;-1:-1:-1;;;;;;7219:4:20::1;7204:28:::0;::::1;::::0;-1:-1:-1;7204:28:20::1;::::0;-1:-1:-1;7204:88:20::1;::::0;-1:-1:-1;7233:10:20::1;::::0;7245:9:::1;::::0;7256::::1;::::0;7018:159;;;;7204:88:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7183:109:20;;::::1;::::0;;::::1;::::0;-1:-1:-1;7183:109:20;-1:-1:-1;;;6917:380:20:o;1363:2473:26:-;1426:20;1454:15;1479:1;1472:4;:8;;;:57;;1523:4;1516:12;;1472:57;;;1499:4;1492:12;;1491:13;;;:::i;:::-;1454:75;-1:-1:-1;657:9:26;-1:-1:-1;;657:9:26;:::i;:::-;1562:16;;1543:7;:36;;1535:50;;;;;-1:-1:-1;;;1535:50:26;;11227:2:84;1535:50:26;;;11209:21:84;11266:1;11246:18;;;11239:29;-1:-1:-1;;;11284:18:84;;;11277:31;1535:50:26;;;;;;11325:18:84;1535:50:26;;;;1592:13;1618:3;1608:13;;:93;;-1:-1:-1;;;1608:93:26;;;1629:34;1608:93;-1:-1:-1;;;;;1592:109:26;;-1:-1:-1;1721:3:26;1711:13;;:18;1707:83;;1787:3;1740:42;:5;1748:34;1740:42;:::i;:::-;1739:51;;1731:59;;1707:83;1810:3;1800:13;;:18;1796:83;;1876:3;1829:42;:5;1837:34;1829:42;:::i;:::-;1828:51;;1820:59;;1796:83;1899:3;1889:13;;:18;1885:83;;1965:3;1918:42;:5;1926:34;1918:42;:::i;:::-;1917:51;;1909:59;;1885:83;1988:4;1978:14;;:19;1974:84;;2055:3;2008:42;:5;2016:34;2008:42;:::i;:::-;2007:51;;1999:59;;1974:84;2078:4;2068:14;;:19;2064:84;;2145:3;2098:42;:5;2106:34;2098:42;:::i;:::-;2097:51;;2089:59;;2064:84;2168:4;2158:14;;:19;2154:84;;2235:3;2188:42;:5;2196:34;2188:42;:::i;:::-;2187:51;;2179:59;;2154:84;2258:4;2248:14;;:19;2244:84;;2325:3;2278:42;:5;2286:34;2278:42;:::i;:::-;2277:51;;2269:59;;2244:84;2348:5;2338:15;;:20;2334:85;;2416:3;2369:42;:5;2377:34;2369:42;:::i;:::-;2368:51;;2360:59;;2334:85;2439:5;2429:15;;:20;2425:85;;2507:3;2460:42;:5;2468:34;2460:42;:::i;:::-;2459:51;;2451:59;;2425:85;2530:5;2520:15;;:20;2516:85;;2598:3;2551:42;:5;2559:34;2551:42;:::i;:::-;2550:51;;2542:59;;2516:85;2621:5;2611:15;;:20;2607:85;;2689:3;2642:42;:5;2650:34;2642:42;:::i;:::-;2641:51;;2633:59;;2607:85;2712:6;2702:16;;:21;2698:86;;2781:3;2734:42;:5;2742:34;2734:42;:::i;:::-;2733:51;;2725:59;;2698:86;2804:6;2794:16;;:21;2790:86;;2873:3;2826:42;:5;2834:34;2826:42;:::i;:::-;2825:51;;2817:59;;2790:86;2896:6;2886:16;;:21;2882:86;;2965:3;2918:42;:5;2926:34;2918:42;:::i;:::-;2917:51;;2909:59;;2882:86;2988:6;2978:16;;:21;2974:86;;3057:3;3010:42;:5;3018:34;3010:42;:::i;:::-;3009:51;;3001:59;;2974:86;3080:7;3070:17;;:22;3066:86;;3149:3;3103:41;:5;3111:33;3103:41;:::i;:::-;3102:50;;3094:58;;3066:86;3172:7;3162:17;;:22;3158:85;;3240:3;3195:40;:5;3203:32;3195:40;:::i;:::-;3194:49;;3186:57;;3158:85;3263:7;3253:17;;:22;3249:83;;3329:3;3286:38;:5;3294:30;3286:38;:::i;:::-;3285:47;;3277:55;;3249:83;3352:7;3342:17;;:22;3338:78;;3413:3;3375:33;:5;3383:25;3375:33;:::i;:::-;3374:42;;3366:50;;3338:78;3434:1;3427:4;:8;;;3423:47;;;3445:25;3465:5;-1:-1:-1;;3445:25:26;:::i;:::-;3437:33;;3423:47;3799:17;-1:-1:-1;;;3799:5:26;:17;:::i;:::-;:22;:30;;3828:1;3799:30;;;3824:1;3799:30;3782:48;;;;3792:2;3783:11;;;3782:48;:::i;:::-;3759:72;1363:2473;-1:-1:-1;;;;1363:2473:26:o;11913:195:20:-;-1:-1:-1;;;;;12011:15:20;;;;;;:9;:15;;;;;:25;;12030:6;;12011:15;:25;;12030:6;;12011:25;:::i;:::-;;;;-1:-1:-1;;;;;;;12042:13:20;;;;;;:9;:13;;;;;:23;;12059:6;;12042:13;:23;;12059:6;;12042:23;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;12077:26:20;;;;;;;;-1:-1:-1;;;;;;;;12077:26:20;;10200:25:84;;;10188:2;10173:18;12077:26:20;;;;;;;11913:195;;;:::o;9505:737::-;9669:17;9694:15;9717;9748:20;9799:4;-1:-1:-1;;;;;9784:26:20;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9747:65;;;;;;;;9831:115;9871:12;9885:13;9900;9915:14;9931;9831:39;:115::i;:::-;10090:57;;;;;;;;;10118:8;10090:57;-1:-1:-1;;;;;10090:57:20;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10090:57:20;;;;;;;;;;;;;;;;;10135:10;10090:57;;;;;;;10079:69;;;;;11641:37:84;;;;11720:20;;11716:29;;11694:20;;;11687:59;11788:20;;11784:35;11762:20;;;11755:65;11862:24;;11858:33;;11836:20;;;11829:63;10079:69:20;;;;;;;;;;11543:19:84;;;10079:69:20;;;;-1:-1:-1;;;9974:180:20;;;9819:127;;-1:-1:-1;9989:4:20;9974:25;;;;-1:-1:-1;;9974:180:20;;10015:4;;10028:9;;10045;;9819:127;;10079:69;9974:180;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9953:201;;-1:-1:-1;9953:201:20;-1:-1:-1;10165:20:20;;;;:44;;;10199:10;10189:7;:20;10165:44;10161:76;;;10218:19;;-1:-1:-1;;;10218:19:20;;;;;;;;;;;10161:76;9741:501;9505:737;;;;;;;;:::o;11036:156::-;11109:6;11094:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11121:13:20;;;;;;:9;:13;;;;;:23;;11138:6;;11121:13;:23;;11138:6;;11121:23;:::i;:::-;;;;-1:-1:-1;;11155:32:20;;10200:25:84;;;11172:1:20;-1:-1:-1;;;;;;;11155:32:20;;;;11172:1;;-1:-1:-1;;11172:1:20;-1:-1:-1;;;;;11155:32:20;10188:2:84;10173:18;11155:32:20;;;;;;;;11036:156;;:::o;11496:::-;11569:6;11554:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11581:13:20;;;;;;:9;:13;;;;;:23;;11598:6;;11581:13;:23;;11598:6;;11581:23;:::i;:::-;;;;-1:-1:-1;;11615:32:20;;10200:25:84;;;11636:1:20;-1:-1:-1;;11636:1:20;;-1:-1:-1;;;;;11615:32:20;;;11636:1;;-1:-1:-1;;11636:1:20;-1:-1:-1;;;;;11615:32:20;10188:2:84;10173:18;11615:32:20;10054:177:84;10607:151:20;10712:41;10730:5;10737:4;10743:2;10747:5;10712:17;:41::i;:::-;10607:151;;;;:::o;1103:827:24:-;1284:17;-1:-1:-1;;;;;1313:29:24;;;;;;;1309:98;;;1378:13;;1393;1309:98;-1:-1:-1;;;;;1418:29:24;;;;;;;1414:512;;1469:61;1492:13;1507;1522:7;1469:22;:61::i;:::-;1457:73;;1414:512;;;-1:-1:-1;;;;;1547:28:24;;;;;;;1543:383;;;1585:18;1606:60;1629:12;1643:13;1658:7;1606:22;:60::i;:::-;1585:81;;1674:18;1695:60;1718:13;1733:12;1747:7;1695:22;:60::i;:::-;1674:81;-1:-1:-1;;;;;;1776:23:24;;;;;;;:49;;1815:10;1776:49;;;1802:10;1776:49;1764:61;;1577:255;;1543:383;;;1858:61;1881:13;1896;1911:7;1858:22;:61::i;:::-;1846:73;1103:827;-1:-1:-1;;;;;;1103:827:24:o;12647:395:20:-;12867:69;;;-1:-1:-1;;;;;8585:15:84;;;12867:69:20;;;8567:34:84;8637:15;;;8617:18;;;8610:43;8669:18;;;;8662:34;;;12867:69:20;;;;;;;;;;8502:18:84;;;;12867:69:20;;;;;;;-1:-1:-1;;;;;12867:69:20;-1:-1:-1;;;12867:69:20;;;12856:81;;-1:-1:-1;;;;12856:10:20;;;;:81;;12867:69;12856:81;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12820:117;;;;12948:7;12947:8;:59;;;-1:-1:-1;12960:11:20;;:16;;;;:45;;;12992:4;12981:24;;;;;;;;;;;;:::i;:::-;12980:25;12960:45;12943:94;;;13015:22;;-1:-1:-1;;;13015:22:20;;;;;;;;;;;12943:94;12759:283;;12647:395;;;;:::o;289:447:24:-;423:17;-1:-1:-1;;;;;452:29:24;;;;;;;448:98;;;517:13;;532;448:98;552:20;575:63;-1:-1:-1;;;;;575:63:24;;;;;;-1:-1:-1;;;575:15:24;:63::i;:::-;552:86;-1:-1:-1;651:80:24;661:69;677:7;552:86;700:29;716:13;700;:29;:::i;:::-;-1:-1:-1;;;;;661:69:24;:15;:69::i;:::-;651:9;:80::i;740:359::-;874:17;-1:-1:-1;;;;;903:29:24;;;;;;;899:98;;;968:13;;983;899:98;1010:84;1020:73;1036:7;-1:-1:-1;;;1063:29:24;1079:13;1063;:29;:::i;735:3600:23:-;833:14;;;-1:-1:-1;;1336:1:23;1333;1326:20;1371:1;1368;1364:9;1355:18;;1418:5;1414:2;1411:13;1403:5;1399:2;1395:14;1391:34;1382:43;;;1501:5;1510:1;1501:10;1497:155;;;1545:1;1531:11;:15;1523:24;;;;;;-1:-1:-1;1588:23:23;;;;-1:-1:-1;1630:13:23;;1497:155;1773:5;1759:11;:19;1751:28;;;;;;2044:17;2114:11;2111:1;2108;2101:25;3338:1;2473;2458:12;;:16;;2457:32;;2575:22;;;;3319:1;:15;;3318:21;;3557:17;;;3553:21;;3546:28;3613:17;;;3609:21;;3602:28;3670:17;;;3666:21;;3659:28;3727:17;;;3723:21;;3716:28;3784:17;;;3780:21;;3773:28;3842:17;;;3838:21;;;3831:28;;;2442:12;2923;;;2919:23;;;2915:31;;;2233:20;;;2222:32;;;2970:12;;;;2272:21;;2693:16;;;;2961:21;;;;4292:11;;;-1:-1:-1;;;;735:3600:23:o;181:104:24:-;278:1;-1:-1:-1;;;;;258:21:24;;;;250:30;;;;;;181:104;;;:::o;14:164:84:-;90:13;;139;;132:21;122:32;;112:60;;168:1;165;158:12;183:163;261:13;;314:6;303:18;;293:29;;283:57;;336:1;333;326:12;351:247;410:6;463:2;451:9;442:7;438:23;434:32;431:52;;;479:1;476;469:12;431:52;518:9;505:23;537:31;562:5;537:31;:::i;603:388::-;671:6;679;732:2;720:9;711:7;707:23;703:32;700:52;;;748:1;745;738:12;700:52;787:9;774:23;806:31;831:5;806:31;:::i;:::-;856:5;-1:-1:-1;913:2:84;898:18;;885:32;926:33;885:32;926:33;:::i;:::-;978:7;968:17;;;603:388;;;;;:::o;996:456::-;1073:6;1081;1089;1142:2;1130:9;1121:7;1117:23;1113:32;1110:52;;;1158:1;1155;1148:12;1110:52;1197:9;1184:23;1216:31;1241:5;1216:31;:::i;:::-;1266:5;-1:-1:-1;1323:2:84;1308:18;;1295:32;1336:33;1295:32;1336:33;:::i;:::-;996:456;;1388:7;;-1:-1:-1;;;1442:2:84;1427:18;;;;1414:32;;996:456::o;1457:315::-;1525:6;1533;1586:2;1574:9;1565:7;1561:23;1557:32;1554:52;;;1602:1;1599;1592:12;1554:52;1641:9;1628:23;1660:31;1685:5;1660:31;:::i;:::-;1710:5;1762:2;1747:18;;;;1734:32;;-1:-1:-1;;;1457:315:84:o;1777:202::-;1844:6;1897:2;1885:9;1876:7;1872:23;1868:32;1865:52;;;1913:1;1910;1903:12;1865:52;1936:37;1963:9;1936:37;:::i;1984:1207::-;2078:6;2122:9;2113:7;2109:23;2152:3;2148:2;2144:12;2141:32;;;2169:1;2166;2159:12;2141:32;2202:4;2196:11;;;2234:17;;-1:-1:-1;;;;;2266:34:84;;2302:22;;;2263:62;2260:185;;;2367:10;2362:3;2358:20;2355:1;2348:31;2402:4;2399:1;2392:15;2430:4;2427:1;2420:15;2260:185;2461:4;2454:24;2498:4;2490:13;;2487:33;;;2516:1;2513;2506:12;2487:33;2542:17;;:::i;:::-;2529:30;;2596:9;2583:23;2615:33;2640:7;2615:33;:::i;:::-;2657:22;;2731:2;2716:18;;2703:32;2744:33;2703:32;2744:33;:::i;:::-;2804:2;2793:14;;2786:31;2869:4;2854:20;;2841:34;2919:8;2906:22;;2894:35;;2884:63;;2943:1;2940;2933:12;2884:63;2974:4;2963:16;;2956:33;2998:21;;;3071:4;3056:20;;3043:34;;3086:33;3043:34;3086:33;:::i;:::-;3147:2;3135:15;;3128:32;;;;3139:6;1984:1207;-1:-1:-1;;;1984:1207:84:o;3196:385::-;3275:6;3283;3336:2;3324:9;3315:7;3311:23;3307:32;3304:52;;;3352:1;3349;3342:12;3304:52;3384:9;3378:16;3403:31;3428:5;3403:31;:::i;:::-;3503:2;3488:18;;3482:25;3453:5;;-1:-1:-1;3516:33:84;3482:25;3516:33;:::i;3586:525::-;3672:6;3680;3688;3696;3749:3;3737:9;3728:7;3724:23;3720:33;3717:53;;;3766:1;3763;3756:12;3717:53;3805:9;3792:23;3824:31;3849:5;3824:31;:::i;:::-;3874:5;-1:-1:-1;3926:2:84;3911:18;;3898:32;;-1:-1:-1;3977:2:84;3962:18;;3949:32;;-1:-1:-1;4033:2:84;4018:18;;4005:32;4046:33;4005:32;4046:33;:::i;:::-;3586:525;;;;-1:-1:-1;3586:525:84;;-1:-1:-1;;3586:525:84:o;4116:643::-;4222:6;4230;4238;4246;4254;4307:3;4295:9;4286:7;4282:23;4278:33;4275:53;;;4324:1;4321;4314:12;4275:53;4356:9;4350:16;4375:31;4400:5;4375:31;:::i;:::-;4425:5;4415:15;;;4470:2;4459:9;4455:18;4449:25;4439:35;;4514:2;4503:9;4499:18;4493:25;4483:35;;4563:2;4552:9;4548:18;4542:25;4576:33;4601:7;4576:33;:::i;:::-;4680:3;4665:19;;4659:26;4628:7;;-1:-1:-1;4694:33:84;4659:26;4694:33;:::i;:::-;4746:7;4736:17;;;4116:643;;;;;;;;:::o;4764:903::-;4878:6;4886;4894;4902;4910;4918;4926;4979:3;4967:9;4958:7;4954:23;4950:33;4947:53;;;4996:1;4993;4986:12;4947:53;5028:9;5022:16;5047:31;5072:5;5047:31;:::i;:::-;5097:5;5087:15;;;5147:2;5136:9;5132:18;5126:25;5196:7;5193:1;5182:22;5173:7;5170:35;5160:63;;5219:1;5216;5209:12;5160:63;5242:7;-1:-1:-1;5268:48:84;5312:2;5297:18;;5268:48;:::i;:::-;5258:58;;5335:48;5379:2;5368:9;5364:18;5335:48;:::i;:::-;5325:58;;5402:49;5446:3;5435:9;5431:19;5402:49;:::i;:::-;5392:59;;5496:3;5485:9;5481:19;5475:26;5545:4;5536:7;5532:18;5523:7;5520:31;5510:59;;5565:1;5562;5555:12;5510:59;5588:7;-1:-1:-1;5614:47:84;5656:3;5641:19;;5614:47;:::i;:::-;5604:57;;4764:903;;;;;;;;;;:::o;5672:245::-;5751:6;5759;5812:2;5800:9;5791:7;5787:23;5783:32;5780:52;;;5828:1;5825;5818:12;5780:52;-1:-1:-1;;5851:16:84;;5907:2;5892:18;;;5886:25;5851:16;;5886:25;;-1:-1:-1;5672:245:84:o;5922:727::-;6010:6;6018;6026;6034;6087:2;6075:9;6066:7;6062:23;6058:32;6055:52;;;6103:1;6100;6093:12;6055:52;6126:23;;;-1:-1:-1;6196:2:84;6181:18;;6168:32;;-1:-1:-1;6251:2:84;6236:18;;6223:32;-1:-1:-1;;;;;6304:14:84;;;6301:34;;;6331:1;6328;6321:12;6301:34;6369:6;6358:9;6354:22;6344:32;;6414:7;6407:4;6403:2;6399:13;6395:27;6385:55;;6436:1;6433;6426:12;6385:55;6476:2;6463:16;6502:2;6494:6;6491:14;6488:34;;;6518:1;6515;6508:12;6488:34;6563:7;6558:2;6549:6;6545:2;6541:15;6537:24;6534:37;6531:57;;;6584:1;6581;6574:12;6531:57;5922:727;;;;-1:-1:-1;;6615:2:84;6607:11;;-1:-1:-1;;;5922:727:84:o;6654:521::-;6749:6;6757;6765;6773;6781;6834:3;6822:9;6813:7;6809:23;6805:33;6802:53;;;6851:1;6848;6841:12;6802:53;6887:9;6874:23;6864:33;;6944:2;6933:9;6929:18;6916:32;6906:42;;6995:2;6984:9;6980:18;6967:32;6957:42;;7046:2;7035:9;7031:18;7018:32;7008:42;;7100:3;7089:9;7085:19;7072:33;7114:31;7139:5;7114:31;:::i;7180:257::-;7221:3;7259:5;7253:12;7286:6;7281:3;7274:19;7302:63;7358:6;7351:4;7346:3;7342:14;7335:4;7328:5;7324:16;7302:63;:::i;:::-;7419:2;7398:15;-1:-1:-1;;7394:29:84;7385:39;;;;7426:4;7381:50;;7180:257;-1:-1:-1;;7180:257:84:o;7442:393::-;7664:2;7635:15;;;;-1:-1:-1;;;;;;7631:45:84;7619:58;;7727:1;7716:21;;;7711:3;7707:31;;;7702:2;7693:12;;7686:53;7778:21;;7769:31;;7764:2;7755:12;;7748:53;7826:2;7817:12;;7442:393::o;7840:274::-;7969:3;8007:6;8001:13;8023:53;8069:6;8064:3;8057:4;8049:6;8045:17;8023:53;:::i;:::-;8092:16;;;;;7840:274;-1:-1:-1;;7840:274:84:o;8707:578::-;-1:-1:-1;;;;;8958:32:84;;8940:51;;9038:1;9027:21;;;9022:2;9007:18;;9000:49;9085:21;;;9080:2;9065:18;;9058:49;-1:-1:-1;;;;;9143:32:84;;9138:2;9123:18;;9116:60;-1:-1:-1;;9192:19:84;;9185:32;;;-1:-1:-1;;9234:45:84;;9259:19;;9251:6;9234:45;:::i;:::-;9226:53;8707:578;-1:-1:-1;;;;;;;8707:578:84:o;9290:567::-;-1:-1:-1;;;;;9559:32:84;;;;9541:51;;9639:1;9628:21;;;9623:2;9608:18;;9601:49;9686:21;;;;9681:2;9666:18;;9659:49;-1:-1:-1;;;;;9782:15:84;;;9777:2;9762:18;;9755:43;9835:15;-1:-1:-1;9814:19:84;;9807:44;-1:-1:-1;9513:19:84;;9290:567::o;10801:219::-;10950:2;10939:9;10932:21;10913:4;10970:44;11010:2;10999:9;10995:18;10987:6;10970:44;:::i;13671:345::-;13738:2;13732:9;13780:4;13768:17;;13836:22;;;-1:-1:-1;;;;;13800:34:84;;13797:62;13794:185;;;13901:10;13896:3;13892:20;13889:1;13882:31;13936:4;13933:1;13926:15;13964:4;13961:1;13954:15;13794:185;13995:2;13988:22;13671:345;:::o;14021:128::-;14061:3;14092:1;14088:6;14085:1;14082:13;14079:39;;;14098:18;;:::i;:::-;-1:-1:-1;14134:9:84;;14021:128::o;14154:120::-;14194:1;14220;14210:35;;14225:18;;:::i;:::-;-1:-1:-1;14259:9:84;;14154:120::o;14279:168::-;14319:7;14385:1;14381;14377:6;14373:14;14370:1;14367:21;14362:1;14355:9;14348:17;14344:45;14341:71;;;14392:18;;:::i;:::-;-1:-1:-1;14432:9:84;;14279:168::o;14452:231::-;14492:4;-1:-1:-1;;;;;14590:10:84;;;;14560;;14612:12;;;14609:38;;;14627:18;;:::i;:::-;14664:13;;14452:231;-1:-1:-1;;;14452:231:84:o;14688:125::-;14728:4;14756:1;14753;14750:8;14747:34;;;14761:18;;:::i;:::-;-1:-1:-1;14798:9:84;;14688:125::o;14818:258::-;14890:1;14900:113;14914:6;14911:1;14908:13;14900:113;;;14990:11;;;14984:18;14971:11;;;14964:39;14936:2;14929:10;14900:113;;;15031:6;15028:1;15025:13;15022:48;;;-1:-1:-1;;15066:1:84;15048:16;;15041:27;14818:258::o;15081:380::-;15160:1;15156:12;;;;15203;;;15224:61;;15278:4;15270:6;15266:17;15256:27;;15224:61;15331:2;15323:6;15320:14;15300:18;15297:38;15294:161;;;15377:10;15372:3;15368:20;15365:1;15358:31;15412:4;15409:1;15402:15;15440:4;15437:1;15430:15;15294:161;;15081:380;;;:::o;15466:112::-;15498:1;15524;15514:35;;15529:18;;:::i;:::-;-1:-1:-1;15563:9:84;;15466:112::o;15583:184::-;15617:3;15664:5;15661:1;15650:20;15698:7;15694:12;15685:7;15682:25;15679:51;;;15710:18;;:::i;:::-;15750:1;15746:15;;15583:184;-1:-1:-1;;15583:184:84:o;15772:136::-;15807:3;-1:-1:-1;;;15828:22:84;;15825:48;;;15853:18;;:::i;:::-;-1:-1:-1;15893:1:84;15889:13;;15772:136::o;15913:127::-;15974:10;15969:3;15965:20;15962:1;15955:31;16005:4;16002:1;15995:15;16029:4;16026:1;16019:15;16045:127;16106:10;16101:3;16097:20;16094:1;16087:31;16137:4;16134:1;16127:15;16161:4;16158:1;16151:15;16177:131;-1:-1:-1;;;;;16252:31:84;;16242:42;;16232:70;;16298:1;16295;16288:12;16232:70;16177:131;:::o;16313:::-;-1:-1:-1;;;;;16388:31:84;;16378:42;;16368:70;;16434:1;16431;16424:12"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1703600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "51961",
                "allowance(address,address)": "infinite",
                "approve(address,uint256)": "24529",
                "balanceOf(address)": "2800",
                "burn(uint128,uint256,uint256,address)": "infinite",
                "collect()": "infinite",
                "decimals()": "403",
                "factory()": "infinite",
                "fee()": "infinite",
                "governance()": "2602",
                "mint(uint256,uint256,uint256,uint256,address)": "infinite",
                "name()": "infinite",
                "pendingGovernance()": "2623",
                "pool()": "infinite",
                "position()": "infinite",
                "setGovernance(address)": "27824",
                "sqrtRatioAX96()": "infinite",
                "sqrtRatioBX96()": "infinite",
                "symbol()": "infinite",
                "tickLower()": "infinite",
                "tickSpacing()": "infinite",
                "tickUpper()": "infinite",
                "token0()": "infinite",
                "token1()": "infinite",
                "totalSupply()": "2406",
                "transfer(address,uint256)": "infinite",
                "transferFrom(address,address,uint256)": "infinite",
                "uniswapV3MintCallback(uint256,uint256,bytes)": "infinite"
              },
              "internal": {
                "_addLiquidity(uint256,uint256,uint256,uint256)": "infinite",
                "_burn(address,uint256)": "infinite",
                "_mint(address,uint256)": "infinite",
                "_pay(address,address,address,uint256)": "infinite",
                "_safeTransferFrom(address,address,address,uint256)": "infinite",
                "_transferTokens(address,address,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "burn(uint128,uint256,uint256,address)": "cf51148d",
              "collect()": "e5225381",
              "decimals()": "313ce567",
              "factory()": "c45a0155",
              "fee()": "ddca3f43",
              "governance()": "5aa6e675",
              "mint(uint256,uint256,uint256,uint256,address)": "a3e6dc28",
              "name()": "06fdde03",
              "pendingGovernance()": "f39c38a0",
              "pool()": "16f0115b",
              "position()": "09218e91",
              "setGovernance(address)": "ab033ea9",
              "sqrtRatioAX96()": "2ea28f5b",
              "sqrtRatioBX96()": "c6275261",
              "symbol()": "95d89b41",
              "tickLower()": "59c4f905",
              "tickSpacing()": "d0c93a7c",
              "tickUpper()": "55b812a8",
              "token0()": "0dfe1681",
              "token1()": "d21220a7",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "uniswapV3MintCallback(uint256,uint256,bytes)": "d3487997"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ExcessiveSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsuccessfulTransfer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Desired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Desired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"position\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sqrtRatioAX96\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sqrtRatioBX96\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickLower\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickUpper\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Owed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Owed\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"uniswapV3MintCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"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.\"},\"burn(uint128,uint256,uint256,address)\":{\"params\":{\"amount0Min\":\"The minimum amount of token0 we want to send to the recipient (to)\",\"amount1Min\":\"The minimum amount of token1 we want to send to the recipient (to)\",\"liquidity\":\"The amount of liquidity to be burned\",\"to\":\"The address that will receive the due fees\"},\"returns\":{\"amount0\":\"The calculated amount of token0 that will be sent to the recipient\",\"amount1\":\"The calculated amount of token1 that will be sent to the recipient\"}},\"collect()\":{\"details\":\"The collected fees will be sent to governance\",\"returns\":{\"amount0\":\"The amount of fees collected in token0\",\"amount1\":\"The amount of fees collected in token1\"}},\"mint(uint256,uint256,uint256,uint256,address)\":{\"details\":\"Triggers UniV3PairManager#uniswapV3MintCallback\",\"params\":{\"amount0Desired\":\"The amount of token0 we would like to provide\",\"amount0Min\":\"The minimum amount of token0 we want to provide\",\"amount1Desired\":\"The amount of token1 we would like to provide\",\"amount1Min\":\"The minimum amount of token1 we want to provide\",\"to\":\"The address to which the kLP tokens are going to be minted to\"},\"returns\":{\"liquidity\":\"kLP tokens sent in exchange for the provision of tokens\"}},\"position()\":{\"returns\":{\"feeGrowthInside0LastX128\":\"The fee growth of token0 as of the last action on the individual position\",\"feeGrowthInside1LastX128\":\"The fee growth of token1 as of the last action on the individual position\",\"liquidity\":\"The amount of liquidity provided to the UniswapV3 pool by the pair manager\",\"tokensOwed0\":\"The uncollected amount of token0 owed to the position as of the last computation\",\"tokensOwed1\":\"The uncollected amount of token1 owed to the position as of the last computation\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"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.\"},\"uniswapV3MintCallback(uint256,uint256,bytes)\":{\"params\":{\"amount0Owed\":\"The amount of token0 due to the pool for the minted liquidity\",\"amount1Owed\":\"The amount of token1 due to the pool for the minted liquidity\",\"data\":\"The encoded token0, token1, fee (_poolKey) and the payer (msg.sender) of the IUniV3PairManager#mint function\"}}},\"stateVariables\":{\"_MAX_TICK\":{\"details\":\"Due to tick spacing, pools with different fees may have differences between _MAX_TICK and tickUpper. Use tickUpper to find the max tick of the pool.\"},\"allowance\":{\"details\":\"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.\"},\"balanceOf\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"decimals\":{\"details\":\"Returns the decimals places of the token.\"},\"factory\":{\"return\":\"_factory The address of the PairManager Factory\",\"returns\":{\"_0\":\"_factory The address of the PairManager Factory\"}},\"fee\":{\"return\":\"_fee The fee of the Uniswap pool passed into the constructor\",\"returns\":{\"_0\":\"_fee The fee of the Uniswap pool passed into the constructor\"}},\"name\":{\"details\":\"Returns the name of the token.\"},\"pool\":{\"return\":\"_pool The address of the pool\",\"returns\":{\"_0\":\"_pool The address of the pool\"}},\"sqrtRatioAX96\":{\"return\":\"_sqrtPriceA96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)         at the lowest tick\",\"returns\":{\"_0\":\"_sqrtPriceA96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)         at the lowest tick\"}},\"sqrtRatioBX96\":{\"return\":\"_sqrtPriceBX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)         at the highest tick\",\"returns\":{\"_0\":\"_sqrtPriceBX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)         at the highest tick\"}},\"symbol\":{\"details\":\"Returns the symbol of the token.\"},\"tickLower\":{\"return\":\"_tickLower The lower tick in the Uniswap's curve\",\"returns\":{\"_0\":\"_tickLower The lower tick in the Uniswap's curve\"}},\"tickSpacing\":{\"return\":\"_tickSpacing The pair tick spacing\",\"returns\":{\"_0\":\"_tickSpacing The pair tick spacing\"}},\"tickUpper\":{\"return\":\"_tickUpper The highest tick in the Uniswap's curve\",\"returns\":{\"_0\":\"_tickUpper The highest tick in the Uniswap's curve\"}},\"token0\":{\"return\":\"_token0 The address of token0\",\"returns\":{\"_0\":\"_token0 The address of token0\"}},\"token1\":{\"return\":\"_token1 The address of token1\",\"returns\":{\"_0\":\"_token1 The address of token1\"}},\"totalSupply\":{\"details\":\"Returns the amount of tokens in existence.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"ExcessiveSlippage()\":[{\"notice\":\"Throws when the slippage exceeds what the user is comfortable with\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPool()\":[{\"notice\":\"Throws when the caller of the function is not the pool\"}],\"UnsuccessfulTransfer()\":[{\"notice\":\"Throws when a transfer is unsuccessful\"}]},\"events\":{\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"factory()\":{\"notice\":\"Address of the factory from which the pair manager was created\"},\"fee()\":{\"notice\":\"The fee of the Uniswap pool passed into the constructor\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"mint(uint256,uint256,uint256,uint256,address)\":{\"notice\":\"Mints kLP tokens to an address according to the liquidity the msg.sender provides to the UniswapV3 pool\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pool()\":{\"notice\":\"Address of the pool from which the Keep3r pair manager will interact with\"},\"position()\":{\"notice\":\"Returns the pair manager's position in the corresponding UniswapV3 pool\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"sqrtRatioAX96()\":{\"notice\":\"The sqrtRatioAX96 at the lowest tick (-887200) of the Uniswap pool\"},\"sqrtRatioBX96()\":{\"notice\":\"The sqrtRatioBX96 at the highest tick (887200) of the Uniswap pool\"},\"tickLower()\":{\"notice\":\"Lowest tick in the Uniswap's curve\"},\"tickSpacing()\":{\"notice\":\"The pair tick spacing\"},\"tickUpper()\":{\"notice\":\"Highest tick in the Uniswap's curve\"},\"token0()\":{\"notice\":\"Token0 of the pool\"},\"token1()\":{\"notice\":\"Token1 of the pool\"},\"uniswapV3MintCallback(uint256,uint256,bytes)\":{\"notice\":\"This function is called after a user calls IUniV3PairManager#mint function         It ensures that any tokens owed to the pool are paid by the msg.sender of IUniV3PairManager#mint function\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/UniV3PairManager.sol\":\"UniV3PairManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `recipient` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(_msgSender(), recipient, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        _approve(_msgSender(), spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` and `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``sender``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        _transfer(sender, recipient, amount);\\n\\n        uint256 currentAllowance = _allowances[sender][_msgSender()];\\n        require(currentAllowance >= amount, \\\"ERC20: transfer amount exceeds allowance\\\");\\n        unchecked {\\n            _approve(sender, _msgSender(), currentAllowance - amount);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        uint256 currentAllowance = _allowances[_msgSender()][spender];\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(_msgSender(), spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `sender` to `recipient`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` cannot be the zero address.\\n     * - `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal virtual {\\n        require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(sender, recipient, amount);\\n\\n        uint256 senderBalance = _balances[sender];\\n        require(senderBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[sender] = senderBalance - amount;\\n        }\\n        _balances[recipient] += amount;\\n\\n        emit Transfer(sender, recipient, amount);\\n\\n        _afterTokenTransfer(sender, recipient, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        _balances[account] += amount;\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n        }\\n        _totalSupply -= amount;\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n}\\n\",\"keccak256\":\"0xb03df8481a954604ad0c9125680893b2e3f7ff770fe470e38b89ac61b84e8072\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\"},\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\nimport './pool/IUniswapV3PoolImmutables.sol';\\nimport './pool/IUniswapV3PoolState.sol';\\nimport './pool/IUniswapV3PoolDerivedState.sol';\\nimport './pool/IUniswapV3PoolActions.sol';\\nimport './pool/IUniswapV3PoolOwnerActions.sol';\\nimport './pool/IUniswapV3PoolEvents.sol';\\n\\n/// @title The interface for a Uniswap V3 Pool\\n/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform\\n/// to the ERC20 specification\\n/// @dev The pool interface is broken up into many smaller pieces\\ninterface IUniswapV3Pool is\\n    IUniswapV3PoolImmutables,\\n    IUniswapV3PoolState,\\n    IUniswapV3PoolDerivedState,\\n    IUniswapV3PoolActions,\\n    IUniswapV3PoolOwnerActions,\\n    IUniswapV3PoolEvents\\n{\\n\\n}\\n\",\"keccak256\":\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissionless pool actions\\n/// @notice Contains pool methods that can be called by anyone\\ninterface IUniswapV3PoolActions {\\n    /// @notice Sets the initial price for the pool\\n    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\\n    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96\\n    function initialize(uint160 sqrtPriceX96) external;\\n\\n    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback\\n    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\\n    /// on tickLower, tickUpper, the amount of liquidity, and the current price.\\n    /// @param recipient The address for which the liquidity will be created\\n    /// @param tickLower The lower tick of the position in which to add liquidity\\n    /// @param tickUpper The upper tick of the position in which to add liquidity\\n    /// @param amount The amount of liquidity to mint\\n    /// @param data Any data that should be passed through to the callback\\n    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    function mint(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount,\\n        bytes calldata data\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Collects tokens owed to a position\\n    /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\\n    /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\\n    /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\\n    /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\\n    /// @param recipient The address which should receive the fees collected\\n    /// @param tickLower The lower tick of the position for which to collect fees\\n    /// @param tickUpper The upper tick of the position for which to collect fees\\n    /// @param amount0Requested How much token0 should be withdrawn from the fees owed\\n    /// @param amount1Requested How much token1 should be withdrawn from the fees owed\\n    /// @return amount0 The amount of fees collected in token0\\n    /// @return amount1 The amount of fees collected in token1\\n    function collect(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n\\n    /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\\n    /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\\n    /// @dev Fees must be collected separately via a call to #collect\\n    /// @param tickLower The lower tick of the position for which to burn liquidity\\n    /// @param tickUpper The upper tick of the position for which to burn liquidity\\n    /// @param amount How much liquidity to burn\\n    /// @return amount0 The amount of token0 sent to the recipient\\n    /// @return amount1 The amount of token1 sent to the recipient\\n    function burn(\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Swap token0 for token1, or token1 for token0\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\\n    /// @param recipient The address to receive the output of the swap\\n    /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\\n    /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\\n    /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\\n    /// value after the swap. If one for zero, the price cannot be greater than this value after the swap\\n    /// @param data Any data to be passed through to the callback\\n    /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\\n    /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive\\n    function swap(\\n        address recipient,\\n        bool zeroForOne,\\n        int256 amountSpecified,\\n        uint160 sqrtPriceLimitX96,\\n        bytes calldata data\\n    ) external returns (int256 amount0, int256 amount1);\\n\\n    /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback\\n    /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\\n    /// with 0 amount{0,1} and sending the donation amount(s) from the callback\\n    /// @param recipient The address which will receive the token0 and token1 amounts\\n    /// @param amount0 The amount of token0 to send\\n    /// @param amount1 The amount of token1 to send\\n    /// @param data Any data to be passed through to the callback\\n    function flash(\\n        address recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        bytes calldata data\\n    ) external;\\n\\n    /// @notice Increase the maximum number of price and liquidity observations that this pool will store\\n    /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\\n    /// the input observationCardinalityNext.\\n    /// @param observationCardinalityNext The desired minimum number of observations for the pool to store\\n    function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;\\n}\\n\",\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that is not stored\\n/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the\\n/// blockchain. The functions here may have variable gas costs.\\ninterface IUniswapV3PoolDerivedState {\\n    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\\n    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\\n    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\\n    /// you must call it with secondsAgos = [3600, 0].\\n    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\\n    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\\n    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\\n    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\\n    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\\n    /// timestamp\\n    function observe(uint32[] calldata secondsAgos)\\n        external\\n        view\\n        returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\\n\\n    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\\n    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\\n    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\\n    /// snapshot is taken and the second snapshot is taken.\\n    /// @param tickLower The lower tick of the range\\n    /// @param tickUpper The upper tick of the range\\n    /// @return tickCumulativeInside The snapshot of the tick accumulator for the range\\n    /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\\n    /// @return secondsInside The snapshot of seconds per liquidity for the range\\n    function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)\\n        external\\n        view\\n        returns (\\n            int56 tickCumulativeInside,\\n            uint160 secondsPerLiquidityInsideX128,\\n            uint32 secondsInside\\n        );\\n}\\n\",\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Events emitted by a pool\\n/// @notice Contains all events emitted by the pool\\ninterface IUniswapV3PoolEvents {\\n    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool\\n    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\\n    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\\n    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\\n    event Initialize(uint160 sqrtPriceX96, int24 tick);\\n\\n    /// @notice Emitted when liquidity is minted for a given position\\n    /// @param sender The address that minted the liquidity\\n    /// @param owner The owner of the position and recipient of any minted liquidity\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity minted to the position range\\n    /// @param amount0 How much token0 was required for the minted liquidity\\n    /// @param amount1 How much token1 was required for the minted liquidity\\n    event Mint(\\n        address sender,\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted when fees are collected by the owner of a position\\n    /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\\n    /// @param owner The owner of the position for which fees are collected\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount0 The amount of token0 fees collected\\n    /// @param amount1 The amount of token1 fees collected\\n    event Collect(\\n        address indexed owner,\\n        address recipient,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount0,\\n        uint128 amount1\\n    );\\n\\n    /// @notice Emitted when a position's liquidity is removed\\n    /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\\n    /// @param owner The owner of the position for which liquidity is removed\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity to remove\\n    /// @param amount0 The amount of token0 withdrawn\\n    /// @param amount1 The amount of token1 withdrawn\\n    event Burn(\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted by the pool for any swaps between token0 and token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the output of the swap\\n    /// @param amount0 The delta of the token0 balance of the pool\\n    /// @param amount1 The delta of the token1 balance of the pool\\n    /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\\n    /// @param liquidity The liquidity of the pool after the swap\\n    /// @param tick The log base 1.0001 of price of the pool after the swap\\n    event Swap(\\n        address indexed sender,\\n        address indexed recipient,\\n        int256 amount0,\\n        int256 amount1,\\n        uint160 sqrtPriceX96,\\n        uint128 liquidity,\\n        int24 tick\\n    );\\n\\n    /// @notice Emitted by the pool for any flashes of token0/token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the tokens from flash\\n    /// @param amount0 The amount of token0 that was flashed\\n    /// @param amount1 The amount of token1 that was flashed\\n    /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\\n    /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\\n    event Flash(\\n        address indexed sender,\\n        address indexed recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        uint256 paid0,\\n        uint256 paid1\\n    );\\n\\n    /// @notice Emitted by the pool for increases to the number of observations that can be stored\\n    /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\\n    /// just before a mint/swap/burn.\\n    /// @param observationCardinalityNextOld The previous value of the next observation cardinality\\n    /// @param observationCardinalityNextNew The updated value of the next observation cardinality\\n    event IncreaseObservationCardinalityNext(\\n        uint16 observationCardinalityNextOld,\\n        uint16 observationCardinalityNextNew\\n    );\\n\\n    /// @notice Emitted when the protocol fee is changed by the pool\\n    /// @param feeProtocol0Old The previous value of the token0 protocol fee\\n    /// @param feeProtocol1Old The previous value of the token1 protocol fee\\n    /// @param feeProtocol0New The updated value of the token0 protocol fee\\n    /// @param feeProtocol1New The updated value of the token1 protocol fee\\n    event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);\\n\\n    /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner\\n    /// @param sender The address that collects the protocol fees\\n    /// @param recipient The address that receives the collected protocol fees\\n    /// @param amount0 The amount of token0 protocol fees that is withdrawn\\n    /// @param amount0 The amount of token1 protocol fees that is withdrawn\\n    event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that never changes\\n/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values\\ninterface IUniswapV3PoolImmutables {\\n    /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\\n    /// @return The contract address\\n    function factory() external view returns (address);\\n\\n    /// @notice The first of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token0() external view returns (address);\\n\\n    /// @notice The second of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token1() external view returns (address);\\n\\n    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6\\n    /// @return The fee\\n    function fee() external view returns (uint24);\\n\\n    /// @notice The pool tick spacing\\n    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\\n    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\\n    /// This value is an int24 to avoid casting even though it is always positive.\\n    /// @return The tick spacing\\n    function tickSpacing() external view returns (int24);\\n\\n    /// @notice The maximum amount of position liquidity that can use any tick in the range\\n    /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\\n    /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\\n    /// @return The max amount of liquidity per tick\\n    function maxLiquidityPerTick() external view returns (uint128);\\n}\\n\",\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissioned pool actions\\n/// @notice Contains pool methods that may only be called by the factory owner\\ninterface IUniswapV3PoolOwnerActions {\\n    /// @notice Set the denominator of the protocol's % share of the fees\\n    /// @param feeProtocol0 new protocol fee for token0 of the pool\\n    /// @param feeProtocol1 new protocol fee for token1 of the pool\\n    function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;\\n\\n    /// @notice Collect the protocol fee accrued to the pool\\n    /// @param recipient The address to which collected protocol fees should be sent\\n    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\\n    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\\n    /// @return amount0 The protocol fee collected in token0\\n    /// @return amount1 The protocol fee collected in token1\\n    function collectProtocol(\\n        address recipient,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that can change\\n/// @notice These methods compose the pool's state, and can change with any frequency including multiple times\\n/// per transaction\\ninterface IUniswapV3PoolState {\\n    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\\n    /// when accessed externally.\\n    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\\n    /// tick The current tick of the pool, i.e. according to the last tick transition that was run.\\n    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\\n    /// boundary.\\n    /// observationIndex The index of the last oracle observation that was written,\\n    /// observationCardinality The current maximum number of observations stored in the pool,\\n    /// observationCardinalityNext The next maximum number of observations, to be updated when the observation.\\n    /// feeProtocol The protocol fee for both tokens of the pool.\\n    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\\n    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\\n    /// unlocked Whether the pool is currently locked to reentrancy\\n    function slot0()\\n        external\\n        view\\n        returns (\\n            uint160 sqrtPriceX96,\\n            int24 tick,\\n            uint16 observationIndex,\\n            uint16 observationCardinality,\\n            uint16 observationCardinalityNext,\\n            uint8 feeProtocol,\\n            bool unlocked\\n        );\\n\\n    /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal0X128() external view returns (uint256);\\n\\n    /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal1X128() external view returns (uint256);\\n\\n    /// @notice The amounts of token0 and token1 that are owed to the protocol\\n    /// @dev Protocol fees will never exceed uint128 max in either token\\n    function protocolFees() external view returns (uint128 token0, uint128 token1);\\n\\n    /// @notice The currently in range liquidity available to the pool\\n    /// @dev This value has no relationship to the total liquidity across all ticks\\n    function liquidity() external view returns (uint128);\\n\\n    /// @notice Look up information about a specific tick in the pool\\n    /// @param tick The tick to look up\\n    /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\\n    /// tick upper,\\n    /// liquidityNet how much liquidity changes when the pool price crosses the tick,\\n    /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\\n    /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\\n    /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\\n    /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\\n    /// secondsOutside the seconds spent on the other side of the tick from the current tick,\\n    /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\\n    /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\\n    /// In addition, these values are only relative and must be used only in comparison to previous snapshots for\\n    /// a specific position.\\n    function ticks(int24 tick)\\n        external\\n        view\\n        returns (\\n            uint128 liquidityGross,\\n            int128 liquidityNet,\\n            uint256 feeGrowthOutside0X128,\\n            uint256 feeGrowthOutside1X128,\\n            int56 tickCumulativeOutside,\\n            uint160 secondsPerLiquidityOutsideX128,\\n            uint32 secondsOutside,\\n            bool initialized\\n        );\\n\\n    /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information\\n    function tickBitmap(int16 wordPosition) external view returns (uint256);\\n\\n    /// @notice Returns the information about a position by the position's key\\n    /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\\n    /// @return _liquidity The amount of liquidity in the position,\\n    /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\\n    /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\\n    /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\\n    /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\\n    function positions(bytes32 key)\\n        external\\n        view\\n        returns (\\n            uint128 _liquidity,\\n            uint256 feeGrowthInside0LastX128,\\n            uint256 feeGrowthInside1LastX128,\\n            uint128 tokensOwed0,\\n            uint128 tokensOwed1\\n        );\\n\\n    /// @notice Returns data about a specific observation index\\n    /// @param index The element of the observations array to fetch\\n    /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\\n    /// ago, rather than at a specific index in the array.\\n    /// @return blockTimestamp The timestamp of the observation,\\n    /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\\n    /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\\n    /// Returns initialized whether the observation has been initialized and the values are safe to use\\n    function observations(uint256 index)\\n        external\\n        view\\n        returns (\\n            uint32 blockTimestamp,\\n            int56 tickCumulative,\\n            uint160 secondsPerLiquidityCumulativeX128,\\n            bool initialized\\n        );\\n}\\n\",\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/UniV3PairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/*\\n\\nCoded for The Keep3r Network with \\u2665 by\\n\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2557\\u2003\\u2003\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\n\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u255a\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2554\\u2550\\u2588\\u2588\\u2588\\u2588\\u2551\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\n\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2003\\u2003\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\n\\nhttps://defi.sucks\\n\\n*/\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/ERC20.sol';\\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\\n\\nimport './libraries/LiquidityAmounts.sol';\\nimport './libraries/PoolAddress.sol';\\nimport './libraries/FixedPoint96.sol';\\nimport './libraries/FullMath.sol';\\nimport './libraries/TickMath.sol';\\n\\nimport '../interfaces/external/IWeth9.sol';\\nimport '../interfaces/IUniV3PairManager.sol';\\n\\nimport './peripherals/Governable.sol';\\n\\ncontract UniV3PairManager is IUniV3PairManager, Governable {\\n  /// @inheritdoc IERC20Metadata\\n  string public override name;\\n\\n  /// @inheritdoc IERC20Metadata\\n  string public override symbol;\\n\\n  /// @inheritdoc IERC20\\n  uint256 public override totalSupply;\\n\\n  /// @inheritdoc IPairManager\\n  address public immutable override factory;\\n\\n  /// @inheritdoc IPairManager\\n  address public immutable override token0;\\n\\n  /// @inheritdoc IPairManager\\n  address public immutable override token1;\\n\\n  /// @inheritdoc IPairManager\\n  address public immutable override pool;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  uint24 public immutable override fee;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  uint160 public immutable override sqrtRatioAX96;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  uint160 public immutable override sqrtRatioBX96;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  int24 public immutable override tickLower;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  int24 public immutable override tickUpper;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  int24 public immutable override tickSpacing;\\n\\n  /// @notice Uniswap's maximum tick\\n  /// @dev Due to tick spacing, pools with different fees may have differences between _MAX_TICK and tickUpper. Use tickUpper to find the max tick of the pool.\\n  int24 private constant _MAX_TICK = 887272;\\n\\n  /// @inheritdoc IERC20Metadata\\n  //solhint-disable-next-line const-name-snakecase\\n  uint8 public constant override decimals = 18;\\n\\n  /// @inheritdoc IERC20\\n  mapping(address => mapping(address => uint256)) public override allowance;\\n\\n  /// @inheritdoc IERC20\\n  mapping(address => uint256) public override balanceOf;\\n\\n  /// @notice Struct that contains token0, token1, and fee of the Uniswap pool\\n  PoolAddress.PoolKey private _poolKey;\\n\\n  constructor(address _pool, address _governance) Governable(_governance) {\\n    uint24 _fee = IUniswapV3Pool(_pool).fee();\\n    address _token0 = IUniswapV3Pool(_pool).token0();\\n    address _token1 = IUniswapV3Pool(_pool).token1();\\n    int24 _tickSpacing = IUniswapV3Pool(_pool).tickSpacing();\\n    int24 _tickUpper = _MAX_TICK - (_MAX_TICK % _tickSpacing);\\n    int24 _tickLower = -_tickUpper;\\n\\n    factory = msg.sender;\\n    pool = _pool;\\n    fee = _fee;\\n    tickSpacing = _tickSpacing;\\n    tickUpper = _tickUpper;\\n    tickLower = _tickLower;\\n    token0 = _token0;\\n    token1 = _token1;\\n    name = string(abi.encodePacked('Keep3rLP - ', ERC20(_token0).symbol(), '/', ERC20(_token1).symbol()));\\n    symbol = string(abi.encodePacked('kLP-', ERC20(_token0).symbol(), '/', ERC20(_token1).symbol()));\\n\\n    sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(_tickLower);\\n    sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(_tickUpper);\\n    _poolKey = PoolAddress.PoolKey({token0: _token0, token1: _token1, fee: _fee});\\n  }\\n\\n  // This low-level function should be called from a contract which performs important safety checks\\n  /// @inheritdoc IUniV3PairManager\\n  function mint(\\n    uint256 amount0Desired,\\n    uint256 amount1Desired,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external override returns (uint128 liquidity) {\\n    (liquidity, , ) = _addLiquidity(amount0Desired, amount1Desired, amount0Min, amount1Min);\\n    _mint(to, liquidity);\\n  }\\n\\n  /// @inheritdoc IUniV3PairManager\\n  function uniswapV3MintCallback(\\n    uint256 amount0Owed,\\n    uint256 amount1Owed,\\n    bytes calldata data\\n  ) external override {\\n    MintCallbackData memory decoded = abi.decode(data, (MintCallbackData));\\n    if (msg.sender != pool) revert OnlyPool();\\n    if (amount0Owed > 0) _pay(decoded._poolKey.token0, decoded.payer, pool, amount0Owed);\\n    if (amount1Owed > 0) _pay(decoded._poolKey.token1, decoded.payer, pool, amount1Owed);\\n  }\\n\\n  /// @inheritdoc IUniV3PairManager\\n  function burn(\\n    uint128 liquidity,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external override returns (uint256 amount0, uint256 amount1) {\\n    (amount0, amount1) = IUniswapV3Pool(pool).burn(tickLower, tickUpper, liquidity);\\n\\n    if (amount0 < amount0Min || amount1 < amount1Min) revert ExcessiveSlippage();\\n\\n    IUniswapV3Pool(pool).collect(to, tickLower, tickUpper, uint128(amount0), uint128(amount1));\\n    _burn(msg.sender, liquidity);\\n  }\\n\\n  /// @inheritdoc IUniV3PairManager\\n  function collect() external override onlyGovernance returns (uint256 amount0, uint256 amount1) {\\n    (, , , uint128 tokensOwed0, uint128 tokensOwed1) = IUniswapV3Pool(pool).positions(\\n      keccak256(abi.encodePacked(address(this), tickLower, tickUpper))\\n    );\\n    (amount0, amount1) = IUniswapV3Pool(pool).collect(governance, tickLower, tickUpper, tokensOwed0, tokensOwed1);\\n  }\\n\\n  /// @inheritdoc IUniV3PairManager\\n  function position()\\n    external\\n    view\\n    override\\n    returns (\\n      uint128 liquidity,\\n      uint256 feeGrowthInside0LastX128,\\n      uint256 feeGrowthInside1LastX128,\\n      uint128 tokensOwed0,\\n      uint128 tokensOwed1\\n    )\\n  {\\n    (liquidity, feeGrowthInside0LastX128, feeGrowthInside1LastX128, tokensOwed0, tokensOwed1) = IUniswapV3Pool(pool).positions(\\n      keccak256(abi.encodePacked(address(this), tickLower, tickUpper))\\n    );\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external override returns (bool) {\\n    allowance[msg.sender][spender] = amount;\\n\\n    emit Approval(msg.sender, spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address to, uint256 amount) external override returns (bool) {\\n    _transferTokens(msg.sender, to, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) external override returns (bool) {\\n    address spender = msg.sender;\\n    uint256 spenderAllowance = allowance[from][spender];\\n\\n    if (spender != from && spenderAllowance != type(uint256).max) {\\n      uint256 newAllowance = spenderAllowance - amount;\\n      allowance[from][spender] = newAllowance;\\n\\n      emit Approval(from, spender, newAllowance);\\n    }\\n\\n    _transferTokens(from, to, amount);\\n    return true;\\n  }\\n\\n  /// @notice Adds liquidity to an initialized pool\\n  /// @dev Reverts if the returned amount0 is less than amount0Min or if amount1 is less than amount1Min\\n  /// @dev This function calls the mint function of the corresponding Uniswap pool, which in turn calls UniswapV3Callback\\n  /// @param amount0Desired The amount of token0 we would like to provide\\n  /// @param amount1Desired The amount of token1 we would like to provide\\n  /// @param amount0Min The minimum amount of token0 we want to provide\\n  /// @param amount1Min The minimum amount of token1 we want to provide\\n  /// @return liquidity The calculated liquidity we get for the token amounts we provided\\n  /// @return amount0 The amount of token0 we ended up providing\\n  /// @return amount1 The amount of token1 we ended up providing\\n  function _addLiquidity(\\n    uint256 amount0Desired,\\n    uint256 amount1Desired,\\n    uint256 amount0Min,\\n    uint256 amount1Min\\n  )\\n    internal\\n    returns (\\n      uint128 liquidity,\\n      uint256 amount0,\\n      uint256 amount1\\n    )\\n  {\\n    (uint160 sqrtPriceX96, , , , , , ) = IUniswapV3Pool(pool).slot0();\\n\\n    liquidity = LiquidityAmounts.getLiquidityForAmounts(sqrtPriceX96, sqrtRatioAX96, sqrtRatioBX96, amount0Desired, amount1Desired);\\n\\n    (amount0, amount1) = IUniswapV3Pool(pool).mint(\\n      address(this),\\n      tickLower,\\n      tickUpper,\\n      liquidity,\\n      abi.encode(MintCallbackData({_poolKey: _poolKey, payer: msg.sender}))\\n    );\\n\\n    if (amount0 < amount0Min || amount1 < amount1Min) revert ExcessiveSlippage();\\n  }\\n\\n  /// @notice Transfers the passed-in token from the payer to the recipient for the corresponding value\\n  /// @param token The token to be transferred to the recipient\\n  /// @param from The address of the payer\\n  /// @param to The address of the passed-in tokens recipient\\n  /// @param value How much of that token to be transferred from payer to the recipient\\n  function _pay(\\n    address token,\\n    address from,\\n    address to,\\n    uint256 value\\n  ) internal {\\n    _safeTransferFrom(token, from, to, value);\\n  }\\n\\n  /// @notice Mints Keep3r credits to the passed-in address of recipient and increases total supply of Keep3r credits by the corresponding amount\\n  /// @param to The recipient of the Keep3r credits\\n  /// @param amount The amount Keep3r credits to be minted to the recipient\\n  function _mint(address to, uint256 amount) internal {\\n    totalSupply += amount;\\n    balanceOf[to] += amount;\\n    emit Transfer(address(0), to, amount);\\n  }\\n\\n  /// @notice Burns Keep3r credits to the passed-in address of recipient and reduces total supply of Keep3r credits by the corresponding amount\\n  /// @param to The address that will get its Keep3r credits burned\\n  /// @param amount The amount Keep3r credits to be burned from the recipient/recipient\\n  function _burn(address to, uint256 amount) internal {\\n    totalSupply -= amount;\\n    balanceOf[to] -= amount;\\n    emit Transfer(to, address(0), amount);\\n  }\\n\\n  /// @notice Transfers amount of Keep3r credits between two addresses\\n  /// @param from The user that transfers the Keep3r credits\\n  /// @param to The user that receives the Keep3r credits\\n  /// @param amount The amount of Keep3r credits to be transferred\\n  function _transferTokens(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal {\\n    balanceOf[from] -= amount;\\n    balanceOf[to] += amount;\\n\\n    emit Transfer(from, to, amount);\\n  }\\n\\n  /// @notice Transfers the passed-in token from the specified \\\"from\\\" to the specified \\\"to\\\" for the corresponding value\\n  /// @dev Reverts with IUniV3PairManager#UnsuccessfulTransfer if the transfer was not successful,\\n  ///      or if the passed data length is different than 0 and the decoded data is not a boolean\\n  /// @param token The token to be transferred to the specified \\\"to\\\"\\n  /// @param from  The address which is going to transfer the tokens\\n  /// @param value How much of that token to be transferred from \\\"from\\\" to \\\"to\\\"\\n  function _safeTransferFrom(\\n    address token,\\n    address from,\\n    address to,\\n    uint256 value\\n  ) internal {\\n    // solhint-disable-next-line avoid-low-level-calls\\n    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));\\n    if (!success || (data.length != 0 && !abi.decode(data, (bool)))) revert UnsuccessfulTransfer();\\n  }\\n}\\n\",\"keccak256\":\"0xcae7fbc99cb2f267f34894b47f02fde1c58cb22600afe4eb328d7492a9dbb396\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FixedPoint96.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nlibrary FixedPoint96 {\\n  // solhint-disable\\n  uint8 internal constant RESOLUTION = 96;\\n  uint256 internal constant Q96 = 0x1000000000000000000000000;\\n}\\n\",\"keccak256\":\"0x32a5c51474a7a83b902ffd6f54f8407e2b98d1142c9b06914fb75d50dd9c573c\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/libraries/LiquidityAmounts.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './FullMath.sol';\\nimport './FixedPoint96.sol';\\n\\n// solhint-disable\\nlibrary LiquidityAmounts {\\n  function toUint128(uint256 x) private pure returns (uint128 y) {\\n    require((y = uint128(x)) == x);\\n  }\\n\\n  function getLiquidityForAmount0(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount0\\n  ) internal pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n    uint256 intermediate = FullMath.mulDiv(sqrtRatioAX96, sqrtRatioBX96, FixedPoint96.Q96);\\n    return toUint128(FullMath.mulDiv(amount0, intermediate, sqrtRatioBX96 - sqrtRatioAX96));\\n  }\\n\\n  function getLiquidityForAmount1(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount1\\n  ) internal pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n    return toUint128(FullMath.mulDiv(amount1, FixedPoint96.Q96, sqrtRatioBX96 - sqrtRatioAX96));\\n  }\\n\\n  function getLiquidityForAmounts(\\n    uint160 sqrtRatioX96,\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount0,\\n    uint256 amount1\\n  ) internal pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\\n      liquidity = getLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amount0);\\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\\n      uint128 liquidity0 = getLiquidityForAmount0(sqrtRatioX96, sqrtRatioBX96, amount0);\\n      uint128 liquidity1 = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioX96, amount1);\\n\\n      liquidity = liquidity0 < liquidity1 ? liquidity0 : liquidity1;\\n    } else {\\n      liquidity = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1);\\n    }\\n  }\\n\\n  function getAmount0ForLiquidity(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) internal pure returns (uint256 amount0) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    return FullMath.mulDiv(uint256(liquidity) << FixedPoint96.RESOLUTION, sqrtRatioBX96 - sqrtRatioAX96, sqrtRatioBX96) / sqrtRatioAX96;\\n  }\\n\\n  function getAmount1ForLiquidity(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) internal pure returns (uint256 amount1) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    return FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96);\\n  }\\n\\n  function getAmountsForLiquidity(\\n    uint160 sqrtRatioX96,\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) internal pure returns (uint256 amount0, uint256 amount1) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\\n      amount0 = getAmount0ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\\n      amount0 = getAmount0ForLiquidity(sqrtRatioX96, sqrtRatioBX96, liquidity);\\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioX96, liquidity);\\n    } else {\\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x33666cfb046e29d6a9539e552b7aace75daab08f0449fec13de7282bac84f786\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/libraries/PoolAddress.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nlibrary PoolAddress {\\n  struct PoolKey {\\n    address token0;\\n    address token1;\\n    uint24 fee;\\n  }\\n}\\n\",\"keccak256\":\"0x68b07a437302c14ff93ebaabfb49f4fa70263cfbb19bf15446ddfcb91eb5a5e6\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/libraries/TickMath.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n// solhint-disable\\n\\n/// @title Math library for computing sqrt prices from ticks and vice versa\\n/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\\n///         prices between 2**-128 and 2**128\\nlibrary TickMath {\\n  /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\\n  int24 internal constant MIN_TICK = -887272;\\n  /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\\n  int24 internal constant MAX_TICK = -MIN_TICK;\\n\\n  /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\\n  uint160 internal constant MIN_SQRT_RATIO = 4295128739;\\n  /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\\n  uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;\\n\\n  /// @notice Calculates sqrt(1.0001^tick) * 2^96\\n  /// @dev Throws if |tick| > max tick\\n  /// @param tick The input tick for the above formula\\n  /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the given tick\\n  function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {\\n    uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));\\n    require(absTick <= uint256(int256(MAX_TICK)), 'T');\\n\\n    uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;\\n    if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;\\n    if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;\\n    if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;\\n    if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;\\n    if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;\\n    if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;\\n    if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;\\n    if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;\\n    if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;\\n    if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;\\n    if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;\\n    if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;\\n    if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;\\n    if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;\\n    if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;\\n    if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;\\n    if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;\\n    if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;\\n    if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;\\n\\n    if (tick > 0) ratio = type(uint256).max / ratio;\\n\\n    // Divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.\\n    // we then downcast because we know the result always fits within 160 bits due to our tick input constraint\\n    // we round up in the division so getTickAtSqrtRatio of the output price is always consistent\\n    sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));\\n  }\\n\\n  /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\\n  /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may ever return.\\n  /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\\n  /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio\\n  function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {\\n    // Second inequality must be < because the price can never reach the price at the max tick\\n    require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');\\n    uint256 ratio = uint256(sqrtPriceX96) << 32;\\n\\n    uint256 r = ratio;\\n    uint256 msb = 0;\\n\\n    assembly {\\n      let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(5, gt(r, 0xFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(4, gt(r, 0xFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(3, gt(r, 0xFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(2, gt(r, 0xF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(1, gt(r, 0x3))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := gt(r, 0x1)\\n      msb := or(msb, f)\\n    }\\n\\n    if (msb >= 128) r = ratio >> (msb - 127);\\n    else r = ratio << (127 - msb);\\n\\n    int256 log_2 = (int256(msb) - 128) << 64;\\n\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(63, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(62, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(61, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(60, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(59, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(58, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(57, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(56, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(55, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(54, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(53, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(52, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(51, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(50, f))\\n    }\\n\\n    int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number\\n\\n    int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);\\n    int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);\\n\\n    tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;\\n  }\\n}\\n\",\"keccak256\":\"0x11b965ba576ff91b4a6e9533c0f334f2b7b6024ee1c54e36d21799de5580899d\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/IUniV3PairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IPairManager.sol';\\nimport '../contracts/libraries/PoolAddress.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\nimport './peripherals/IGovernable.sol';\\n\\n/// @title Pair Manager contract\\n/// @notice Creates a UniswapV3 position, and tokenizes in an ERC20 manner\\n///         so that the user can use it as liquidity for a Keep3rJob\\ninterface IUniV3PairManager is IGovernable, IPairManager {\\n  // Structs\\n\\n  /// @notice The data to be decoded by the UniswapV3MintCallback function\\n  struct MintCallbackData {\\n    PoolAddress.PoolKey _poolKey; // Struct that contains token0, token1, and fee of the pool passed into the constructor\\n    address payer; // The address of the payer, which will be the msg.sender of the mint function\\n  }\\n\\n  // Variables\\n\\n  /// @notice The fee of the Uniswap pool passed into the constructor\\n  /// @return _fee The fee of the Uniswap pool passed into the constructor\\n  function fee() external view returns (uint24 _fee);\\n\\n  /// @notice Highest tick in the Uniswap's curve\\n  /// @return _tickUpper The highest tick in the Uniswap's curve\\n  function tickUpper() external view returns (int24 _tickUpper);\\n\\n  /// @notice Lowest tick in the Uniswap's curve\\n  /// @return _tickLower The lower tick in the Uniswap's curve\\n  function tickLower() external view returns (int24 _tickLower);\\n\\n  /// @notice The pair tick spacing\\n  /// @return _tickSpacing The pair tick spacing\\n  function tickSpacing() external view returns (int24 _tickSpacing);\\n\\n  /// @notice The sqrtRatioAX96 at the lowest tick (-887200) of the Uniswap pool\\n  /// @return _sqrtPriceA96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the lowest tick\\n  function sqrtRatioAX96() external view returns (uint160 _sqrtPriceA96);\\n\\n  /// @notice The sqrtRatioBX96 at the highest tick (887200) of the Uniswap pool\\n  /// @return _sqrtPriceBX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the highest tick\\n  function sqrtRatioBX96() external view returns (uint160 _sqrtPriceBX96);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the pool\\n  error OnlyPool();\\n\\n  /// @notice Throws when the slippage exceeds what the user is comfortable with\\n  error ExcessiveSlippage();\\n\\n  /// @notice Throws when a transfer is unsuccessful\\n  error UnsuccessfulTransfer();\\n\\n  // Methods\\n\\n  /// @notice This function is called after a user calls IUniV3PairManager#mint function\\n  ///         It ensures that any tokens owed to the pool are paid by the msg.sender of IUniV3PairManager#mint function\\n  /// @param amount0Owed The amount of token0 due to the pool for the minted liquidity\\n  /// @param amount1Owed The amount of token1 due to the pool for the minted liquidity\\n  /// @param data The encoded token0, token1, fee (_poolKey) and the payer (msg.sender) of the IUniV3PairManager#mint function\\n  function uniswapV3MintCallback(\\n    uint256 amount0Owed,\\n    uint256 amount1Owed,\\n    bytes calldata data\\n  ) external;\\n\\n  /// @notice Mints kLP tokens to an address according to the liquidity the msg.sender provides to the UniswapV3 pool\\n  /// @dev Triggers UniV3PairManager#uniswapV3MintCallback\\n  /// @param amount0Desired The amount of token0 we would like to provide\\n  /// @param amount1Desired The amount of token1 we would like to provide\\n  /// @param amount0Min The minimum amount of token0 we want to provide\\n  /// @param amount1Min The minimum amount of token1 we want to provide\\n  /// @param to The address to which the kLP tokens are going to be minted to\\n  /// @return liquidity kLP tokens sent in exchange for the provision of tokens\\n  function mint(\\n    uint256 amount0Desired,\\n    uint256 amount1Desired,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external returns (uint128 liquidity);\\n\\n  /// @notice Returns the pair manager's position in the corresponding UniswapV3 pool\\n  /// @return liquidity The amount of liquidity provided to the UniswapV3 pool by the pair manager\\n  /// @return feeGrowthInside0LastX128 The fee growth of token0 as of the last action on the individual position\\n  /// @return feeGrowthInside1LastX128 The fee growth of token1 as of the last action on the individual position\\n  /// @return tokensOwed0 The uncollected amount of token0 owed to the position as of the last computation\\n  /// @return tokensOwed1 The uncollected amount of token1 owed to the position as of the last computation\\n  function position()\\n    external\\n    view\\n    returns (\\n      uint128 liquidity,\\n      uint256 feeGrowthInside0LastX128,\\n      uint256 feeGrowthInside1LastX128,\\n      uint128 tokensOwed0,\\n      uint128 tokensOwed1\\n    );\\n\\n  /// @notice Calls the UniswapV3 pool's collect function, which collects up to a maximum amount of fees\\n  //          owed to a specific position to the recipient, in this case, that recipient is the pair manager\\n  /// @dev The collected fees will be sent to governance\\n  /// @return amount0 The amount of fees collected in token0\\n  /// @return amount1 The amount of fees collected in token1\\n  function collect() external returns (uint256 amount0, uint256 amount1);\\n\\n  /// @notice Burns the corresponding amount of kLP tokens from the msg.sender and withdraws the specified liquidity\\n  //          in the entire range\\n  /// @param liquidity The amount of liquidity to be burned\\n  /// @param amount0Min The minimum amount of token0 we want to send to the recipient (to)\\n  /// @param amount1Min The minimum amount of token1 we want to send to the recipient (to)\\n  /// @param to The address that will receive the due fees\\n  /// @return amount0 The calculated amount of token0 that will be sent to the recipient\\n  /// @return amount1 The calculated amount of token1 that will be sent to the recipient\\n  function burn(\\n    uint128 liquidity,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external returns (uint256 amount0, uint256 amount1);\\n}\\n\",\"keccak256\":\"0x5d5793eaa4ed95d51d6185af159921fca68a3020b151bde710e1a6f58f288cfe\",\"license\":\"MIT\"},\"solidity/interfaces/external/IWeth9.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\n\\ninterface IWeth9 is IERC20 {\\n  function deposit() external payable;\\n\\n  function withdraw(uint256) external;\\n}\\n\",\"keccak256\":\"0x62b6fd021e9fef703f5c77705d8da9ee1967e34e00a0c8a827ee3c0f973399a5\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5266,
                "contract": "solidity/contracts/UniV3PairManager.sol:UniV3PairManager",
                "label": "governance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/UniV3PairManager.sol:UniV3PairManager",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 3227,
                "contract": "solidity/contracts/UniV3PairManager.sol:UniV3PairManager",
                "label": "name",
                "offset": 0,
                "slot": "2",
                "type": "t_string_storage"
              },
              {
                "astId": 3231,
                "contract": "solidity/contracts/UniV3PairManager.sol:UniV3PairManager",
                "label": "symbol",
                "offset": 0,
                "slot": "3",
                "type": "t_string_storage"
              },
              {
                "astId": 3235,
                "contract": "solidity/contracts/UniV3PairManager.sol:UniV3PairManager",
                "label": "totalSupply",
                "offset": 0,
                "slot": "4",
                "type": "t_uint256"
              },
              {
                "astId": 3292,
                "contract": "solidity/contracts/UniV3PairManager.sol:UniV3PairManager",
                "label": "allowance",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 3298,
                "contract": "solidity/contracts/UniV3PairManager.sol:UniV3PairManager",
                "label": "balanceOf",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 3302,
                "contract": "solidity/contracts/UniV3PairManager.sol:UniV3PairManager",
                "label": "_poolKey",
                "offset": 0,
                "slot": "7",
                "type": "t_struct(PoolKey)4649_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_struct(PoolKey)4649_storage": {
                "encoding": "inplace",
                "label": "struct PoolAddress.PoolKey",
                "members": [
                  {
                    "astId": 4644,
                    "contract": "solidity/contracts/UniV3PairManager.sol:UniV3PairManager",
                    "label": "token0",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_address"
                  },
                  {
                    "astId": 4646,
                    "contract": "solidity/contracts/UniV3PairManager.sol:UniV3PairManager",
                    "label": "token1",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_address"
                  },
                  {
                    "astId": 4648,
                    "contract": "solidity/contracts/UniV3PairManager.sol:UniV3PairManager",
                    "label": "fee",
                    "offset": 20,
                    "slot": "1",
                    "type": "t_uint24"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint24": {
                "encoding": "inplace",
                "label": "uint24",
                "numberOfBytes": "3"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "ExcessiveSlippage()": [
                {
                  "notice": "Throws when the slippage exceeds what the user is comfortable with"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPool()": [
                {
                  "notice": "Throws when the caller of the function is not the pool"
                }
              ],
              "UnsuccessfulTransfer()": [
                {
                  "notice": "Throws when a transfer is unsuccessful"
                }
              ]
            },
            "events": {
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "factory()": {
                "notice": "Address of the factory from which the pair manager was created"
              },
              "fee()": {
                "notice": "The fee of the Uniswap pool passed into the constructor"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "mint(uint256,uint256,uint256,uint256,address)": {
                "notice": "Mints kLP tokens to an address according to the liquidity the msg.sender provides to the UniswapV3 pool"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pool()": {
                "notice": "Address of the pool from which the Keep3r pair manager will interact with"
              },
              "position()": {
                "notice": "Returns the pair manager's position in the corresponding UniswapV3 pool"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "sqrtRatioAX96()": {
                "notice": "The sqrtRatioAX96 at the lowest tick (-887200) of the Uniswap pool"
              },
              "sqrtRatioBX96()": {
                "notice": "The sqrtRatioBX96 at the highest tick (887200) of the Uniswap pool"
              },
              "tickLower()": {
                "notice": "Lowest tick in the Uniswap's curve"
              },
              "tickSpacing()": {
                "notice": "The pair tick spacing"
              },
              "tickUpper()": {
                "notice": "Highest tick in the Uniswap's curve"
              },
              "token0()": {
                "notice": "Token0 of the pool"
              },
              "token1()": {
                "notice": "Token1 of the pool"
              },
              "uniswapV3MintCallback(uint256,uint256,bytes)": {
                "notice": "This function is called after a user calls IUniV3PairManager#mint function         It ensures that any tokens owed to the pool are paid by the msg.sender of IUniV3PairManager#mint function"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/UniV3PairManagerFactory.sol": {
        "UniV3PairManagerFactory": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "AlreadyInitialized",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pairManager",
                  "type": "address"
                }
              ],
              "name": "PairCreated",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "name": "createPairManager",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_pairManager",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pairManagers",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "createPairManager(address)": {
                "params": {
                  "_pool": "The address of the Uniswap pool the pair manager will be based of"
                },
                "returns": {
                  "_pairManager": "The address of the just-created pair manager"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              }
            },
            "stateVariables": {
              "pairManagers": {
                "params": {
                  "_pool": "The address of the Uniswap pool"
                },
                "return": "_pairManager The address of the corresponding pair manager",
                "returns": {
                  "_0": "_pairManager The address of the corresponding pair manager"
                }
              }
            },
            "title": "Factory of Pair Managers",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_4075": {
                  "entryPoint": null,
                  "id": 4075,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 124,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:306:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "95:209:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "141:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "150:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "153:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "143:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "143:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "143:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "116:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "112:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "112:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "137:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "108:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "108:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "105:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "166:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "185:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "179:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "179:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "170:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "258:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "267:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "270:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "260:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "260:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "260:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "217:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "228:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "243:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "248:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "239:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "239:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "252:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "235:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "235:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "224:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "224:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "214:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "214:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "207:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "207:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "204:70:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "283:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "293:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "283:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "61:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "72:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "84:6:84",
                            "type": ""
                          }
                        ],
                        "src": "14:290:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b5060405161361f38038061361f83398101604081905261002f9161007c565b806001600160a01b0381166100565760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055506100ac565b60006020828403121561008e57600080fd5b81516001600160a01b03811681146100a557600080fd5b9392505050565b613564806100bb6000396000f3fe60806040523480156200001157600080fd5b50600436106200006a5760003560e01c8063238efcbc146200006f5780635aa6e675146200007b578063869fb51414620000a75780639cd7bef014620000be578063ab033ea914620000ea578063f39c38a01462000101575b600080fd5b6200007962000115565b005b6000546200008f906001600160a01b031681565b6040516200009e91906200035e565b60405180910390f35b6200008f620000b83660046200032c565b620001a4565b6200008f620000cf3660046200032c565b6002602052600090815260409020546001600160a01b031681565b62000079620000fb3660046200032c565b6200029a565b6001546200008f906001600160a01b031681565b6001546001600160a01b031633146200014157604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916200019a916200035e565b60405180910390a1565b6001600160a01b0381811660009081526002602052604081205490911615620001df5760405162dc149f60e41b815260040160405180910390fd5b60005460405183916001600160a01b031690620001fc906200031e565b6200020992919062000372565b604051809103906000f08015801562000226573d6000803e3d6000fd5b506001600160a01b038381166000908152600260205260409081902080546001600160a01b03191692841692909217909155519091507ff4e6903dddf8034e1689a73259c54f96ff67410886872805530f383ededfec23906200028d908490849062000372565b60405180910390a1919050565b6000546001600160a01b03163314620002c6576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90620003139083906200035e565b60405180910390a150565b6131a2806200038d83390190565b6000602082840312156200033f57600080fd5b81356001600160a01b03811681146200035757600080fd5b9392505050565b6001600160a01b0391909116815260200190565b6001600160a01b039283168152911660208201526040019056fe6101c06040523480156200001257600080fd5b50604051620031a2380380620031a2833981016040819052620000359162000b61565b806001600160a01b0381166200005d5760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b039283161781556040805163ddca3f4360e01b81529051919285169163ddca3f4391600480820192602092909190829003018186803b158015620000b557600080fd5b505afa158015620000ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f0919062000c76565b90506000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200012e57600080fd5b505afa15801562000143573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000169919062000b3c565b90506000846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620001a757600080fd5b505afa158015620001bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e2919062000b3c565b90506000856001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022057600080fd5b505afa15801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025b919062000b99565b905060006200026e82620d89e862000e56565b6200027d90620d89e862000d98565b905060006200028c8262000e92565b33606090811b60805289811b6001600160601b031990811660e05260e889811b6001600160e81b03191661010052600287810b810b821b6101a05286810b810b821b6101805284810b900b901b6101605287821b811660a0529086901b1660c052604080516395d89b4160e01b815290519192506001600160a01b038716916395d89b4191600480820192600092909190829003018186803b1580156200033257600080fd5b505afa15801562000347573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000371919081019062000bbe565b846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620003ab57600080fd5b505afa158015620003c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003ea919081019062000bbe565b604051602001620003fd92919062000ced565b604051602081830303815290604052600290805190602001906200042392919062000a79565b50846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200045e57600080fd5b505afa15801562000473573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200049d919081019062000bbe565b846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620004d757600080fd5b505afa158015620004ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000516919081019062000bbe565b6040516020016200052992919062000c9d565b604051602081830303815290604052600390805190602001906200054f92919062000a79565b5062000566816200061760201b62000e861760201c565b6001600160a01b0316610120816001600160a01b031660601b8152505062000599826200061760201b62000e861760201c565b606090811b6001600160601b031916610140526040805191820181526001600160a01b03968716808352959096166020820181905262ffffff9790971695018590525050600780546001600160a01b03191690921790915550600880546001600160b81b031916909217600160a01b9091021790555062000f1a9050565b60008060008360020b1262000630578260020b6200063f565b8260020b6200063f9062000eb8565b905062000650620d89e71962000e92565b60020b8111156200068b5760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b600060018216620006a157600160801b620006b3565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615620006eb576080620006e6826ffff97272373d413259a46990580e213a62000d76565b901c90505b60048216156200071857608062000713826ffff2e50f5f656932ef12357cf3c7fdcc62000d76565b901c90505b60088216156200074557608062000740826fffe5caca7e10e4e61c3624eaa0941cd062000d76565b901c90505b6010821615620007725760806200076d826fffcb9843d60f6159c9db58835c92664462000d76565b901c90505b60208216156200079f5760806200079a826fff973b41fa98c081472e6896dfb254c062000d76565b901c90505b6040821615620007cc576080620007c7826fff2ea16466c96a3843ec78b326b5286162000d76565b901c90505b6080821615620007f9576080620007f4826ffe5dee046a99a2a811c461f1969c305362000d76565b901c90505b6101008216156200082757608062000822826ffcbe86c7900a88aedcffc83b479aa3a462000d76565b901c90505b6102008216156200085557608062000850826ff987a7253ac413176f2b074cf7815e5462000d76565b901c90505b610400821615620008835760806200087e826ff3392b0822b70005940c7a398e4b70f362000d76565b901c90505b610800821615620008b1576080620008ac826fe7159475a2c29b7443b29c7fa6e889d962000d76565b901c90505b611000821615620008df576080620008da826fd097f3bdfd2022b8845ad8f792aa582562000d76565b901c90505b6120008216156200090d57608062000908826fa9f746462d870fdf8a65dc1f90e061e562000d76565b901c90505b6140008216156200093b57608062000936826f70d869a156d2a1b890bb3df62baf32f762000d76565b901c90505b6180008216156200096957608062000964826f31be135f97d08fd981231505542fcfa662000d76565b901c90505b620100008216156200099857608062000993826f09aa508b5b7a84e1c677de54f3e99bc962000d76565b901c90505b62020000821615620009c6576080620009c1826e5d6af8dedb81196699c329225ee60462000d76565b901c90505b62040000821615620009f3576080620009ee826d2216e584f5fa1ea926041bedfe9862000d76565b901c90505b6208000082161562000a1e57608062000a19826b048a170391f7dc42444e8fa262000d76565b901c90505b60008460020b131562000a3c5762000a398160001962000d5f565b90505b62000a4d6401000000008262000e7b565b1562000a5b57600162000a5e565b60005b62000a719060ff16602083901c62000d44565b949350505050565b82805462000a879062000e19565b90600052602060002090601f01602090048101928262000aab576000855562000af6565b82601f1062000ac657805160ff191683800117855562000af6565b8280016001018555821562000af6579182015b8281111562000af657825182559160200191906001019062000ad9565b5062000b0492915062000b08565b5090565b5b8082111562000b04576000815560010162000b09565b80516001600160a01b038116811462000b3757600080fd5b919050565b60006020828403121562000b4f57600080fd5b62000b5a8262000b1f565b9392505050565b6000806040838503121562000b7557600080fd5b62000b808362000b1f565b915062000b906020840162000b1f565b90509250929050565b60006020828403121562000bac57600080fd5b81518060020b811462000b5a57600080fd5b60006020828403121562000bd157600080fd5b81516001600160401b038082111562000be957600080fd5b818401915084601f83011262000bfe57600080fd5b81518181111562000c135762000c1362000f04565b604051601f8201601f19908116603f0116810190838211818310171562000c3e5762000c3e62000f04565b8160405282815287602084870101111562000c5857600080fd5b62000c6b83602083016020880162000de6565b979650505050505050565b60006020828403121562000c8957600080fd5b815162ffffff8116811462000b5a57600080fd5b636b4c502d60e01b81526000835162000cbe81600485016020880162000de6565b602f60f81b600491840191820152835162000ce181600584016020880162000de6565b01600501949350505050565b6a025b2b2b819b926281016960ad1b81526000835162000d1581600b85016020880162000de6565b602f60f81b600b91840191820152835162000d3881600c84016020880162000de6565b01600c01949350505050565b6000821982111562000d5a5762000d5a62000ed8565b500190565b60008262000d715762000d7162000eee565b500490565b600081600019048311821515161562000d935762000d9362000ed8565b500290565b60008160020b8360020b6000811281627fffff190183128115161562000dc25762000dc262000ed8565b81627fffff01831381161562000ddc5762000ddc62000ed8565b5090039392505050565b60005b8381101562000e0357818101518382015260200162000de9565b8381111562000e13576000848401525b50505050565b600181811c9082168062000e2e57607f821691505b6020821081141562000e5057634e487b7160e01b600052602260045260246000fd5b50919050565b60008260020b8062000e6c5762000e6c62000eee565b808360020b0791505092915050565b60008262000e8d5762000e8d62000eee565b500690565b60008160020b627fffff1981141562000eaf5762000eaf62000ed8565b60000392915050565b6000600160ff1b82141562000ed15762000ed162000ed8565b5060000390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160601c6101405160601c6101605160e81c6101805160e81c6101a05160e81c6121466200105c60003960006104200152600081816102bd015281816105e60152818161097b01528181610ad201528181610cc901528181610df301526115080152600081816102f7015281816105c50152818161095001528181610ab001528181610ca801528181610dd101526114e60152600081816103d101526113fe01526000818161027c01526113dd015260006104ac01526000818161022101528181610595015281816109bf01528181610a8101528181610b8801528181610bdb01528181610c1901528181610c7801528181610d9e0152818161134001526114b501526000610447015260006101ed015260006103aa01526121466000f3fe608060405234801561001057600080fd5b50600436106101645760003560e01c806395d89b41116100c957806395d89b411461034c578063a3e6dc2814610354578063a9059cbb1461037f578063ab033ea914610392578063c45a0155146103a5578063c6275261146103cc578063cf51148d146103f3578063d0c93a7c1461041b578063d21220a714610442578063d348799714610469578063dd62ed3e1461047c578063ddca3f43146104a7578063e5225381146104e2578063f39c38a0146104ea57600080fd5b806306fdde031461016957806309218e9114610187578063095ea7b3146101c55780630dfe1681146101e857806316f0115b1461021c57806318160ddd14610243578063238efcbc1461025a57806323b872dd146102645780632ea28f5b14610277578063313ce5671461029e57806355b812a8146102b857806359c4f905146102f25780635aa6e6751461031957806370a082311461032c575b600080fd5b6101716104fd565b60405161017e9190611f09565b60405180910390f35b61018f61058b565b604080516001600160801b039687168152602081019590955284019290925283166060830152909116608082015260a00161017e565b6101d86101d3366004611a98565b6106ac565b604051901515815260200161017e565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b60405161017e9190611e68565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b61024c60045481565b60405190815260200161017e565b610262610718565b005b6101d8610272366004611a57565b6107a4565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b6102a6601281565b60405160ff909116815260200161017e565b6102df7f000000000000000000000000000000000000000000000000000000000000000081565b60405160029190910b815260200161017e565b6102df7f000000000000000000000000000000000000000000000000000000000000000081565b60005461020f906001600160a01b031681565b61024c61033a366004611a01565b60066020526000908152604090205481565b61017161086d565b610367610362366004611db1565b61087a565b6040516001600160801b03909116815260200161017e565b6101d861038d366004611a98565b6108aa565b6102626103a0366004611a01565b6108c0565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b610406610401366004611bc8565b610941565b6040805192835260208301919091520161017e565b6102df7f000000000000000000000000000000000000000000000000000000000000000081565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b610262610477366004611d32565b610b6d565b61024c61048a366004611a1e565b600560209081526000928352604080842090915290825290205481565b6104ce7f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff909116815260200161017e565b610406610c45565b60015461020f906001600160a01b031681565b6002805461050a90612008565b80601f016020809104026020016040519081016040528092919081815260200182805461053690612008565b80156105835780601f1061055857610100808354040283529160200191610583565b820191906000526020600020905b81548152906001019060200180831161056657829003601f168201915b505050505081565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf307f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060405160200161061793929190611e1c565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161064b91815260200190565b60a06040518083038186803b15801561066357600080fd5b505afa158015610677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069b9190611c12565b939992985090965094509092509050565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107079086815260200190565b60405180910390a350600192915050565b6001546001600160a01b0316331461074357604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161079a91611e68565b60405180910390a1565b6001600160a01b0383166000818152600560209081526040808320338085529252822054919290919082148015906107de57506000198114155b156108545760006107ef8583611fc5565b6001600160a01b038881166000818152600560209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61085f86868661129c565b6001925050505b9392505050565b6003805461050a90612008565b600061088886868686611338565b509091506108a19050826001600160801b0383166115bf565b95945050505050565b60006108b733848461129c565b50600192915050565b6000546001600160a01b031633146108eb576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610936908390611e68565b60405180910390a150565b60405163a34123a760e01b81527f0000000000000000000000000000000000000000000000000000000000000000600290810b60048301527f0000000000000000000000000000000000000000000000000000000000000000900b60248201526001600160801b038516604482015260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a34123a7906064016040805180830381600087803b158015610a0257600080fd5b505af1158015610a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3a9190611d0e565b909250905084821080610a4c57508381105b15610a6a576040516397c7f53760e01b815260040160405180910390fd5b6040516309e3d67b60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634f1eb3d890610afe9086907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401611ecc565b6040805180830381600087803b158015610b1757600080fd5b505af1158015610b2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4f9190611b99565b5050610b6433876001600160801b0316611637565b94509492505050565b6000610b7b82840184611adf565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bc657604051634b60273560e01b815260040160405180910390fd5b8415610c00578051516020820151610c0091907f0000000000000000000000000000000000000000000000000000000000000000886116a7565b8315610c3e57610c3e81600001516020015182602001517f0000000000000000000000000000000000000000000000000000000000000000876116a7565b5050505050565b6000805481906001600160a01b03163314610c73576040516354348f0360e01b815260040160405180910390fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf307f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000604051602001610cfa93929190611e1c565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401610d2e91815260200190565b60a06040518083038186803b158015610d4657600080fd5b505afa158015610d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7e9190611c12565b6000546040516309e3d67b60e31b81529297509095506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169550634f1eb3d89450610e1f935016907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401611ecc565b6040805180830381600087803b158015610e3857600080fd5b505af1158015610e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e709190611b99565b6001600160801b03918216969116945092505050565b60008060008360020b12610e9d578260020b610eaa565b8260020b610eaa9061207a565b9050610eb9620d89e719612057565b60020b811115610ef35760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b600060018216610f0757600160801b610f19565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615610f4e576080610f49826ffff97272373d413259a46990580e213a611f7e565b901c90505b6004821615610f78576080610f73826ffff2e50f5f656932ef12357cf3c7fdcc611f7e565b901c90505b6008821615610fa2576080610f9d826fffe5caca7e10e4e61c3624eaa0941cd0611f7e565b901c90505b6010821615610fcc576080610fc7826fffcb9843d60f6159c9db58835c926644611f7e565b901c90505b6020821615610ff6576080610ff1826fff973b41fa98c081472e6896dfb254c0611f7e565b901c90505b604082161561102057608061101b826fff2ea16466c96a3843ec78b326b52861611f7e565b901c90505b608082161561104a576080611045826ffe5dee046a99a2a811c461f1969c3053611f7e565b901c90505b610100821615611075576080611070826ffcbe86c7900a88aedcffc83b479aa3a4611f7e565b901c90505b6102008216156110a057608061109b826ff987a7253ac413176f2b074cf7815e54611f7e565b901c90505b6104008216156110cb5760806110c6826ff3392b0822b70005940c7a398e4b70f3611f7e565b901c90505b6108008216156110f65760806110f1826fe7159475a2c29b7443b29c7fa6e889d9611f7e565b901c90505b61100082161561112157608061111c826fd097f3bdfd2022b8845ad8f792aa5825611f7e565b901c90505b61200082161561114c576080611147826fa9f746462d870fdf8a65dc1f90e061e5611f7e565b901c90505b614000821615611177576080611172826f70d869a156d2a1b890bb3df62baf32f7611f7e565b901c90505b6180008216156111a257608061119d826f31be135f97d08fd981231505542fcfa6611f7e565b901c90505b620100008216156111ce5760806111c9826f09aa508b5b7a84e1c677de54f3e99bc9611f7e565b901c90505b620200008216156111f95760806111f4826e5d6af8dedb81196699c329225ee604611f7e565b901c90505b6204000082161561122357608061121e826d2216e584f5fa1ea926041bedfe98611f7e565b901c90505b6208000082161561124b576080611246826b048a170391f7dc42444e8fa2611f7e565b901c90505b60008460020b13156112665761126381600019611f6a565b90505b611274600160201b82612043565b15611280576001611283565b60005b6112949060ff16602083901c611f52565b949350505050565b6001600160a01b038316600090815260066020526040812080548392906112c4908490611fc5565b90915550506001600160a01b038216600090815260066020526040812080548392906112f1908490611f52565b92505081905550816001600160a01b0316836001600160a01b03166000805160206120f18339815191528360405161132b91815260200190565b60405180910390a3505050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561139757600080fd5b505afa1580156113ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cf9190611c74565b5050505050509050611424817f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008b8b6116b9565b6040805160a080820183526007546001600160a01b039081168385018181526008548084166060808801918252600160a01b90920462ffffff9081166080808a01918252948952336020998a019081528a51998a019690965291518616888a01529051169086015290518216848201528451808503909101815291830193849052633c8a7d8d60e01b9093529296507f000000000000000000000000000000000000000000000000000000000000000090911691633c8a7d8d916115339130917f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000918b919060a401611e7c565b6040805180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115849190611d0e565b90935091508583108061159657508482105b156115b4576040516397c7f53760e01b815260040160405180910390fd5b509450945094915050565b80600460008282546115d19190611f52565b90915550506001600160a01b038216600090815260066020526040812080548392906115fe908490611f52565b90915550506040518181526001600160a01b038316906000906000805160206120f1833981519152906020015b60405180910390a35050565b80600460008282546116499190611fc5565b90915550506001600160a01b03821660009081526006602052604081208054839290611676908490611fc5565b90915550506040518181526000906001600160a01b038416906000805160206120f18339815191529060200161162b565b6116b38484848461177b565b50505050565b6000836001600160a01b0316856001600160a01b031611156116d9579293925b846001600160a01b0316866001600160a01b031611611704576116fd858585611875565b90506108a1565b836001600160a01b0316866001600160a01b0316101561176657600061172b878686611875565b9050600061173a8789866118df565b9050806001600160801b0316826001600160801b03161061175b578061175d565b815b925050506108a1565b6117718585846118df565b9695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916117df9190611e4c565b6000604051808303816000865af19150503d806000811461181c576040519150601f19603f3d011682016040523d82523d6000602084013e611821565b606091505b509150915081158061184f575080511580159061184f57508080602001905181019061184d9190611ac4565b155b1561186d576040516316369daf60e31b815260040160405180910390fd5b505050505050565b6000826001600160a01b0316846001600160a01b03161115611895579192915b60006118b8856001600160a01b0316856001600160a01b0316600160601b611915565b90506108a16118da84836118cc8989611f9d565b6001600160a01b0316611915565b6119c4565b6000826001600160a01b0316846001600160a01b031611156118ff579192915b6112946118da83600160601b6118cc8888611f9d565b60008080600019858709858702925082811083820303915050806000141561194f576000841161194457600080fd5b508290049050610866565b80841161195b57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b806001600160801b03811681146119da57600080fd5b919050565b805180151581146119da57600080fd5b805161ffff811681146119da57600080fd5b600060208284031215611a1357600080fd5b8135610866816120c3565b60008060408385031215611a3157600080fd5b8235611a3c816120c3565b91506020830135611a4c816120c3565b809150509250929050565b600080600060608486031215611a6c57600080fd5b8335611a77816120c3565b92506020840135611a87816120c3565b929592945050506040919091013590565b60008060408385031215611aab57600080fd5b8235611ab6816120c3565b946020939093013593505050565b600060208284031215611ad657600080fd5b610866826119df565b60008183036080811215611af257600080fd5b604051604081018181106001600160401b0382111715611b2257634e487b7160e01b600052604160045260246000fd5b6040526060821215611b3357600080fd5b611b3b611f1c565b91508335611b48816120c3565b82526020840135611b58816120c3565b6020830152604084013562ffffff81168114611b7357600080fd5b6040830152908152606083013590611b8a826120c3565b60208101919091529392505050565b60008060408385031215611bac57600080fd5b8251611bb7816120db565b6020840151909250611a4c816120db565b60008060008060808587031215611bde57600080fd5b8435611be9816120db565b935060208501359250604085013591506060850135611c07816120c3565b939692955090935050565b600080600080600060a08688031215611c2a57600080fd5b8551611c35816120db565b8095505060208601519350604086015192506060860151611c55816120db565b6080870151909250611c66816120db565b809150509295509295909350565b600080600080600080600060e0888a031215611c8f57600080fd5b8751611c9a816120c3565b8097505060208801518060020b8114611cb257600080fd5b9550611cc0604089016119ef565b9450611cce606089016119ef565b9350611cdc608089016119ef565b925060a088015160ff81168114611cf257600080fd5b9150611d0060c089016119df565b905092959891949750929550565b60008060408385031215611d2157600080fd5b505080516020909101519092909150565b60008060008060608587031215611d4857600080fd5b843593506020850135925060408501356001600160401b0380821115611d6d57600080fd5b818701915087601f830112611d8157600080fd5b813581811115611d9057600080fd5b886020828501011115611da257600080fd5b95989497505060200194505050565b600080600080600060a08688031215611dc957600080fd5b853594506020860135935060408601359250606086013591506080860135611c66816120c3565b60008151808452611e08816020860160208601611fdc565b601f01601f19169290920160200192915050565b60609390931b6001600160601b0319168352600291820b60e890811b6014850152910b901b6017820152601a0190565b60008251611e5e818460208701611fdc565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a060808201819052600090611ec190830184611df0565b979650505050505050565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6020815260006108666020830184611df0565b604051606081016001600160401b0381118282101715611f4c57634e487b7160e01b600052604160045260246000fd5b60405290565b60008219821115611f6557611f65612097565b500190565b600082611f7957611f796120ad565b500490565b6000816000190483118215151615611f9857611f98612097565b500290565b60006001600160a01b0383811690831681811015611fbd57611fbd612097565b039392505050565b600082821015611fd757611fd7612097565b500390565b60005b83811015611ff7578181015183820152602001611fdf565b838111156116b35750506000910152565b600181811c9082168061201c57607f821691505b6020821081141561203d57634e487b7160e01b600052602260045260246000fd5b50919050565b600082612052576120526120ad565b500690565b60008160020b627fffff1981141561207157612071612097565b60000392915050565b6000600160ff1b82141561209057612090612097565b5060000390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146120d857600080fd5b50565b6001600160801b03811681146120d857600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220176e0789f293d3cdd0b53b0d393ae37177f51883457a8f3566fa6f880833500464736f6c63430008070033a2646970667358221220bcc8748a58050357f695d15ee19ce2cb684749f8d6b50f3abf3f935a166ed62a64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x361F CODESIZE SUB DUP1 PUSH2 0x361F DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x7C JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x56 JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH2 0xAC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x3564 DUP1 PUSH2 0xBB PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH3 0x6A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x238EFCBC EQ PUSH3 0x6F JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH3 0x7B JUMPI DUP1 PUSH4 0x869FB514 EQ PUSH3 0xA7 JUMPI DUP1 PUSH4 0x9CD7BEF0 EQ PUSH3 0xBE JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH3 0xEA JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH3 0x101 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x79 PUSH3 0x115 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x8F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x9E SWAP2 SWAP1 PUSH3 0x35E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0x8F PUSH3 0xB8 CALLDATASIZE PUSH1 0x4 PUSH3 0x32C JUMP JUMPDEST PUSH3 0x1A4 JUMP JUMPDEST PUSH3 0x8F PUSH3 0xCF CALLDATASIZE PUSH1 0x4 PUSH3 0x32C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH3 0x79 PUSH3 0xFB CALLDATASIZE PUSH1 0x4 PUSH3 0x32C JUMP JUMPDEST PUSH3 0x29A JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH3 0x8F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0x141 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH3 0x19A SWAP2 PUSH3 0x35E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH3 0x1DF JUMPI PUSH1 0x40 MLOAD PUSH3 0xDC149F PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH3 0x1FC SWAP1 PUSH3 0x31E JUMP JUMPDEST PUSH3 0x209 SWAP3 SWAP2 SWAP1 PUSH3 0x372 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x226 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP3 DUP5 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD SWAP1 SWAP2 POP PUSH32 0xF4E6903DDDF8034E1689A73259C54F96FF67410886872805530F383EDEDFEC23 SWAP1 PUSH3 0x28D SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH3 0x372 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0x2C6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH3 0x313 SWAP1 DUP4 SWAP1 PUSH3 0x35E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x31A2 DUP1 PUSH3 0x38D DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x33F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x357 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP INVALID PUSH2 0x1C0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x31A2 CODESIZE SUB DUP1 PUSH3 0x31A2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0xB61 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x5D JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xDDCA3F43 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 DUP6 AND SWAP2 PUSH4 0xDDCA3F43 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xF0 SWAP2 SWAP1 PUSH3 0xC76 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x12E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x143 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x169 SWAP2 SWAP1 PUSH3 0xB3C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1E2 SWAP2 SWAP1 PUSH3 0xB3C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x235 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x25B SWAP2 SWAP1 PUSH3 0xB99 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x26E DUP3 PUSH3 0xD89E8 PUSH3 0xE56 JUMP JUMPDEST PUSH3 0x27D SWAP1 PUSH3 0xD89E8 PUSH3 0xD98 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x28C DUP3 PUSH3 0xE92 JUMP JUMPDEST CALLER PUSH1 0x60 SWAP1 DUP2 SHL PUSH1 0x80 MSTORE DUP10 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0xE0 MSTORE PUSH1 0xE8 DUP10 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE8 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x2 DUP8 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP3 SHL PUSH2 0x1A0 MSTORE DUP7 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP3 SHL PUSH2 0x180 MSTORE DUP5 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP1 SHL PUSH2 0x160 MSTORE DUP8 DUP3 SHL DUP2 AND PUSH1 0xA0 MSTORE SWAP1 DUP7 SWAP1 SHL AND PUSH1 0xC0 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x95D89B41 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x95D89B41 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x332 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x347 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x371 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBBE JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x3C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x3EA SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH3 0x3FD SWAP3 SWAP2 SWAP1 PUSH3 0xCED JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x2 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x423 SWAP3 SWAP2 SWAP1 PUSH3 0xA79 JUMP JUMPDEST POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x473 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x49D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBBE JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x4D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x4EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x516 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH3 0x529 SWAP3 SWAP2 SWAP1 PUSH3 0xC9D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x54F SWAP3 SWAP2 SWAP1 PUSH3 0xA79 JUMP JUMPDEST POP PUSH3 0x566 DUP2 PUSH3 0x617 PUSH1 0x20 SHL PUSH3 0xE86 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH3 0x599 DUP3 PUSH3 0x617 PUSH1 0x20 SHL PUSH3 0xE86 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x60 SWAP1 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 ADD DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND DUP1 DUP4 MSTORE SWAP6 SWAP1 SWAP7 AND PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH3 0xFFFFFF SWAP8 SWAP1 SWAP8 AND SWAP6 ADD DUP6 SWAP1 MSTORE POP POP PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xB8 SHL SUB NOT AND SWAP1 SWAP3 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 MUL OR SWAP1 SSTORE POP PUSH3 0xF1A SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH3 0x630 JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH3 0x63F JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH3 0x63F SWAP1 PUSH3 0xEB8 JUMP JUMPDEST SWAP1 POP PUSH3 0x650 PUSH3 0xD89E7 NOT PUSH3 0xE92 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH3 0x68B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH3 0x6A1 JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH3 0x6B3 JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH3 0x6EB JUMPI PUSH1 0x80 PUSH3 0x6E6 DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH3 0x718 JUMPI PUSH1 0x80 PUSH3 0x713 DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH3 0x745 JUMPI PUSH1 0x80 PUSH3 0x740 DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH3 0x772 JUMPI PUSH1 0x80 PUSH3 0x76D DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH3 0x79F JUMPI PUSH1 0x80 PUSH3 0x79A DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH3 0x7CC JUMPI PUSH1 0x80 PUSH3 0x7C7 DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH3 0x7F9 JUMPI PUSH1 0x80 PUSH3 0x7F4 DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH3 0x827 JUMPI PUSH1 0x80 PUSH3 0x822 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH3 0x855 JUMPI PUSH1 0x80 PUSH3 0x850 DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH3 0x883 JUMPI PUSH1 0x80 PUSH3 0x87E DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH3 0x8B1 JUMPI PUSH1 0x80 PUSH3 0x8AC DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH3 0x8DF JUMPI PUSH1 0x80 PUSH3 0x8DA DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH3 0x90D JUMPI PUSH1 0x80 PUSH3 0x908 DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH3 0x93B JUMPI PUSH1 0x80 PUSH3 0x936 DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH3 0x969 JUMPI PUSH1 0x80 PUSH3 0x964 DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH3 0x998 JUMPI PUSH1 0x80 PUSH3 0x993 DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH3 0x9C6 JUMPI PUSH1 0x80 PUSH3 0x9C1 DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH3 0x9F3 JUMPI PUSH1 0x80 PUSH3 0x9EE DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH3 0xA1E JUMPI PUSH1 0x80 PUSH3 0xA19 DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH3 0xA3C JUMPI PUSH3 0xA39 DUP2 PUSH1 0x0 NOT PUSH3 0xD5F JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH3 0xA4D PUSH5 0x100000000 DUP3 PUSH3 0xE7B JUMP JUMPDEST ISZERO PUSH3 0xA5B JUMPI PUSH1 0x1 PUSH3 0xA5E JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH3 0xA71 SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH3 0xD44 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0xA87 SWAP1 PUSH3 0xE19 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0xAAB JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0xAF6 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0xAC6 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xAF6 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xAF6 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xAF6 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xAD9 JUMP JUMPDEST POP PUSH3 0xB04 SWAP3 SWAP2 POP PUSH3 0xB08 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0xB04 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0xB09 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0xB37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xB4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xB5A DUP3 PUSH3 0xB1F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0xB75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xB80 DUP4 PUSH3 0xB1F JUMP JUMPDEST SWAP2 POP PUSH3 0xB90 PUSH1 0x20 DUP5 ADD PUSH3 0xB1F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xBAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH3 0xB5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xBD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0xBE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH3 0xBFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0xC13 JUMPI PUSH3 0xC13 PUSH3 0xF04 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0xC3E JUMPI PUSH3 0xC3E PUSH3 0xF04 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP8 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0xC58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xC6B DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xC89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH3 0xB5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x6B4C502D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH3 0xCBE DUP2 PUSH1 0x4 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST PUSH1 0x2F PUSH1 0xF8 SHL PUSH1 0x4 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH3 0xCE1 DUP2 PUSH1 0x5 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST ADD PUSH1 0x5 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH11 0x25B2B2B819B9262810169 PUSH1 0xAD SHL DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH3 0xD15 DUP2 PUSH1 0xB DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST PUSH1 0x2F PUSH1 0xF8 SHL PUSH1 0xB SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH3 0xD38 DUP2 PUSH1 0xC DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST ADD PUSH1 0xC ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH3 0xD5A JUMPI PUSH3 0xD5A PUSH3 0xED8 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0xD71 JUMPI PUSH3 0xD71 PUSH3 0xEEE JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH3 0xD93 JUMPI PUSH3 0xD93 PUSH3 0xED8 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND DUP4 PUSH1 0x2 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH3 0x7FFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH3 0xDC2 JUMPI PUSH3 0xDC2 PUSH3 0xED8 JUMP JUMPDEST DUP2 PUSH3 0x7FFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH3 0xDDC JUMPI PUSH3 0xDDC PUSH3 0xED8 JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xE03 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xDE9 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0xE13 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0xE2E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0xE50 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x2 SIGNEXTEND DUP1 PUSH3 0xE6C JUMPI PUSH3 0xE6C PUSH3 0xEEE JUMP JUMPDEST DUP1 DUP4 PUSH1 0x2 SIGNEXTEND SMOD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0xE8D JUMPI PUSH3 0xE8D PUSH3 0xEEE JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH3 0xEAF JUMPI PUSH3 0xEAF PUSH3 0xED8 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH3 0xED1 JUMPI PUSH3 0xED1 PUSH3 0xED8 JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0xE8 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH1 0x60 SHR PUSH2 0x160 MLOAD PUSH1 0xE8 SHR PUSH2 0x180 MLOAD PUSH1 0xE8 SHR PUSH2 0x1A0 MLOAD PUSH1 0xE8 SHR PUSH2 0x2146 PUSH3 0x105C PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x420 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2BD ADD MSTORE DUP2 DUP2 PUSH2 0x5E6 ADD MSTORE DUP2 DUP2 PUSH2 0x97B ADD MSTORE DUP2 DUP2 PUSH2 0xAD2 ADD MSTORE DUP2 DUP2 PUSH2 0xCC9 ADD MSTORE DUP2 DUP2 PUSH2 0xDF3 ADD MSTORE PUSH2 0x1508 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2F7 ADD MSTORE DUP2 DUP2 PUSH2 0x5C5 ADD MSTORE DUP2 DUP2 PUSH2 0x950 ADD MSTORE DUP2 DUP2 PUSH2 0xAB0 ADD MSTORE DUP2 DUP2 PUSH2 0xCA8 ADD MSTORE DUP2 DUP2 PUSH2 0xDD1 ADD MSTORE PUSH2 0x14E6 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3D1 ADD MSTORE PUSH2 0x13FE ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x27C ADD MSTORE PUSH2 0x13DD ADD MSTORE PUSH1 0x0 PUSH2 0x4AC ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x221 ADD MSTORE DUP2 DUP2 PUSH2 0x595 ADD MSTORE DUP2 DUP2 PUSH2 0x9BF ADD MSTORE DUP2 DUP2 PUSH2 0xA81 ADD MSTORE DUP2 DUP2 PUSH2 0xB88 ADD MSTORE DUP2 DUP2 PUSH2 0xBDB ADD MSTORE DUP2 DUP2 PUSH2 0xC19 ADD MSTORE DUP2 DUP2 PUSH2 0xC78 ADD MSTORE DUP2 DUP2 PUSH2 0xD9E ADD MSTORE DUP2 DUP2 PUSH2 0x1340 ADD MSTORE PUSH2 0x14B5 ADD MSTORE PUSH1 0x0 PUSH2 0x447 ADD MSTORE PUSH1 0x0 PUSH2 0x1ED ADD MSTORE PUSH1 0x0 PUSH2 0x3AA ADD MSTORE PUSH2 0x2146 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x164 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x95D89B41 GT PUSH2 0xC9 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0xA3E6DC28 EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x37F JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0xC6275261 EQ PUSH2 0x3CC JUMPI DUP1 PUSH4 0xCF51148D EQ PUSH2 0x3F3 JUMPI DUP1 PUSH4 0xD0C93A7C EQ PUSH2 0x41B JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x442 JUMPI DUP1 PUSH4 0xD3487997 EQ PUSH2 0x469 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x4A7 JUMPI DUP1 PUSH4 0xE5225381 EQ PUSH2 0x4E2 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x4EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x169 JUMPI DUP1 PUSH4 0x9218E91 EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x1E8 JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x25A JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0x2EA28F5B EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x29E JUMPI DUP1 PUSH4 0x55B812A8 EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0x59C4F905 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x319 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x32C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x171 PUSH2 0x4FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x17E SWAP2 SWAP1 PUSH2 0x1F09 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x18F PUSH2 0x58B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x1D8 PUSH2 0x1D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A98 JUMP JUMPDEST PUSH2 0x6AC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x17E SWAP2 SWAP1 PUSH2 0x1E68 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x24C PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x262 PUSH2 0x718 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1D8 PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A57 JUMP JUMPDEST PUSH2 0x7A4 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x2A6 PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x2DF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x2 SWAP2 SWAP1 SWAP2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x2DF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x20F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x24C PUSH2 0x33A CALLDATASIZE PUSH1 0x4 PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x86D JUMP JUMPDEST PUSH2 0x367 PUSH2 0x362 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DB1 JUMP JUMPDEST PUSH2 0x87A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x1D8 PUSH2 0x38D CALLDATASIZE PUSH1 0x4 PUSH2 0x1A98 JUMP JUMPDEST PUSH2 0x8AA JUMP JUMPDEST PUSH2 0x262 PUSH2 0x3A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A01 JUMP JUMPDEST PUSH2 0x8C0 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x406 PUSH2 0x401 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BC8 JUMP JUMPDEST PUSH2 0x941 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x2DF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x262 PUSH2 0x477 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D32 JUMP JUMPDEST PUSH2 0xB6D JUMP JUMPDEST PUSH2 0x24C PUSH2 0x48A CALLDATASIZE PUSH1 0x4 PUSH2 0x1A1E JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4CE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0xFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x406 PUSH2 0xC45 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x20F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH2 0x50A SWAP1 PUSH2 0x2008 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x536 SWAP1 PUSH2 0x2008 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x583 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x558 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x583 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x566 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x514EA4BF ADDRESS PUSH32 0x0 PUSH32 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x617 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x64B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x663 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x677 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x69B SWAP2 SWAP1 PUSH2 0x1C12 JUMP JUMPDEST SWAP4 SWAP10 SWAP3 SWAP9 POP SWAP1 SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x707 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x743 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x79A SWAP2 PUSH2 0x1E68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP3 KECCAK256 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x7DE JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x854 JUMPI PUSH1 0x0 PUSH2 0x7EF DUP6 DUP4 PUSH2 0x1FC5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST PUSH2 0x85F DUP7 DUP7 DUP7 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH2 0x50A SWAP1 PUSH2 0x2008 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x888 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1338 JUMP JUMPDEST POP SWAP1 SWAP2 POP PUSH2 0x8A1 SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH2 0x15BF JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B7 CALLER DUP5 DUP5 PUSH2 0x129C JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x936 SWAP1 DUP4 SWAP1 PUSH2 0x1E68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA34123A7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH32 0x0 PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 SWAP1 SIGNEXTEND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP6 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xA34123A7 SWAP1 PUSH1 0x64 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA16 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA3A SWAP2 SWAP1 PUSH2 0x1D0E JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP DUP5 DUP3 LT DUP1 PUSH2 0xA4C JUMPI POP DUP4 DUP2 LT JUMPDEST ISZERO PUSH2 0xA6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x97C7F537 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9E3D67B PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x4F1EB3D8 SWAP1 PUSH2 0xAFE SWAP1 DUP7 SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1ECC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB2B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB4F SWAP2 SWAP1 PUSH2 0x1B99 JUMP JUMPDEST POP POP PUSH2 0xB64 CALLER DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x1637 JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB7B DUP3 DUP5 ADD DUP5 PUSH2 0x1ADF JUMP JUMPDEST SWAP1 POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xBC6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B602735 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 ISZERO PUSH2 0xC00 JUMPI DUP1 MLOAD MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0xC00 SWAP2 SWAP1 PUSH32 0x0 DUP9 PUSH2 0x16A7 JUMP JUMPDEST DUP4 ISZERO PUSH2 0xC3E JUMPI PUSH2 0xC3E DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD PUSH32 0x0 DUP8 PUSH2 0x16A7 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC73 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x514EA4BF ADDRESS PUSH32 0x0 PUSH32 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xCFA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD2E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD5A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD7E SWAP2 SWAP1 PUSH2 0x1C12 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x9E3D67B PUSH1 0xE3 SHL DUP2 MSTORE SWAP3 SWAP8 POP SWAP1 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP6 POP PUSH4 0x4F1EB3D8 SWAP5 POP PUSH2 0xE1F SWAP4 POP AND SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1ECC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE70 SWAP2 SWAP1 PUSH2 0x1B99 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 AND SWAP7 SWAP2 AND SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH2 0xE9D JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0xEAA JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0xEAA SWAP1 PUSH2 0x207A JUMP JUMPDEST SWAP1 POP PUSH2 0xEB9 PUSH3 0xD89E7 NOT PUSH2 0x2057 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH2 0xEF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH2 0xF07 JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH2 0xF19 JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH2 0xF4E JUMPI PUSH1 0x80 PUSH2 0xF49 DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH2 0xF78 JUMPI PUSH1 0x80 PUSH2 0xF73 DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH2 0xFA2 JUMPI PUSH1 0x80 PUSH2 0xF9D DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH2 0xFCC JUMPI PUSH1 0x80 PUSH2 0xFC7 DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH2 0xFF6 JUMPI PUSH1 0x80 PUSH2 0xFF1 DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH2 0x1020 JUMPI PUSH1 0x80 PUSH2 0x101B DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH2 0x104A JUMPI PUSH1 0x80 PUSH2 0x1045 DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH2 0x1075 JUMPI PUSH1 0x80 PUSH2 0x1070 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH2 0x10A0 JUMPI PUSH1 0x80 PUSH2 0x109B DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH2 0x10CB JUMPI PUSH1 0x80 PUSH2 0x10C6 DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH2 0x10F6 JUMPI PUSH1 0x80 PUSH2 0x10F1 DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH2 0x1121 JUMPI PUSH1 0x80 PUSH2 0x111C DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH2 0x114C JUMPI PUSH1 0x80 PUSH2 0x1147 DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH2 0x1177 JUMPI PUSH1 0x80 PUSH2 0x1172 DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH2 0x11A2 JUMPI PUSH1 0x80 PUSH2 0x119D DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH2 0x11CE JUMPI PUSH1 0x80 PUSH2 0x11C9 DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH2 0x11F9 JUMPI PUSH1 0x80 PUSH2 0x11F4 DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH2 0x1223 JUMPI PUSH1 0x80 PUSH2 0x121E DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH2 0x124B JUMPI PUSH1 0x80 PUSH2 0x1246 DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH2 0x1266 JUMPI PUSH2 0x1263 DUP2 PUSH1 0x0 NOT PUSH2 0x1F6A JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x1274 PUSH1 0x1 PUSH1 0x20 SHL DUP3 PUSH2 0x2043 JUMP JUMPDEST ISZERO PUSH2 0x1280 JUMPI PUSH1 0x1 PUSH2 0x1283 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x1294 SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH2 0x1F52 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x12C4 SWAP1 DUP5 SWAP1 PUSH2 0x1FC5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x12F1 SWAP1 DUP5 SWAP1 PUSH2 0x1F52 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x20F1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 PUSH1 0x40 MLOAD PUSH2 0x132B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1397 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13CF SWAP2 SWAP1 PUSH2 0x1C74 JUMP JUMPDEST POP POP POP POP POP POP SWAP1 POP PUSH2 0x1424 DUP2 PUSH32 0x0 PUSH32 0x0 DUP12 DUP12 PUSH2 0x16B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 DUP6 ADD DUP2 DUP2 MSTORE PUSH1 0x8 SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP1 DUP9 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV PUSH3 0xFFFFFF SWAP1 DUP2 AND PUSH1 0x80 DUP1 DUP11 ADD SWAP2 DUP3 MSTORE SWAP5 DUP10 MSTORE CALLER PUSH1 0x20 SWAP10 DUP11 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP10 DUP11 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP2 MLOAD DUP7 AND DUP9 DUP11 ADD MSTORE SWAP1 MLOAD AND SWAP1 DUP7 ADD MSTORE SWAP1 MLOAD DUP3 AND DUP5 DUP3 ADD MSTORE DUP5 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE SWAP2 DUP4 ADD SWAP4 DUP5 SWAP1 MSTORE PUSH4 0x3C8A7D8D PUSH1 0xE0 SHL SWAP1 SWAP4 MSTORE SWAP3 SWAP7 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP2 PUSH4 0x3C8A7D8D SWAP2 PUSH2 0x1533 SWAP2 ADDRESS SWAP2 PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 DUP12 SWAP2 SWAP1 PUSH1 0xA4 ADD PUSH2 0x1E7C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x154C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1560 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1584 SWAP2 SWAP1 PUSH2 0x1D0E JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP6 DUP4 LT DUP1 PUSH2 0x1596 JUMPI POP DUP5 DUP3 LT JUMPDEST ISZERO PUSH2 0x15B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x97C7F537 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x15D1 SWAP2 SWAP1 PUSH2 0x1F52 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x15FE SWAP1 DUP5 SWAP1 PUSH2 0x1F52 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x20F1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1649 SWAP2 SWAP1 PUSH2 0x1FC5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1676 SWAP1 DUP5 SWAP1 PUSH2 0x1FC5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x20F1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD PUSH2 0x162B JUMP JUMPDEST PUSH2 0x16B3 DUP5 DUP5 DUP5 DUP5 PUSH2 0x177B JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x16D9 JUMPI SWAP3 SWAP4 SWAP3 JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT PUSH2 0x1704 JUMPI PUSH2 0x16FD DUP6 DUP6 DUP6 PUSH2 0x1875 JUMP JUMPDEST SWAP1 POP PUSH2 0x8A1 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT ISZERO PUSH2 0x1766 JUMPI PUSH1 0x0 PUSH2 0x172B DUP8 DUP7 DUP7 PUSH2 0x1875 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x173A DUP8 DUP10 DUP7 PUSH2 0x18DF JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND LT PUSH2 0x175B JUMPI DUP1 PUSH2 0x175D JUMP JUMPDEST DUP2 JUMPDEST SWAP3 POP POP POP PUSH2 0x8A1 JUMP JUMPDEST PUSH2 0x1771 DUP6 DUP6 DUP5 PUSH2 0x18DF JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP1 DUP9 AND SWAP2 PUSH2 0x17DF SWAP2 SWAP1 PUSH2 0x1E4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x181C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1821 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO DUP1 PUSH2 0x184F JUMPI POP DUP1 MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x184F JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x184D SWAP2 SWAP1 PUSH2 0x1AC4 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x186D JUMPI PUSH1 0x40 MLOAD PUSH4 0x16369DAF PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x1895 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH1 0x0 PUSH2 0x18B8 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x1915 JUMP JUMPDEST SWAP1 POP PUSH2 0x8A1 PUSH2 0x18DA DUP5 DUP4 PUSH2 0x18CC DUP10 DUP10 PUSH2 0x1F9D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1915 JUMP JUMPDEST PUSH2 0x19C4 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x18FF JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH2 0x1294 PUSH2 0x18DA DUP4 PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x18CC DUP9 DUP9 PUSH2 0x1F9D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x194F JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x1944 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x866 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x195B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x1 DUP8 NOT DUP2 ADD DUP9 AND SWAP8 DUP9 SWAP1 DIV PUSH1 0x3 DUP2 MUL DUP4 XOR DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL SWAP1 DUP2 MUL SWAP1 SWAP3 SUB SWAP1 SWAP2 MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x19DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x19DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x19DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x866 DUP2 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1A3C DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1A4C DUP2 PUSH2 0x20C3 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1A6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1A77 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1A87 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1AAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1AB6 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1AD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x866 DUP3 PUSH2 0x19DF JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB PUSH1 0x80 DUP2 SLT ISZERO PUSH2 0x1AF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x1B22 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH1 0x60 DUP3 SLT ISZERO PUSH2 0x1B33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B3B PUSH2 0x1F1C JUMP JUMPDEST SWAP2 POP DUP4 CALLDATALOAD PUSH2 0x1B48 DUP2 PUSH2 0x20C3 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1B58 DUP2 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1B73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE SWAP1 DUP2 MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x1B8A DUP3 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1BAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x1BB7 DUP2 PUSH2 0x20DB JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1A4C DUP2 PUSH2 0x20DB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1BDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1BE9 DUP2 PUSH2 0x20DB JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x1C07 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1C2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD PUSH2 0x1C35 DUP2 PUSH2 0x20DB JUMP JUMPDEST DUP1 SWAP6 POP POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x1C55 DUP2 PUSH2 0x20DB JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1C66 DUP2 PUSH2 0x20DB JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1C8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1C9A DUP2 PUSH2 0x20C3 JUMP JUMPDEST DUP1 SWAP8 POP POP PUSH1 0x20 DUP9 ADD MLOAD DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH2 0x1CB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 POP PUSH2 0x1CC0 PUSH1 0x40 DUP10 ADD PUSH2 0x19EF JUMP JUMPDEST SWAP5 POP PUSH2 0x1CCE PUSH1 0x60 DUP10 ADD PUSH2 0x19EF JUMP JUMPDEST SWAP4 POP PUSH2 0x1CDC PUSH1 0x80 DUP10 ADD PUSH2 0x19EF JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1CF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH2 0x1D00 PUSH1 0xC0 DUP10 ADD PUSH2 0x19DF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1D48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x1D6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1D81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1D90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1DA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP POP PUSH1 0x20 ADD SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1DC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x1C66 DUP2 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1E08 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1FDC JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 SWAP1 SWAP4 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND DUP4 MSTORE PUSH1 0x2 SWAP2 DUP3 SIGNEXTEND PUSH1 0xE8 SWAP1 DUP2 SHL PUSH1 0x14 DUP6 ADD MSTORE SWAP2 SIGNEXTEND SWAP1 SHL PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x1A ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1E5E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1FDC JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH1 0x2 DUP6 DUP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE DUP5 SWAP1 SIGNEXTEND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x1EC1 SWAP1 DUP4 ADD DUP5 PUSH2 0x1DF0 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x2 SWAP4 DUP5 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE SWAP2 SWAP1 SWAP3 SIGNEXTEND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 AND PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x866 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1F4C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1F65 JUMPI PUSH2 0x1F65 PUSH2 0x2097 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1F79 JUMPI PUSH2 0x1F79 PUSH2 0x20AD JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1F98 JUMPI PUSH2 0x1F98 PUSH2 0x2097 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x1FBD JUMPI PUSH2 0x1FBD PUSH2 0x2097 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1FD7 JUMPI PUSH2 0x1FD7 PUSH2 0x2097 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1FF7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1FDF JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x16B3 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x201C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x203D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2052 JUMPI PUSH2 0x2052 PUSH2 0x20AD JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH2 0x2071 JUMPI PUSH2 0x2071 PUSH2 0x2097 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH2 0x2090 JUMPI PUSH2 0x2090 PUSH2 0x2097 JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x20D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x20D8 JUMPI PUSH1 0x0 DUP1 REVERT INVALID 0xDD CALLCODE MSTORE 0xAD SHL 0xE2 0xC8 SWAP12 PUSH10 0xC2B068FC378DAA952BA7 CALL PUSH4 0xC4A11628 CREATE2 GAS 0x4D CREATE2 0x23 0xB3 0xEF LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR PUSH15 0x789F293D3CDD0B53B0D393AE37177 CREATE2 XOR DUP4 GASLIMIT PUSH27 0x8F3566FA6F880833500464736F6C63430008070033A26469706673 PC 0x22 SLT KECCAK256 0xBC 0xC8 PUSH21 0x8A58050357F695D15EE19CE2CB684749F8D6B50F3A 0xBF EXTCODEHASH SWAP4 GAS AND PUSH15 0xD62A64736F6C634300080700330000 ",
              "sourceMap": "2458:555:21:-:0;;;2591:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2635:11;-1:-1:-1;;;;;357:25:28;;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;-1:-1:-1;;;;;422:24:28;;;;;;;;;;-1:-1:-1;2458:555:21;;14:290:84;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:84;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:84:o;:::-;2458:555:21;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@acceptGovernance_5327": {
                  "entryPoint": 277,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@createPairManager_4120": {
                  "entryPoint": 420,
                  "id": 4120,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pairManagers_4066": {
                  "entryPoint": null,
                  "id": 4066,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 666,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 812,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 862,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": {
                  "entryPoint": 882,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:819:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "84:216:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "130:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "139:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "142:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "132:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "132:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "132:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "105:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "114:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "101:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "101:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "126:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "97:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "97:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "94:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "155:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "181:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "168:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "168:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "159:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "254:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "263:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "266:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "256:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "256:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "256:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "213:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "224:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "239:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "244:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "235:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "235:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "248:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "231:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "231:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "220:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "220:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "210:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "210:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "203:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "203:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "200:70:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "279:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "289:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "279:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "50:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "61:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "73:6:84",
                            "type": ""
                          }
                        ],
                        "src": "14:286:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "406:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "416:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "428:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "439:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "424:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "424:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "416:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "458:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "473:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "489:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "494:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "485:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "485:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "498:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "481:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "481:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "469:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "469:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "451:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "451:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "451:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "375:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "386:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "397:4:84",
                            "type": ""
                          }
                        ],
                        "src": "305:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "642:175:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "652:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "664:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "675:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "660:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "660:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "652:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "687:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "705:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "710:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "701:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "701:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "714:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "697:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "697:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "691:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "732:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "747:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "755:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "743:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "743:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "725:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "725:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "725:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "779:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "790:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "775:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "775:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "799:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "807:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "795:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "795:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "768:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "768:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "768:43:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "603:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "614:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "622:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "633:4:84",
                            "type": ""
                          }
                        ],
                        "src": "513:304:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "60806040523480156200001157600080fd5b50600436106200006a5760003560e01c8063238efcbc146200006f5780635aa6e675146200007b578063869fb51414620000a75780639cd7bef014620000be578063ab033ea914620000ea578063f39c38a01462000101575b600080fd5b6200007962000115565b005b6000546200008f906001600160a01b031681565b6040516200009e91906200035e565b60405180910390f35b6200008f620000b83660046200032c565b620001a4565b6200008f620000cf3660046200032c565b6002602052600090815260409020546001600160a01b031681565b62000079620000fb3660046200032c565b6200029a565b6001546200008f906001600160a01b031681565b6001546001600160a01b031633146200014157604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916200019a916200035e565b60405180910390a1565b6001600160a01b0381811660009081526002602052604081205490911615620001df5760405162dc149f60e41b815260040160405180910390fd5b60005460405183916001600160a01b031690620001fc906200031e565b6200020992919062000372565b604051809103906000f08015801562000226573d6000803e3d6000fd5b506001600160a01b038381166000908152600260205260409081902080546001600160a01b03191692841692909217909155519091507ff4e6903dddf8034e1689a73259c54f96ff67410886872805530f383ededfec23906200028d908490849062000372565b60405180910390a1919050565b6000546001600160a01b03163314620002c6576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90620003139083906200035e565b60405180910390a150565b6131a2806200038d83390190565b6000602082840312156200033f57600080fd5b81356001600160a01b03811681146200035757600080fd5b9392505050565b6001600160a01b0391909116815260200190565b6001600160a01b039283168152911660208201526040019056fe6101c06040523480156200001257600080fd5b50604051620031a2380380620031a2833981016040819052620000359162000b61565b806001600160a01b0381166200005d5760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b039283161781556040805163ddca3f4360e01b81529051919285169163ddca3f4391600480820192602092909190829003018186803b158015620000b557600080fd5b505afa158015620000ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f0919062000c76565b90506000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200012e57600080fd5b505afa15801562000143573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000169919062000b3c565b90506000846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620001a757600080fd5b505afa158015620001bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e2919062000b3c565b90506000856001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022057600080fd5b505afa15801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025b919062000b99565b905060006200026e82620d89e862000e56565b6200027d90620d89e862000d98565b905060006200028c8262000e92565b33606090811b60805289811b6001600160601b031990811660e05260e889811b6001600160e81b03191661010052600287810b810b821b6101a05286810b810b821b6101805284810b900b901b6101605287821b811660a0529086901b1660c052604080516395d89b4160e01b815290519192506001600160a01b038716916395d89b4191600480820192600092909190829003018186803b1580156200033257600080fd5b505afa15801562000347573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000371919081019062000bbe565b846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620003ab57600080fd5b505afa158015620003c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003ea919081019062000bbe565b604051602001620003fd92919062000ced565b604051602081830303815290604052600290805190602001906200042392919062000a79565b50846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200045e57600080fd5b505afa15801562000473573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200049d919081019062000bbe565b846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620004d757600080fd5b505afa158015620004ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000516919081019062000bbe565b6040516020016200052992919062000c9d565b604051602081830303815290604052600390805190602001906200054f92919062000a79565b5062000566816200061760201b62000e861760201c565b6001600160a01b0316610120816001600160a01b031660601b8152505062000599826200061760201b62000e861760201c565b606090811b6001600160601b031916610140526040805191820181526001600160a01b03968716808352959096166020820181905262ffffff9790971695018590525050600780546001600160a01b03191690921790915550600880546001600160b81b031916909217600160a01b9091021790555062000f1a9050565b60008060008360020b1262000630578260020b6200063f565b8260020b6200063f9062000eb8565b905062000650620d89e71962000e92565b60020b8111156200068b5760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b600060018216620006a157600160801b620006b3565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615620006eb576080620006e6826ffff97272373d413259a46990580e213a62000d76565b901c90505b60048216156200071857608062000713826ffff2e50f5f656932ef12357cf3c7fdcc62000d76565b901c90505b60088216156200074557608062000740826fffe5caca7e10e4e61c3624eaa0941cd062000d76565b901c90505b6010821615620007725760806200076d826fffcb9843d60f6159c9db58835c92664462000d76565b901c90505b60208216156200079f5760806200079a826fff973b41fa98c081472e6896dfb254c062000d76565b901c90505b6040821615620007cc576080620007c7826fff2ea16466c96a3843ec78b326b5286162000d76565b901c90505b6080821615620007f9576080620007f4826ffe5dee046a99a2a811c461f1969c305362000d76565b901c90505b6101008216156200082757608062000822826ffcbe86c7900a88aedcffc83b479aa3a462000d76565b901c90505b6102008216156200085557608062000850826ff987a7253ac413176f2b074cf7815e5462000d76565b901c90505b610400821615620008835760806200087e826ff3392b0822b70005940c7a398e4b70f362000d76565b901c90505b610800821615620008b1576080620008ac826fe7159475a2c29b7443b29c7fa6e889d962000d76565b901c90505b611000821615620008df576080620008da826fd097f3bdfd2022b8845ad8f792aa582562000d76565b901c90505b6120008216156200090d57608062000908826fa9f746462d870fdf8a65dc1f90e061e562000d76565b901c90505b6140008216156200093b57608062000936826f70d869a156d2a1b890bb3df62baf32f762000d76565b901c90505b6180008216156200096957608062000964826f31be135f97d08fd981231505542fcfa662000d76565b901c90505b620100008216156200099857608062000993826f09aa508b5b7a84e1c677de54f3e99bc962000d76565b901c90505b62020000821615620009c6576080620009c1826e5d6af8dedb81196699c329225ee60462000d76565b901c90505b62040000821615620009f3576080620009ee826d2216e584f5fa1ea926041bedfe9862000d76565b901c90505b6208000082161562000a1e57608062000a19826b048a170391f7dc42444e8fa262000d76565b901c90505b60008460020b131562000a3c5762000a398160001962000d5f565b90505b62000a4d6401000000008262000e7b565b1562000a5b57600162000a5e565b60005b62000a719060ff16602083901c62000d44565b949350505050565b82805462000a879062000e19565b90600052602060002090601f01602090048101928262000aab576000855562000af6565b82601f1062000ac657805160ff191683800117855562000af6565b8280016001018555821562000af6579182015b8281111562000af657825182559160200191906001019062000ad9565b5062000b0492915062000b08565b5090565b5b8082111562000b04576000815560010162000b09565b80516001600160a01b038116811462000b3757600080fd5b919050565b60006020828403121562000b4f57600080fd5b62000b5a8262000b1f565b9392505050565b6000806040838503121562000b7557600080fd5b62000b808362000b1f565b915062000b906020840162000b1f565b90509250929050565b60006020828403121562000bac57600080fd5b81518060020b811462000b5a57600080fd5b60006020828403121562000bd157600080fd5b81516001600160401b038082111562000be957600080fd5b818401915084601f83011262000bfe57600080fd5b81518181111562000c135762000c1362000f04565b604051601f8201601f19908116603f0116810190838211818310171562000c3e5762000c3e62000f04565b8160405282815287602084870101111562000c5857600080fd5b62000c6b83602083016020880162000de6565b979650505050505050565b60006020828403121562000c8957600080fd5b815162ffffff8116811462000b5a57600080fd5b636b4c502d60e01b81526000835162000cbe81600485016020880162000de6565b602f60f81b600491840191820152835162000ce181600584016020880162000de6565b01600501949350505050565b6a025b2b2b819b926281016960ad1b81526000835162000d1581600b85016020880162000de6565b602f60f81b600b91840191820152835162000d3881600c84016020880162000de6565b01600c01949350505050565b6000821982111562000d5a5762000d5a62000ed8565b500190565b60008262000d715762000d7162000eee565b500490565b600081600019048311821515161562000d935762000d9362000ed8565b500290565b60008160020b8360020b6000811281627fffff190183128115161562000dc25762000dc262000ed8565b81627fffff01831381161562000ddc5762000ddc62000ed8565b5090039392505050565b60005b8381101562000e0357818101518382015260200162000de9565b8381111562000e13576000848401525b50505050565b600181811c9082168062000e2e57607f821691505b6020821081141562000e5057634e487b7160e01b600052602260045260246000fd5b50919050565b60008260020b8062000e6c5762000e6c62000eee565b808360020b0791505092915050565b60008262000e8d5762000e8d62000eee565b500690565b60008160020b627fffff1981141562000eaf5762000eaf62000ed8565b60000392915050565b6000600160ff1b82141562000ed15762000ed162000ed8565b5060000390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160601c6101405160601c6101605160e81c6101805160e81c6101a05160e81c6121466200105c60003960006104200152600081816102bd015281816105e60152818161097b01528181610ad201528181610cc901528181610df301526115080152600081816102f7015281816105c50152818161095001528181610ab001528181610ca801528181610dd101526114e60152600081816103d101526113fe01526000818161027c01526113dd015260006104ac01526000818161022101528181610595015281816109bf01528181610a8101528181610b8801528181610bdb01528181610c1901528181610c7801528181610d9e0152818161134001526114b501526000610447015260006101ed015260006103aa01526121466000f3fe608060405234801561001057600080fd5b50600436106101645760003560e01c806395d89b41116100c957806395d89b411461034c578063a3e6dc2814610354578063a9059cbb1461037f578063ab033ea914610392578063c45a0155146103a5578063c6275261146103cc578063cf51148d146103f3578063d0c93a7c1461041b578063d21220a714610442578063d348799714610469578063dd62ed3e1461047c578063ddca3f43146104a7578063e5225381146104e2578063f39c38a0146104ea57600080fd5b806306fdde031461016957806309218e9114610187578063095ea7b3146101c55780630dfe1681146101e857806316f0115b1461021c57806318160ddd14610243578063238efcbc1461025a57806323b872dd146102645780632ea28f5b14610277578063313ce5671461029e57806355b812a8146102b857806359c4f905146102f25780635aa6e6751461031957806370a082311461032c575b600080fd5b6101716104fd565b60405161017e9190611f09565b60405180910390f35b61018f61058b565b604080516001600160801b039687168152602081019590955284019290925283166060830152909116608082015260a00161017e565b6101d86101d3366004611a98565b6106ac565b604051901515815260200161017e565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b60405161017e9190611e68565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b61024c60045481565b60405190815260200161017e565b610262610718565b005b6101d8610272366004611a57565b6107a4565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b6102a6601281565b60405160ff909116815260200161017e565b6102df7f000000000000000000000000000000000000000000000000000000000000000081565b60405160029190910b815260200161017e565b6102df7f000000000000000000000000000000000000000000000000000000000000000081565b60005461020f906001600160a01b031681565b61024c61033a366004611a01565b60066020526000908152604090205481565b61017161086d565b610367610362366004611db1565b61087a565b6040516001600160801b03909116815260200161017e565b6101d861038d366004611a98565b6108aa565b6102626103a0366004611a01565b6108c0565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b610406610401366004611bc8565b610941565b6040805192835260208301919091520161017e565b6102df7f000000000000000000000000000000000000000000000000000000000000000081565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b610262610477366004611d32565b610b6d565b61024c61048a366004611a1e565b600560209081526000928352604080842090915290825290205481565b6104ce7f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff909116815260200161017e565b610406610c45565b60015461020f906001600160a01b031681565b6002805461050a90612008565b80601f016020809104026020016040519081016040528092919081815260200182805461053690612008565b80156105835780601f1061055857610100808354040283529160200191610583565b820191906000526020600020905b81548152906001019060200180831161056657829003601f168201915b505050505081565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf307f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060405160200161061793929190611e1c565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161064b91815260200190565b60a06040518083038186803b15801561066357600080fd5b505afa158015610677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069b9190611c12565b939992985090965094509092509050565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107079086815260200190565b60405180910390a350600192915050565b6001546001600160a01b0316331461074357604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161079a91611e68565b60405180910390a1565b6001600160a01b0383166000818152600560209081526040808320338085529252822054919290919082148015906107de57506000198114155b156108545760006107ef8583611fc5565b6001600160a01b038881166000818152600560209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61085f86868661129c565b6001925050505b9392505050565b6003805461050a90612008565b600061088886868686611338565b509091506108a19050826001600160801b0383166115bf565b95945050505050565b60006108b733848461129c565b50600192915050565b6000546001600160a01b031633146108eb576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610936908390611e68565b60405180910390a150565b60405163a34123a760e01b81527f0000000000000000000000000000000000000000000000000000000000000000600290810b60048301527f0000000000000000000000000000000000000000000000000000000000000000900b60248201526001600160801b038516604482015260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a34123a7906064016040805180830381600087803b158015610a0257600080fd5b505af1158015610a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3a9190611d0e565b909250905084821080610a4c57508381105b15610a6a576040516397c7f53760e01b815260040160405180910390fd5b6040516309e3d67b60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634f1eb3d890610afe9086907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401611ecc565b6040805180830381600087803b158015610b1757600080fd5b505af1158015610b2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4f9190611b99565b5050610b6433876001600160801b0316611637565b94509492505050565b6000610b7b82840184611adf565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bc657604051634b60273560e01b815260040160405180910390fd5b8415610c00578051516020820151610c0091907f0000000000000000000000000000000000000000000000000000000000000000886116a7565b8315610c3e57610c3e81600001516020015182602001517f0000000000000000000000000000000000000000000000000000000000000000876116a7565b5050505050565b6000805481906001600160a01b03163314610c73576040516354348f0360e01b815260040160405180910390fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf307f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000604051602001610cfa93929190611e1c565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401610d2e91815260200190565b60a06040518083038186803b158015610d4657600080fd5b505afa158015610d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7e9190611c12565b6000546040516309e3d67b60e31b81529297509095506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169550634f1eb3d89450610e1f935016907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401611ecc565b6040805180830381600087803b158015610e3857600080fd5b505af1158015610e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e709190611b99565b6001600160801b03918216969116945092505050565b60008060008360020b12610e9d578260020b610eaa565b8260020b610eaa9061207a565b9050610eb9620d89e719612057565b60020b811115610ef35760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b600060018216610f0757600160801b610f19565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615610f4e576080610f49826ffff97272373d413259a46990580e213a611f7e565b901c90505b6004821615610f78576080610f73826ffff2e50f5f656932ef12357cf3c7fdcc611f7e565b901c90505b6008821615610fa2576080610f9d826fffe5caca7e10e4e61c3624eaa0941cd0611f7e565b901c90505b6010821615610fcc576080610fc7826fffcb9843d60f6159c9db58835c926644611f7e565b901c90505b6020821615610ff6576080610ff1826fff973b41fa98c081472e6896dfb254c0611f7e565b901c90505b604082161561102057608061101b826fff2ea16466c96a3843ec78b326b52861611f7e565b901c90505b608082161561104a576080611045826ffe5dee046a99a2a811c461f1969c3053611f7e565b901c90505b610100821615611075576080611070826ffcbe86c7900a88aedcffc83b479aa3a4611f7e565b901c90505b6102008216156110a057608061109b826ff987a7253ac413176f2b074cf7815e54611f7e565b901c90505b6104008216156110cb5760806110c6826ff3392b0822b70005940c7a398e4b70f3611f7e565b901c90505b6108008216156110f65760806110f1826fe7159475a2c29b7443b29c7fa6e889d9611f7e565b901c90505b61100082161561112157608061111c826fd097f3bdfd2022b8845ad8f792aa5825611f7e565b901c90505b61200082161561114c576080611147826fa9f746462d870fdf8a65dc1f90e061e5611f7e565b901c90505b614000821615611177576080611172826f70d869a156d2a1b890bb3df62baf32f7611f7e565b901c90505b6180008216156111a257608061119d826f31be135f97d08fd981231505542fcfa6611f7e565b901c90505b620100008216156111ce5760806111c9826f09aa508b5b7a84e1c677de54f3e99bc9611f7e565b901c90505b620200008216156111f95760806111f4826e5d6af8dedb81196699c329225ee604611f7e565b901c90505b6204000082161561122357608061121e826d2216e584f5fa1ea926041bedfe98611f7e565b901c90505b6208000082161561124b576080611246826b048a170391f7dc42444e8fa2611f7e565b901c90505b60008460020b13156112665761126381600019611f6a565b90505b611274600160201b82612043565b15611280576001611283565b60005b6112949060ff16602083901c611f52565b949350505050565b6001600160a01b038316600090815260066020526040812080548392906112c4908490611fc5565b90915550506001600160a01b038216600090815260066020526040812080548392906112f1908490611f52565b92505081905550816001600160a01b0316836001600160a01b03166000805160206120f18339815191528360405161132b91815260200190565b60405180910390a3505050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561139757600080fd5b505afa1580156113ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cf9190611c74565b5050505050509050611424817f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008b8b6116b9565b6040805160a080820183526007546001600160a01b039081168385018181526008548084166060808801918252600160a01b90920462ffffff9081166080808a01918252948952336020998a019081528a51998a019690965291518616888a01529051169086015290518216848201528451808503909101815291830193849052633c8a7d8d60e01b9093529296507f000000000000000000000000000000000000000000000000000000000000000090911691633c8a7d8d916115339130917f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000918b919060a401611e7c565b6040805180830381600087803b15801561154c57600080fd5b505af1158015611560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115849190611d0e565b90935091508583108061159657508482105b156115b4576040516397c7f53760e01b815260040160405180910390fd5b509450945094915050565b80600460008282546115d19190611f52565b90915550506001600160a01b038216600090815260066020526040812080548392906115fe908490611f52565b90915550506040518181526001600160a01b038316906000906000805160206120f1833981519152906020015b60405180910390a35050565b80600460008282546116499190611fc5565b90915550506001600160a01b03821660009081526006602052604081208054839290611676908490611fc5565b90915550506040518181526000906001600160a01b038416906000805160206120f18339815191529060200161162b565b6116b38484848461177b565b50505050565b6000836001600160a01b0316856001600160a01b031611156116d9579293925b846001600160a01b0316866001600160a01b031611611704576116fd858585611875565b90506108a1565b836001600160a01b0316866001600160a01b0316101561176657600061172b878686611875565b9050600061173a8789866118df565b9050806001600160801b0316826001600160801b03161061175b578061175d565b815b925050506108a1565b6117718585846118df565b9695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916117df9190611e4c565b6000604051808303816000865af19150503d806000811461181c576040519150601f19603f3d011682016040523d82523d6000602084013e611821565b606091505b509150915081158061184f575080511580159061184f57508080602001905181019061184d9190611ac4565b155b1561186d576040516316369daf60e31b815260040160405180910390fd5b505050505050565b6000826001600160a01b0316846001600160a01b03161115611895579192915b60006118b8856001600160a01b0316856001600160a01b0316600160601b611915565b90506108a16118da84836118cc8989611f9d565b6001600160a01b0316611915565b6119c4565b6000826001600160a01b0316846001600160a01b031611156118ff579192915b6112946118da83600160601b6118cc8888611f9d565b60008080600019858709858702925082811083820303915050806000141561194f576000841161194457600080fd5b508290049050610866565b80841161195b57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b806001600160801b03811681146119da57600080fd5b919050565b805180151581146119da57600080fd5b805161ffff811681146119da57600080fd5b600060208284031215611a1357600080fd5b8135610866816120c3565b60008060408385031215611a3157600080fd5b8235611a3c816120c3565b91506020830135611a4c816120c3565b809150509250929050565b600080600060608486031215611a6c57600080fd5b8335611a77816120c3565b92506020840135611a87816120c3565b929592945050506040919091013590565b60008060408385031215611aab57600080fd5b8235611ab6816120c3565b946020939093013593505050565b600060208284031215611ad657600080fd5b610866826119df565b60008183036080811215611af257600080fd5b604051604081018181106001600160401b0382111715611b2257634e487b7160e01b600052604160045260246000fd5b6040526060821215611b3357600080fd5b611b3b611f1c565b91508335611b48816120c3565b82526020840135611b58816120c3565b6020830152604084013562ffffff81168114611b7357600080fd5b6040830152908152606083013590611b8a826120c3565b60208101919091529392505050565b60008060408385031215611bac57600080fd5b8251611bb7816120db565b6020840151909250611a4c816120db565b60008060008060808587031215611bde57600080fd5b8435611be9816120db565b935060208501359250604085013591506060850135611c07816120c3565b939692955090935050565b600080600080600060a08688031215611c2a57600080fd5b8551611c35816120db565b8095505060208601519350604086015192506060860151611c55816120db565b6080870151909250611c66816120db565b809150509295509295909350565b600080600080600080600060e0888a031215611c8f57600080fd5b8751611c9a816120c3565b8097505060208801518060020b8114611cb257600080fd5b9550611cc0604089016119ef565b9450611cce606089016119ef565b9350611cdc608089016119ef565b925060a088015160ff81168114611cf257600080fd5b9150611d0060c089016119df565b905092959891949750929550565b60008060408385031215611d2157600080fd5b505080516020909101519092909150565b60008060008060608587031215611d4857600080fd5b843593506020850135925060408501356001600160401b0380821115611d6d57600080fd5b818701915087601f830112611d8157600080fd5b813581811115611d9057600080fd5b886020828501011115611da257600080fd5b95989497505060200194505050565b600080600080600060a08688031215611dc957600080fd5b853594506020860135935060408601359250606086013591506080860135611c66816120c3565b60008151808452611e08816020860160208601611fdc565b601f01601f19169290920160200192915050565b60609390931b6001600160601b0319168352600291820b60e890811b6014850152910b901b6017820152601a0190565b60008251611e5e818460208701611fdc565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a060808201819052600090611ec190830184611df0565b979650505050505050565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6020815260006108666020830184611df0565b604051606081016001600160401b0381118282101715611f4c57634e487b7160e01b600052604160045260246000fd5b60405290565b60008219821115611f6557611f65612097565b500190565b600082611f7957611f796120ad565b500490565b6000816000190483118215151615611f9857611f98612097565b500290565b60006001600160a01b0383811690831681811015611fbd57611fbd612097565b039392505050565b600082821015611fd757611fd7612097565b500390565b60005b83811015611ff7578181015183820152602001611fdf565b838111156116b35750506000910152565b600181811c9082168061201c57607f821691505b6020821081141561203d57634e487b7160e01b600052602260045260246000fd5b50919050565b600082612052576120526120ad565b500690565b60008160020b627fffff1981141561207157612071612097565b60000392915050565b6000600160ff1b82141561209057612090612097565b5060000390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b03811681146120d857600080fd5b50565b6001600160801b03811681146120d857600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220176e0789f293d3cdd0b53b0d393ae37177f51883457a8f3566fa6f880833500464736f6c63430008070033a2646970667358221220bcc8748a58050357f695d15ee19ce2cb684749f8d6b50f3abf3f935a166ed62a64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH3 0x6A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x238EFCBC EQ PUSH3 0x6F JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH3 0x7B JUMPI DUP1 PUSH4 0x869FB514 EQ PUSH3 0xA7 JUMPI DUP1 PUSH4 0x9CD7BEF0 EQ PUSH3 0xBE JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH3 0xEA JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH3 0x101 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x79 PUSH3 0x115 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x8F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x9E SWAP2 SWAP1 PUSH3 0x35E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0x8F PUSH3 0xB8 CALLDATASIZE PUSH1 0x4 PUSH3 0x32C JUMP JUMPDEST PUSH3 0x1A4 JUMP JUMPDEST PUSH3 0x8F PUSH3 0xCF CALLDATASIZE PUSH1 0x4 PUSH3 0x32C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH3 0x79 PUSH3 0xFB CALLDATASIZE PUSH1 0x4 PUSH3 0x32C JUMP JUMPDEST PUSH3 0x29A JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH3 0x8F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0x141 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH3 0x19A SWAP2 PUSH3 0x35E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND ISZERO PUSH3 0x1DF JUMPI PUSH1 0x40 MLOAD PUSH3 0xDC149F PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH3 0x1FC SWAP1 PUSH3 0x31E JUMP JUMPDEST PUSH3 0x209 SWAP3 SWAP2 SWAP1 PUSH3 0x372 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x226 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP3 DUP5 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD SWAP1 SWAP2 POP PUSH32 0xF4E6903DDDF8034E1689A73259C54F96FF67410886872805530F383EDEDFEC23 SWAP1 PUSH3 0x28D SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH3 0x372 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0x2C6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH3 0x313 SWAP1 DUP4 SWAP1 PUSH3 0x35E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x31A2 DUP1 PUSH3 0x38D DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x33F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x357 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP INVALID PUSH2 0x1C0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x31A2 CODESIZE SUB DUP1 PUSH3 0x31A2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0xB61 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x5D JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xDDCA3F43 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 DUP6 AND SWAP2 PUSH4 0xDDCA3F43 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xF0 SWAP2 SWAP1 PUSH3 0xC76 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x12E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x143 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x169 SWAP2 SWAP1 PUSH3 0xB3C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1E2 SWAP2 SWAP1 PUSH3 0xB3C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x235 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x25B SWAP2 SWAP1 PUSH3 0xB99 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x26E DUP3 PUSH3 0xD89E8 PUSH3 0xE56 JUMP JUMPDEST PUSH3 0x27D SWAP1 PUSH3 0xD89E8 PUSH3 0xD98 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x28C DUP3 PUSH3 0xE92 JUMP JUMPDEST CALLER PUSH1 0x60 SWAP1 DUP2 SHL PUSH1 0x80 MSTORE DUP10 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0xE0 MSTORE PUSH1 0xE8 DUP10 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE8 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x2 DUP8 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP3 SHL PUSH2 0x1A0 MSTORE DUP7 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP3 SHL PUSH2 0x180 MSTORE DUP5 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP1 SHL PUSH2 0x160 MSTORE DUP8 DUP3 SHL DUP2 AND PUSH1 0xA0 MSTORE SWAP1 DUP7 SWAP1 SHL AND PUSH1 0xC0 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x95D89B41 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x95D89B41 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x332 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x347 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x371 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBBE JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x3C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x3EA SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH3 0x3FD SWAP3 SWAP2 SWAP1 PUSH3 0xCED JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x2 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x423 SWAP3 SWAP2 SWAP1 PUSH3 0xA79 JUMP JUMPDEST POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x473 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x49D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBBE JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x4D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x4EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x516 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH3 0x529 SWAP3 SWAP2 SWAP1 PUSH3 0xC9D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x54F SWAP3 SWAP2 SWAP1 PUSH3 0xA79 JUMP JUMPDEST POP PUSH3 0x566 DUP2 PUSH3 0x617 PUSH1 0x20 SHL PUSH3 0xE86 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH3 0x599 DUP3 PUSH3 0x617 PUSH1 0x20 SHL PUSH3 0xE86 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x60 SWAP1 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 ADD DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND DUP1 DUP4 MSTORE SWAP6 SWAP1 SWAP7 AND PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH3 0xFFFFFF SWAP8 SWAP1 SWAP8 AND SWAP6 ADD DUP6 SWAP1 MSTORE POP POP PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xB8 SHL SUB NOT AND SWAP1 SWAP3 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 MUL OR SWAP1 SSTORE POP PUSH3 0xF1A SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH3 0x630 JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH3 0x63F JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH3 0x63F SWAP1 PUSH3 0xEB8 JUMP JUMPDEST SWAP1 POP PUSH3 0x650 PUSH3 0xD89E7 NOT PUSH3 0xE92 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH3 0x68B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH3 0x6A1 JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH3 0x6B3 JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH3 0x6EB JUMPI PUSH1 0x80 PUSH3 0x6E6 DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH3 0x718 JUMPI PUSH1 0x80 PUSH3 0x713 DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH3 0x745 JUMPI PUSH1 0x80 PUSH3 0x740 DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH3 0x772 JUMPI PUSH1 0x80 PUSH3 0x76D DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH3 0x79F JUMPI PUSH1 0x80 PUSH3 0x79A DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH3 0x7CC JUMPI PUSH1 0x80 PUSH3 0x7C7 DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH3 0x7F9 JUMPI PUSH1 0x80 PUSH3 0x7F4 DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH3 0x827 JUMPI PUSH1 0x80 PUSH3 0x822 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH3 0x855 JUMPI PUSH1 0x80 PUSH3 0x850 DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH3 0x883 JUMPI PUSH1 0x80 PUSH3 0x87E DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH3 0x8B1 JUMPI PUSH1 0x80 PUSH3 0x8AC DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH3 0x8DF JUMPI PUSH1 0x80 PUSH3 0x8DA DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH3 0x90D JUMPI PUSH1 0x80 PUSH3 0x908 DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH3 0x93B JUMPI PUSH1 0x80 PUSH3 0x936 DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH3 0x969 JUMPI PUSH1 0x80 PUSH3 0x964 DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH3 0x998 JUMPI PUSH1 0x80 PUSH3 0x993 DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH3 0x9C6 JUMPI PUSH1 0x80 PUSH3 0x9C1 DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH3 0x9F3 JUMPI PUSH1 0x80 PUSH3 0x9EE DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH3 0xA1E JUMPI PUSH1 0x80 PUSH3 0xA19 DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH3 0xD76 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH3 0xA3C JUMPI PUSH3 0xA39 DUP2 PUSH1 0x0 NOT PUSH3 0xD5F JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH3 0xA4D PUSH5 0x100000000 DUP3 PUSH3 0xE7B JUMP JUMPDEST ISZERO PUSH3 0xA5B JUMPI PUSH1 0x1 PUSH3 0xA5E JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH3 0xA71 SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH3 0xD44 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0xA87 SWAP1 PUSH3 0xE19 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0xAAB JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0xAF6 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0xAC6 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xAF6 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xAF6 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xAF6 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xAD9 JUMP JUMPDEST POP PUSH3 0xB04 SWAP3 SWAP2 POP PUSH3 0xB08 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0xB04 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0xB09 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0xB37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xB4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xB5A DUP3 PUSH3 0xB1F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0xB75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xB80 DUP4 PUSH3 0xB1F JUMP JUMPDEST SWAP2 POP PUSH3 0xB90 PUSH1 0x20 DUP5 ADD PUSH3 0xB1F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xBAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH3 0xB5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xBD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0xBE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH3 0xBFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0xC13 JUMPI PUSH3 0xC13 PUSH3 0xF04 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0xC3E JUMPI PUSH3 0xC3E PUSH3 0xF04 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP8 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0xC58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xC6B DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xC89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH3 0xB5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x6B4C502D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH3 0xCBE DUP2 PUSH1 0x4 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST PUSH1 0x2F PUSH1 0xF8 SHL PUSH1 0x4 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH3 0xCE1 DUP2 PUSH1 0x5 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST ADD PUSH1 0x5 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH11 0x25B2B2B819B9262810169 PUSH1 0xAD SHL DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH3 0xD15 DUP2 PUSH1 0xB DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST PUSH1 0x2F PUSH1 0xF8 SHL PUSH1 0xB SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH3 0xD38 DUP2 PUSH1 0xC DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDE6 JUMP JUMPDEST ADD PUSH1 0xC ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH3 0xD5A JUMPI PUSH3 0xD5A PUSH3 0xED8 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0xD71 JUMPI PUSH3 0xD71 PUSH3 0xEEE JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH3 0xD93 JUMPI PUSH3 0xD93 PUSH3 0xED8 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND DUP4 PUSH1 0x2 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH3 0x7FFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH3 0xDC2 JUMPI PUSH3 0xDC2 PUSH3 0xED8 JUMP JUMPDEST DUP2 PUSH3 0x7FFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH3 0xDDC JUMPI PUSH3 0xDDC PUSH3 0xED8 JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xE03 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xDE9 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0xE13 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0xE2E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0xE50 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x2 SIGNEXTEND DUP1 PUSH3 0xE6C JUMPI PUSH3 0xE6C PUSH3 0xEEE JUMP JUMPDEST DUP1 DUP4 PUSH1 0x2 SIGNEXTEND SMOD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0xE8D JUMPI PUSH3 0xE8D PUSH3 0xEEE JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH3 0xEAF JUMPI PUSH3 0xEAF PUSH3 0xED8 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH3 0xED1 JUMPI PUSH3 0xED1 PUSH3 0xED8 JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0xE8 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH1 0x60 SHR PUSH2 0x160 MLOAD PUSH1 0xE8 SHR PUSH2 0x180 MLOAD PUSH1 0xE8 SHR PUSH2 0x1A0 MLOAD PUSH1 0xE8 SHR PUSH2 0x2146 PUSH3 0x105C PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x420 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2BD ADD MSTORE DUP2 DUP2 PUSH2 0x5E6 ADD MSTORE DUP2 DUP2 PUSH2 0x97B ADD MSTORE DUP2 DUP2 PUSH2 0xAD2 ADD MSTORE DUP2 DUP2 PUSH2 0xCC9 ADD MSTORE DUP2 DUP2 PUSH2 0xDF3 ADD MSTORE PUSH2 0x1508 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2F7 ADD MSTORE DUP2 DUP2 PUSH2 0x5C5 ADD MSTORE DUP2 DUP2 PUSH2 0x950 ADD MSTORE DUP2 DUP2 PUSH2 0xAB0 ADD MSTORE DUP2 DUP2 PUSH2 0xCA8 ADD MSTORE DUP2 DUP2 PUSH2 0xDD1 ADD MSTORE PUSH2 0x14E6 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3D1 ADD MSTORE PUSH2 0x13FE ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x27C ADD MSTORE PUSH2 0x13DD ADD MSTORE PUSH1 0x0 PUSH2 0x4AC ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x221 ADD MSTORE DUP2 DUP2 PUSH2 0x595 ADD MSTORE DUP2 DUP2 PUSH2 0x9BF ADD MSTORE DUP2 DUP2 PUSH2 0xA81 ADD MSTORE DUP2 DUP2 PUSH2 0xB88 ADD MSTORE DUP2 DUP2 PUSH2 0xBDB ADD MSTORE DUP2 DUP2 PUSH2 0xC19 ADD MSTORE DUP2 DUP2 PUSH2 0xC78 ADD MSTORE DUP2 DUP2 PUSH2 0xD9E ADD MSTORE DUP2 DUP2 PUSH2 0x1340 ADD MSTORE PUSH2 0x14B5 ADD MSTORE PUSH1 0x0 PUSH2 0x447 ADD MSTORE PUSH1 0x0 PUSH2 0x1ED ADD MSTORE PUSH1 0x0 PUSH2 0x3AA ADD MSTORE PUSH2 0x2146 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x164 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x95D89B41 GT PUSH2 0xC9 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0xA3E6DC28 EQ PUSH2 0x354 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x37F JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0xC6275261 EQ PUSH2 0x3CC JUMPI DUP1 PUSH4 0xCF51148D EQ PUSH2 0x3F3 JUMPI DUP1 PUSH4 0xD0C93A7C EQ PUSH2 0x41B JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x442 JUMPI DUP1 PUSH4 0xD3487997 EQ PUSH2 0x469 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x4A7 JUMPI DUP1 PUSH4 0xE5225381 EQ PUSH2 0x4E2 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x4EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x169 JUMPI DUP1 PUSH4 0x9218E91 EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x1E8 JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x25A JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0x2EA28F5B EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x29E JUMPI DUP1 PUSH4 0x55B812A8 EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0x59C4F905 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x319 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x32C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x171 PUSH2 0x4FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x17E SWAP2 SWAP1 PUSH2 0x1F09 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x18F PUSH2 0x58B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x1D8 PUSH2 0x1D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A98 JUMP JUMPDEST PUSH2 0x6AC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x17E SWAP2 SWAP1 PUSH2 0x1E68 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x24C PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x262 PUSH2 0x718 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1D8 PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A57 JUMP JUMPDEST PUSH2 0x7A4 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x2A6 PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x2DF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x2 SWAP2 SWAP1 SWAP2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x2DF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x20F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x24C PUSH2 0x33A CALLDATASIZE PUSH1 0x4 PUSH2 0x1A01 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x86D JUMP JUMPDEST PUSH2 0x367 PUSH2 0x362 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DB1 JUMP JUMPDEST PUSH2 0x87A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x1D8 PUSH2 0x38D CALLDATASIZE PUSH1 0x4 PUSH2 0x1A98 JUMP JUMPDEST PUSH2 0x8AA JUMP JUMPDEST PUSH2 0x262 PUSH2 0x3A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A01 JUMP JUMPDEST PUSH2 0x8C0 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x406 PUSH2 0x401 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BC8 JUMP JUMPDEST PUSH2 0x941 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x2DF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x20F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x262 PUSH2 0x477 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D32 JUMP JUMPDEST PUSH2 0xB6D JUMP JUMPDEST PUSH2 0x24C PUSH2 0x48A CALLDATASIZE PUSH1 0x4 PUSH2 0x1A1E JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4CE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0xFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17E JUMP JUMPDEST PUSH2 0x406 PUSH2 0xC45 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x20F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH2 0x50A SWAP1 PUSH2 0x2008 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x536 SWAP1 PUSH2 0x2008 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x583 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x558 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x583 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x566 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x514EA4BF ADDRESS PUSH32 0x0 PUSH32 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x617 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x64B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x663 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x677 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x69B SWAP2 SWAP1 PUSH2 0x1C12 JUMP JUMPDEST SWAP4 SWAP10 SWAP3 SWAP9 POP SWAP1 SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x707 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x743 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x79A SWAP2 PUSH2 0x1E68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP3 KECCAK256 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x7DE JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x854 JUMPI PUSH1 0x0 PUSH2 0x7EF DUP6 DUP4 PUSH2 0x1FC5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST PUSH2 0x85F DUP7 DUP7 DUP7 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH2 0x50A SWAP1 PUSH2 0x2008 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x888 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1338 JUMP JUMPDEST POP SWAP1 SWAP2 POP PUSH2 0x8A1 SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH2 0x15BF JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B7 CALLER DUP5 DUP5 PUSH2 0x129C JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x936 SWAP1 DUP4 SWAP1 PUSH2 0x1E68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA34123A7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH32 0x0 PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 SWAP1 SIGNEXTEND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP6 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xA34123A7 SWAP1 PUSH1 0x64 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA16 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA3A SWAP2 SWAP1 PUSH2 0x1D0E JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP DUP5 DUP3 LT DUP1 PUSH2 0xA4C JUMPI POP DUP4 DUP2 LT JUMPDEST ISZERO PUSH2 0xA6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x97C7F537 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9E3D67B PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x4F1EB3D8 SWAP1 PUSH2 0xAFE SWAP1 DUP7 SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1ECC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB2B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB4F SWAP2 SWAP1 PUSH2 0x1B99 JUMP JUMPDEST POP POP PUSH2 0xB64 CALLER DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x1637 JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB7B DUP3 DUP5 ADD DUP5 PUSH2 0x1ADF JUMP JUMPDEST SWAP1 POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xBC6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B602735 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 ISZERO PUSH2 0xC00 JUMPI DUP1 MLOAD MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0xC00 SWAP2 SWAP1 PUSH32 0x0 DUP9 PUSH2 0x16A7 JUMP JUMPDEST DUP4 ISZERO PUSH2 0xC3E JUMPI PUSH2 0xC3E DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD PUSH32 0x0 DUP8 PUSH2 0x16A7 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC73 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x514EA4BF ADDRESS PUSH32 0x0 PUSH32 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xCFA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD2E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD5A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD7E SWAP2 SWAP1 PUSH2 0x1C12 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x9E3D67B PUSH1 0xE3 SHL DUP2 MSTORE SWAP3 SWAP8 POP SWAP1 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP6 POP PUSH4 0x4F1EB3D8 SWAP5 POP PUSH2 0xE1F SWAP4 POP AND SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1ECC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE70 SWAP2 SWAP1 PUSH2 0x1B99 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 AND SWAP7 SWAP2 AND SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH2 0xE9D JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0xEAA JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0xEAA SWAP1 PUSH2 0x207A JUMP JUMPDEST SWAP1 POP PUSH2 0xEB9 PUSH3 0xD89E7 NOT PUSH2 0x2057 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH2 0xEF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH2 0xF07 JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH2 0xF19 JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH2 0xF4E JUMPI PUSH1 0x80 PUSH2 0xF49 DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH2 0xF78 JUMPI PUSH1 0x80 PUSH2 0xF73 DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH2 0xFA2 JUMPI PUSH1 0x80 PUSH2 0xF9D DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH2 0xFCC JUMPI PUSH1 0x80 PUSH2 0xFC7 DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH2 0xFF6 JUMPI PUSH1 0x80 PUSH2 0xFF1 DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH2 0x1020 JUMPI PUSH1 0x80 PUSH2 0x101B DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH2 0x104A JUMPI PUSH1 0x80 PUSH2 0x1045 DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH2 0x1075 JUMPI PUSH1 0x80 PUSH2 0x1070 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH2 0x10A0 JUMPI PUSH1 0x80 PUSH2 0x109B DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH2 0x10CB JUMPI PUSH1 0x80 PUSH2 0x10C6 DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH2 0x10F6 JUMPI PUSH1 0x80 PUSH2 0x10F1 DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH2 0x1121 JUMPI PUSH1 0x80 PUSH2 0x111C DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH2 0x114C JUMPI PUSH1 0x80 PUSH2 0x1147 DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH2 0x1177 JUMPI PUSH1 0x80 PUSH2 0x1172 DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH2 0x11A2 JUMPI PUSH1 0x80 PUSH2 0x119D DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH2 0x11CE JUMPI PUSH1 0x80 PUSH2 0x11C9 DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH2 0x11F9 JUMPI PUSH1 0x80 PUSH2 0x11F4 DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH2 0x1223 JUMPI PUSH1 0x80 PUSH2 0x121E DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH2 0x124B JUMPI PUSH1 0x80 PUSH2 0x1246 DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH2 0x1F7E JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH2 0x1266 JUMPI PUSH2 0x1263 DUP2 PUSH1 0x0 NOT PUSH2 0x1F6A JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x1274 PUSH1 0x1 PUSH1 0x20 SHL DUP3 PUSH2 0x2043 JUMP JUMPDEST ISZERO PUSH2 0x1280 JUMPI PUSH1 0x1 PUSH2 0x1283 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x1294 SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH2 0x1F52 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x12C4 SWAP1 DUP5 SWAP1 PUSH2 0x1FC5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x12F1 SWAP1 DUP5 SWAP1 PUSH2 0x1F52 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x20F1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 PUSH1 0x40 MLOAD PUSH2 0x132B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1397 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13CF SWAP2 SWAP1 PUSH2 0x1C74 JUMP JUMPDEST POP POP POP POP POP POP SWAP1 POP PUSH2 0x1424 DUP2 PUSH32 0x0 PUSH32 0x0 DUP12 DUP12 PUSH2 0x16B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 DUP6 ADD DUP2 DUP2 MSTORE PUSH1 0x8 SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP1 DUP9 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV PUSH3 0xFFFFFF SWAP1 DUP2 AND PUSH1 0x80 DUP1 DUP11 ADD SWAP2 DUP3 MSTORE SWAP5 DUP10 MSTORE CALLER PUSH1 0x20 SWAP10 DUP11 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP10 DUP11 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP2 MLOAD DUP7 AND DUP9 DUP11 ADD MSTORE SWAP1 MLOAD AND SWAP1 DUP7 ADD MSTORE SWAP1 MLOAD DUP3 AND DUP5 DUP3 ADD MSTORE DUP5 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE SWAP2 DUP4 ADD SWAP4 DUP5 SWAP1 MSTORE PUSH4 0x3C8A7D8D PUSH1 0xE0 SHL SWAP1 SWAP4 MSTORE SWAP3 SWAP7 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP2 PUSH4 0x3C8A7D8D SWAP2 PUSH2 0x1533 SWAP2 ADDRESS SWAP2 PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 DUP12 SWAP2 SWAP1 PUSH1 0xA4 ADD PUSH2 0x1E7C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x154C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1560 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1584 SWAP2 SWAP1 PUSH2 0x1D0E JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP6 DUP4 LT DUP1 PUSH2 0x1596 JUMPI POP DUP5 DUP3 LT JUMPDEST ISZERO PUSH2 0x15B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x97C7F537 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x15D1 SWAP2 SWAP1 PUSH2 0x1F52 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x15FE SWAP1 DUP5 SWAP1 PUSH2 0x1F52 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x20F1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1649 SWAP2 SWAP1 PUSH2 0x1FC5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1676 SWAP1 DUP5 SWAP1 PUSH2 0x1FC5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x20F1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD PUSH2 0x162B JUMP JUMPDEST PUSH2 0x16B3 DUP5 DUP5 DUP5 DUP5 PUSH2 0x177B JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x16D9 JUMPI SWAP3 SWAP4 SWAP3 JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT PUSH2 0x1704 JUMPI PUSH2 0x16FD DUP6 DUP6 DUP6 PUSH2 0x1875 JUMP JUMPDEST SWAP1 POP PUSH2 0x8A1 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT ISZERO PUSH2 0x1766 JUMPI PUSH1 0x0 PUSH2 0x172B DUP8 DUP7 DUP7 PUSH2 0x1875 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x173A DUP8 DUP10 DUP7 PUSH2 0x18DF JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND LT PUSH2 0x175B JUMPI DUP1 PUSH2 0x175D JUMP JUMPDEST DUP2 JUMPDEST SWAP3 POP POP POP PUSH2 0x8A1 JUMP JUMPDEST PUSH2 0x1771 DUP6 DUP6 DUP5 PUSH2 0x18DF JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP1 DUP9 AND SWAP2 PUSH2 0x17DF SWAP2 SWAP1 PUSH2 0x1E4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x181C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1821 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO DUP1 PUSH2 0x184F JUMPI POP DUP1 MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x184F JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x184D SWAP2 SWAP1 PUSH2 0x1AC4 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x186D JUMPI PUSH1 0x40 MLOAD PUSH4 0x16369DAF PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x1895 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH1 0x0 PUSH2 0x18B8 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x1915 JUMP JUMPDEST SWAP1 POP PUSH2 0x8A1 PUSH2 0x18DA DUP5 DUP4 PUSH2 0x18CC DUP10 DUP10 PUSH2 0x1F9D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1915 JUMP JUMPDEST PUSH2 0x19C4 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x18FF JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH2 0x1294 PUSH2 0x18DA DUP4 PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x18CC DUP9 DUP9 PUSH2 0x1F9D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x194F JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x1944 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x866 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x195B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x1 DUP8 NOT DUP2 ADD DUP9 AND SWAP8 DUP9 SWAP1 DIV PUSH1 0x3 DUP2 MUL DUP4 XOR DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL SWAP1 DUP2 MUL SWAP1 SWAP3 SUB SWAP1 SWAP2 MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x19DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x19DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x19DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x866 DUP2 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1A3C DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1A4C DUP2 PUSH2 0x20C3 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1A6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1A77 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1A87 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1AAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1AB6 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1AD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x866 DUP3 PUSH2 0x19DF JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB PUSH1 0x80 DUP2 SLT ISZERO PUSH2 0x1AF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x1B22 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH1 0x60 DUP3 SLT ISZERO PUSH2 0x1B33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B3B PUSH2 0x1F1C JUMP JUMPDEST SWAP2 POP DUP4 CALLDATALOAD PUSH2 0x1B48 DUP2 PUSH2 0x20C3 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1B58 DUP2 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1B73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE SWAP1 DUP2 MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x1B8A DUP3 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1BAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x1BB7 DUP2 PUSH2 0x20DB JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1A4C DUP2 PUSH2 0x20DB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1BDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1BE9 DUP2 PUSH2 0x20DB JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x1C07 DUP2 PUSH2 0x20C3 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1C2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD PUSH2 0x1C35 DUP2 PUSH2 0x20DB JUMP JUMPDEST DUP1 SWAP6 POP POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x1C55 DUP2 PUSH2 0x20DB JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1C66 DUP2 PUSH2 0x20DB JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1C8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1C9A DUP2 PUSH2 0x20C3 JUMP JUMPDEST DUP1 SWAP8 POP POP PUSH1 0x20 DUP9 ADD MLOAD DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH2 0x1CB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 POP PUSH2 0x1CC0 PUSH1 0x40 DUP10 ADD PUSH2 0x19EF JUMP JUMPDEST SWAP5 POP PUSH2 0x1CCE PUSH1 0x60 DUP10 ADD PUSH2 0x19EF JUMP JUMPDEST SWAP4 POP PUSH2 0x1CDC PUSH1 0x80 DUP10 ADD PUSH2 0x19EF JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1CF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH2 0x1D00 PUSH1 0xC0 DUP10 ADD PUSH2 0x19DF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1D48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x1D6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1D81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1D90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1DA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP POP PUSH1 0x20 ADD SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1DC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x1C66 DUP2 PUSH2 0x20C3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1E08 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1FDC JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 SWAP1 SWAP4 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND DUP4 MSTORE PUSH1 0x2 SWAP2 DUP3 SIGNEXTEND PUSH1 0xE8 SWAP1 DUP2 SHL PUSH1 0x14 DUP6 ADD MSTORE SWAP2 SIGNEXTEND SWAP1 SHL PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x1A ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1E5E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1FDC JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH1 0x2 DUP6 DUP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE DUP5 SWAP1 SIGNEXTEND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x1EC1 SWAP1 DUP4 ADD DUP5 PUSH2 0x1DF0 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x2 SWAP4 DUP5 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE SWAP2 SWAP1 SWAP3 SIGNEXTEND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 AND PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x866 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1F4C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1F65 JUMPI PUSH2 0x1F65 PUSH2 0x2097 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1F79 JUMPI PUSH2 0x1F79 PUSH2 0x20AD JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1F98 JUMPI PUSH2 0x1F98 PUSH2 0x2097 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x1FBD JUMPI PUSH2 0x1FBD PUSH2 0x2097 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1FD7 JUMPI PUSH2 0x1FD7 PUSH2 0x2097 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1FF7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1FDF JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x16B3 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x201C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x203D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2052 JUMPI PUSH2 0x2052 PUSH2 0x20AD JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH2 0x2071 JUMPI PUSH2 0x2071 PUSH2 0x2097 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH2 0x2090 JUMPI PUSH2 0x2090 PUSH2 0x2097 JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x20D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x20D8 JUMPI PUSH1 0x0 DUP1 REVERT INVALID 0xDD CALLCODE MSTORE 0xAD SHL 0xE2 0xC8 SWAP12 PUSH10 0xC2B068FC378DAA952BA7 CALL PUSH4 0xC4A11628 CREATE2 GAS 0x4D CREATE2 0x23 0xB3 0xEF LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR PUSH15 0x789F293D3CDD0B53B0D393AE37177 CREATE2 XOR DUP4 GASLIMIT PUSH27 0x8F3566FA6F880833500464736F6C63430008070033A26469706673 PC 0x22 SLT KECCAK256 0xBC 0xC8 PUSH21 0x8A58050357F695D15EE19CE2CB684749F8D6B50F3A 0xBF EXTCODEHASH SWAP4 GAS AND PUSH15 0xD62A64736F6C634300080700330000 ",
              "sourceMap": "2458:555:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;:::-;;199:34;;;;;-1:-1:-1;;;;;199:34:28;;;;;;;;;;:::i;:::-;;;;;;;;2691:320:21;;;;;;:::i;:::-;;:::i;2530:56::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2530:56:21;;;485:161:28;;;;;;:::i;:::-;;:::i;268:41::-;;;;;-1:-1:-1;;;;;268:41:28;;;680:175;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;::::1;754:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;2691:320:21:-;-1:-1:-1;;;;;2792:19:21;;;2760:20;2792:19;;;:12;:19;;;;;;2760:20;;2792:19;:33;2788:66;;2834:20;;-1:-1:-1;;;2834:20:21;;;;;;;;;;;2788:66;2911:10;;2883:39;;2904:5;;-1:-1:-1;;;;;2911:10:21;;2883:39;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2929:19:21;;;;;;;:12;:19;;;;;;;:34;;-1:-1:-1;;;;;;2929:34:21;;;;;;;;;;;2974:32;2929:34;;-1:-1:-1;2974:32:21;;;;2929:19;;:34;;2974:32;:::i;:::-;;;;;;;;2691:320;;;:::o;485:161:28:-;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;:::-;;;;;;;;485:161:::0;:::o;-1:-1:-1:-;;;;;;;;:::o;14:286:84:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:84;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:84:o;305:203::-;-1:-1:-1;;;;;469:32:84;;;;451:51;;439:2;424:18;;305:203::o;513:304::-;-1:-1:-1;;;;;743:15:84;;;725:34;;795:15;;790:2;775:18;;768:43;675:2;660:18;;513:304::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "2733600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "51860",
                "createPairManager(address)": "infinite",
                "governance()": "2361",
                "pairManagers(address)": "2591",
                "pendingGovernance()": "2449",
                "setGovernance(address)": "27846"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "createPairManager(address)": "869fb514",
              "governance()": "5aa6e675",
              "pairManagers(address)": "9cd7bef0",
              "pendingGovernance()": "f39c38a0",
              "setGovernance(address)": "ab033ea9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pairManager\",\"type\":\"address\"}],\"name\":\"PairCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"createPairManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_pairManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pairManagers\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"createPairManager(address)\":{\"params\":{\"_pool\":\"The address of the Uniswap pool the pair manager will be based of\"},\"returns\":{\"_pairManager\":\"The address of the just-created pair manager\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}}},\"stateVariables\":{\"pairManagers\":{\"params\":{\"_pool\":\"The address of the Uniswap pool\"},\"return\":\"_pairManager The address of the corresponding pair manager\",\"returns\":{\"_0\":\"_pairManager The address of the corresponding pair manager\"}}},\"title\":\"Factory of Pair Managers\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"notice\":\"Throws an error if the pair manager is already initialized\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyOwner()\":[{\"notice\":\"Throws an error if the caller is not the owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}]},\"events\":{\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"PairCreated(address,address)\":{\"notice\":\"Emitted when a new pair manager is created\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"createPairManager(address)\":{\"notice\":\"Creates a new pair manager based on the address of a Uniswap pool         For example, the uniswap address of DAI-WETH, will create the Keep3r/DAI-WETH pool\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"pairManagers(address)\":{\"notice\":\"Maps the address of a Uniswap pool, to the address of the corresponding PairManager         For example, the uniswap address of DAI-WETH, will return the Keep3r/DAI-WETH pair manager address\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"}},\"notice\":\"This contract creates new pair managers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/UniV3PairManagerFactory.sol\":\"UniV3PairManagerFactory\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `recipient` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(_msgSender(), recipient, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        _approve(_msgSender(), spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` and `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``sender``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        _transfer(sender, recipient, amount);\\n\\n        uint256 currentAllowance = _allowances[sender][_msgSender()];\\n        require(currentAllowance >= amount, \\\"ERC20: transfer amount exceeds allowance\\\");\\n        unchecked {\\n            _approve(sender, _msgSender(), currentAllowance - amount);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        uint256 currentAllowance = _allowances[_msgSender()][spender];\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(_msgSender(), spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `sender` to `recipient`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` cannot be the zero address.\\n     * - `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal virtual {\\n        require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(sender, recipient, amount);\\n\\n        uint256 senderBalance = _balances[sender];\\n        require(senderBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[sender] = senderBalance - amount;\\n        }\\n        _balances[recipient] += amount;\\n\\n        emit Transfer(sender, recipient, amount);\\n\\n        _afterTokenTransfer(sender, recipient, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        _balances[account] += amount;\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n        }\\n        _totalSupply -= amount;\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n}\\n\",\"keccak256\":\"0xb03df8481a954604ad0c9125680893b2e3f7ff770fe470e38b89ac61b84e8072\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\"},\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\nimport './pool/IUniswapV3PoolImmutables.sol';\\nimport './pool/IUniswapV3PoolState.sol';\\nimport './pool/IUniswapV3PoolDerivedState.sol';\\nimport './pool/IUniswapV3PoolActions.sol';\\nimport './pool/IUniswapV3PoolOwnerActions.sol';\\nimport './pool/IUniswapV3PoolEvents.sol';\\n\\n/// @title The interface for a Uniswap V3 Pool\\n/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform\\n/// to the ERC20 specification\\n/// @dev The pool interface is broken up into many smaller pieces\\ninterface IUniswapV3Pool is\\n    IUniswapV3PoolImmutables,\\n    IUniswapV3PoolState,\\n    IUniswapV3PoolDerivedState,\\n    IUniswapV3PoolActions,\\n    IUniswapV3PoolOwnerActions,\\n    IUniswapV3PoolEvents\\n{\\n\\n}\\n\",\"keccak256\":\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissionless pool actions\\n/// @notice Contains pool methods that can be called by anyone\\ninterface IUniswapV3PoolActions {\\n    /// @notice Sets the initial price for the pool\\n    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\\n    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96\\n    function initialize(uint160 sqrtPriceX96) external;\\n\\n    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback\\n    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\\n    /// on tickLower, tickUpper, the amount of liquidity, and the current price.\\n    /// @param recipient The address for which the liquidity will be created\\n    /// @param tickLower The lower tick of the position in which to add liquidity\\n    /// @param tickUpper The upper tick of the position in which to add liquidity\\n    /// @param amount The amount of liquidity to mint\\n    /// @param data Any data that should be passed through to the callback\\n    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    function mint(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount,\\n        bytes calldata data\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Collects tokens owed to a position\\n    /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\\n    /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\\n    /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\\n    /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\\n    /// @param recipient The address which should receive the fees collected\\n    /// @param tickLower The lower tick of the position for which to collect fees\\n    /// @param tickUpper The upper tick of the position for which to collect fees\\n    /// @param amount0Requested How much token0 should be withdrawn from the fees owed\\n    /// @param amount1Requested How much token1 should be withdrawn from the fees owed\\n    /// @return amount0 The amount of fees collected in token0\\n    /// @return amount1 The amount of fees collected in token1\\n    function collect(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n\\n    /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\\n    /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\\n    /// @dev Fees must be collected separately via a call to #collect\\n    /// @param tickLower The lower tick of the position for which to burn liquidity\\n    /// @param tickUpper The upper tick of the position for which to burn liquidity\\n    /// @param amount How much liquidity to burn\\n    /// @return amount0 The amount of token0 sent to the recipient\\n    /// @return amount1 The amount of token1 sent to the recipient\\n    function burn(\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Swap token0 for token1, or token1 for token0\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\\n    /// @param recipient The address to receive the output of the swap\\n    /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\\n    /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\\n    /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\\n    /// value after the swap. If one for zero, the price cannot be greater than this value after the swap\\n    /// @param data Any data to be passed through to the callback\\n    /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\\n    /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive\\n    function swap(\\n        address recipient,\\n        bool zeroForOne,\\n        int256 amountSpecified,\\n        uint160 sqrtPriceLimitX96,\\n        bytes calldata data\\n    ) external returns (int256 amount0, int256 amount1);\\n\\n    /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback\\n    /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\\n    /// with 0 amount{0,1} and sending the donation amount(s) from the callback\\n    /// @param recipient The address which will receive the token0 and token1 amounts\\n    /// @param amount0 The amount of token0 to send\\n    /// @param amount1 The amount of token1 to send\\n    /// @param data Any data to be passed through to the callback\\n    function flash(\\n        address recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        bytes calldata data\\n    ) external;\\n\\n    /// @notice Increase the maximum number of price and liquidity observations that this pool will store\\n    /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\\n    /// the input observationCardinalityNext.\\n    /// @param observationCardinalityNext The desired minimum number of observations for the pool to store\\n    function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;\\n}\\n\",\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that is not stored\\n/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the\\n/// blockchain. The functions here may have variable gas costs.\\ninterface IUniswapV3PoolDerivedState {\\n    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\\n    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\\n    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\\n    /// you must call it with secondsAgos = [3600, 0].\\n    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\\n    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\\n    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\\n    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\\n    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\\n    /// timestamp\\n    function observe(uint32[] calldata secondsAgos)\\n        external\\n        view\\n        returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\\n\\n    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\\n    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\\n    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\\n    /// snapshot is taken and the second snapshot is taken.\\n    /// @param tickLower The lower tick of the range\\n    /// @param tickUpper The upper tick of the range\\n    /// @return tickCumulativeInside The snapshot of the tick accumulator for the range\\n    /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\\n    /// @return secondsInside The snapshot of seconds per liquidity for the range\\n    function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)\\n        external\\n        view\\n        returns (\\n            int56 tickCumulativeInside,\\n            uint160 secondsPerLiquidityInsideX128,\\n            uint32 secondsInside\\n        );\\n}\\n\",\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Events emitted by a pool\\n/// @notice Contains all events emitted by the pool\\ninterface IUniswapV3PoolEvents {\\n    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool\\n    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\\n    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\\n    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\\n    event Initialize(uint160 sqrtPriceX96, int24 tick);\\n\\n    /// @notice Emitted when liquidity is minted for a given position\\n    /// @param sender The address that minted the liquidity\\n    /// @param owner The owner of the position and recipient of any minted liquidity\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity minted to the position range\\n    /// @param amount0 How much token0 was required for the minted liquidity\\n    /// @param amount1 How much token1 was required for the minted liquidity\\n    event Mint(\\n        address sender,\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted when fees are collected by the owner of a position\\n    /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\\n    /// @param owner The owner of the position for which fees are collected\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount0 The amount of token0 fees collected\\n    /// @param amount1 The amount of token1 fees collected\\n    event Collect(\\n        address indexed owner,\\n        address recipient,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount0,\\n        uint128 amount1\\n    );\\n\\n    /// @notice Emitted when a position's liquidity is removed\\n    /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\\n    /// @param owner The owner of the position for which liquidity is removed\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity to remove\\n    /// @param amount0 The amount of token0 withdrawn\\n    /// @param amount1 The amount of token1 withdrawn\\n    event Burn(\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted by the pool for any swaps between token0 and token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the output of the swap\\n    /// @param amount0 The delta of the token0 balance of the pool\\n    /// @param amount1 The delta of the token1 balance of the pool\\n    /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\\n    /// @param liquidity The liquidity of the pool after the swap\\n    /// @param tick The log base 1.0001 of price of the pool after the swap\\n    event Swap(\\n        address indexed sender,\\n        address indexed recipient,\\n        int256 amount0,\\n        int256 amount1,\\n        uint160 sqrtPriceX96,\\n        uint128 liquidity,\\n        int24 tick\\n    );\\n\\n    /// @notice Emitted by the pool for any flashes of token0/token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the tokens from flash\\n    /// @param amount0 The amount of token0 that was flashed\\n    /// @param amount1 The amount of token1 that was flashed\\n    /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\\n    /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\\n    event Flash(\\n        address indexed sender,\\n        address indexed recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        uint256 paid0,\\n        uint256 paid1\\n    );\\n\\n    /// @notice Emitted by the pool for increases to the number of observations that can be stored\\n    /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\\n    /// just before a mint/swap/burn.\\n    /// @param observationCardinalityNextOld The previous value of the next observation cardinality\\n    /// @param observationCardinalityNextNew The updated value of the next observation cardinality\\n    event IncreaseObservationCardinalityNext(\\n        uint16 observationCardinalityNextOld,\\n        uint16 observationCardinalityNextNew\\n    );\\n\\n    /// @notice Emitted when the protocol fee is changed by the pool\\n    /// @param feeProtocol0Old The previous value of the token0 protocol fee\\n    /// @param feeProtocol1Old The previous value of the token1 protocol fee\\n    /// @param feeProtocol0New The updated value of the token0 protocol fee\\n    /// @param feeProtocol1New The updated value of the token1 protocol fee\\n    event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);\\n\\n    /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner\\n    /// @param sender The address that collects the protocol fees\\n    /// @param recipient The address that receives the collected protocol fees\\n    /// @param amount0 The amount of token0 protocol fees that is withdrawn\\n    /// @param amount0 The amount of token1 protocol fees that is withdrawn\\n    event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that never changes\\n/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values\\ninterface IUniswapV3PoolImmutables {\\n    /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\\n    /// @return The contract address\\n    function factory() external view returns (address);\\n\\n    /// @notice The first of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token0() external view returns (address);\\n\\n    /// @notice The second of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token1() external view returns (address);\\n\\n    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6\\n    /// @return The fee\\n    function fee() external view returns (uint24);\\n\\n    /// @notice The pool tick spacing\\n    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\\n    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\\n    /// This value is an int24 to avoid casting even though it is always positive.\\n    /// @return The tick spacing\\n    function tickSpacing() external view returns (int24);\\n\\n    /// @notice The maximum amount of position liquidity that can use any tick in the range\\n    /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\\n    /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\\n    /// @return The max amount of liquidity per tick\\n    function maxLiquidityPerTick() external view returns (uint128);\\n}\\n\",\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissioned pool actions\\n/// @notice Contains pool methods that may only be called by the factory owner\\ninterface IUniswapV3PoolOwnerActions {\\n    /// @notice Set the denominator of the protocol's % share of the fees\\n    /// @param feeProtocol0 new protocol fee for token0 of the pool\\n    /// @param feeProtocol1 new protocol fee for token1 of the pool\\n    function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;\\n\\n    /// @notice Collect the protocol fee accrued to the pool\\n    /// @param recipient The address to which collected protocol fees should be sent\\n    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\\n    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\\n    /// @return amount0 The protocol fee collected in token0\\n    /// @return amount1 The protocol fee collected in token1\\n    function collectProtocol(\\n        address recipient,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that can change\\n/// @notice These methods compose the pool's state, and can change with any frequency including multiple times\\n/// per transaction\\ninterface IUniswapV3PoolState {\\n    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\\n    /// when accessed externally.\\n    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\\n    /// tick The current tick of the pool, i.e. according to the last tick transition that was run.\\n    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\\n    /// boundary.\\n    /// observationIndex The index of the last oracle observation that was written,\\n    /// observationCardinality The current maximum number of observations stored in the pool,\\n    /// observationCardinalityNext The next maximum number of observations, to be updated when the observation.\\n    /// feeProtocol The protocol fee for both tokens of the pool.\\n    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\\n    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\\n    /// unlocked Whether the pool is currently locked to reentrancy\\n    function slot0()\\n        external\\n        view\\n        returns (\\n            uint160 sqrtPriceX96,\\n            int24 tick,\\n            uint16 observationIndex,\\n            uint16 observationCardinality,\\n            uint16 observationCardinalityNext,\\n            uint8 feeProtocol,\\n            bool unlocked\\n        );\\n\\n    /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal0X128() external view returns (uint256);\\n\\n    /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal1X128() external view returns (uint256);\\n\\n    /// @notice The amounts of token0 and token1 that are owed to the protocol\\n    /// @dev Protocol fees will never exceed uint128 max in either token\\n    function protocolFees() external view returns (uint128 token0, uint128 token1);\\n\\n    /// @notice The currently in range liquidity available to the pool\\n    /// @dev This value has no relationship to the total liquidity across all ticks\\n    function liquidity() external view returns (uint128);\\n\\n    /// @notice Look up information about a specific tick in the pool\\n    /// @param tick The tick to look up\\n    /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\\n    /// tick upper,\\n    /// liquidityNet how much liquidity changes when the pool price crosses the tick,\\n    /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\\n    /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\\n    /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\\n    /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\\n    /// secondsOutside the seconds spent on the other side of the tick from the current tick,\\n    /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\\n    /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\\n    /// In addition, these values are only relative and must be used only in comparison to previous snapshots for\\n    /// a specific position.\\n    function ticks(int24 tick)\\n        external\\n        view\\n        returns (\\n            uint128 liquidityGross,\\n            int128 liquidityNet,\\n            uint256 feeGrowthOutside0X128,\\n            uint256 feeGrowthOutside1X128,\\n            int56 tickCumulativeOutside,\\n            uint160 secondsPerLiquidityOutsideX128,\\n            uint32 secondsOutside,\\n            bool initialized\\n        );\\n\\n    /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information\\n    function tickBitmap(int16 wordPosition) external view returns (uint256);\\n\\n    /// @notice Returns the information about a position by the position's key\\n    /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\\n    /// @return _liquidity The amount of liquidity in the position,\\n    /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\\n    /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\\n    /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\\n    /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\\n    function positions(bytes32 key)\\n        external\\n        view\\n        returns (\\n            uint128 _liquidity,\\n            uint256 feeGrowthInside0LastX128,\\n            uint256 feeGrowthInside1LastX128,\\n            uint128 tokensOwed0,\\n            uint128 tokensOwed1\\n        );\\n\\n    /// @notice Returns data about a specific observation index\\n    /// @param index The element of the observations array to fetch\\n    /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\\n    /// ago, rather than at a specific index in the array.\\n    /// @return blockTimestamp The timestamp of the observation,\\n    /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\\n    /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\\n    /// Returns initialized whether the observation has been initialized and the values are safe to use\\n    function observations(uint256 index)\\n        external\\n        view\\n        returns (\\n            uint32 blockTimestamp,\\n            int56 tickCumulative,\\n            uint160 secondsPerLiquidityCumulativeX128,\\n            bool initialized\\n        );\\n}\\n\",\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/UniV3PairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/*\\n\\nCoded for The Keep3r Network with \\u2665 by\\n\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2557\\u2003\\u2003\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\n\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u255a\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2554\\u2550\\u2588\\u2588\\u2588\\u2588\\u2551\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\n\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2003\\u2003\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\n\\nhttps://defi.sucks\\n\\n*/\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/ERC20.sol';\\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\\n\\nimport './libraries/LiquidityAmounts.sol';\\nimport './libraries/PoolAddress.sol';\\nimport './libraries/FixedPoint96.sol';\\nimport './libraries/FullMath.sol';\\nimport './libraries/TickMath.sol';\\n\\nimport '../interfaces/external/IWeth9.sol';\\nimport '../interfaces/IUniV3PairManager.sol';\\n\\nimport './peripherals/Governable.sol';\\n\\ncontract UniV3PairManager is IUniV3PairManager, Governable {\\n  /// @inheritdoc IERC20Metadata\\n  string public override name;\\n\\n  /// @inheritdoc IERC20Metadata\\n  string public override symbol;\\n\\n  /// @inheritdoc IERC20\\n  uint256 public override totalSupply;\\n\\n  /// @inheritdoc IPairManager\\n  address public immutable override factory;\\n\\n  /// @inheritdoc IPairManager\\n  address public immutable override token0;\\n\\n  /// @inheritdoc IPairManager\\n  address public immutable override token1;\\n\\n  /// @inheritdoc IPairManager\\n  address public immutable override pool;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  uint24 public immutable override fee;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  uint160 public immutable override sqrtRatioAX96;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  uint160 public immutable override sqrtRatioBX96;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  int24 public immutable override tickLower;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  int24 public immutable override tickUpper;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  int24 public immutable override tickSpacing;\\n\\n  /// @notice Uniswap's maximum tick\\n  /// @dev Due to tick spacing, pools with different fees may have differences between _MAX_TICK and tickUpper. Use tickUpper to find the max tick of the pool.\\n  int24 private constant _MAX_TICK = 887272;\\n\\n  /// @inheritdoc IERC20Metadata\\n  //solhint-disable-next-line const-name-snakecase\\n  uint8 public constant override decimals = 18;\\n\\n  /// @inheritdoc IERC20\\n  mapping(address => mapping(address => uint256)) public override allowance;\\n\\n  /// @inheritdoc IERC20\\n  mapping(address => uint256) public override balanceOf;\\n\\n  /// @notice Struct that contains token0, token1, and fee of the Uniswap pool\\n  PoolAddress.PoolKey private _poolKey;\\n\\n  constructor(address _pool, address _governance) Governable(_governance) {\\n    uint24 _fee = IUniswapV3Pool(_pool).fee();\\n    address _token0 = IUniswapV3Pool(_pool).token0();\\n    address _token1 = IUniswapV3Pool(_pool).token1();\\n    int24 _tickSpacing = IUniswapV3Pool(_pool).tickSpacing();\\n    int24 _tickUpper = _MAX_TICK - (_MAX_TICK % _tickSpacing);\\n    int24 _tickLower = -_tickUpper;\\n\\n    factory = msg.sender;\\n    pool = _pool;\\n    fee = _fee;\\n    tickSpacing = _tickSpacing;\\n    tickUpper = _tickUpper;\\n    tickLower = _tickLower;\\n    token0 = _token0;\\n    token1 = _token1;\\n    name = string(abi.encodePacked('Keep3rLP - ', ERC20(_token0).symbol(), '/', ERC20(_token1).symbol()));\\n    symbol = string(abi.encodePacked('kLP-', ERC20(_token0).symbol(), '/', ERC20(_token1).symbol()));\\n\\n    sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(_tickLower);\\n    sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(_tickUpper);\\n    _poolKey = PoolAddress.PoolKey({token0: _token0, token1: _token1, fee: _fee});\\n  }\\n\\n  // This low-level function should be called from a contract which performs important safety checks\\n  /// @inheritdoc IUniV3PairManager\\n  function mint(\\n    uint256 amount0Desired,\\n    uint256 amount1Desired,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external override returns (uint128 liquidity) {\\n    (liquidity, , ) = _addLiquidity(amount0Desired, amount1Desired, amount0Min, amount1Min);\\n    _mint(to, liquidity);\\n  }\\n\\n  /// @inheritdoc IUniV3PairManager\\n  function uniswapV3MintCallback(\\n    uint256 amount0Owed,\\n    uint256 amount1Owed,\\n    bytes calldata data\\n  ) external override {\\n    MintCallbackData memory decoded = abi.decode(data, (MintCallbackData));\\n    if (msg.sender != pool) revert OnlyPool();\\n    if (amount0Owed > 0) _pay(decoded._poolKey.token0, decoded.payer, pool, amount0Owed);\\n    if (amount1Owed > 0) _pay(decoded._poolKey.token1, decoded.payer, pool, amount1Owed);\\n  }\\n\\n  /// @inheritdoc IUniV3PairManager\\n  function burn(\\n    uint128 liquidity,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external override returns (uint256 amount0, uint256 amount1) {\\n    (amount0, amount1) = IUniswapV3Pool(pool).burn(tickLower, tickUpper, liquidity);\\n\\n    if (amount0 < amount0Min || amount1 < amount1Min) revert ExcessiveSlippage();\\n\\n    IUniswapV3Pool(pool).collect(to, tickLower, tickUpper, uint128(amount0), uint128(amount1));\\n    _burn(msg.sender, liquidity);\\n  }\\n\\n  /// @inheritdoc IUniV3PairManager\\n  function collect() external override onlyGovernance returns (uint256 amount0, uint256 amount1) {\\n    (, , , uint128 tokensOwed0, uint128 tokensOwed1) = IUniswapV3Pool(pool).positions(\\n      keccak256(abi.encodePacked(address(this), tickLower, tickUpper))\\n    );\\n    (amount0, amount1) = IUniswapV3Pool(pool).collect(governance, tickLower, tickUpper, tokensOwed0, tokensOwed1);\\n  }\\n\\n  /// @inheritdoc IUniV3PairManager\\n  function position()\\n    external\\n    view\\n    override\\n    returns (\\n      uint128 liquidity,\\n      uint256 feeGrowthInside0LastX128,\\n      uint256 feeGrowthInside1LastX128,\\n      uint128 tokensOwed0,\\n      uint128 tokensOwed1\\n    )\\n  {\\n    (liquidity, feeGrowthInside0LastX128, feeGrowthInside1LastX128, tokensOwed0, tokensOwed1) = IUniswapV3Pool(pool).positions(\\n      keccak256(abi.encodePacked(address(this), tickLower, tickUpper))\\n    );\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external override returns (bool) {\\n    allowance[msg.sender][spender] = amount;\\n\\n    emit Approval(msg.sender, spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address to, uint256 amount) external override returns (bool) {\\n    _transferTokens(msg.sender, to, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) external override returns (bool) {\\n    address spender = msg.sender;\\n    uint256 spenderAllowance = allowance[from][spender];\\n\\n    if (spender != from && spenderAllowance != type(uint256).max) {\\n      uint256 newAllowance = spenderAllowance - amount;\\n      allowance[from][spender] = newAllowance;\\n\\n      emit Approval(from, spender, newAllowance);\\n    }\\n\\n    _transferTokens(from, to, amount);\\n    return true;\\n  }\\n\\n  /// @notice Adds liquidity to an initialized pool\\n  /// @dev Reverts if the returned amount0 is less than amount0Min or if amount1 is less than amount1Min\\n  /// @dev This function calls the mint function of the corresponding Uniswap pool, which in turn calls UniswapV3Callback\\n  /// @param amount0Desired The amount of token0 we would like to provide\\n  /// @param amount1Desired The amount of token1 we would like to provide\\n  /// @param amount0Min The minimum amount of token0 we want to provide\\n  /// @param amount1Min The minimum amount of token1 we want to provide\\n  /// @return liquidity The calculated liquidity we get for the token amounts we provided\\n  /// @return amount0 The amount of token0 we ended up providing\\n  /// @return amount1 The amount of token1 we ended up providing\\n  function _addLiquidity(\\n    uint256 amount0Desired,\\n    uint256 amount1Desired,\\n    uint256 amount0Min,\\n    uint256 amount1Min\\n  )\\n    internal\\n    returns (\\n      uint128 liquidity,\\n      uint256 amount0,\\n      uint256 amount1\\n    )\\n  {\\n    (uint160 sqrtPriceX96, , , , , , ) = IUniswapV3Pool(pool).slot0();\\n\\n    liquidity = LiquidityAmounts.getLiquidityForAmounts(sqrtPriceX96, sqrtRatioAX96, sqrtRatioBX96, amount0Desired, amount1Desired);\\n\\n    (amount0, amount1) = IUniswapV3Pool(pool).mint(\\n      address(this),\\n      tickLower,\\n      tickUpper,\\n      liquidity,\\n      abi.encode(MintCallbackData({_poolKey: _poolKey, payer: msg.sender}))\\n    );\\n\\n    if (amount0 < amount0Min || amount1 < amount1Min) revert ExcessiveSlippage();\\n  }\\n\\n  /// @notice Transfers the passed-in token from the payer to the recipient for the corresponding value\\n  /// @param token The token to be transferred to the recipient\\n  /// @param from The address of the payer\\n  /// @param to The address of the passed-in tokens recipient\\n  /// @param value How much of that token to be transferred from payer to the recipient\\n  function _pay(\\n    address token,\\n    address from,\\n    address to,\\n    uint256 value\\n  ) internal {\\n    _safeTransferFrom(token, from, to, value);\\n  }\\n\\n  /// @notice Mints Keep3r credits to the passed-in address of recipient and increases total supply of Keep3r credits by the corresponding amount\\n  /// @param to The recipient of the Keep3r credits\\n  /// @param amount The amount Keep3r credits to be minted to the recipient\\n  function _mint(address to, uint256 amount) internal {\\n    totalSupply += amount;\\n    balanceOf[to] += amount;\\n    emit Transfer(address(0), to, amount);\\n  }\\n\\n  /// @notice Burns Keep3r credits to the passed-in address of recipient and reduces total supply of Keep3r credits by the corresponding amount\\n  /// @param to The address that will get its Keep3r credits burned\\n  /// @param amount The amount Keep3r credits to be burned from the recipient/recipient\\n  function _burn(address to, uint256 amount) internal {\\n    totalSupply -= amount;\\n    balanceOf[to] -= amount;\\n    emit Transfer(to, address(0), amount);\\n  }\\n\\n  /// @notice Transfers amount of Keep3r credits between two addresses\\n  /// @param from The user that transfers the Keep3r credits\\n  /// @param to The user that receives the Keep3r credits\\n  /// @param amount The amount of Keep3r credits to be transferred\\n  function _transferTokens(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal {\\n    balanceOf[from] -= amount;\\n    balanceOf[to] += amount;\\n\\n    emit Transfer(from, to, amount);\\n  }\\n\\n  /// @notice Transfers the passed-in token from the specified \\\"from\\\" to the specified \\\"to\\\" for the corresponding value\\n  /// @dev Reverts with IUniV3PairManager#UnsuccessfulTransfer if the transfer was not successful,\\n  ///      or if the passed data length is different than 0 and the decoded data is not a boolean\\n  /// @param token The token to be transferred to the specified \\\"to\\\"\\n  /// @param from  The address which is going to transfer the tokens\\n  /// @param value How much of that token to be transferred from \\\"from\\\" to \\\"to\\\"\\n  function _safeTransferFrom(\\n    address token,\\n    address from,\\n    address to,\\n    uint256 value\\n  ) internal {\\n    // solhint-disable-next-line avoid-low-level-calls\\n    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));\\n    if (!success || (data.length != 0 && !abi.decode(data, (bool)))) revert UnsuccessfulTransfer();\\n  }\\n}\\n\",\"keccak256\":\"0xcae7fbc99cb2f267f34894b47f02fde1c58cb22600afe4eb328d7492a9dbb396\",\"license\":\"MIT\"},\"solidity/contracts/UniV3PairManagerFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/*\\n\\nCoded for The Keep3r Network with \\u2665 by\\n\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2557\\u2003\\u2003\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\n\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u255a\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2554\\u2550\\u2588\\u2588\\u2588\\u2588\\u2551\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\n\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2003\\u2003\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\n\\nhttps://defi.sucks\\n\\n*/\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../interfaces/IPairManagerFactory.sol';\\nimport './UniV3PairManager.sol';\\nimport './peripherals/Governable.sol';\\n\\n/// @title Factory of Pair Managers\\n/// @notice This contract creates new pair managers\\ncontract UniV3PairManagerFactory is IPairManagerFactory, Governable {\\n  mapping(address => address) public override pairManagers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  ///@inheritdoc IPairManagerFactory\\n  function createPairManager(address _pool) external override returns (address _pairManager) {\\n    if (pairManagers[_pool] != address(0)) revert AlreadyInitialized();\\n    _pairManager = address(new UniV3PairManager(_pool, governance));\\n    pairManagers[_pool] = _pairManager;\\n    emit PairCreated(_pool, _pairManager);\\n  }\\n}\\n\",\"keccak256\":\"0x6bf5bb2ab56ceed07329f883214b4ae8b61bef3b24f4519dafbc63061bc90a65\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FixedPoint96.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nlibrary FixedPoint96 {\\n  // solhint-disable\\n  uint8 internal constant RESOLUTION = 96;\\n  uint256 internal constant Q96 = 0x1000000000000000000000000;\\n}\\n\",\"keccak256\":\"0x32a5c51474a7a83b902ffd6f54f8407e2b98d1142c9b06914fb75d50dd9c573c\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/libraries/LiquidityAmounts.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './FullMath.sol';\\nimport './FixedPoint96.sol';\\n\\n// solhint-disable\\nlibrary LiquidityAmounts {\\n  function toUint128(uint256 x) private pure returns (uint128 y) {\\n    require((y = uint128(x)) == x);\\n  }\\n\\n  function getLiquidityForAmount0(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount0\\n  ) internal pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n    uint256 intermediate = FullMath.mulDiv(sqrtRatioAX96, sqrtRatioBX96, FixedPoint96.Q96);\\n    return toUint128(FullMath.mulDiv(amount0, intermediate, sqrtRatioBX96 - sqrtRatioAX96));\\n  }\\n\\n  function getLiquidityForAmount1(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount1\\n  ) internal pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n    return toUint128(FullMath.mulDiv(amount1, FixedPoint96.Q96, sqrtRatioBX96 - sqrtRatioAX96));\\n  }\\n\\n  function getLiquidityForAmounts(\\n    uint160 sqrtRatioX96,\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount0,\\n    uint256 amount1\\n  ) internal pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\\n      liquidity = getLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amount0);\\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\\n      uint128 liquidity0 = getLiquidityForAmount0(sqrtRatioX96, sqrtRatioBX96, amount0);\\n      uint128 liquidity1 = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioX96, amount1);\\n\\n      liquidity = liquidity0 < liquidity1 ? liquidity0 : liquidity1;\\n    } else {\\n      liquidity = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1);\\n    }\\n  }\\n\\n  function getAmount0ForLiquidity(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) internal pure returns (uint256 amount0) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    return FullMath.mulDiv(uint256(liquidity) << FixedPoint96.RESOLUTION, sqrtRatioBX96 - sqrtRatioAX96, sqrtRatioBX96) / sqrtRatioAX96;\\n  }\\n\\n  function getAmount1ForLiquidity(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) internal pure returns (uint256 amount1) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    return FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96);\\n  }\\n\\n  function getAmountsForLiquidity(\\n    uint160 sqrtRatioX96,\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) internal pure returns (uint256 amount0, uint256 amount1) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\\n      amount0 = getAmount0ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\\n      amount0 = getAmount0ForLiquidity(sqrtRatioX96, sqrtRatioBX96, liquidity);\\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioX96, liquidity);\\n    } else {\\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x33666cfb046e29d6a9539e552b7aace75daab08f0449fec13de7282bac84f786\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/libraries/PoolAddress.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nlibrary PoolAddress {\\n  struct PoolKey {\\n    address token0;\\n    address token1;\\n    uint24 fee;\\n  }\\n}\\n\",\"keccak256\":\"0x68b07a437302c14ff93ebaabfb49f4fa70263cfbb19bf15446ddfcb91eb5a5e6\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/libraries/TickMath.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n// solhint-disable\\n\\n/// @title Math library for computing sqrt prices from ticks and vice versa\\n/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\\n///         prices between 2**-128 and 2**128\\nlibrary TickMath {\\n  /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\\n  int24 internal constant MIN_TICK = -887272;\\n  /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\\n  int24 internal constant MAX_TICK = -MIN_TICK;\\n\\n  /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\\n  uint160 internal constant MIN_SQRT_RATIO = 4295128739;\\n  /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\\n  uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;\\n\\n  /// @notice Calculates sqrt(1.0001^tick) * 2^96\\n  /// @dev Throws if |tick| > max tick\\n  /// @param tick The input tick for the above formula\\n  /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the given tick\\n  function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {\\n    uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));\\n    require(absTick <= uint256(int256(MAX_TICK)), 'T');\\n\\n    uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;\\n    if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;\\n    if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;\\n    if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;\\n    if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;\\n    if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;\\n    if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;\\n    if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;\\n    if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;\\n    if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;\\n    if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;\\n    if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;\\n    if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;\\n    if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;\\n    if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;\\n    if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;\\n    if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;\\n    if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;\\n    if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;\\n    if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;\\n\\n    if (tick > 0) ratio = type(uint256).max / ratio;\\n\\n    // Divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.\\n    // we then downcast because we know the result always fits within 160 bits due to our tick input constraint\\n    // we round up in the division so getTickAtSqrtRatio of the output price is always consistent\\n    sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));\\n  }\\n\\n  /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\\n  /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may ever return.\\n  /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\\n  /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio\\n  function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {\\n    // Second inequality must be < because the price can never reach the price at the max tick\\n    require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');\\n    uint256 ratio = uint256(sqrtPriceX96) << 32;\\n\\n    uint256 r = ratio;\\n    uint256 msb = 0;\\n\\n    assembly {\\n      let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(5, gt(r, 0xFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(4, gt(r, 0xFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(3, gt(r, 0xFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(2, gt(r, 0xF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(1, gt(r, 0x3))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := gt(r, 0x1)\\n      msb := or(msb, f)\\n    }\\n\\n    if (msb >= 128) r = ratio >> (msb - 127);\\n    else r = ratio << (127 - msb);\\n\\n    int256 log_2 = (int256(msb) - 128) << 64;\\n\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(63, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(62, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(61, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(60, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(59, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(58, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(57, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(56, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(55, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(54, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(53, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(52, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(51, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(50, f))\\n    }\\n\\n    int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number\\n\\n    int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);\\n    int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);\\n\\n    tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;\\n  }\\n}\\n\",\"keccak256\":\"0x11b965ba576ff91b4a6e9533c0f334f2b7b6024ee1c54e36d21799de5580899d\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManagerFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './peripherals/IGovernable.sol';\\n\\n/// @title Factory of Pair Managers\\n/// @notice This contract creates new pair managers\\ninterface IPairManagerFactory is IGovernable {\\n  // Variables\\n\\n  /// @notice Maps the address of a Uniswap pool, to the address of the corresponding PairManager\\n  ///         For example, the uniswap address of DAI-WETH, will return the Keep3r/DAI-WETH pair manager address\\n  /// @param _pool The address of the Uniswap pool\\n  /// @return _pairManager The address of the corresponding pair manager\\n  function pairManagers(address _pool) external view returns (address _pairManager);\\n\\n  // Events\\n\\n  /// @notice Emitted when a new pair manager is created\\n  /// @param _pool The address of the corresponding Uniswap pool\\n  /// @param _pairManager The address of the just-created pair manager\\n  event PairCreated(address _pool, address _pairManager);\\n\\n  // Errors\\n\\n  /// @notice Throws an error if the pair manager is already initialized\\n  error AlreadyInitialized();\\n\\n  /// @notice Throws an error if the caller is not the owner\\n  error OnlyOwner();\\n\\n  // Methods\\n\\n  /// @notice Creates a new pair manager based on the address of a Uniswap pool\\n  ///         For example, the uniswap address of DAI-WETH, will create the Keep3r/DAI-WETH pool\\n  /// @param _pool The address of the Uniswap pool the pair manager will be based of\\n  /// @return _pairManager The address of the just-created pair manager\\n  function createPairManager(address _pool) external returns (address _pairManager);\\n}\\n\",\"keccak256\":\"0x11f85de5b6d302967168ba9175899fd53248d266c0a928a26b76b69c46bd53e3\",\"license\":\"MIT\"},\"solidity/interfaces/IUniV3PairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IPairManager.sol';\\nimport '../contracts/libraries/PoolAddress.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\nimport './peripherals/IGovernable.sol';\\n\\n/// @title Pair Manager contract\\n/// @notice Creates a UniswapV3 position, and tokenizes in an ERC20 manner\\n///         so that the user can use it as liquidity for a Keep3rJob\\ninterface IUniV3PairManager is IGovernable, IPairManager {\\n  // Structs\\n\\n  /// @notice The data to be decoded by the UniswapV3MintCallback function\\n  struct MintCallbackData {\\n    PoolAddress.PoolKey _poolKey; // Struct that contains token0, token1, and fee of the pool passed into the constructor\\n    address payer; // The address of the payer, which will be the msg.sender of the mint function\\n  }\\n\\n  // Variables\\n\\n  /// @notice The fee of the Uniswap pool passed into the constructor\\n  /// @return _fee The fee of the Uniswap pool passed into the constructor\\n  function fee() external view returns (uint24 _fee);\\n\\n  /// @notice Highest tick in the Uniswap's curve\\n  /// @return _tickUpper The highest tick in the Uniswap's curve\\n  function tickUpper() external view returns (int24 _tickUpper);\\n\\n  /// @notice Lowest tick in the Uniswap's curve\\n  /// @return _tickLower The lower tick in the Uniswap's curve\\n  function tickLower() external view returns (int24 _tickLower);\\n\\n  /// @notice The pair tick spacing\\n  /// @return _tickSpacing The pair tick spacing\\n  function tickSpacing() external view returns (int24 _tickSpacing);\\n\\n  /// @notice The sqrtRatioAX96 at the lowest tick (-887200) of the Uniswap pool\\n  /// @return _sqrtPriceA96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the lowest tick\\n  function sqrtRatioAX96() external view returns (uint160 _sqrtPriceA96);\\n\\n  /// @notice The sqrtRatioBX96 at the highest tick (887200) of the Uniswap pool\\n  /// @return _sqrtPriceBX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the highest tick\\n  function sqrtRatioBX96() external view returns (uint160 _sqrtPriceBX96);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the pool\\n  error OnlyPool();\\n\\n  /// @notice Throws when the slippage exceeds what the user is comfortable with\\n  error ExcessiveSlippage();\\n\\n  /// @notice Throws when a transfer is unsuccessful\\n  error UnsuccessfulTransfer();\\n\\n  // Methods\\n\\n  /// @notice This function is called after a user calls IUniV3PairManager#mint function\\n  ///         It ensures that any tokens owed to the pool are paid by the msg.sender of IUniV3PairManager#mint function\\n  /// @param amount0Owed The amount of token0 due to the pool for the minted liquidity\\n  /// @param amount1Owed The amount of token1 due to the pool for the minted liquidity\\n  /// @param data The encoded token0, token1, fee (_poolKey) and the payer (msg.sender) of the IUniV3PairManager#mint function\\n  function uniswapV3MintCallback(\\n    uint256 amount0Owed,\\n    uint256 amount1Owed,\\n    bytes calldata data\\n  ) external;\\n\\n  /// @notice Mints kLP tokens to an address according to the liquidity the msg.sender provides to the UniswapV3 pool\\n  /// @dev Triggers UniV3PairManager#uniswapV3MintCallback\\n  /// @param amount0Desired The amount of token0 we would like to provide\\n  /// @param amount1Desired The amount of token1 we would like to provide\\n  /// @param amount0Min The minimum amount of token0 we want to provide\\n  /// @param amount1Min The minimum amount of token1 we want to provide\\n  /// @param to The address to which the kLP tokens are going to be minted to\\n  /// @return liquidity kLP tokens sent in exchange for the provision of tokens\\n  function mint(\\n    uint256 amount0Desired,\\n    uint256 amount1Desired,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external returns (uint128 liquidity);\\n\\n  /// @notice Returns the pair manager's position in the corresponding UniswapV3 pool\\n  /// @return liquidity The amount of liquidity provided to the UniswapV3 pool by the pair manager\\n  /// @return feeGrowthInside0LastX128 The fee growth of token0 as of the last action on the individual position\\n  /// @return feeGrowthInside1LastX128 The fee growth of token1 as of the last action on the individual position\\n  /// @return tokensOwed0 The uncollected amount of token0 owed to the position as of the last computation\\n  /// @return tokensOwed1 The uncollected amount of token1 owed to the position as of the last computation\\n  function position()\\n    external\\n    view\\n    returns (\\n      uint128 liquidity,\\n      uint256 feeGrowthInside0LastX128,\\n      uint256 feeGrowthInside1LastX128,\\n      uint128 tokensOwed0,\\n      uint128 tokensOwed1\\n    );\\n\\n  /// @notice Calls the UniswapV3 pool's collect function, which collects up to a maximum amount of fees\\n  //          owed to a specific position to the recipient, in this case, that recipient is the pair manager\\n  /// @dev The collected fees will be sent to governance\\n  /// @return amount0 The amount of fees collected in token0\\n  /// @return amount1 The amount of fees collected in token1\\n  function collect() external returns (uint256 amount0, uint256 amount1);\\n\\n  /// @notice Burns the corresponding amount of kLP tokens from the msg.sender and withdraws the specified liquidity\\n  //          in the entire range\\n  /// @param liquidity The amount of liquidity to be burned\\n  /// @param amount0Min The minimum amount of token0 we want to send to the recipient (to)\\n  /// @param amount1Min The minimum amount of token1 we want to send to the recipient (to)\\n  /// @param to The address that will receive the due fees\\n  /// @return amount0 The calculated amount of token0 that will be sent to the recipient\\n  /// @return amount1 The calculated amount of token1 that will be sent to the recipient\\n  function burn(\\n    uint128 liquidity,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external returns (uint256 amount0, uint256 amount1);\\n}\\n\",\"keccak256\":\"0x5d5793eaa4ed95d51d6185af159921fca68a3020b151bde710e1a6f58f288cfe\",\"license\":\"MIT\"},\"solidity/interfaces/external/IWeth9.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\n\\ninterface IWeth9 is IERC20 {\\n  function deposit() external payable;\\n\\n  function withdraw(uint256) external;\\n}\\n\",\"keccak256\":\"0x62b6fd021e9fef703f5c77705d8da9ee1967e34e00a0c8a827ee3c0f973399a5\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5266,
                "contract": "solidity/contracts/UniV3PairManagerFactory.sol:UniV3PairManagerFactory",
                "label": "governance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/UniV3PairManagerFactory.sol:UniV3PairManagerFactory",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 4066,
                "contract": "solidity/contracts/UniV3PairManagerFactory.sol:UniV3PairManagerFactory",
                "label": "pairManagers",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyInitialized()": [
                {
                  "notice": "Throws an error if the pair manager is already initialized"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyOwner()": [
                {
                  "notice": "Throws an error if the caller is not the owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ]
            },
            "events": {
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "PairCreated(address,address)": {
                "notice": "Emitted when a new pair manager is created"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "createPairManager(address)": {
                "notice": "Creates a new pair manager based on the address of a Uniswap pool         For example, the uniswap address of DAI-WETH, will create the Keep3r/DAI-WETH pool"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "pairManagers(address)": {
                "notice": "Maps the address of a Uniswap pool, to the address of the corresponding PairManager         For example, the uniswap address of DAI-WETH, will return the Keep3r/DAI-WETH pair manager address"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              }
            },
            "notice": "This contract creates new pair managers",
            "version": 1
          }
        }
      },
      "solidity/contracts/libraries/FixedPoint96.sol": {
        "FixedPoint96": {
          "abi": [],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204396cc41de94eee7035da5dc79b1513ad9c39fcdd0724f42805b985e259405cd64736f6c63430008070033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER SWAP7 0xCC COINBASE 0xDE SWAP5 0xEE 0xE7 SUB 0x5D 0xA5 0xDC PUSH26 0xB1513AD9C39FCDD0724F42805B985E259405CD64736F6C634300 ADDMOD SMOD STOP CALLER ",
              "sourceMap": "78:151:22:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;78:151:22;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204396cc41de94eee7035da5dc79b1513ad9c39fcdd0724f42805b985e259405cd64736f6c63430008070033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER SWAP7 0xCC COINBASE 0xDE SWAP5 0xEE 0xE7 SUB 0x5D 0xA5 0xDC PUSH26 0xB1513AD9C39FCDD0724F42805B985E259405CD64736F6C634300 ADDMOD SMOD STOP CALLER ",
              "sourceMap": "78:151:22:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/libraries/FixedPoint96.sol\":\"FixedPoint96\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/contracts/libraries/FixedPoint96.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nlibrary FixedPoint96 {\\n  // solhint-disable\\n  uint8 internal constant RESOLUTION = 96;\\n  uint256 internal constant Q96 = 0x1000000000000000000000000;\\n}\\n\",\"keccak256\":\"0x32a5c51474a7a83b902ffd6f54f8407e2b98d1142c9b06914fb75d50dd9c573c\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "solidity/contracts/libraries/FullMath.sol": {
        "FullMath": {
          "abi": [],
          "devdoc": {
            "details": "Handles \"phantom overflow\" i.e., allows multiplication and division where an intermediate value overflows 256 bits",
            "kind": "dev",
            "methods": {},
            "title": "Contains 512-bit math functions",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a4ba29af12d33a3bd3755cbe0adc0368e24c1f85a6c267ef4ed0299f10317b0264736f6c63430008070033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 0xBA 0x29 0xAF SLT 0xD3 GASPRICE EXTCODESIZE 0xD3 PUSH22 0x5CBE0ADC0368E24C1F85A6C267EF4ED0299F10317B02 PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "362:4552:23:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;362:4552:23;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a4ba29af12d33a3bd3755cbe0adc0368e24c1f85a6c267ef4ed0299f10317b0264736f6c63430008070033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 0xBA 0x29 0xAF SLT 0xD3 GASPRICE EXTCODESIZE 0xD3 PUSH22 0x5CBE0ADC0368E24C1F85A6C267EF4ED0299F10317B02 PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "362:4552:23:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              },
              "internal": {
                "mulDiv(uint256,uint256,uint256)": "infinite",
                "mulDivRoundingUp(uint256,uint256,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Contains 512-bit math functions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/libraries/FullMath.sol\":\"FullMath\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision",
            "version": 1
          }
        }
      },
      "solidity/contracts/libraries/LiquidityAmounts.sol": {
        "LiquidityAmounts": {
          "abi": [],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ea46d8023517e1470cf91300e57e82463f281c99d34950ff9b849f62c4474d7a64736f6c63430008070033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEA CHAINID 0xD8 MUL CALLDATALOAD OR 0xE1 SELFBALANCE 0xC 0xF9 SGT STOP 0xE5 PUSH31 0x82463F281C99D34950FF9B849F62C4474D7A64736F6C634300080700330000 ",
              "sourceMap": "152:3278:24:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;152:3278:24;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ea46d8023517e1470cf91300e57e82463f281c99d34950ff9b849f62c4474d7a64736f6c63430008070033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEA CHAINID 0xD8 MUL CALLDATALOAD OR 0xE1 SELFBALANCE 0xC 0xF9 SGT STOP 0xE5 PUSH31 0x82463F281C99D34950FF9B849F62C4474D7A64736F6C634300080700330000 ",
              "sourceMap": "152:3278:24:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              },
              "internal": {
                "getAmount0ForLiquidity(uint160,uint160,uint128)": "infinite",
                "getAmount1ForLiquidity(uint160,uint160,uint128)": "infinite",
                "getAmountsForLiquidity(uint160,uint160,uint160,uint128)": "infinite",
                "getLiquidityForAmount0(uint160,uint160,uint256)": "infinite",
                "getLiquidityForAmount1(uint160,uint160,uint256)": "infinite",
                "getLiquidityForAmounts(uint160,uint160,uint160,uint256,uint256)": "infinite",
                "toUint128(uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/libraries/LiquidityAmounts.sol\":\"LiquidityAmounts\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/contracts/libraries/FixedPoint96.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nlibrary FixedPoint96 {\\n  // solhint-disable\\n  uint8 internal constant RESOLUTION = 96;\\n  uint256 internal constant Q96 = 0x1000000000000000000000000;\\n}\\n\",\"keccak256\":\"0x32a5c51474a7a83b902ffd6f54f8407e2b98d1142c9b06914fb75d50dd9c573c\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/libraries/LiquidityAmounts.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './FullMath.sol';\\nimport './FixedPoint96.sol';\\n\\n// solhint-disable\\nlibrary LiquidityAmounts {\\n  function toUint128(uint256 x) private pure returns (uint128 y) {\\n    require((y = uint128(x)) == x);\\n  }\\n\\n  function getLiquidityForAmount0(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount0\\n  ) internal pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n    uint256 intermediate = FullMath.mulDiv(sqrtRatioAX96, sqrtRatioBX96, FixedPoint96.Q96);\\n    return toUint128(FullMath.mulDiv(amount0, intermediate, sqrtRatioBX96 - sqrtRatioAX96));\\n  }\\n\\n  function getLiquidityForAmount1(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount1\\n  ) internal pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n    return toUint128(FullMath.mulDiv(amount1, FixedPoint96.Q96, sqrtRatioBX96 - sqrtRatioAX96));\\n  }\\n\\n  function getLiquidityForAmounts(\\n    uint160 sqrtRatioX96,\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount0,\\n    uint256 amount1\\n  ) internal pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\\n      liquidity = getLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amount0);\\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\\n      uint128 liquidity0 = getLiquidityForAmount0(sqrtRatioX96, sqrtRatioBX96, amount0);\\n      uint128 liquidity1 = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioX96, amount1);\\n\\n      liquidity = liquidity0 < liquidity1 ? liquidity0 : liquidity1;\\n    } else {\\n      liquidity = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1);\\n    }\\n  }\\n\\n  function getAmount0ForLiquidity(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) internal pure returns (uint256 amount0) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    return FullMath.mulDiv(uint256(liquidity) << FixedPoint96.RESOLUTION, sqrtRatioBX96 - sqrtRatioAX96, sqrtRatioBX96) / sqrtRatioAX96;\\n  }\\n\\n  function getAmount1ForLiquidity(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) internal pure returns (uint256 amount1) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    return FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96);\\n  }\\n\\n  function getAmountsForLiquidity(\\n    uint160 sqrtRatioX96,\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) internal pure returns (uint256 amount0, uint256 amount1) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\\n      amount0 = getAmount0ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\\n      amount0 = getAmount0ForLiquidity(sqrtRatioX96, sqrtRatioBX96, liquidity);\\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioX96, liquidity);\\n    } else {\\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x33666cfb046e29d6a9539e552b7aace75daab08f0449fec13de7282bac84f786\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "solidity/contracts/libraries/PoolAddress.sol": {
        "PoolAddress": {
          "abi": [],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b0aaf8d2a87ccc78a898a245362bb82e3f2f83cf8915c1aff311c76a1b3a077864736f6c63430008070033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB0 0xAA 0xF8 0xD2 0xA8 PUSH29 0xCC78A898A245362BB82E3F2F83CF8915C1AFF311C76A1B3A077864736F PUSH13 0x63430008070033000000000000 ",
              "sourceMap": "78:102:25:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;78:102:25;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b0aaf8d2a87ccc78a898a245362bb82e3f2f83cf8915c1aff311c76a1b3a077864736f6c63430008070033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB0 0xAA 0xF8 0xD2 0xA8 PUSH29 0xCC78A898A245362BB82E3F2F83CF8915C1AFF311C76A1B3A077864736F PUSH13 0x63430008070033000000000000 ",
              "sourceMap": "78:102:25:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/libraries/PoolAddress.sol\":\"PoolAddress\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/contracts/libraries/PoolAddress.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nlibrary PoolAddress {\\n  struct PoolKey {\\n    address token0;\\n    address token1;\\n    uint24 fee;\\n  }\\n}\\n\",\"keccak256\":\"0x68b07a437302c14ff93ebaabfb49f4fa70263cfbb19bf15446ddfcb91eb5a5e6\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "solidity/contracts/libraries/TickMath.sol": {
        "TickMath": {
          "abi": [],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "stateVariables": {
              "MAX_SQRT_RATIO": {
                "details": "The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)"
              },
              "MAX_TICK": {
                "details": "The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128"
              },
              "MIN_SQRT_RATIO": {
                "details": "The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)"
              },
              "MIN_TICK": {
                "details": "The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128"
              }
            },
            "title": "Math library for computing sqrt prices from ticks and vice versa",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205067891429efa9218ff83cd5f6549edb1cf7a259d534ad6112f3933b8bde8ede64736f6c63430008070033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 POP PUSH8 0x891429EFA9218FF8 EXTCODECOPY 0xD5 0xF6 SLOAD SWAP15 0xDB SHR 0xF7 LOG2 MSIZE 0xD5 CALLVALUE 0xAD PUSH2 0x12F3 SWAP4 EXTCODESIZE DUP12 0xDE DUP15 0xDE PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "334:7492:26:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;334:7492:26;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205067891429efa9218ff83cd5f6549edb1cf7a259d534ad6112f3933b8bde8ede64736f6c63430008070033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 POP PUSH8 0x891429EFA9218FF8 EXTCODECOPY 0xD5 0xF6 SLOAD SWAP15 0xDB SHR 0xF7 LOG2 MSIZE 0xD5 CALLVALUE 0xAD PUSH2 0x12F3 SWAP4 EXTCODESIZE DUP12 0xDE DUP15 0xDE PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "334:7492:26:-:0;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "17200",
                "executionCost": "103",
                "totalCost": "17303"
              },
              "internal": {
                "getSqrtRatioAtTick(int24)": "infinite",
                "getTickAtSqrtRatio(uint160)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"MAX_SQRT_RATIO\":{\"details\":\"The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\"},\"MAX_TICK\":{\"details\":\"The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\"},\"MIN_SQRT_RATIO\":{\"details\":\"The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\"},\"MIN_TICK\":{\"details\":\"The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\"}},\"title\":\"Math library for computing sqrt prices from ticks and vice versa\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports         prices between 2**-128 and 2**128\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/libraries/TickMath.sol\":\"TickMath\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/contracts/libraries/TickMath.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n// solhint-disable\\n\\n/// @title Math library for computing sqrt prices from ticks and vice versa\\n/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\\n///         prices between 2**-128 and 2**128\\nlibrary TickMath {\\n  /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\\n  int24 internal constant MIN_TICK = -887272;\\n  /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\\n  int24 internal constant MAX_TICK = -MIN_TICK;\\n\\n  /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\\n  uint160 internal constant MIN_SQRT_RATIO = 4295128739;\\n  /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\\n  uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;\\n\\n  /// @notice Calculates sqrt(1.0001^tick) * 2^96\\n  /// @dev Throws if |tick| > max tick\\n  /// @param tick The input tick for the above formula\\n  /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the given tick\\n  function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {\\n    uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));\\n    require(absTick <= uint256(int256(MAX_TICK)), 'T');\\n\\n    uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;\\n    if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;\\n    if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;\\n    if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;\\n    if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;\\n    if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;\\n    if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;\\n    if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;\\n    if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;\\n    if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;\\n    if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;\\n    if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;\\n    if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;\\n    if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;\\n    if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;\\n    if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;\\n    if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;\\n    if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;\\n    if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;\\n    if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;\\n\\n    if (tick > 0) ratio = type(uint256).max / ratio;\\n\\n    // Divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.\\n    // we then downcast because we know the result always fits within 160 bits due to our tick input constraint\\n    // we round up in the division so getTickAtSqrtRatio of the output price is always consistent\\n    sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));\\n  }\\n\\n  /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\\n  /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may ever return.\\n  /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\\n  /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio\\n  function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {\\n    // Second inequality must be < because the price can never reach the price at the max tick\\n    require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');\\n    uint256 ratio = uint256(sqrtPriceX96) << 32;\\n\\n    uint256 r = ratio;\\n    uint256 msb = 0;\\n\\n    assembly {\\n      let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(5, gt(r, 0xFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(4, gt(r, 0xFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(3, gt(r, 0xFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(2, gt(r, 0xF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(1, gt(r, 0x3))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := gt(r, 0x1)\\n      msb := or(msb, f)\\n    }\\n\\n    if (msb >= 128) r = ratio >> (msb - 127);\\n    else r = ratio << (127 - msb);\\n\\n    int256 log_2 = (int256(msb) - 128) << 64;\\n\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(63, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(62, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(61, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(60, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(59, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(58, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(57, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(56, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(55, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(54, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(53, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(52, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(51, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(50, f))\\n    }\\n\\n    int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number\\n\\n    int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);\\n    int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);\\n\\n    tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;\\n  }\\n}\\n\",\"keccak256\":\"0x11b965ba576ff91b4a6e9533c0f334f2b7b6024ee1c54e36d21799de5580899d\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "notice": "Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports         prices between 2**-128 and 2**128",
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/DustCollector.sol": {
        "DustCollector": {
          "abi": [
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                }
              ],
              "name": "DustSent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                }
              ],
              "name": "sendDust",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "sendDust(address,uint256,address)": {
                "params": {
                  "_amount": "The amount of the token that will be transferred",
                  "_to": "The address that will receive the idle funds",
                  "_token": "The token that will be transferred"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "governance()": "5aa6e675",
              "pendingGovernance()": "f39c38a0",
              "sendDust(address,uint256,address)": "966abd00",
              "setGovernance(address)": "ab033ea9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"DustSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"sendDust\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"sendDust(address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of the token that will be transferred\",\"_to\":\"The address that will receive the idle funds\",\"_token\":\"The token that will be transferred\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"DustSent(address,uint256,address)\":{\"notice\":\"Emitted when dust is sent\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"sendDust(address,uint256,address)\":{\"notice\":\"Allows an authorized user to transfer the tokens or eth that may have been left in a contract\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/DustCollector.sol\":\"DustCollector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/DustCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '../../contracts/peripherals/Governable.sol';\\nimport '../../interfaces/peripherals/IDustCollector.sol';\\n\\nabstract contract DustCollector is IDustCollector, Governable {\\n  using SafeERC20 for IERC20;\\n\\n  address internal constant _ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n  function sendDust(\\n    address _token,\\n    uint256 _amount,\\n    address _to\\n  ) external override onlyGovernance {\\n    if (_to == address(0)) revert ZeroAddress();\\n    if (_token == _ETH_ADDRESS) {\\n      payable(_to).transfer(_amount);\\n    } else {\\n      IERC20(_token).safeTransfer(_to, _amount);\\n    }\\n    emit DustSent(_token, _amount, _to);\\n  }\\n}\\n\",\"keccak256\":\"0x246ac2c4057520bb627ea8040367549786f4477a04fd79358927cd607952bc2f\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IDustCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\ninterface IDustCollector is IBaseErrors {\\n  /// @notice Emitted when dust is sent\\n  /// @param _token The token that will be transferred\\n  /// @param _amount The amount of the token that will be transferred\\n  /// @param _to The address which will receive the funds\\n  event DustSent(address _token, uint256 _amount, address _to);\\n\\n  /// @notice Allows an authorized user to transfer the tokens or eth that may have been left in a contract\\n  /// @param _token The token that will be transferred\\n  /// @param _amount The amount of the token that will be transferred\\n  /// @param _to The address that will receive the idle funds\\n  function sendDust(\\n    address _token,\\n    uint256 _amount,\\n    address _to\\n  ) external;\\n}\\n\",\"keccak256\":\"0x38dce228111f2a3c6b26ac09c5652c3f1f184c4cfe50d11ff0958ef6a50683bb\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/DustCollector.sol:DustCollector",
                "label": "governance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/DustCollector.sol:DustCollector",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              }
            }
          },
          "userdoc": {
            "errors": {
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "DustSent(address,uint256,address)": {
                "notice": "Emitted when dust is sent"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "sendDust(address,uint256,address)": {
                "notice": "Allows an authorized user to transfer the tokens or eth that may have been left in a contract"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/Governable.sol": {
        "Governable": {
          "abi": [
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              }
            },
            "stateVariables": {
              "governance": {
                "return": "_governance The governance addresss",
                "returns": {
                  "_0": "_governance The governance addresss"
                }
              },
              "pendingGovernance": {
                "return": "_pendingGovernance The pendingGovernance addresss",
                "returns": {
                  "_0": "_pendingGovernance The pendingGovernance addresss"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "governance()": "5aa6e675",
              "pendingGovernance()": "f39c38a0",
              "setGovernance(address)": "ab033ea9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}}},\"stateVariables\":{\"governance\":{\"return\":\"_governance The governance addresss\",\"returns\":{\"_0\":\"_governance The governance addresss\"}},\"pendingGovernance\":{\"return\":\"_pendingGovernance The pendingGovernance addresss\",\"returns\":{\"_0\":\"_pendingGovernance The pendingGovernance addresss\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}]},\"events\":{\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/Governable.sol\":\"Governable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/Governable.sol:Governable",
                "label": "governance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/Governable.sol:Governable",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              }
            }
          },
          "userdoc": {
            "errors": {
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ]
            },
            "events": {
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/Keep3rAccountance.sol": {
        "Keep3rAccountance": {
          "abi": [
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              }
            },
            "stateVariables": {
              "bonds": {
                "params": {
                  "_bond": "The address of the token being bonded",
                  "_keeper": "The address of the keeper"
                },
                "return": "_bonds Amount of a certain token that a keeper has bonded",
                "returns": {
                  "_0": "_bonds Amount of a certain token that a keeper has bonded"
                }
              },
              "canActivateAfter": {
                "params": {
                  "_bonding": "The address of the token being bonded",
                  "_keeper": "The address of the keeper"
                },
                "return": "_timestamp Time at which the bonding for a keeper can be activated",
                "returns": {
                  "_0": "_timestamp Time at which the bonding for a keeper can be activated"
                }
              },
              "canWithdrawAfter": {
                "params": {
                  "_bonding": "The address of the token being unbonded",
                  "_keeper": "The address of the keeper"
                },
                "return": "_timestamp Time at which the keeper bonds are ready to be withdrawn",
                "returns": {
                  "_0": "_timestamp Time at which the keeper bonds are ready to be withdrawn"
                }
              },
              "disputes": {
                "params": {
                  "_keeperOrJob": "The address of the keeper or job"
                },
                "return": "_disputed Whether a keeper or job has a pending dispute",
                "returns": {
                  "_0": "_disputed Whether a keeper or job has a pending dispute"
                }
              },
              "firstSeen": {
                "params": {
                  "_keeper": "The address of the keeper"
                },
                "return": "timestamp The time at which the keeper was first registered",
                "returns": {
                  "_0": "timestamp The time at which the keeper was first registered"
                }
              },
              "hasBonded": {
                "params": {
                  "_keeper": "The address of the keeper"
                },
                "return": "_hasBonded Whether the address has ever bonded an asset",
                "returns": {
                  "_0": "_hasBonded Whether the address has ever bonded an asset"
                }
              },
              "jobTokenCredits": {
                "params": {
                  "_job": "The address of the job",
                  "_token": "The address of the token bonded"
                },
                "return": "_amount The amount of token credits available for a job",
                "returns": {
                  "_0": "_amount The amount of token credits available for a job"
                }
              },
              "pendingBonds": {
                "params": {
                  "_bonding": "The address of the token being bonded",
                  "_keeper": "The address of the keeper"
                },
                "return": "_pendingBonds Amount of a certain asset a keeper has unbonding",
                "returns": {
                  "_0": "_pendingBonds Amount of a certain asset a keeper has unbonding"
                }
              },
              "pendingUnbonds": {
                "params": {
                  "_bonding": "The address of the token being unbonded",
                  "_keeper": "The address of the keeper"
                },
                "return": "_pendingUnbonds The amount of keeper bonds that are to be withdrawn",
                "returns": {
                  "_0": "_pendingUnbonds The amount of keeper bonds that are to be withdrawn"
                }
              },
              "workCompleted": {
                "params": {
                  "_keeper": "The address of the keeper"
                },
                "return": "_workCompleted Total KP3R earnings of a keeper since it started working",
                "returns": {
                  "_0": "_workCompleted Total KP3R earnings of a keeper since it started working"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "disputes(address)": "b0103b1a",
              "firstSeen(address)": "e326ac43",
              "hasBonded(address)": "8cb22b76",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keepers()": "951dc22c",
              "pendingBonds(address,address)": "15006b82",
              "pendingUnbonds(address,address)": "21040b01",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}}},\"stateVariables\":{\"bonds\":{\"params\":{\"_bond\":\"The address of the token being bonded\",\"_keeper\":\"The address of the keeper\"},\"return\":\"_bonds Amount of a certain token that a keeper has bonded\",\"returns\":{\"_0\":\"_bonds Amount of a certain token that a keeper has bonded\"}},\"canActivateAfter\":{\"params\":{\"_bonding\":\"The address of the token being bonded\",\"_keeper\":\"The address of the keeper\"},\"return\":\"_timestamp Time at which the bonding for a keeper can be activated\",\"returns\":{\"_0\":\"_timestamp Time at which the bonding for a keeper can be activated\"}},\"canWithdrawAfter\":{\"params\":{\"_bonding\":\"The address of the token being unbonded\",\"_keeper\":\"The address of the keeper\"},\"return\":\"_timestamp Time at which the keeper bonds are ready to be withdrawn\",\"returns\":{\"_0\":\"_timestamp Time at which the keeper bonds are ready to be withdrawn\"}},\"disputes\":{\"params\":{\"_keeperOrJob\":\"The address of the keeper or job\"},\"return\":\"_disputed Whether a keeper or job has a pending dispute\",\"returns\":{\"_0\":\"_disputed Whether a keeper or job has a pending dispute\"}},\"firstSeen\":{\"params\":{\"_keeper\":\"The address of the keeper\"},\"return\":\"timestamp The time at which the keeper was first registered\",\"returns\":{\"_0\":\"timestamp The time at which the keeper was first registered\"}},\"hasBonded\":{\"params\":{\"_keeper\":\"The address of the keeper\"},\"return\":\"_hasBonded Whether the address has ever bonded an asset\",\"returns\":{\"_0\":\"_hasBonded Whether the address has ever bonded an asset\"}},\"jobTokenCredits\":{\"params\":{\"_job\":\"The address of the job\",\"_token\":\"The address of the token bonded\"},\"return\":\"_amount The amount of token credits available for a job\",\"returns\":{\"_0\":\"_amount The amount of token credits available for a job\"}},\"pendingBonds\":{\"params\":{\"_bonding\":\"The address of the token being bonded\",\"_keeper\":\"The address of the keeper\"},\"return\":\"_pendingBonds Amount of a certain asset a keeper has unbonding\",\"returns\":{\"_0\":\"_pendingBonds Amount of a certain asset a keeper has unbonding\"}},\"pendingUnbonds\":{\"params\":{\"_bonding\":\"The address of the token being unbonded\",\"_keeper\":\"The address of the keeper\"},\"return\":\"_pendingUnbonds The amount of keeper bonds that are to be withdrawn\",\"returns\":{\"_0\":\"_pendingUnbonds The amount of keeper bonds that are to be withdrawn\"}},\"workCompleted\":{\"params\":{\"_keeper\":\"The address of the keeper\"},\"return\":\"_workCompleted Total KP3R earnings of a keeper since it started working\",\"returns\":{\"_0\":\"_workCompleted Total KP3R earnings of a keeper since it started working\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}]},\"events\":{\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/Keep3rAccountance.sol\":\"Keep3rAccountance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "_keepers",
                "offset": 0,
                "slot": "0",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "workCompleted",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "firstSeen",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "disputes",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "bonds",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "hasBonded",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                "label": "_jobs",
                "offset": 0,
                "slot": "18",
                "type": "t_struct(AddressSet)1631_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/Keep3rAccountance.sol:Keep3rAccountance",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ]
            },
            "events": {
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/Keep3rDisputable.sol": {
        "Keep3rDisputable": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "Dispute",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_resolver",
                  "type": "address"
                }
              ],
              "name": "Resolve",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "dispute(address)": {
                "params": {
                  "_jobOrKeeper": "The address in dispute"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "resolve(address)": {
                "params": {
                  "_jobOrKeeper": "The address cleared"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "dispute(address)": "f75f9f7b",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keepers()": "951dc22c",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "resolve(address)": "55ea6c47",
              "setGovernance(address)": "ab033ea9",
              "slashers(address)": "b87fcbff",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"Dispute\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"Resolve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"dispute(address)\":{\"params\":{\"_jobOrKeeper\":\"The address in dispute\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"resolve(address)\":{\"params\":{\"_jobOrKeeper\":\"The address cleared\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyDisputed()\":[{\"notice\":\"Throws when a job or keeper is already disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"NotDisputed()\":[{\"notice\":\"Throws when a job or keeper is not disputed and someone tries to resolve the dispute\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}]},\"events\":{\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Dispute(address,address)\":{\"notice\":\"Emitted when a keeper or a job is disputed\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"Resolve(address,address)\":{\"notice\":\"Emitted when a dispute is resolved\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"dispute(address)\":{\"notice\":\"Allows governance to create a dispute for a given keeper/job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"resolve(address)\":{\"notice\":\"Allows governance to resolve a dispute on a keeper/job\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/Keep3rDisputable.sol\":\"Keep3rDisputable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rParameters.sol';\\nimport './Keep3rRoles.sol';\\nimport '../../interfaces/peripherals/IKeep3rDisputable.sol';\\n\\nabstract contract Keep3rDisputable is IKeep3rDisputable, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rDisputable\\n  function dispute(address _jobOrKeeper) external override onlyDisputer {\\n    if (disputes[_jobOrKeeper]) revert AlreadyDisputed();\\n    disputes[_jobOrKeeper] = true;\\n    emit Dispute(_jobOrKeeper, msg.sender);\\n  }\\n\\n  /// @inheritdoc IKeep3rDisputable\\n  function resolve(address _jobOrKeeper) external override onlyDisputer {\\n    if (!disputes[_jobOrKeeper]) revert NotDisputed();\\n    disputes[_jobOrKeeper] = false;\\n    emit Resolve(_jobOrKeeper, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x941e9ba02b2ad3975edc444cd771ef1e5386051553632140f882258ea7e4d4bc\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Creates/resolves disputes for jobs or keepers\\n///         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\\n///         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\\ninterface IKeep3rDisputable {\\n  /// @notice Emitted when a keeper or a job is disputed\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _disputer The user that called the function and disputed the keeper\\n  event Dispute(address indexed _jobOrKeeper, address indexed _disputer);\\n\\n  /// @notice Emitted when a dispute is resolved\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _resolver The user that called the function and resolved the dispute\\n  event Resolve(address indexed _jobOrKeeper, address indexed _resolver);\\n\\n  /// @notice Throws when a job or keeper is already disputed\\n  error AlreadyDisputed();\\n\\n  /// @notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute\\n  error NotDisputed();\\n\\n  /// @notice Allows governance to create a dispute for a given keeper/job\\n  /// @param _jobOrKeeper The address in dispute\\n  function dispute(address _jobOrKeeper) external;\\n\\n  /// @notice Allows governance to resolve a dispute on a keeper/job\\n  /// @param _jobOrKeeper The address cleared\\n  function resolve(address _jobOrKeeper) external;\\n}\\n\",\"keccak256\":\"0x002b9b4c75e62d48d74b6447649d39eb5c1e128d2523bb11e08e9cd3e27b1f70\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "_keepers",
                "offset": 0,
                "slot": "0",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "workCompleted",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "firstSeen",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "disputes",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "bonds",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "hasBonded",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "_jobs",
                "offset": 0,
                "slot": "18",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "governance",
                "offset": 0,
                "slot": "20",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "21",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "slashers",
                "offset": 0,
                "slot": "22",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                "label": "disputers",
                "offset": 0,
                "slot": "23",
                "type": "t_mapping(t_address,t_bool)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/Keep3rDisputable.sol:Keep3rDisputable",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyDisputed()": [
                {
                  "notice": "Throws when a job or keeper is already disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "NotDisputed()": [
                {
                  "notice": "Throws when a job or keeper is not disputed and someone tries to resolve the dispute"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ]
            },
            "events": {
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Dispute(address,address)": {
                "notice": "Emitted when a keeper or a job is disputed"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "Resolve(address,address)": {
                "notice": "Emitted when a dispute is resolved"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "dispute(address)": {
                "notice": "Allows governance to create a dispute for a given keeper/job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "resolve(address)": {
                "notice": "Allows governance to resolve a dispute on a keeper/job"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/Keep3rParameters.sol": {
        "Keep3rParameters": {
          "abi": [
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              }
            },
            "stateVariables": {
              "bondTime": {
                "return": "_days The required bondTime in days",
                "returns": {
                  "_0": "_days The required bondTime in days"
                }
              },
              "fee": {
                "return": "_amount The fee amount to be sent to governance when a user adds liquidity to a job",
                "returns": {
                  "_0": "_amount The fee amount to be sent to governance when a user adds liquidity to a job"
                }
              },
              "inflationPeriod": {
                "return": "_period The denominator used to regulate the emission of KP3R",
                "returns": {
                  "_0": "_period The denominator used to regulate the emission of KP3R"
                }
              },
              "keep3rHelper": {
                "return": "_keep3rHelper The address of Keep3rHelper's contract",
                "returns": {
                  "_0": "_keep3rHelper The address of Keep3rHelper's contract"
                }
              },
              "keep3rV1": {
                "return": "_keep3rV1 The address of Keep3rV1's contract",
                "returns": {
                  "_0": "_keep3rV1 The address of Keep3rV1's contract"
                }
              },
              "keep3rV1Proxy": {
                "return": "_keep3rV1Proxy The address of Keep3rV1Proxy's contract",
                "returns": {
                  "_0": "_keep3rV1Proxy The address of Keep3rV1Proxy's contract"
                }
              },
              "kp3rWethPool": {
                "return": "_kp3rWethPool The address of KP3R-WETH pool",
                "returns": {
                  "_0": "_kp3rWethPool The address of KP3R-WETH pool"
                }
              },
              "liquidityMinimum": {
                "return": "_amount The minimum amount of liquidity in KP3R",
                "returns": {
                  "_0": "_amount The minimum amount of liquidity in KP3R"
                }
              },
              "rewardPeriodTime": {
                "return": "_days The reward period in days",
                "returns": {
                  "_0": "_days The reward period in days"
                }
              },
              "unbondTime": {
                "return": "_days The required unbondTime in days",
                "returns": {
                  "_0": "_days The required unbondTime in days"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityMinimum()": "633fb68f",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "rewardPeriodTime()": "768b5d90",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "unbondTime()": "a7d2e784",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}}},\"stateVariables\":{\"bondTime\":{\"return\":\"_days The required bondTime in days\",\"returns\":{\"_0\":\"_days The required bondTime in days\"}},\"fee\":{\"return\":\"_amount The fee amount to be sent to governance when a user adds liquidity to a job\",\"returns\":{\"_0\":\"_amount The fee amount to be sent to governance when a user adds liquidity to a job\"}},\"inflationPeriod\":{\"return\":\"_period The denominator used to regulate the emission of KP3R\",\"returns\":{\"_0\":\"_period The denominator used to regulate the emission of KP3R\"}},\"keep3rHelper\":{\"return\":\"_keep3rHelper The address of Keep3rHelper's contract\",\"returns\":{\"_0\":\"_keep3rHelper The address of Keep3rHelper's contract\"}},\"keep3rV1\":{\"return\":\"_keep3rV1 The address of Keep3rV1's contract\",\"returns\":{\"_0\":\"_keep3rV1 The address of Keep3rV1's contract\"}},\"keep3rV1Proxy\":{\"return\":\"_keep3rV1Proxy The address of Keep3rV1Proxy's contract\",\"returns\":{\"_0\":\"_keep3rV1Proxy The address of Keep3rV1Proxy's contract\"}},\"kp3rWethPool\":{\"return\":\"_kp3rWethPool The address of KP3R-WETH pool\",\"returns\":{\"_0\":\"_kp3rWethPool The address of KP3R-WETH pool\"}},\"liquidityMinimum\":{\"return\":\"_amount The minimum amount of liquidity in KP3R\",\"returns\":{\"_0\":\"_amount The minimum amount of liquidity in KP3R\"}},\"rewardPeriodTime\":{\"return\":\"_days The reward period in days\",\"returns\":{\"_0\":\"_days The reward period in days\"}},\"unbondTime\":{\"return\":\"_days The required unbondTime in days\",\"returns\":{\"_0\":\"_days The required unbondTime in days\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/Keep3rParameters.sol\":\"Keep3rParameters\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "_keepers",
                "offset": 0,
                "slot": "0",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "workCompleted",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "firstSeen",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "disputes",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "bonds",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "hasBonded",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "_jobs",
                "offset": 0,
                "slot": "18",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "governance",
                "offset": 0,
                "slot": "20",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "21",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "slashers",
                "offset": 0,
                "slot": "22",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "disputers",
                "offset": 0,
                "slot": "23",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "25",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "26",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "bondTime",
                "offset": 0,
                "slot": "28",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "unbondTime",
                "offset": 0,
                "slot": "29",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "30",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                "label": "fee",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/Keep3rParameters.sol:Keep3rParameters",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/Keep3rRoles.sol": {
        "Keep3rRoles": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              }
            },
            "stateVariables": {
              "disputers": {
                "params": {
                  "_disputer": "Address being checked as a disputer"
                },
                "return": "_isDisputer Whether the address is a disputer or not",
                "returns": {
                  "_0": "_isDisputer Whether the address is a disputer or not"
                }
              },
              "slashers": {
                "params": {
                  "_slasher": "Address being checked as a slasher"
                },
                "return": "_isSlasher Whether the address is a slasher or not",
                "returns": {
                  "_0": "_isSlasher Whether the address is a slasher or not"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 124,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:306:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "95:209:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "141:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "150:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "153:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "143:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "143:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "143:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "116:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "112:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "112:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "137:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "108:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "108:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "105:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "166:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "185:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "179:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "179:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "170:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "258:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "267:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "270:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "260:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "260:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "260:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "217:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "228:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "243:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "248:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "239:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "239:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "252:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "235:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "235:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "224:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "224:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "214:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "214:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "207:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "207:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "204:70:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "283:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "293:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "283:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "61:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "72:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "84:6:84",
                            "type": ""
                          }
                        ],
                        "src": "14:290:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506040516106a43803806106a483398101604081905261002f9161007c565b806001600160a01b0381166100565760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055506100ac565b60006020828403121561008e57600080fd5b81516001600160a01b03811681146100a557600080fd5b9392505050565b6105e9806100bb6000396000f3fe608060405234801561001057600080fd5b506004361061008e5760003560e01c8063238efcbc14610093578063274a8db41461009d5780635aa6e675146100d557806368a9f19c146100f55780639d5c33d814610108578063aac6aa9c1461011b578063ab033ea91461012e578063b87fcbff14610141578063f0f346b914610164578063f39c38a014610177575b600080fd5b61009b61018a565b005b6100c06100ab36600461056f565b60036020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6000546100e8906001600160a01b031681565b6040516100cc919061059f565b61009b61010336600461056f565b610216565b61009b61011636600461056f565b6102d9565b61009b61012936600461056f565b610391565b61009b61013c36600461056f565b610445565b6100c061014f36600461056f565b60026020526000908152604090205460ff1681565b61009b61017236600461056f565b6104bb565b6001546100e8906001600160a01b031681565b6001546001600160a01b031633146101b557604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161020c9161059f565b60405180910390a1565b6000546001600160a01b03163314610241576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526002602052604090205460ff161561027b5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526002602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b906102ce90839061059f565b60405180910390a150565b6000546001600160a01b03163314610304576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff161561033e5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f906102ce90839061059f565b6000546001600160a01b031633146103bc576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526002602052604090205460ff166103f5576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526002602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d025906102ce90839061059f565b6000546001600160a01b03163314610470576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906102ce90839061059f565b6000546001600160a01b031633146104e6576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff1661051f57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e906102ce90839061059f565b60006020828403121561058157600080fd5b81356001600160a01b038116811461059857600080fd5b9392505050565b6001600160a01b039190911681526020019056fea26469706673582212205494d452c52b0e16fa38a9c874970411cc572dd98bfb8d7cfe58f142110fdeea64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x6A4 CODESIZE SUB DUP1 PUSH2 0x6A4 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x7C JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x56 JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH2 0xAC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5E9 DUP1 PUSH2 0xBB PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x8E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0xF5 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x108 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x12E JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x141 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x177 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9B PUSH2 0x18A JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC0 PUSH2 0xAB CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH2 0xE8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCC SWAP2 SWAP1 PUSH2 0x59F JUMP JUMPDEST PUSH2 0x9B PUSH2 0x103 CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH2 0x216 JUMP JUMPDEST PUSH2 0x9B PUSH2 0x116 CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH2 0x2D9 JUMP JUMPDEST PUSH2 0x9B PUSH2 0x129 CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH2 0x391 JUMP JUMPDEST PUSH2 0x9B PUSH2 0x13C CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH2 0x445 JUMP JUMPDEST PUSH2 0xC0 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x9B PUSH2 0x172 CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH2 0x4BB JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xE8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1B5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x20C SWAP2 PUSH2 0x59F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x241 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x27B JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x2CE SWAP1 DUP4 SWAP1 PUSH2 0x59F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x304 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x33E JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x2CE SWAP1 DUP4 SWAP1 PUSH2 0x59F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3BC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3F5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x2CE SWAP1 DUP4 SWAP1 PUSH2 0x59F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x470 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x2CE SWAP1 DUP4 SWAP1 PUSH2 0x59F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4E6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x51F JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x2CE SWAP1 DUP4 SWAP1 PUSH2 0x59F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x581 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD SWAP5 0xD4 MSTORE 0xC5 0x2B 0xE AND STATICCALL CODESIZE 0xA9 0xC8 PUSH21 0x970411CC572DD98BFB8D7CFE58F142110FDEEA6473 PUSH16 0x6C634300080700330000000000000000 ",
              "sourceMap": "215:1611:32:-:0;;;439:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;483:11;-1:-1:-1;;;;;357:25:28;;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;-1:-1:-1;;;;;422:24:28;;;;;;;;;;-1:-1:-1;215:1611:32;;14:290:84;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:84;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:84:o;:::-;215:1611:32;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@acceptGovernance_5327": {
                  "entryPoint": 394,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 729,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 534,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@removeDisputer_6072": {
                  "entryPoint": 1211,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 913,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 1093,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 1391,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 1439,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:702:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "84:216:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "130:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "139:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "142:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "132:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "132:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "132:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "105:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "114:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "101:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "101:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "126:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "97:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "97:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "94:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "155:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "181:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "168:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "168:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "159:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "254:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "263:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "266:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "256:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "256:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "256:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "213:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "224:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "239:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "244:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "235:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "235:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "248:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "231:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "231:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "220:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "220:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "210:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "210:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "203:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "203:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "200:70:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "279:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "289:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "279:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "50:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "61:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "73:6:84",
                            "type": ""
                          }
                        ],
                        "src": "14:286:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "406:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "416:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "428:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "439:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "424:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "424:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "416:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "458:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "473:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "489:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "494:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "485:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "485:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "498:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "481:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "481:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "469:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "469:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "451:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "451:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "451:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "375:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "386:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "397:4:84",
                            "type": ""
                          }
                        ],
                        "src": "305:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "608:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "618:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "630:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "641:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "626:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "626:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "618:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "660:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "685:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "678:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "678:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "671:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "671:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "653:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "653:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "653:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "577:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "588:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "599:4:84",
                            "type": ""
                          }
                        ],
                        "src": "513:187:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061008e5760003560e01c8063238efcbc14610093578063274a8db41461009d5780635aa6e675146100d557806368a9f19c146100f55780639d5c33d814610108578063aac6aa9c1461011b578063ab033ea91461012e578063b87fcbff14610141578063f0f346b914610164578063f39c38a014610177575b600080fd5b61009b61018a565b005b6100c06100ab36600461056f565b60036020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6000546100e8906001600160a01b031681565b6040516100cc919061059f565b61009b61010336600461056f565b610216565b61009b61011636600461056f565b6102d9565b61009b61012936600461056f565b610391565b61009b61013c36600461056f565b610445565b6100c061014f36600461056f565b60026020526000908152604090205460ff1681565b61009b61017236600461056f565b6104bb565b6001546100e8906001600160a01b031681565b6001546001600160a01b031633146101b557604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161020c9161059f565b60405180910390a1565b6000546001600160a01b03163314610241576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526002602052604090205460ff161561027b5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526002602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b906102ce90839061059f565b60405180910390a150565b6000546001600160a01b03163314610304576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff161561033e5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f906102ce90839061059f565b6000546001600160a01b031633146103bc576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526002602052604090205460ff166103f5576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526002602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d025906102ce90839061059f565b6000546001600160a01b03163314610470576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906102ce90839061059f565b6000546001600160a01b031633146104e6576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff1661051f57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e906102ce90839061059f565b60006020828403121561058157600080fd5b81356001600160a01b038116811461059857600080fd5b9392505050565b6001600160a01b039190911681526020019056fea26469706673582212205494d452c52b0e16fa38a9c874970411cc572dd98bfb8d7cfe58f142110fdeea64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x8E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x93 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0xF5 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x108 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x12E JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x141 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x177 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9B PUSH2 0x18A JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC0 PUSH2 0xAB CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD PUSH2 0xE8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCC SWAP2 SWAP1 PUSH2 0x59F JUMP JUMPDEST PUSH2 0x9B PUSH2 0x103 CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH2 0x216 JUMP JUMPDEST PUSH2 0x9B PUSH2 0x116 CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH2 0x2D9 JUMP JUMPDEST PUSH2 0x9B PUSH2 0x129 CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH2 0x391 JUMP JUMPDEST PUSH2 0x9B PUSH2 0x13C CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH2 0x445 JUMP JUMPDEST PUSH2 0xC0 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x9B PUSH2 0x172 CALLDATASIZE PUSH1 0x4 PUSH2 0x56F JUMP JUMPDEST PUSH2 0x4BB JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xE8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1B5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x20C SWAP2 PUSH2 0x59F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x241 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x27B JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x2CE SWAP1 DUP4 SWAP1 PUSH2 0x59F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x304 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x33E JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x2CE SWAP1 DUP4 SWAP1 PUSH2 0x59F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3BC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3F5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x2CE SWAP1 DUP4 SWAP1 PUSH2 0x59F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x470 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x2CE SWAP1 DUP4 SWAP1 PUSH2 0x59F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4E6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x51F JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x2CE SWAP1 DUP4 SWAP1 PUSH2 0x59F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x581 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD SWAP5 0xD4 MSTORE 0xC5 0x2B 0xE AND STATICCALL CODESIZE 0xA9 0xC8 PUSH21 0x970411CC572DD98BFB8D7CFE58F142110FDEEA6473 PUSH16 0x6C634300080700330000000000000000 ",
              "sourceMap": "215:1611:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;:::-;;384:50:32;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;678:14:84;;671:22;653:41;;641:2;626:18;384:50:32;;;;;;;;199:34:28;;;;;-1:-1:-1;;;;;199:34:28;;;;;;;;;;:::i;533:194:32:-;;;;;;:::i;:::-;;:::i;999:203::-;;;;;;:::i;:::-;;:::i;762:202::-;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;299:49:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1237:211;;;;;;:::i;:::-;;:::i;268:41:28:-;;;;;-1:-1:-1;;;;;268:41:28;;;680:175;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;::::1;754:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;533:194:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;:::-;;;;;;;;533:194:::0;:::o;999:203::-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;762:202::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;14:286:84:-:0;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:84;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:84:o;305:203::-;-1:-1:-1;;;;;469:32:84;;;;451:51;;439:2;424:18;;305:203::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "302600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "51860",
                "addDisputer(address)": "30119",
                "addSlasher(address)": "30097",
                "disputers(address)": "2485",
                "governance()": "2383",
                "pendingGovernance()": "2537",
                "removeDisputer(address)": "30198",
                "removeSlasher(address)": "30132",
                "setGovernance(address)": "27890",
                "slashers(address)": "2617"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "disputers(address)": "274a8db4",
              "governance()": "5aa6e675",
              "pendingGovernance()": "f39c38a0",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "setGovernance(address)": "ab033ea9",
              "slashers(address)": "b87fcbff"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}}},\"stateVariables\":{\"disputers\":{\"params\":{\"_disputer\":\"Address being checked as a disputer\"},\"return\":\"_isDisputer Whether the address is a disputer or not\",\"returns\":{\"_0\":\"_isDisputer Whether the address is a disputer or not\"}},\"slashers\":{\"params\":{\"_slasher\":\"Address being checked as a slasher\"},\"return\":\"_isSlasher Whether the address is a slasher or not\",\"returns\":{\"_0\":\"_isSlasher Whether the address is a slasher or not\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}]},\"events\":{\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/Keep3rRoles.sol\":\"Keep3rRoles\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/Keep3rRoles.sol:Keep3rRoles",
                "label": "governance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/Keep3rRoles.sol:Keep3rRoles",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/Keep3rRoles.sol:Keep3rRoles",
                "label": "slashers",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/Keep3rRoles.sol:Keep3rRoles",
                "label": "disputers",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_bool)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              }
            }
          },
          "userdoc": {
            "errors": {
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ]
            },
            "events": {
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol": {
        "Keep3rJobDisputable": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "Dispute",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashLiquidity",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashToken",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_resolver",
                  "type": "address"
                }
              ],
              "name": "Resolve",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashTokenFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "dispute(address)": {
                "params": {
                  "_jobOrKeeper": "The address in dispute"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_liquidityCredits": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_periodCredits": "The credits the given job has at the current period"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "resolve(address)": {
                "params": {
                  "_jobOrKeeper": "The address cleared"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity that will be slashed",
                  "_job": "The address being slashed",
                  "_liquidity": "The address of the liquidity that will be slashed"
                }
              },
              "slashTokenFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of the token that will be slashed",
                  "_job": "The address of the job from which the token will be slashed",
                  "_token": "The address of the token that will be slashed"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_credits": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addSlasher(address)": "68a9f19c",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "dispute(address)": "f75f9f7b",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityAmount(address,address)": "694798e6",
              "liquidityMinimum()": "633fb68f",
              "observeLiquidity(address)": "165e62e7",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "resolve(address)": "55ea6c47",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardPeriodTime()": "768b5d90",
              "rewardedAt(address)": "a676f9ff",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashLiquidityFromJob(address,address,uint256)": "6e2a9ca6",
              "slashTokenFromJob(address,address,uint256)": "f25e311b",
              "slashers(address)": "b87fcbff",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "unbondTime()": "a7d2e784",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workCompleted(address)": "1b44555e",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"Dispute\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"Resolve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashTokenFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"dispute(address)\":{\"params\":{\"_jobOrKeeper\":\"The address in dispute\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_liquidityCredits\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_periodCredits\":\"The credits the given job has at the current period\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"resolve(address)\":{\"params\":{\"_jobOrKeeper\":\"The address cleared\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"slashLiquidityFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity that will be slashed\",\"_job\":\"The address being slashed\",\"_liquidity\":\"The address of the liquidity that will be slashed\"}},\"slashTokenFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of the token that will be slashed\",\"_job\":\"The address of the job from which the token will be slashed\",\"_token\":\"The address of the token that will be slashed\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_credits\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyDisputed()\":[{\"notice\":\"Throws when a job or keeper is already disputed\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobTokenInsufficient()\":[{\"notice\":\"Throws when someone tries to slash more tokens than the job has\"}],\"JobTokenUnexistent()\":[{\"notice\":\"Throws when the token trying to be slashed doesn't exist\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"NotDisputed()\":[{\"notice\":\"Throws when a job or keeper is not disputed and someone tries to resolve the dispute\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Dispute(address,address)\":{\"notice\":\"Emitted when a keeper or a job is disputed\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"JobSlashLiquidity(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\"},\"JobSlashToken(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashTokenFromJob is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"Resolve(address,address)\":{\"notice\":\"Emitted when a dispute is resolved\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"dispute(address)\":{\"notice\":\"Allows governance to create a dispute for a given keeper/job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"resolve(address)\":{\"notice\":\"Allows governance to resolve a dispute on a keeper/job\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or a slasher to slash liquidity from a job\"},\"slashTokenFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or slasher to slash a job specific token\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol\":\"Keep3rJobDisputable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rParameters.sol';\\nimport './Keep3rRoles.sol';\\nimport '../../interfaces/peripherals/IKeep3rDisputable.sol';\\n\\nabstract contract Keep3rDisputable is IKeep3rDisputable, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rDisputable\\n  function dispute(address _jobOrKeeper) external override onlyDisputer {\\n    if (disputes[_jobOrKeeper]) revert AlreadyDisputed();\\n    disputes[_jobOrKeeper] = true;\\n    emit Dispute(_jobOrKeeper, msg.sender);\\n  }\\n\\n  /// @inheritdoc IKeep3rDisputable\\n  function resolve(address _jobOrKeeper) external override onlyDisputer {\\n    if (!disputes[_jobOrKeeper]) revert NotDisputed();\\n    disputes[_jobOrKeeper] = false;\\n    emit Resolve(_jobOrKeeper, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x941e9ba02b2ad3975edc444cd771ef1e5386051553632140f882258ea7e4d4bc\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobFundableCredits.sol';\\nimport './Keep3rJobFundableLiquidity.sol';\\nimport '../Keep3rDisputable.sol';\\n\\nabstract contract Keep3rJobDisputable is IKeep3rJobDisputable, Keep3rDisputable, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rJobDisputable\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override onlySlasher {\\n    if (!disputes[_job]) revert NotDisputed();\\n    if (!_jobTokens[_job].contains(_token)) revert JobTokenUnexistent();\\n    if (jobTokenCredits[_job][_token] < _amount) revert JobTokenInsufficient();\\n\\n    try IERC20(_token).transfer(governance, _amount) {} catch {}\\n    jobTokenCredits[_job][_token] -= _amount;\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit JobSlashToken(_job, _token, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobDisputable\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlySlasher {\\n    if (!disputes[_job]) revert NotDisputed();\\n\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n    try IERC20(_liquidity).transfer(governance, _amount) {} catch {}\\n    emit JobSlashLiquidity(_job, _liquidity, msg.sender, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0x86cdbf44dfa46c6b6e184e48e11cb8571e26cf50c793b6b07227c29e743da397\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableCredits is IKeep3rJobFundableCredits, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice Cooldown between withdrawals\\n  uint256 internal constant _WITHDRAW_TOKENS_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  mapping(address => mapping(address => uint256)) public override jobTokenCreditsAddedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    // KP3R shouldn't be used for direct token payments\\n    if (_token == keep3rV1) revert TokenUnallowed();\\n    uint256 _before = IERC20(_token).balanceOf(address(this));\\n    IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\\n    uint256 _received = IERC20(_token).balanceOf(address(this)) - _before;\\n    uint256 _tokenFee = (_received * fee) / _BASE;\\n    jobTokenCredits[_job][_token] += _received - _tokenFee;\\n    jobTokenCreditsAddedAt[_job][_token] = block.timestamp;\\n    IERC20(_token).safeTransfer(governance, _tokenFee);\\n    _jobTokens[_job].add(_token);\\n\\n    emit TokenCreditAddition(_job, _token, msg.sender, _received);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external override nonReentrant onlyJobOwner(_job) {\\n    if (block.timestamp <= jobTokenCreditsAddedAt[_job][_token] + _WITHDRAW_TOKENS_COOLDOWN) revert JobTokenCreditsLocked();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientJobTokenCredits();\\n    if (disputes[_job]) revert JobDisputed();\\n\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_receiver, _amount);\\n\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit TokenCreditWithdrawal(_job, _token, _receiver, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0xb600d18903a008a1ca03743de7cef8330c2d5e66db52c900822551a4be75f7a5\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/IPairManager.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '../../libraries/FullMath.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableLiquidity is IKeep3rJobFundableLiquidity, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice List of liquidities that are accepted in the system\\n  EnumerableSet.AddressSet internal _approvedLiquidities;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => mapping(address => uint256)) public override liquidityAmount;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override rewardedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override workedAt;\\n\\n  /// @notice Tracks an address and returns its TickCache\\n  mapping(address => TickCache) internal _tick;\\n\\n  // Views\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approvedLiquidities() external view override returns (address[] memory _list) {\\n    _list = _approvedLiquidities.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobPeriodCredits(address _job) public view override returns (uint256 _periodCredits) {\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        TickCache memory _tickCache = observeLiquidity(_liquidity);\\n        if (_tickCache.period != 0) {\\n          int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n          _periodCredits += _getReward(\\n            IKeep3rHelper(keep3rHelper).getKP3RsAtTick(liquidityAmount[_job][_liquidity], _tickDifference, rewardPeriodTime)\\n          );\\n        }\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobLiquidityCredits(address _job) public view override returns (uint256 _liquidityCredits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n\\n    // If the job was rewarded in the past 1 period time\\n    if ((block.timestamp - rewardedAt[_job]) < rewardPeriodTime) {\\n      // If the job has period credits, update minted job credits to new twap\\n      _liquidityCredits = _periodCredits > 0\\n        ? (_jobLiquidityCredits[_job] * _periodCredits) / _jobPeriodCredits[_job] // If the job has period credits, return remaining job credits updated to new twap\\n        : _jobLiquidityCredits[_job]; // If not, return remaining credits, forced credits should not be updated\\n    } else {\\n      // Else return a full period worth of credits if current credits have expired\\n      _liquidityCredits = _periodCredits;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function totalJobCredits(address _job) external view override returns (uint256 _credits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n    uint256 _cooldown = block.timestamp;\\n\\n    if ((rewardedAt[_job] > _period(block.timestamp - rewardPeriodTime))) {\\n      // Will calculate cooldown if it outdated\\n      if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will calculate cooldown from last reward reference in this period\\n        _cooldown -= (rewardedAt[_job] + rewardPeriodTime);\\n      } else {\\n        // Will calculate cooldown from last reward timestamp\\n        _cooldown -= rewardedAt[_job];\\n      }\\n    } else {\\n      // Will calculate cooldown from period start if expired\\n      _cooldown -= _period(block.timestamp);\\n    }\\n    _credits = jobLiquidityCredits(_job) + _phase(_cooldown, _periodCredits);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view override returns (uint256 _periodCredits) {\\n    if (_approvedLiquidities.contains(_liquidity)) {\\n      TickCache memory _tickCache = observeLiquidity(_liquidity);\\n      if (_tickCache.period != 0) {\\n        int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n        return _getReward(IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime));\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function observeLiquidity(address _liquidity) public view virtual override returns (TickCache memory _tickCache) {\\n    if (_tick[_liquidity].period == _period(block.timestamp)) {\\n      // Will return cached twaps if liquidity is updated\\n      _tickCache = _tick[_liquidity];\\n    } else {\\n      bool success;\\n      uint256 lastPeriod = _period(block.timestamp - rewardPeriodTime);\\n\\n      if (_tick[_liquidity].period == lastPeriod) {\\n        // Will only ask for current period accumulator if liquidity is outdated\\n        uint32[] memory _secondsAgo = new uint32[](1);\\n        int56 previousTick = _tick[_liquidity].current;\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n\\n        (_tickCache.current, , success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - previousTick;\\n      } else if (_tick[_liquidity].period < lastPeriod) {\\n        // Will ask for 2 accumulators if liquidity is expired\\n        uint32[] memory _secondsAgo = new uint32[](2);\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n        _secondsAgo[1] = uint32(block.timestamp - _period(block.timestamp) + rewardPeriodTime);\\n\\n        int56 _tickCumulative2;\\n        (_tickCache.current, _tickCumulative2, success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - _tickCumulative2;\\n      }\\n      if (success) {\\n        _tickCache.period = _period(block.timestamp);\\n      } else {\\n        delete _tickCache.period;\\n      }\\n    }\\n  }\\n\\n  // Methods\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external override onlyGovernance {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    _settleJobAccountance(_job);\\n    _jobLiquidityCredits[_job] += _amount;\\n    emit LiquidityCreditsForced(_job, rewardedAt[_job], _jobLiquidityCredits[_job]);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approveLiquidity(address _liquidity) external virtual override onlyGovernance {\\n    if (!_approvedLiquidities.add(_liquidity)) revert LiquidityPairApproved();\\n    _liquidityPool[_liquidity] = IPairManager(_liquidity).pool();\\n    _isKP3RToken0[_liquidity] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_liquidityPool[_liquidity]);\\n    _tick[_liquidity] = observeLiquidity(_liquidity);\\n    emit LiquidityApproval(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function revokeLiquidity(address _liquidity) external override onlyGovernance {\\n    if (!_approvedLiquidities.remove(_liquidity)) revert LiquidityPairUnexistent();\\n    emit LiquidityRevocation(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_approvedLiquidities.contains(_liquidity)) revert LiquidityPairUnapproved();\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n\\n    _jobLiquidities[_job].add(_liquidity);\\n\\n    _settleJobAccountance(_job);\\n\\n    if (_quoteLiquidity(liquidityAmount[_job][_liquidity] + _amount, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n    IERC20(_liquidity).safeTransferFrom(msg.sender, address(this), _amount);\\n    liquidityAmount[_job][_liquidity] += _amount;\\n    _jobPeriodCredits[_job] += _getReward(_quoteLiquidity(_amount, _liquidity));\\n    emit LiquidityAddition(_job, _liquidity, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlyJobOwner(_job) {\\n    canWithdrawAfter[_job][_liquidity] = block.timestamp + unbondTime;\\n    pendingUnbonds[_job][_liquidity] += _amount;\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n\\n    uint256 _remainingLiquidity = liquidityAmount[_job][_liquidity];\\n    if (_remainingLiquidity > 0 && _quoteLiquidity(_remainingLiquidity, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit Unbonding(_job, _liquidity, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external override onlyJobOwner(_job) {\\n    if (_receiver == address(0)) revert ZeroAddress();\\n    if (pendingUnbonds[_job][_liquidity] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[_job][_liquidity] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[_job]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[_job][_liquidity];\\n\\n    delete pendingUnbonds[_job][_liquidity];\\n    delete canWithdrawAfter[_job][_liquidity];\\n\\n    IERC20(_liquidity).safeTransfer(_receiver, _amount);\\n    emit LiquidityWithdrawal(_job, _liquidity, _receiver, _amount);\\n  }\\n\\n  // Internal functions\\n\\n  /// @notice Updates or rewards job liquidity credits depending on time since last job reward\\n  function _updateJobCreditsIfNeeded(address _job) internal returns (bool _rewarded) {\\n    if (rewardedAt[_job] < _period(block.timestamp)) {\\n      // Will exit function if job has been rewarded in current period\\n      if (rewardedAt[_job] <= _period(block.timestamp - rewardPeriodTime)) {\\n        // Will reset job to period syncronicity if a full period passed without rewards\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] = _period(block.timestamp);\\n        _rewarded = true;\\n      } else if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will reset job's syncronicity if last reward was more than epoch ago\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] += rewardPeriodTime;\\n        _rewarded = true;\\n      } else if (workedAt[_job] < _period(block.timestamp)) {\\n        // First keeper on period has to update job accountance to current twaps\\n        uint256 previousPeriodCredits = _jobPeriodCredits[_job];\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = (_jobLiquidityCredits[_job] * _jobPeriodCredits[_job]) / previousPeriodCredits;\\n        // Updating job accountance does not reward job\\n      }\\n    }\\n  }\\n\\n  /// @notice Only called if _jobLiquidityCredits < payment\\n  function _rewardJobCredits(address _job) internal {\\n    /// @notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)\\n    /* WARNING: this allows to top up _jobLiquidityCredits to a max of 1.99 but have to spend at least 1 */\\n    _jobLiquidityCredits[_job] += _phase(block.timestamp - rewardedAt[_job], _jobPeriodCredits[_job]);\\n    rewardedAt[_job] = block.timestamp;\\n  }\\n\\n  /// @notice Updates accountance for _jobPeriodCredits\\n  function _updateJobPeriod(address _job) internal {\\n    _jobPeriodCredits[_job] = _calculateJobPeriodCredits(_job);\\n  }\\n\\n  /// @notice Quotes the outdated job liquidities and calculates _periodCredits\\n  /// @dev This function is also responsible for keeping the KP3R/WETH quote updated\\n  function _calculateJobPeriodCredits(address _job) internal returns (uint256 _periodCredits) {\\n    if (_tick[kp3rWethPool].period != _period(block.timestamp)) {\\n      // Updates KP3R/WETH quote if needed\\n      _tick[kp3rWethPool] = observeLiquidity(kp3rWethPool);\\n    }\\n\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        if (_tick[_liquidity].period != _period(block.timestamp)) {\\n          // Updates liquidity cache only if needed\\n          _tick[_liquidity] = observeLiquidity(_liquidity);\\n        }\\n        _periodCredits += _getReward(_quoteLiquidity(liquidityAmount[_job][_liquidity], _liquidity));\\n      }\\n    }\\n  }\\n\\n  /// @notice Updates job accountance calculating the impact of the unbonded liquidity amount\\n  function _unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) internal nonReentrant {\\n    if (!_jobLiquidities[_job].contains(_liquidity)) revert JobLiquidityUnexistent();\\n    if (liquidityAmount[_job][_liquidity] < _amount) revert JobLiquidityInsufficient();\\n\\n    // Ensures current twaps in job liquidities\\n    _updateJobPeriod(_job);\\n    uint256 _periodCreditsToRemove = _getReward(_quoteLiquidity(_amount, _liquidity));\\n\\n    // A liquidity can be revoked causing a job to have 0 periodCredits\\n    if (_jobPeriodCredits[_job] > 0) {\\n      // Removes a % correspondant to a full rewardPeriodTime for the liquidity withdrawn vs all of the liquidities\\n      _jobLiquidityCredits[_job] -= (_jobLiquidityCredits[_job] * _periodCreditsToRemove) / _jobPeriodCredits[_job];\\n      _jobPeriodCredits[_job] -= _periodCreditsToRemove;\\n    }\\n\\n    liquidityAmount[_job][_liquidity] -= _amount;\\n    if (liquidityAmount[_job][_liquidity] == 0) {\\n      _jobLiquidities[_job].remove(_liquidity);\\n    }\\n  }\\n\\n  /// @notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed\\n  function _phase(uint256 _timePassed, uint256 _multiplier) internal view returns (uint256 _result) {\\n    if (_timePassed < rewardPeriodTime) {\\n      _result = (_timePassed * _multiplier) / rewardPeriodTime;\\n    } else _result = _multiplier;\\n  }\\n\\n  /// @notice Returns the start of the period of the provided timestamp\\n  function _period(uint256 _timestamp) internal view returns (uint256 _periodTimestamp) {\\n    return _timestamp - (_timestamp % rewardPeriodTime);\\n  }\\n\\n  /// @notice Calculates relation between rewardPeriod and inflationPeriod\\n  function _getReward(uint256 _baseAmount) internal view returns (uint256 _credits) {\\n    return FullMath.mulDiv(_baseAmount, rewardPeriodTime, inflationPeriod);\\n  }\\n\\n  /// @notice Returns underlying KP3R amount for a given liquidity amount\\n  function _quoteLiquidity(uint256 _amount, address _liquidity) internal view virtual returns (uint256 _quote) {\\n    if (_tick[_liquidity].period != 0) {\\n      int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tick[_liquidity].difference : -_tick[_liquidity].difference;\\n      _quote = IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime);\\n    }\\n  }\\n\\n  /// @notice Updates job credits to current quotes and rewards job's pending minted credits\\n  /// @dev Ensures a maximum of 1 period of credits\\n  function _settleJobAccountance(address _job) internal virtual {\\n    _updateJobCreditsIfNeeded(_job);\\n    _rewardJobCredits(_job);\\n    _jobLiquidityCredits[_job] = Math.min(_jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n  }\\n}\\n\",\"keccak256\":\"0x7747b2a0ee0c4e3322e92a3e1fc0f6f03be63942bc398009726b58f8c9f79cf0\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Creates/resolves disputes for jobs or keepers\\n///         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\\n///         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\\ninterface IKeep3rDisputable {\\n  /// @notice Emitted when a keeper or a job is disputed\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _disputer The user that called the function and disputed the keeper\\n  event Dispute(address indexed _jobOrKeeper, address indexed _disputer);\\n\\n  /// @notice Emitted when a dispute is resolved\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _resolver The user that called the function and resolved the dispute\\n  event Resolve(address indexed _jobOrKeeper, address indexed _resolver);\\n\\n  /// @notice Throws when a job or keeper is already disputed\\n  error AlreadyDisputed();\\n\\n  /// @notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute\\n  error NotDisputed();\\n\\n  /// @notice Allows governance to create a dispute for a given keeper/job\\n  /// @param _jobOrKeeper The address in dispute\\n  function dispute(address _jobOrKeeper) external;\\n\\n  /// @notice Allows governance to resolve a dispute on a keeper/job\\n  /// @param _jobOrKeeper The address cleared\\n  function resolve(address _jobOrKeeper) external;\\n}\\n\",\"keccak256\":\"0x002b9b4c75e62d48d74b6447649d39eb5c1e128d2523bb11e08e9cd3e27b1f70\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6297,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "jobTokenCreditsAddedAt",
                "offset": 0,
                "slot": "37",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6540,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "_approvedLiquidities",
                "offset": 0,
                "slot": "38",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 6548,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "liquidityAmount",
                "offset": 0,
                "slot": "40",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6554,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "rewardedAt",
                "offset": 0,
                "slot": "41",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6560,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "workedAt",
                "offset": 0,
                "slot": "42",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6566,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                "label": "_tick",
                "offset": 0,
                "slot": "43",
                "type": "t_mapping(t_address,t_struct(TickCache)13178_storage)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_int56": {
                "encoding": "inplace",
                "label": "int56",
                "numberOfBytes": "7"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_struct(TickCache)13178_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)",
                "numberOfBytes": "32",
                "value": "t_struct(TickCache)13178_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(TickCache)13178_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rJobFundableLiquidity.TickCache",
                "members": [
                  {
                    "astId": 13173,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                    "label": "current",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13175,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                    "label": "difference",
                    "offset": 7,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13177,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol:Keep3rJobDisputable",
                    "label": "period",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyDisputed()": [
                {
                  "notice": "Throws when a job or keeper is already disputed"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobTokenInsufficient()": [
                {
                  "notice": "Throws when someone tries to slash more tokens than the job has"
                }
              ],
              "JobTokenUnexistent()": [
                {
                  "notice": "Throws when the token trying to be slashed doesn't exist"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "NotDisputed()": [
                {
                  "notice": "Throws when a job or keeper is not disputed and someone tries to resolve the dispute"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Dispute(address,address)": {
                "notice": "Emitted when a keeper or a job is disputed"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "JobSlashLiquidity(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called"
              },
              "JobSlashToken(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashTokenFromJob is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "Resolve(address,address)": {
                "notice": "Emitted when a dispute is resolved"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "dispute(address)": {
                "notice": "Allows governance to create a dispute for a given keeper/job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "resolve(address)": {
                "notice": "Allows governance to resolve a dispute on a keeper/job"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "notice": "Allows governance or a slasher to slash liquidity from a job"
              },
              "slashTokenFromJob(address,address,uint256)": {
                "notice": "Allows governance or slasher to slash a job specific token"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol": {
        "Keep3rJobFundableCredits": {
          "abi": [
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              }
            },
            "stateVariables": {
              "jobTokenCreditsAddedAt": {
                "params": {
                  "_job": "The address of the job credited",
                  "_token": "The address of the token credited"
                },
                "return": "_timestamp The last block where tokens were added to the job",
                "returns": {
                  "_0": "_timestamp The last block where tokens were added to the job"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityMinimum()": "633fb68f",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "rewardPeriodTime()": "768b5d90",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "unbondTime()": "a7d2e784",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}}},\"stateVariables\":{\"jobTokenCreditsAddedAt\":{\"params\":{\"_job\":\"The address of the job credited\",\"_token\":\"The address of the token credited\"},\"return\":\"_timestamp The last block where tokens were added to the job\",\"returns\":{\"_0\":\"_timestamp The last block where tokens were added to the job\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol\":\"Keep3rJobFundableCredits\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableCredits is IKeep3rJobFundableCredits, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice Cooldown between withdrawals\\n  uint256 internal constant _WITHDRAW_TOKENS_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  mapping(address => mapping(address => uint256)) public override jobTokenCreditsAddedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    // KP3R shouldn't be used for direct token payments\\n    if (_token == keep3rV1) revert TokenUnallowed();\\n    uint256 _before = IERC20(_token).balanceOf(address(this));\\n    IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\\n    uint256 _received = IERC20(_token).balanceOf(address(this)) - _before;\\n    uint256 _tokenFee = (_received * fee) / _BASE;\\n    jobTokenCredits[_job][_token] += _received - _tokenFee;\\n    jobTokenCreditsAddedAt[_job][_token] = block.timestamp;\\n    IERC20(_token).safeTransfer(governance, _tokenFee);\\n    _jobTokens[_job].add(_token);\\n\\n    emit TokenCreditAddition(_job, _token, msg.sender, _received);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external override nonReentrant onlyJobOwner(_job) {\\n    if (block.timestamp <= jobTokenCreditsAddedAt[_job][_token] + _WITHDRAW_TOKENS_COOLDOWN) revert JobTokenCreditsLocked();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientJobTokenCredits();\\n    if (disputes[_job]) revert JobDisputed();\\n\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_receiver, _amount);\\n\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit TokenCreditWithdrawal(_job, _token, _receiver, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0xb600d18903a008a1ca03743de7cef8330c2d5e66db52c900822551a4be75f7a5\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6297,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                "label": "jobTokenCreditsAddedAt",
                "offset": 0,
                "slot": "37",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol:Keep3rJobFundableCredits",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol": {
        "Keep3rJobFundableLiquidity": {
          "abi": [
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_liquidityCredits": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_periodCredits": "The credits the given job has at the current period"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_credits": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              }
            },
            "stateVariables": {
              "liquidityAmount": {
                "params": {
                  "_job": "The address of the job being checked",
                  "_liquidity": "The address of the liquidity we are checking"
                },
                "return": "_amount Amount of liquidity in the specified job",
                "returns": {
                  "_0": "_amount Amount of liquidity in the specified job"
                }
              },
              "rewardedAt": {
                "params": {
                  "_job": "The address of the job being checked"
                },
                "return": "_timestamp Timestamp of the last time the job was rewarded liquidity credits",
                "returns": {
                  "_0": "_timestamp Timestamp of the last time the job was rewarded liquidity credits"
                }
              },
              "workedAt": {
                "params": {
                  "_job": "The address of the job being checked"
                },
                "return": "_timestamp Timestamp of the last time the job was worked",
                "returns": {
                  "_0": "_timestamp Timestamp of the last time the job was worked"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addSlasher(address)": "68a9f19c",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityAmount(address,address)": "694798e6",
              "liquidityMinimum()": "633fb68f",
              "observeLiquidity(address)": "165e62e7",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardPeriodTime()": "768b5d90",
              "rewardedAt(address)": "a676f9ff",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "unbondTime()": "a7d2e784",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "workCompleted(address)": "1b44555e",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_liquidityCredits\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_periodCredits\":\"The credits the given job has at the current period\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_credits\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}}},\"stateVariables\":{\"liquidityAmount\":{\"params\":{\"_job\":\"The address of the job being checked\",\"_liquidity\":\"The address of the liquidity we are checking\"},\"return\":\"_amount Amount of liquidity in the specified job\",\"returns\":{\"_0\":\"_amount Amount of liquidity in the specified job\"}},\"rewardedAt\":{\"params\":{\"_job\":\"The address of the job being checked\"},\"return\":\"_timestamp Timestamp of the last time the job was rewarded liquidity credits\",\"returns\":{\"_0\":\"_timestamp Timestamp of the last time the job was rewarded liquidity credits\"}},\"workedAt\":{\"params\":{\"_job\":\"The address of the job being checked\"},\"return\":\"_timestamp Timestamp of the last time the job was worked\",\"returns\":{\"_0\":\"_timestamp Timestamp of the last time the job was worked\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol\":\"Keep3rJobFundableLiquidity\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/IPairManager.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '../../libraries/FullMath.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableLiquidity is IKeep3rJobFundableLiquidity, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice List of liquidities that are accepted in the system\\n  EnumerableSet.AddressSet internal _approvedLiquidities;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => mapping(address => uint256)) public override liquidityAmount;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override rewardedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override workedAt;\\n\\n  /// @notice Tracks an address and returns its TickCache\\n  mapping(address => TickCache) internal _tick;\\n\\n  // Views\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approvedLiquidities() external view override returns (address[] memory _list) {\\n    _list = _approvedLiquidities.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobPeriodCredits(address _job) public view override returns (uint256 _periodCredits) {\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        TickCache memory _tickCache = observeLiquidity(_liquidity);\\n        if (_tickCache.period != 0) {\\n          int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n          _periodCredits += _getReward(\\n            IKeep3rHelper(keep3rHelper).getKP3RsAtTick(liquidityAmount[_job][_liquidity], _tickDifference, rewardPeriodTime)\\n          );\\n        }\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobLiquidityCredits(address _job) public view override returns (uint256 _liquidityCredits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n\\n    // If the job was rewarded in the past 1 period time\\n    if ((block.timestamp - rewardedAt[_job]) < rewardPeriodTime) {\\n      // If the job has period credits, update minted job credits to new twap\\n      _liquidityCredits = _periodCredits > 0\\n        ? (_jobLiquidityCredits[_job] * _periodCredits) / _jobPeriodCredits[_job] // If the job has period credits, return remaining job credits updated to new twap\\n        : _jobLiquidityCredits[_job]; // If not, return remaining credits, forced credits should not be updated\\n    } else {\\n      // Else return a full period worth of credits if current credits have expired\\n      _liquidityCredits = _periodCredits;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function totalJobCredits(address _job) external view override returns (uint256 _credits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n    uint256 _cooldown = block.timestamp;\\n\\n    if ((rewardedAt[_job] > _period(block.timestamp - rewardPeriodTime))) {\\n      // Will calculate cooldown if it outdated\\n      if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will calculate cooldown from last reward reference in this period\\n        _cooldown -= (rewardedAt[_job] + rewardPeriodTime);\\n      } else {\\n        // Will calculate cooldown from last reward timestamp\\n        _cooldown -= rewardedAt[_job];\\n      }\\n    } else {\\n      // Will calculate cooldown from period start if expired\\n      _cooldown -= _period(block.timestamp);\\n    }\\n    _credits = jobLiquidityCredits(_job) + _phase(_cooldown, _periodCredits);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view override returns (uint256 _periodCredits) {\\n    if (_approvedLiquidities.contains(_liquidity)) {\\n      TickCache memory _tickCache = observeLiquidity(_liquidity);\\n      if (_tickCache.period != 0) {\\n        int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n        return _getReward(IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime));\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function observeLiquidity(address _liquidity) public view virtual override returns (TickCache memory _tickCache) {\\n    if (_tick[_liquidity].period == _period(block.timestamp)) {\\n      // Will return cached twaps if liquidity is updated\\n      _tickCache = _tick[_liquidity];\\n    } else {\\n      bool success;\\n      uint256 lastPeriod = _period(block.timestamp - rewardPeriodTime);\\n\\n      if (_tick[_liquidity].period == lastPeriod) {\\n        // Will only ask for current period accumulator if liquidity is outdated\\n        uint32[] memory _secondsAgo = new uint32[](1);\\n        int56 previousTick = _tick[_liquidity].current;\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n\\n        (_tickCache.current, , success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - previousTick;\\n      } else if (_tick[_liquidity].period < lastPeriod) {\\n        // Will ask for 2 accumulators if liquidity is expired\\n        uint32[] memory _secondsAgo = new uint32[](2);\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n        _secondsAgo[1] = uint32(block.timestamp - _period(block.timestamp) + rewardPeriodTime);\\n\\n        int56 _tickCumulative2;\\n        (_tickCache.current, _tickCumulative2, success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - _tickCumulative2;\\n      }\\n      if (success) {\\n        _tickCache.period = _period(block.timestamp);\\n      } else {\\n        delete _tickCache.period;\\n      }\\n    }\\n  }\\n\\n  // Methods\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external override onlyGovernance {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    _settleJobAccountance(_job);\\n    _jobLiquidityCredits[_job] += _amount;\\n    emit LiquidityCreditsForced(_job, rewardedAt[_job], _jobLiquidityCredits[_job]);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approveLiquidity(address _liquidity) external virtual override onlyGovernance {\\n    if (!_approvedLiquidities.add(_liquidity)) revert LiquidityPairApproved();\\n    _liquidityPool[_liquidity] = IPairManager(_liquidity).pool();\\n    _isKP3RToken0[_liquidity] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_liquidityPool[_liquidity]);\\n    _tick[_liquidity] = observeLiquidity(_liquidity);\\n    emit LiquidityApproval(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function revokeLiquidity(address _liquidity) external override onlyGovernance {\\n    if (!_approvedLiquidities.remove(_liquidity)) revert LiquidityPairUnexistent();\\n    emit LiquidityRevocation(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_approvedLiquidities.contains(_liquidity)) revert LiquidityPairUnapproved();\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n\\n    _jobLiquidities[_job].add(_liquidity);\\n\\n    _settleJobAccountance(_job);\\n\\n    if (_quoteLiquidity(liquidityAmount[_job][_liquidity] + _amount, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n    IERC20(_liquidity).safeTransferFrom(msg.sender, address(this), _amount);\\n    liquidityAmount[_job][_liquidity] += _amount;\\n    _jobPeriodCredits[_job] += _getReward(_quoteLiquidity(_amount, _liquidity));\\n    emit LiquidityAddition(_job, _liquidity, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlyJobOwner(_job) {\\n    canWithdrawAfter[_job][_liquidity] = block.timestamp + unbondTime;\\n    pendingUnbonds[_job][_liquidity] += _amount;\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n\\n    uint256 _remainingLiquidity = liquidityAmount[_job][_liquidity];\\n    if (_remainingLiquidity > 0 && _quoteLiquidity(_remainingLiquidity, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit Unbonding(_job, _liquidity, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external override onlyJobOwner(_job) {\\n    if (_receiver == address(0)) revert ZeroAddress();\\n    if (pendingUnbonds[_job][_liquidity] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[_job][_liquidity] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[_job]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[_job][_liquidity];\\n\\n    delete pendingUnbonds[_job][_liquidity];\\n    delete canWithdrawAfter[_job][_liquidity];\\n\\n    IERC20(_liquidity).safeTransfer(_receiver, _amount);\\n    emit LiquidityWithdrawal(_job, _liquidity, _receiver, _amount);\\n  }\\n\\n  // Internal functions\\n\\n  /// @notice Updates or rewards job liquidity credits depending on time since last job reward\\n  function _updateJobCreditsIfNeeded(address _job) internal returns (bool _rewarded) {\\n    if (rewardedAt[_job] < _period(block.timestamp)) {\\n      // Will exit function if job has been rewarded in current period\\n      if (rewardedAt[_job] <= _period(block.timestamp - rewardPeriodTime)) {\\n        // Will reset job to period syncronicity if a full period passed without rewards\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] = _period(block.timestamp);\\n        _rewarded = true;\\n      } else if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will reset job's syncronicity if last reward was more than epoch ago\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] += rewardPeriodTime;\\n        _rewarded = true;\\n      } else if (workedAt[_job] < _period(block.timestamp)) {\\n        // First keeper on period has to update job accountance to current twaps\\n        uint256 previousPeriodCredits = _jobPeriodCredits[_job];\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = (_jobLiquidityCredits[_job] * _jobPeriodCredits[_job]) / previousPeriodCredits;\\n        // Updating job accountance does not reward job\\n      }\\n    }\\n  }\\n\\n  /// @notice Only called if _jobLiquidityCredits < payment\\n  function _rewardJobCredits(address _job) internal {\\n    /// @notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)\\n    /* WARNING: this allows to top up _jobLiquidityCredits to a max of 1.99 but have to spend at least 1 */\\n    _jobLiquidityCredits[_job] += _phase(block.timestamp - rewardedAt[_job], _jobPeriodCredits[_job]);\\n    rewardedAt[_job] = block.timestamp;\\n  }\\n\\n  /// @notice Updates accountance for _jobPeriodCredits\\n  function _updateJobPeriod(address _job) internal {\\n    _jobPeriodCredits[_job] = _calculateJobPeriodCredits(_job);\\n  }\\n\\n  /// @notice Quotes the outdated job liquidities and calculates _periodCredits\\n  /// @dev This function is also responsible for keeping the KP3R/WETH quote updated\\n  function _calculateJobPeriodCredits(address _job) internal returns (uint256 _periodCredits) {\\n    if (_tick[kp3rWethPool].period != _period(block.timestamp)) {\\n      // Updates KP3R/WETH quote if needed\\n      _tick[kp3rWethPool] = observeLiquidity(kp3rWethPool);\\n    }\\n\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        if (_tick[_liquidity].period != _period(block.timestamp)) {\\n          // Updates liquidity cache only if needed\\n          _tick[_liquidity] = observeLiquidity(_liquidity);\\n        }\\n        _periodCredits += _getReward(_quoteLiquidity(liquidityAmount[_job][_liquidity], _liquidity));\\n      }\\n    }\\n  }\\n\\n  /// @notice Updates job accountance calculating the impact of the unbonded liquidity amount\\n  function _unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) internal nonReentrant {\\n    if (!_jobLiquidities[_job].contains(_liquidity)) revert JobLiquidityUnexistent();\\n    if (liquidityAmount[_job][_liquidity] < _amount) revert JobLiquidityInsufficient();\\n\\n    // Ensures current twaps in job liquidities\\n    _updateJobPeriod(_job);\\n    uint256 _periodCreditsToRemove = _getReward(_quoteLiquidity(_amount, _liquidity));\\n\\n    // A liquidity can be revoked causing a job to have 0 periodCredits\\n    if (_jobPeriodCredits[_job] > 0) {\\n      // Removes a % correspondant to a full rewardPeriodTime for the liquidity withdrawn vs all of the liquidities\\n      _jobLiquidityCredits[_job] -= (_jobLiquidityCredits[_job] * _periodCreditsToRemove) / _jobPeriodCredits[_job];\\n      _jobPeriodCredits[_job] -= _periodCreditsToRemove;\\n    }\\n\\n    liquidityAmount[_job][_liquidity] -= _amount;\\n    if (liquidityAmount[_job][_liquidity] == 0) {\\n      _jobLiquidities[_job].remove(_liquidity);\\n    }\\n  }\\n\\n  /// @notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed\\n  function _phase(uint256 _timePassed, uint256 _multiplier) internal view returns (uint256 _result) {\\n    if (_timePassed < rewardPeriodTime) {\\n      _result = (_timePassed * _multiplier) / rewardPeriodTime;\\n    } else _result = _multiplier;\\n  }\\n\\n  /// @notice Returns the start of the period of the provided timestamp\\n  function _period(uint256 _timestamp) internal view returns (uint256 _periodTimestamp) {\\n    return _timestamp - (_timestamp % rewardPeriodTime);\\n  }\\n\\n  /// @notice Calculates relation between rewardPeriod and inflationPeriod\\n  function _getReward(uint256 _baseAmount) internal view returns (uint256 _credits) {\\n    return FullMath.mulDiv(_baseAmount, rewardPeriodTime, inflationPeriod);\\n  }\\n\\n  /// @notice Returns underlying KP3R amount for a given liquidity amount\\n  function _quoteLiquidity(uint256 _amount, address _liquidity) internal view virtual returns (uint256 _quote) {\\n    if (_tick[_liquidity].period != 0) {\\n      int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tick[_liquidity].difference : -_tick[_liquidity].difference;\\n      _quote = IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime);\\n    }\\n  }\\n\\n  /// @notice Updates job credits to current quotes and rewards job's pending minted credits\\n  /// @dev Ensures a maximum of 1 period of credits\\n  function _settleJobAccountance(address _job) internal virtual {\\n    _updateJobCreditsIfNeeded(_job);\\n    _rewardJobCredits(_job);\\n    _jobLiquidityCredits[_job] = Math.min(_jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n  }\\n}\\n\",\"keccak256\":\"0x7747b2a0ee0c4e3322e92a3e1fc0f6f03be63942bc398009726b58f8c9f79cf0\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6540,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "_approvedLiquidities",
                "offset": 0,
                "slot": "37",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 6548,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "liquidityAmount",
                "offset": 0,
                "slot": "39",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6554,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "rewardedAt",
                "offset": 0,
                "slot": "40",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6560,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "workedAt",
                "offset": 0,
                "slot": "41",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6566,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                "label": "_tick",
                "offset": 0,
                "slot": "42",
                "type": "t_mapping(t_address,t_struct(TickCache)13178_storage)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_int56": {
                "encoding": "inplace",
                "label": "int56",
                "numberOfBytes": "7"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_struct(TickCache)13178_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)",
                "numberOfBytes": "32",
                "value": "t_struct(TickCache)13178_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(TickCache)13178_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rJobFundableLiquidity.TickCache",
                "members": [
                  {
                    "astId": 13173,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                    "label": "current",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13175,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                    "label": "difference",
                    "offset": 7,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13177,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol:Keep3rJobFundableLiquidity",
                    "label": "period",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol": {
        "Keep3rJobManager": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyAKeeper",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobAlreadyAdded",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOwner",
                  "type": "address"
                }
              ],
              "name": "JobAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "addJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addJob(address)": {
                "params": {
                  "_job": "Address of the contract for which work should be performed"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addJob(address)": "c5198abc",
              "addSlasher(address)": "68a9f19c",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityMinimum()": "633fb68f",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "rewardPeriodTime()": "768b5d90",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "unbondTime()": "a7d2e784",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyAKeeper\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOwner\",\"type\":\"address\"}],\"name\":\"JobAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"addJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addJob(address)\":{\"params\":{\"_job\":\"Address of the contract for which work should be performed\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAKeeper()\":[{\"notice\":\"Throws when the address that is trying to register as a keeper is already a keeper\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobAlreadyAdded()\":[{\"notice\":\"Throws when trying to add a job that has already been added\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobAddition(address,address)\":{\"notice\":\"Emitted when Keep3rJobManager#addJob is called\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addJob(address)\":{\"notice\":\"Allows any caller to add a new job\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/jobs/Keep3rJobManager.sol\":\"Keep3rJobManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rRoles.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobManager is IKeep3rJobManager, Keep3rJobOwnership, Keep3rRoles, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @inheritdoc IKeep3rJobManager\\n  function addJob(address _job) external override {\\n    if (_jobs.contains(_job)) revert JobAlreadyAdded();\\n    if (hasBonded[_job]) revert AlreadyAKeeper();\\n    _jobs.add(_job);\\n    jobOwner[_job] = msg.sender;\\n    emit JobAddition(msg.sender, _job);\\n  }\\n}\\n\",\"keccak256\":\"0xa1fa3fde2b28e28476f0af438049043e695372ee24e1e780b67f00d14d5f660e\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 8303,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "jobOwner",
                "offset": 0,
                "slot": "0",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "_keepers",
                "offset": 0,
                "slot": "2",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "workCompleted",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "firstSeen",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "disputes",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "bonds",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "hasBonded",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "_jobs",
                "offset": 0,
                "slot": "20",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "governance",
                "offset": 0,
                "slot": "22",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "slashers",
                "offset": 0,
                "slot": "24",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "disputers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "26",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "bondTime",
                "offset": 0,
                "slot": "30",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "unbondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                "label": "fee",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol:Keep3rJobManager",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyAKeeper()": [
                {
                  "notice": "Throws when the address that is trying to register as a keeper is already a keeper"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobAlreadyAdded()": [
                {
                  "notice": "Throws when trying to add a job that has already been added"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobAddition(address,address)": {
                "notice": "Emitted when Keep3rJobManager#addJob is called"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addJob(address)": {
                "notice": "Allows any caller to add a new job"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol": {
        "Keep3rJobMigration": {
          "abi": [
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationImpossible",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationSuccessful",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "acceptJobMigration",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "migrateJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingJobMigrations",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobMigration(address,address)": {
                "details": "Unbond/withdraw process doesn't get migrated",
                "params": {
                  "_fromJob": "The address of the job that requested to migrate",
                  "_toJob": "The address to which the job wants to migrate to"
                }
              },
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_liquidityCredits": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_periodCredits": "The credits the given job has at the current period"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "migrateJob(address,address)": {
                "params": {
                  "_fromJob": "The address of the job that is requesting to migrate",
                  "_toJob": "The address at which the job is requesting to migrate"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_credits": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              }
            },
            "stateVariables": {
              "pendingJobMigrations": {
                "return": "_toJob The address to which the job has requested to migrate to",
                "returns": {
                  "_0": "_toJob The address to which the job has requested to migrate to"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobMigration(address,address)": "af320e81",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addSlasher(address)": "68a9f19c",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityAmount(address,address)": "694798e6",
              "liquidityMinimum()": "633fb68f",
              "migrateJob(address,address)": "90a4684e",
              "observeLiquidity(address)": "165e62e7",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingJobMigrations(address)": "ec8ca643",
              "pendingUnbonds(address,address)": "21040b01",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardPeriodTime()": "768b5d90",
              "rewardedAt(address)": "a676f9ff",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "unbondTime()": "a7d2e784",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workCompleted(address)": "1b44555e",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationImpossible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationSuccessful\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"acceptJobMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"migrateJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingJobMigrations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobMigration(address,address)\":{\"details\":\"Unbond/withdraw process doesn't get migrated\",\"params\":{\"_fromJob\":\"The address of the job that requested to migrate\",\"_toJob\":\"The address to which the job wants to migrate to\"}},\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_liquidityCredits\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_periodCredits\":\"The credits the given job has at the current period\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"migrateJob(address,address)\":{\"params\":{\"_fromJob\":\"The address of the job that is requesting to migrate\",\"_toJob\":\"The address at which the job is requesting to migrate\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_credits\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}}},\"stateVariables\":{\"pendingJobMigrations\":{\"return\":\"_toJob The address to which the job has requested to migrate to\",\"returns\":{\"_0\":\"_toJob The address to which the job has requested to migrate to\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobMigrationImpossible()\":[{\"notice\":\"Throws when the address of the job that requests to migrate wants to migrate to its same address\"}],\"JobMigrationLocked()\":[{\"notice\":\"Throws when cooldown between migrations has not yet passed\"}],\"JobMigrationUnavailable()\":[{\"notice\":\"Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobMigrationRequested(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#migrateJob function is called\"},\"JobMigrationSuccessful(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#acceptJobMigration function is called\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobMigration(address,address)\":{\"notice\":\"Completes the migration process for a job\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"migrateJob(address,address)\":{\"notice\":\"Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingJobMigrations(address)\":{\"notice\":\"Maps the jobs that have requested a migration to the address they have requested to migrate to\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol\":\"Keep3rJobMigration\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableCredits is IKeep3rJobFundableCredits, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice Cooldown between withdrawals\\n  uint256 internal constant _WITHDRAW_TOKENS_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  mapping(address => mapping(address => uint256)) public override jobTokenCreditsAddedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    // KP3R shouldn't be used for direct token payments\\n    if (_token == keep3rV1) revert TokenUnallowed();\\n    uint256 _before = IERC20(_token).balanceOf(address(this));\\n    IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\\n    uint256 _received = IERC20(_token).balanceOf(address(this)) - _before;\\n    uint256 _tokenFee = (_received * fee) / _BASE;\\n    jobTokenCredits[_job][_token] += _received - _tokenFee;\\n    jobTokenCreditsAddedAt[_job][_token] = block.timestamp;\\n    IERC20(_token).safeTransfer(governance, _tokenFee);\\n    _jobTokens[_job].add(_token);\\n\\n    emit TokenCreditAddition(_job, _token, msg.sender, _received);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external override nonReentrant onlyJobOwner(_job) {\\n    if (block.timestamp <= jobTokenCreditsAddedAt[_job][_token] + _WITHDRAW_TOKENS_COOLDOWN) revert JobTokenCreditsLocked();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientJobTokenCredits();\\n    if (disputes[_job]) revert JobDisputed();\\n\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_receiver, _amount);\\n\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit TokenCreditWithdrawal(_job, _token, _receiver, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0xb600d18903a008a1ca03743de7cef8330c2d5e66db52c900822551a4be75f7a5\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/IPairManager.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '../../libraries/FullMath.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableLiquidity is IKeep3rJobFundableLiquidity, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice List of liquidities that are accepted in the system\\n  EnumerableSet.AddressSet internal _approvedLiquidities;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => mapping(address => uint256)) public override liquidityAmount;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override rewardedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override workedAt;\\n\\n  /// @notice Tracks an address and returns its TickCache\\n  mapping(address => TickCache) internal _tick;\\n\\n  // Views\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approvedLiquidities() external view override returns (address[] memory _list) {\\n    _list = _approvedLiquidities.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobPeriodCredits(address _job) public view override returns (uint256 _periodCredits) {\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        TickCache memory _tickCache = observeLiquidity(_liquidity);\\n        if (_tickCache.period != 0) {\\n          int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n          _periodCredits += _getReward(\\n            IKeep3rHelper(keep3rHelper).getKP3RsAtTick(liquidityAmount[_job][_liquidity], _tickDifference, rewardPeriodTime)\\n          );\\n        }\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobLiquidityCredits(address _job) public view override returns (uint256 _liquidityCredits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n\\n    // If the job was rewarded in the past 1 period time\\n    if ((block.timestamp - rewardedAt[_job]) < rewardPeriodTime) {\\n      // If the job has period credits, update minted job credits to new twap\\n      _liquidityCredits = _periodCredits > 0\\n        ? (_jobLiquidityCredits[_job] * _periodCredits) / _jobPeriodCredits[_job] // If the job has period credits, return remaining job credits updated to new twap\\n        : _jobLiquidityCredits[_job]; // If not, return remaining credits, forced credits should not be updated\\n    } else {\\n      // Else return a full period worth of credits if current credits have expired\\n      _liquidityCredits = _periodCredits;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function totalJobCredits(address _job) external view override returns (uint256 _credits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n    uint256 _cooldown = block.timestamp;\\n\\n    if ((rewardedAt[_job] > _period(block.timestamp - rewardPeriodTime))) {\\n      // Will calculate cooldown if it outdated\\n      if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will calculate cooldown from last reward reference in this period\\n        _cooldown -= (rewardedAt[_job] + rewardPeriodTime);\\n      } else {\\n        // Will calculate cooldown from last reward timestamp\\n        _cooldown -= rewardedAt[_job];\\n      }\\n    } else {\\n      // Will calculate cooldown from period start if expired\\n      _cooldown -= _period(block.timestamp);\\n    }\\n    _credits = jobLiquidityCredits(_job) + _phase(_cooldown, _periodCredits);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view override returns (uint256 _periodCredits) {\\n    if (_approvedLiquidities.contains(_liquidity)) {\\n      TickCache memory _tickCache = observeLiquidity(_liquidity);\\n      if (_tickCache.period != 0) {\\n        int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n        return _getReward(IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime));\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function observeLiquidity(address _liquidity) public view virtual override returns (TickCache memory _tickCache) {\\n    if (_tick[_liquidity].period == _period(block.timestamp)) {\\n      // Will return cached twaps if liquidity is updated\\n      _tickCache = _tick[_liquidity];\\n    } else {\\n      bool success;\\n      uint256 lastPeriod = _period(block.timestamp - rewardPeriodTime);\\n\\n      if (_tick[_liquidity].period == lastPeriod) {\\n        // Will only ask for current period accumulator if liquidity is outdated\\n        uint32[] memory _secondsAgo = new uint32[](1);\\n        int56 previousTick = _tick[_liquidity].current;\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n\\n        (_tickCache.current, , success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - previousTick;\\n      } else if (_tick[_liquidity].period < lastPeriod) {\\n        // Will ask for 2 accumulators if liquidity is expired\\n        uint32[] memory _secondsAgo = new uint32[](2);\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n        _secondsAgo[1] = uint32(block.timestamp - _period(block.timestamp) + rewardPeriodTime);\\n\\n        int56 _tickCumulative2;\\n        (_tickCache.current, _tickCumulative2, success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - _tickCumulative2;\\n      }\\n      if (success) {\\n        _tickCache.period = _period(block.timestamp);\\n      } else {\\n        delete _tickCache.period;\\n      }\\n    }\\n  }\\n\\n  // Methods\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external override onlyGovernance {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    _settleJobAccountance(_job);\\n    _jobLiquidityCredits[_job] += _amount;\\n    emit LiquidityCreditsForced(_job, rewardedAt[_job], _jobLiquidityCredits[_job]);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approveLiquidity(address _liquidity) external virtual override onlyGovernance {\\n    if (!_approvedLiquidities.add(_liquidity)) revert LiquidityPairApproved();\\n    _liquidityPool[_liquidity] = IPairManager(_liquidity).pool();\\n    _isKP3RToken0[_liquidity] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_liquidityPool[_liquidity]);\\n    _tick[_liquidity] = observeLiquidity(_liquidity);\\n    emit LiquidityApproval(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function revokeLiquidity(address _liquidity) external override onlyGovernance {\\n    if (!_approvedLiquidities.remove(_liquidity)) revert LiquidityPairUnexistent();\\n    emit LiquidityRevocation(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_approvedLiquidities.contains(_liquidity)) revert LiquidityPairUnapproved();\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n\\n    _jobLiquidities[_job].add(_liquidity);\\n\\n    _settleJobAccountance(_job);\\n\\n    if (_quoteLiquidity(liquidityAmount[_job][_liquidity] + _amount, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n    IERC20(_liquidity).safeTransferFrom(msg.sender, address(this), _amount);\\n    liquidityAmount[_job][_liquidity] += _amount;\\n    _jobPeriodCredits[_job] += _getReward(_quoteLiquidity(_amount, _liquidity));\\n    emit LiquidityAddition(_job, _liquidity, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlyJobOwner(_job) {\\n    canWithdrawAfter[_job][_liquidity] = block.timestamp + unbondTime;\\n    pendingUnbonds[_job][_liquidity] += _amount;\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n\\n    uint256 _remainingLiquidity = liquidityAmount[_job][_liquidity];\\n    if (_remainingLiquidity > 0 && _quoteLiquidity(_remainingLiquidity, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit Unbonding(_job, _liquidity, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external override onlyJobOwner(_job) {\\n    if (_receiver == address(0)) revert ZeroAddress();\\n    if (pendingUnbonds[_job][_liquidity] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[_job][_liquidity] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[_job]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[_job][_liquidity];\\n\\n    delete pendingUnbonds[_job][_liquidity];\\n    delete canWithdrawAfter[_job][_liquidity];\\n\\n    IERC20(_liquidity).safeTransfer(_receiver, _amount);\\n    emit LiquidityWithdrawal(_job, _liquidity, _receiver, _amount);\\n  }\\n\\n  // Internal functions\\n\\n  /// @notice Updates or rewards job liquidity credits depending on time since last job reward\\n  function _updateJobCreditsIfNeeded(address _job) internal returns (bool _rewarded) {\\n    if (rewardedAt[_job] < _period(block.timestamp)) {\\n      // Will exit function if job has been rewarded in current period\\n      if (rewardedAt[_job] <= _period(block.timestamp - rewardPeriodTime)) {\\n        // Will reset job to period syncronicity if a full period passed without rewards\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] = _period(block.timestamp);\\n        _rewarded = true;\\n      } else if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will reset job's syncronicity if last reward was more than epoch ago\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] += rewardPeriodTime;\\n        _rewarded = true;\\n      } else if (workedAt[_job] < _period(block.timestamp)) {\\n        // First keeper on period has to update job accountance to current twaps\\n        uint256 previousPeriodCredits = _jobPeriodCredits[_job];\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = (_jobLiquidityCredits[_job] * _jobPeriodCredits[_job]) / previousPeriodCredits;\\n        // Updating job accountance does not reward job\\n      }\\n    }\\n  }\\n\\n  /// @notice Only called if _jobLiquidityCredits < payment\\n  function _rewardJobCredits(address _job) internal {\\n    /// @notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)\\n    /* WARNING: this allows to top up _jobLiquidityCredits to a max of 1.99 but have to spend at least 1 */\\n    _jobLiquidityCredits[_job] += _phase(block.timestamp - rewardedAt[_job], _jobPeriodCredits[_job]);\\n    rewardedAt[_job] = block.timestamp;\\n  }\\n\\n  /// @notice Updates accountance for _jobPeriodCredits\\n  function _updateJobPeriod(address _job) internal {\\n    _jobPeriodCredits[_job] = _calculateJobPeriodCredits(_job);\\n  }\\n\\n  /// @notice Quotes the outdated job liquidities and calculates _periodCredits\\n  /// @dev This function is also responsible for keeping the KP3R/WETH quote updated\\n  function _calculateJobPeriodCredits(address _job) internal returns (uint256 _periodCredits) {\\n    if (_tick[kp3rWethPool].period != _period(block.timestamp)) {\\n      // Updates KP3R/WETH quote if needed\\n      _tick[kp3rWethPool] = observeLiquidity(kp3rWethPool);\\n    }\\n\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        if (_tick[_liquidity].period != _period(block.timestamp)) {\\n          // Updates liquidity cache only if needed\\n          _tick[_liquidity] = observeLiquidity(_liquidity);\\n        }\\n        _periodCredits += _getReward(_quoteLiquidity(liquidityAmount[_job][_liquidity], _liquidity));\\n      }\\n    }\\n  }\\n\\n  /// @notice Updates job accountance calculating the impact of the unbonded liquidity amount\\n  function _unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) internal nonReentrant {\\n    if (!_jobLiquidities[_job].contains(_liquidity)) revert JobLiquidityUnexistent();\\n    if (liquidityAmount[_job][_liquidity] < _amount) revert JobLiquidityInsufficient();\\n\\n    // Ensures current twaps in job liquidities\\n    _updateJobPeriod(_job);\\n    uint256 _periodCreditsToRemove = _getReward(_quoteLiquidity(_amount, _liquidity));\\n\\n    // A liquidity can be revoked causing a job to have 0 periodCredits\\n    if (_jobPeriodCredits[_job] > 0) {\\n      // Removes a % correspondant to a full rewardPeriodTime for the liquidity withdrawn vs all of the liquidities\\n      _jobLiquidityCredits[_job] -= (_jobLiquidityCredits[_job] * _periodCreditsToRemove) / _jobPeriodCredits[_job];\\n      _jobPeriodCredits[_job] -= _periodCreditsToRemove;\\n    }\\n\\n    liquidityAmount[_job][_liquidity] -= _amount;\\n    if (liquidityAmount[_job][_liquidity] == 0) {\\n      _jobLiquidities[_job].remove(_liquidity);\\n    }\\n  }\\n\\n  /// @notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed\\n  function _phase(uint256 _timePassed, uint256 _multiplier) internal view returns (uint256 _result) {\\n    if (_timePassed < rewardPeriodTime) {\\n      _result = (_timePassed * _multiplier) / rewardPeriodTime;\\n    } else _result = _multiplier;\\n  }\\n\\n  /// @notice Returns the start of the period of the provided timestamp\\n  function _period(uint256 _timestamp) internal view returns (uint256 _periodTimestamp) {\\n    return _timestamp - (_timestamp % rewardPeriodTime);\\n  }\\n\\n  /// @notice Calculates relation between rewardPeriod and inflationPeriod\\n  function _getReward(uint256 _baseAmount) internal view returns (uint256 _credits) {\\n    return FullMath.mulDiv(_baseAmount, rewardPeriodTime, inflationPeriod);\\n  }\\n\\n  /// @notice Returns underlying KP3R amount for a given liquidity amount\\n  function _quoteLiquidity(uint256 _amount, address _liquidity) internal view virtual returns (uint256 _quote) {\\n    if (_tick[_liquidity].period != 0) {\\n      int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tick[_liquidity].difference : -_tick[_liquidity].difference;\\n      _quote = IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime);\\n    }\\n  }\\n\\n  /// @notice Updates job credits to current quotes and rewards job's pending minted credits\\n  /// @dev Ensures a maximum of 1 period of credits\\n  function _settleJobAccountance(address _job) internal virtual {\\n    _updateJobCreditsIfNeeded(_job);\\n    _rewardJobCredits(_job);\\n    _jobLiquidityCredits[_job] = Math.min(_jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n  }\\n}\\n\",\"keccak256\":\"0x7747b2a0ee0c4e3322e92a3e1fc0f6f03be63942bc398009726b58f8c9f79cf0\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\nimport './Keep3rJobFundableCredits.sol';\\nimport './Keep3rJobFundableLiquidity.sol';\\n\\nabstract contract Keep3rJobMigration is IKeep3rJobMigration, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  uint256 internal constant _MIGRATION_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  mapping(address => address) public override pendingJobMigrations;\\n  mapping(address => mapping(address => uint256)) internal _migrationCreatedAt;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function migrateJob(address _fromJob, address _toJob) external override onlyJobOwner(_fromJob) {\\n    if (_fromJob == _toJob) revert JobMigrationImpossible();\\n\\n    pendingJobMigrations[_fromJob] = _toJob;\\n    _migrationCreatedAt[_fromJob][_toJob] = block.timestamp;\\n\\n    emit JobMigrationRequested(_fromJob, _toJob);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function acceptJobMigration(address _fromJob, address _toJob) external override onlyJobOwner(_toJob) {\\n    if (disputes[_fromJob] || disputes[_toJob]) revert JobDisputed();\\n    if (pendingJobMigrations[_fromJob] != _toJob) revert JobMigrationUnavailable();\\n    if (block.timestamp < _migrationCreatedAt[_fromJob][_toJob] + _MIGRATION_COOLDOWN) revert JobMigrationLocked();\\n\\n    // force job credits update for both jobs\\n    _settleJobAccountance(_fromJob);\\n    _settleJobAccountance(_toJob);\\n\\n    // migrate tokens\\n    while (_jobTokens[_fromJob].length() > 0) {\\n      address _tokenToMigrate = _jobTokens[_fromJob].at(0);\\n      jobTokenCredits[_toJob][_tokenToMigrate] += jobTokenCredits[_fromJob][_tokenToMigrate];\\n      delete jobTokenCredits[_fromJob][_tokenToMigrate];\\n      _jobTokens[_fromJob].remove(_tokenToMigrate);\\n      _jobTokens[_toJob].add(_tokenToMigrate);\\n    }\\n\\n    // migrate liquidities\\n    while (_jobLiquidities[_fromJob].length() > 0) {\\n      address _liquidity = _jobLiquidities[_fromJob].at(0);\\n\\n      liquidityAmount[_toJob][_liquidity] += liquidityAmount[_fromJob][_liquidity];\\n      delete liquidityAmount[_fromJob][_liquidity];\\n\\n      _jobLiquidities[_toJob].add(_liquidity);\\n      _jobLiquidities[_fromJob].remove(_liquidity);\\n    }\\n\\n    // migrate job balances\\n    _jobPeriodCredits[_toJob] += _jobPeriodCredits[_fromJob];\\n    delete _jobPeriodCredits[_fromJob];\\n\\n    _jobLiquidityCredits[_toJob] += _jobLiquidityCredits[_fromJob];\\n    delete _jobLiquidityCredits[_fromJob];\\n\\n    // stop _fromJob from being a job\\n    delete rewardedAt[_fromJob];\\n    _jobs.remove(_fromJob);\\n\\n    // delete unused data slots\\n    delete jobOwner[_fromJob];\\n    delete jobPendingOwner[_fromJob];\\n    delete _migrationCreatedAt[_fromJob][_toJob];\\n    delete pendingJobMigrations[_fromJob];\\n\\n    emit JobMigrationSuccessful(_fromJob, _toJob);\\n  }\\n}\\n\",\"keccak256\":\"0xd46c3c9ce970098d8d75f11966894a341824aceb40583fcfbbc0ebda93d869f9\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6297,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "jobTokenCreditsAddedAt",
                "offset": 0,
                "slot": "37",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6540,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "_approvedLiquidities",
                "offset": 0,
                "slot": "38",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 6548,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "liquidityAmount",
                "offset": 0,
                "slot": "40",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6554,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "rewardedAt",
                "offset": 0,
                "slot": "41",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6560,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "workedAt",
                "offset": 0,
                "slot": "42",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6566,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "_tick",
                "offset": 0,
                "slot": "43",
                "type": "t_mapping(t_address,t_struct(TickCache)13178_storage)"
              },
              {
                "astId": 8024,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "pendingJobMigrations",
                "offset": 0,
                "slot": "44",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8030,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                "label": "_migrationCreatedAt",
                "offset": 0,
                "slot": "45",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_int56": {
                "encoding": "inplace",
                "label": "int56",
                "numberOfBytes": "7"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_struct(TickCache)13178_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)",
                "numberOfBytes": "32",
                "value": "t_struct(TickCache)13178_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(TickCache)13178_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rJobFundableLiquidity.TickCache",
                "members": [
                  {
                    "astId": 13173,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                    "label": "current",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13175,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                    "label": "difference",
                    "offset": 7,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13177,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol:Keep3rJobMigration",
                    "label": "period",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobMigrationImpossible()": [
                {
                  "notice": "Throws when the address of the job that requests to migrate wants to migrate to its same address"
                }
              ],
              "JobMigrationLocked()": [
                {
                  "notice": "Throws when cooldown between migrations has not yet passed"
                }
              ],
              "JobMigrationUnavailable()": [
                {
                  "notice": "Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobMigrationRequested(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#migrateJob function is called"
              },
              "JobMigrationSuccessful(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#acceptJobMigration function is called"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobMigration(address,address)": {
                "notice": "Completes the migration process for a job"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "migrateJob(address,address)": {
                "notice": "Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingJobMigrations(address)": {
                "notice": "Maps the jobs that have requested a migration to the address they have requested to migrate to"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol": {
        "Keep3rJobOwnership": {
          "abi": [
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              }
            },
            "stateVariables": {
              "jobOwner": {
                "params": {
                  "_job": "The address of the job"
                },
                "return": "_owner The address of the owner of the job",
                "returns": {
                  "_0": "_owner The address of the owner of the job"
                }
              },
              "jobPendingOwner": {
                "params": {
                  "_job": "The address of the job"
                },
                "return": "_pendingOwner The address of the pending owner of the job",
                "returns": {
                  "_0": "_pendingOwner The address of the pending owner of the job"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptJobOwnership(address)": "59a2255e",
              "changeJobOwnership(address,address)": "594a3a93",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}}},\"stateVariables\":{\"jobOwner\":{\"params\":{\"_job\":\"The address of the job\"},\"return\":\"_owner The address of the owner of the job\",\"returns\":{\"_0\":\"_owner The address of the owner of the job\"}},\"jobPendingOwner\":{\"params\":{\"_job\":\"The address of the job\"},\"return\":\"_pendingOwner The address of the pending owner of the job\",\"returns\":{\"_0\":\"_pendingOwner The address of the pending owner of the job\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}]},\"events\":{\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"}},\"kind\":\"user\",\"methods\":{\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":\"Keep3rJobOwnership\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 8303,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol:Keep3rJobOwnership",
                "label": "jobOwner",
                "offset": 0,
                "slot": "0",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol:Keep3rJobOwnership",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              }
            }
          },
          "userdoc": {
            "errors": {
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ]
            },
            "events": {
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              }
            },
            "kind": "user",
            "methods": {
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol": {
        "Keep3rJobWorkable": {
          "abi": [
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientFunds",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationImpossible",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationSuccessful",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperValidation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperWork",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "acceptJobMigration",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                }
              ],
              "name": "bondedPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "directTokenPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_minBond",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_earned",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_age",
                  "type": "uint256"
                }
              ],
              "name": "isBondedKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isBondedKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "isKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "migrateJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingJobMigrations",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "worked",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobMigration(address,address)": {
                "details": "Unbond/withdraw process doesn't get migrated",
                "params": {
                  "_fromJob": "The address of the job that requested to migrate",
                  "_toJob": "The address to which the job wants to migrate to"
                }
              },
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "bondedPayment(address,uint256)": {
                "details": "Pays the keeper that performs the work with KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work",
                  "_payment": "The reward that should be allocated for the job"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "directTokenPayment(address,address,uint256)": {
                "details": "Pays the keeper that performs the work with a specific token",
                "params": {
                  "_amount": "The reward that should be allocated",
                  "_keeper": "Address of the keeper that performed the work",
                  "_token": "The asset being awarded to the keeper"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "details": "Should be used for protected functions",
                "params": {
                  "_age": "The minimum keeper age required",
                  "_bond": "The bond token being evaluated",
                  "_earned": "The minimum funds earned in the keepers lifetime",
                  "_keeper": "The keeper to check",
                  "_minBond": "The minimum amount of bonded tokens"
                },
                "returns": {
                  "_isBondedKeeper": "Whether the `_keeper` meets the given requirements"
                }
              },
              "isKeeper(address)": {
                "details": "Can be used for general (non critical) functions",
                "params": {
                  "_keeper": "The keeper being investigated"
                },
                "returns": {
                  "_isKeeper": "Whether the address passed as a parameter is a keeper or not"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_liquidityCredits": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_periodCredits": "The credits the given job has at the current period"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "migrateJob(address,address)": {
                "params": {
                  "_fromJob": "The address of the job that is requesting to migrate",
                  "_toJob": "The address at which the job is requesting to migrate"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_credits": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              },
              "worked(address)": {
                "details": "Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobMigration(address,address)": "af320e81",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addSlasher(address)": "68a9f19c",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bondTime()": "5ebe23f0",
              "bondedPayment(address,uint256)": "11466d72",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "directTokenPayment(address,address,uint256)": "dd2080d6",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "isBondedKeeper(address,address,uint256,uint256,uint256)": "f9d46cf2",
              "isKeeper(address)": "6ba42aaa",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityAmount(address,address)": "694798e6",
              "liquidityMinimum()": "633fb68f",
              "migrateJob(address,address)": "90a4684e",
              "observeLiquidity(address)": "165e62e7",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingJobMigrations(address)": "ec8ca643",
              "pendingUnbonds(address,address)": "21040b01",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardPeriodTime()": "768b5d90",
              "rewardedAt(address)": "a676f9ff",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "unbondTime()": "a7d2e784",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workCompleted(address)": "1b44555e",
              "worked(address)": "5feeb794",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationImpossible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationSuccessful\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperValidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperWork\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"acceptJobMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"}],\"name\":\"bondedPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"directTokenPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_earned\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_age\",\"type\":\"uint256\"}],\"name\":\"isBondedKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isBondedKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"isKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"migrateJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingJobMigrations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"worked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobMigration(address,address)\":{\"details\":\"Unbond/withdraw process doesn't get migrated\",\"params\":{\"_fromJob\":\"The address of the job that requested to migrate\",\"_toJob\":\"The address to which the job wants to migrate to\"}},\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"bondedPayment(address,uint256)\":{\"details\":\"Pays the keeper that performs the work with KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\",\"_payment\":\"The reward that should be allocated for the job\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"directTokenPayment(address,address,uint256)\":{\"details\":\"Pays the keeper that performs the work with a specific token\",\"params\":{\"_amount\":\"The reward that should be allocated\",\"_keeper\":\"Address of the keeper that performed the work\",\"_token\":\"The asset being awarded to the keeper\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"details\":\"Should be used for protected functions\",\"params\":{\"_age\":\"The minimum keeper age required\",\"_bond\":\"The bond token being evaluated\",\"_earned\":\"The minimum funds earned in the keepers lifetime\",\"_keeper\":\"The keeper to check\",\"_minBond\":\"The minimum amount of bonded tokens\"},\"returns\":{\"_isBondedKeeper\":\"Whether the `_keeper` meets the given requirements\"}},\"isKeeper(address)\":{\"details\":\"Can be used for general (non critical) functions\",\"params\":{\"_keeper\":\"The keeper being investigated\"},\"returns\":{\"_isKeeper\":\"Whether the address passed as a parameter is a keeper or not\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_liquidityCredits\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_periodCredits\":\"The credits the given job has at the current period\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"migrateJob(address,address)\":{\"params\":{\"_fromJob\":\"The address of the job that is requesting to migrate\",\"_toJob\":\"The address at which the job is requesting to migrate\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_credits\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}},\"worked(address)\":{\"details\":\"Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"InsufficientFunds()\":[{\"notice\":\"Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobMigrationImpossible()\":[{\"notice\":\"Throws when the address of the job that requests to migrate wants to migrate to its same address\"}],\"JobMigrationLocked()\":[{\"notice\":\"Throws when cooldown between migrations has not yet passed\"}],\"JobMigrationUnavailable()\":[{\"notice\":\"Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobUnapproved()\":[{\"notice\":\"Throws if the address claiming to be a job is not in the list of approved jobs\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobMigrationRequested(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#migrateJob function is called\"},\"JobMigrationSuccessful(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#acceptJobMigration function is called\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"KeeperValidation(uint256)\":{\"notice\":\"Emitted when a keeper is validated before a job\"},\"KeeperWork(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a keeper works a job\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobMigration(address,address)\":{\"notice\":\"Completes the migration process for a job\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bondedPayment(address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"directTokenPayment(address,address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"notice\":\"Confirms if the current keeper is registered and has a minimum bond of any asset.\"},\"isKeeper(address)\":{\"notice\":\"Confirms if the current keeper is registered\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"migrateJob(address,address)\":{\"notice\":\"Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingJobMigrations(address)\":{\"notice\":\"Maps the jobs that have requested a migration to the address they have requested to migrate to\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"},\"worked(address)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol\":\"Keep3rJobWorkable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableCredits is IKeep3rJobFundableCredits, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice Cooldown between withdrawals\\n  uint256 internal constant _WITHDRAW_TOKENS_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  mapping(address => mapping(address => uint256)) public override jobTokenCreditsAddedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    // KP3R shouldn't be used for direct token payments\\n    if (_token == keep3rV1) revert TokenUnallowed();\\n    uint256 _before = IERC20(_token).balanceOf(address(this));\\n    IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\\n    uint256 _received = IERC20(_token).balanceOf(address(this)) - _before;\\n    uint256 _tokenFee = (_received * fee) / _BASE;\\n    jobTokenCredits[_job][_token] += _received - _tokenFee;\\n    jobTokenCreditsAddedAt[_job][_token] = block.timestamp;\\n    IERC20(_token).safeTransfer(governance, _tokenFee);\\n    _jobTokens[_job].add(_token);\\n\\n    emit TokenCreditAddition(_job, _token, msg.sender, _received);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external override nonReentrant onlyJobOwner(_job) {\\n    if (block.timestamp <= jobTokenCreditsAddedAt[_job][_token] + _WITHDRAW_TOKENS_COOLDOWN) revert JobTokenCreditsLocked();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientJobTokenCredits();\\n    if (disputes[_job]) revert JobDisputed();\\n\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_receiver, _amount);\\n\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit TokenCreditWithdrawal(_job, _token, _receiver, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0xb600d18903a008a1ca03743de7cef8330c2d5e66db52c900822551a4be75f7a5\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/IPairManager.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '../../libraries/FullMath.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableLiquidity is IKeep3rJobFundableLiquidity, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice List of liquidities that are accepted in the system\\n  EnumerableSet.AddressSet internal _approvedLiquidities;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => mapping(address => uint256)) public override liquidityAmount;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override rewardedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override workedAt;\\n\\n  /// @notice Tracks an address and returns its TickCache\\n  mapping(address => TickCache) internal _tick;\\n\\n  // Views\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approvedLiquidities() external view override returns (address[] memory _list) {\\n    _list = _approvedLiquidities.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobPeriodCredits(address _job) public view override returns (uint256 _periodCredits) {\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        TickCache memory _tickCache = observeLiquidity(_liquidity);\\n        if (_tickCache.period != 0) {\\n          int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n          _periodCredits += _getReward(\\n            IKeep3rHelper(keep3rHelper).getKP3RsAtTick(liquidityAmount[_job][_liquidity], _tickDifference, rewardPeriodTime)\\n          );\\n        }\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobLiquidityCredits(address _job) public view override returns (uint256 _liquidityCredits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n\\n    // If the job was rewarded in the past 1 period time\\n    if ((block.timestamp - rewardedAt[_job]) < rewardPeriodTime) {\\n      // If the job has period credits, update minted job credits to new twap\\n      _liquidityCredits = _periodCredits > 0\\n        ? (_jobLiquidityCredits[_job] * _periodCredits) / _jobPeriodCredits[_job] // If the job has period credits, return remaining job credits updated to new twap\\n        : _jobLiquidityCredits[_job]; // If not, return remaining credits, forced credits should not be updated\\n    } else {\\n      // Else return a full period worth of credits if current credits have expired\\n      _liquidityCredits = _periodCredits;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function totalJobCredits(address _job) external view override returns (uint256 _credits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n    uint256 _cooldown = block.timestamp;\\n\\n    if ((rewardedAt[_job] > _period(block.timestamp - rewardPeriodTime))) {\\n      // Will calculate cooldown if it outdated\\n      if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will calculate cooldown from last reward reference in this period\\n        _cooldown -= (rewardedAt[_job] + rewardPeriodTime);\\n      } else {\\n        // Will calculate cooldown from last reward timestamp\\n        _cooldown -= rewardedAt[_job];\\n      }\\n    } else {\\n      // Will calculate cooldown from period start if expired\\n      _cooldown -= _period(block.timestamp);\\n    }\\n    _credits = jobLiquidityCredits(_job) + _phase(_cooldown, _periodCredits);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view override returns (uint256 _periodCredits) {\\n    if (_approvedLiquidities.contains(_liquidity)) {\\n      TickCache memory _tickCache = observeLiquidity(_liquidity);\\n      if (_tickCache.period != 0) {\\n        int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n        return _getReward(IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime));\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function observeLiquidity(address _liquidity) public view virtual override returns (TickCache memory _tickCache) {\\n    if (_tick[_liquidity].period == _period(block.timestamp)) {\\n      // Will return cached twaps if liquidity is updated\\n      _tickCache = _tick[_liquidity];\\n    } else {\\n      bool success;\\n      uint256 lastPeriod = _period(block.timestamp - rewardPeriodTime);\\n\\n      if (_tick[_liquidity].period == lastPeriod) {\\n        // Will only ask for current period accumulator if liquidity is outdated\\n        uint32[] memory _secondsAgo = new uint32[](1);\\n        int56 previousTick = _tick[_liquidity].current;\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n\\n        (_tickCache.current, , success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - previousTick;\\n      } else if (_tick[_liquidity].period < lastPeriod) {\\n        // Will ask for 2 accumulators if liquidity is expired\\n        uint32[] memory _secondsAgo = new uint32[](2);\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n        _secondsAgo[1] = uint32(block.timestamp - _period(block.timestamp) + rewardPeriodTime);\\n\\n        int56 _tickCumulative2;\\n        (_tickCache.current, _tickCumulative2, success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - _tickCumulative2;\\n      }\\n      if (success) {\\n        _tickCache.period = _period(block.timestamp);\\n      } else {\\n        delete _tickCache.period;\\n      }\\n    }\\n  }\\n\\n  // Methods\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external override onlyGovernance {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    _settleJobAccountance(_job);\\n    _jobLiquidityCredits[_job] += _amount;\\n    emit LiquidityCreditsForced(_job, rewardedAt[_job], _jobLiquidityCredits[_job]);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approveLiquidity(address _liquidity) external virtual override onlyGovernance {\\n    if (!_approvedLiquidities.add(_liquidity)) revert LiquidityPairApproved();\\n    _liquidityPool[_liquidity] = IPairManager(_liquidity).pool();\\n    _isKP3RToken0[_liquidity] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_liquidityPool[_liquidity]);\\n    _tick[_liquidity] = observeLiquidity(_liquidity);\\n    emit LiquidityApproval(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function revokeLiquidity(address _liquidity) external override onlyGovernance {\\n    if (!_approvedLiquidities.remove(_liquidity)) revert LiquidityPairUnexistent();\\n    emit LiquidityRevocation(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_approvedLiquidities.contains(_liquidity)) revert LiquidityPairUnapproved();\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n\\n    _jobLiquidities[_job].add(_liquidity);\\n\\n    _settleJobAccountance(_job);\\n\\n    if (_quoteLiquidity(liquidityAmount[_job][_liquidity] + _amount, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n    IERC20(_liquidity).safeTransferFrom(msg.sender, address(this), _amount);\\n    liquidityAmount[_job][_liquidity] += _amount;\\n    _jobPeriodCredits[_job] += _getReward(_quoteLiquidity(_amount, _liquidity));\\n    emit LiquidityAddition(_job, _liquidity, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlyJobOwner(_job) {\\n    canWithdrawAfter[_job][_liquidity] = block.timestamp + unbondTime;\\n    pendingUnbonds[_job][_liquidity] += _amount;\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n\\n    uint256 _remainingLiquidity = liquidityAmount[_job][_liquidity];\\n    if (_remainingLiquidity > 0 && _quoteLiquidity(_remainingLiquidity, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit Unbonding(_job, _liquidity, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external override onlyJobOwner(_job) {\\n    if (_receiver == address(0)) revert ZeroAddress();\\n    if (pendingUnbonds[_job][_liquidity] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[_job][_liquidity] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[_job]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[_job][_liquidity];\\n\\n    delete pendingUnbonds[_job][_liquidity];\\n    delete canWithdrawAfter[_job][_liquidity];\\n\\n    IERC20(_liquidity).safeTransfer(_receiver, _amount);\\n    emit LiquidityWithdrawal(_job, _liquidity, _receiver, _amount);\\n  }\\n\\n  // Internal functions\\n\\n  /// @notice Updates or rewards job liquidity credits depending on time since last job reward\\n  function _updateJobCreditsIfNeeded(address _job) internal returns (bool _rewarded) {\\n    if (rewardedAt[_job] < _period(block.timestamp)) {\\n      // Will exit function if job has been rewarded in current period\\n      if (rewardedAt[_job] <= _period(block.timestamp - rewardPeriodTime)) {\\n        // Will reset job to period syncronicity if a full period passed without rewards\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] = _period(block.timestamp);\\n        _rewarded = true;\\n      } else if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will reset job's syncronicity if last reward was more than epoch ago\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] += rewardPeriodTime;\\n        _rewarded = true;\\n      } else if (workedAt[_job] < _period(block.timestamp)) {\\n        // First keeper on period has to update job accountance to current twaps\\n        uint256 previousPeriodCredits = _jobPeriodCredits[_job];\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = (_jobLiquidityCredits[_job] * _jobPeriodCredits[_job]) / previousPeriodCredits;\\n        // Updating job accountance does not reward job\\n      }\\n    }\\n  }\\n\\n  /// @notice Only called if _jobLiquidityCredits < payment\\n  function _rewardJobCredits(address _job) internal {\\n    /// @notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)\\n    /* WARNING: this allows to top up _jobLiquidityCredits to a max of 1.99 but have to spend at least 1 */\\n    _jobLiquidityCredits[_job] += _phase(block.timestamp - rewardedAt[_job], _jobPeriodCredits[_job]);\\n    rewardedAt[_job] = block.timestamp;\\n  }\\n\\n  /// @notice Updates accountance for _jobPeriodCredits\\n  function _updateJobPeriod(address _job) internal {\\n    _jobPeriodCredits[_job] = _calculateJobPeriodCredits(_job);\\n  }\\n\\n  /// @notice Quotes the outdated job liquidities and calculates _periodCredits\\n  /// @dev This function is also responsible for keeping the KP3R/WETH quote updated\\n  function _calculateJobPeriodCredits(address _job) internal returns (uint256 _periodCredits) {\\n    if (_tick[kp3rWethPool].period != _period(block.timestamp)) {\\n      // Updates KP3R/WETH quote if needed\\n      _tick[kp3rWethPool] = observeLiquidity(kp3rWethPool);\\n    }\\n\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        if (_tick[_liquidity].period != _period(block.timestamp)) {\\n          // Updates liquidity cache only if needed\\n          _tick[_liquidity] = observeLiquidity(_liquidity);\\n        }\\n        _periodCredits += _getReward(_quoteLiquidity(liquidityAmount[_job][_liquidity], _liquidity));\\n      }\\n    }\\n  }\\n\\n  /// @notice Updates job accountance calculating the impact of the unbonded liquidity amount\\n  function _unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) internal nonReentrant {\\n    if (!_jobLiquidities[_job].contains(_liquidity)) revert JobLiquidityUnexistent();\\n    if (liquidityAmount[_job][_liquidity] < _amount) revert JobLiquidityInsufficient();\\n\\n    // Ensures current twaps in job liquidities\\n    _updateJobPeriod(_job);\\n    uint256 _periodCreditsToRemove = _getReward(_quoteLiquidity(_amount, _liquidity));\\n\\n    // A liquidity can be revoked causing a job to have 0 periodCredits\\n    if (_jobPeriodCredits[_job] > 0) {\\n      // Removes a % correspondant to a full rewardPeriodTime for the liquidity withdrawn vs all of the liquidities\\n      _jobLiquidityCredits[_job] -= (_jobLiquidityCredits[_job] * _periodCreditsToRemove) / _jobPeriodCredits[_job];\\n      _jobPeriodCredits[_job] -= _periodCreditsToRemove;\\n    }\\n\\n    liquidityAmount[_job][_liquidity] -= _amount;\\n    if (liquidityAmount[_job][_liquidity] == 0) {\\n      _jobLiquidities[_job].remove(_liquidity);\\n    }\\n  }\\n\\n  /// @notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed\\n  function _phase(uint256 _timePassed, uint256 _multiplier) internal view returns (uint256 _result) {\\n    if (_timePassed < rewardPeriodTime) {\\n      _result = (_timePassed * _multiplier) / rewardPeriodTime;\\n    } else _result = _multiplier;\\n  }\\n\\n  /// @notice Returns the start of the period of the provided timestamp\\n  function _period(uint256 _timestamp) internal view returns (uint256 _periodTimestamp) {\\n    return _timestamp - (_timestamp % rewardPeriodTime);\\n  }\\n\\n  /// @notice Calculates relation between rewardPeriod and inflationPeriod\\n  function _getReward(uint256 _baseAmount) internal view returns (uint256 _credits) {\\n    return FullMath.mulDiv(_baseAmount, rewardPeriodTime, inflationPeriod);\\n  }\\n\\n  /// @notice Returns underlying KP3R amount for a given liquidity amount\\n  function _quoteLiquidity(uint256 _amount, address _liquidity) internal view virtual returns (uint256 _quote) {\\n    if (_tick[_liquidity].period != 0) {\\n      int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tick[_liquidity].difference : -_tick[_liquidity].difference;\\n      _quote = IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime);\\n    }\\n  }\\n\\n  /// @notice Updates job credits to current quotes and rewards job's pending minted credits\\n  /// @dev Ensures a maximum of 1 period of credits\\n  function _settleJobAccountance(address _job) internal virtual {\\n    _updateJobCreditsIfNeeded(_job);\\n    _rewardJobCredits(_job);\\n    _jobLiquidityCredits[_job] = Math.min(_jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n  }\\n}\\n\",\"keccak256\":\"0x7747b2a0ee0c4e3322e92a3e1fc0f6f03be63942bc398009726b58f8c9f79cf0\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\nimport './Keep3rJobFundableCredits.sol';\\nimport './Keep3rJobFundableLiquidity.sol';\\n\\nabstract contract Keep3rJobMigration is IKeep3rJobMigration, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  uint256 internal constant _MIGRATION_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  mapping(address => address) public override pendingJobMigrations;\\n  mapping(address => mapping(address => uint256)) internal _migrationCreatedAt;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function migrateJob(address _fromJob, address _toJob) external override onlyJobOwner(_fromJob) {\\n    if (_fromJob == _toJob) revert JobMigrationImpossible();\\n\\n    pendingJobMigrations[_fromJob] = _toJob;\\n    _migrationCreatedAt[_fromJob][_toJob] = block.timestamp;\\n\\n    emit JobMigrationRequested(_fromJob, _toJob);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function acceptJobMigration(address _fromJob, address _toJob) external override onlyJobOwner(_toJob) {\\n    if (disputes[_fromJob] || disputes[_toJob]) revert JobDisputed();\\n    if (pendingJobMigrations[_fromJob] != _toJob) revert JobMigrationUnavailable();\\n    if (block.timestamp < _migrationCreatedAt[_fromJob][_toJob] + _MIGRATION_COOLDOWN) revert JobMigrationLocked();\\n\\n    // force job credits update for both jobs\\n    _settleJobAccountance(_fromJob);\\n    _settleJobAccountance(_toJob);\\n\\n    // migrate tokens\\n    while (_jobTokens[_fromJob].length() > 0) {\\n      address _tokenToMigrate = _jobTokens[_fromJob].at(0);\\n      jobTokenCredits[_toJob][_tokenToMigrate] += jobTokenCredits[_fromJob][_tokenToMigrate];\\n      delete jobTokenCredits[_fromJob][_tokenToMigrate];\\n      _jobTokens[_fromJob].remove(_tokenToMigrate);\\n      _jobTokens[_toJob].add(_tokenToMigrate);\\n    }\\n\\n    // migrate liquidities\\n    while (_jobLiquidities[_fromJob].length() > 0) {\\n      address _liquidity = _jobLiquidities[_fromJob].at(0);\\n\\n      liquidityAmount[_toJob][_liquidity] += liquidityAmount[_fromJob][_liquidity];\\n      delete liquidityAmount[_fromJob][_liquidity];\\n\\n      _jobLiquidities[_toJob].add(_liquidity);\\n      _jobLiquidities[_fromJob].remove(_liquidity);\\n    }\\n\\n    // migrate job balances\\n    _jobPeriodCredits[_toJob] += _jobPeriodCredits[_fromJob];\\n    delete _jobPeriodCredits[_fromJob];\\n\\n    _jobLiquidityCredits[_toJob] += _jobLiquidityCredits[_fromJob];\\n    delete _jobLiquidityCredits[_fromJob];\\n\\n    // stop _fromJob from being a job\\n    delete rewardedAt[_fromJob];\\n    _jobs.remove(_fromJob);\\n\\n    // delete unused data slots\\n    delete jobOwner[_fromJob];\\n    delete jobPendingOwner[_fromJob];\\n    delete _migrationCreatedAt[_fromJob][_toJob];\\n    delete pendingJobMigrations[_fromJob];\\n\\n    emit JobMigrationSuccessful(_fromJob, _toJob);\\n  }\\n}\\n\",\"keccak256\":\"0xd46c3c9ce970098d8d75f11966894a341824aceb40583fcfbbc0ebda93d869f9\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobMigration.sol';\\nimport '../../../interfaces/IKeep3rHelper.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\n\\nabstract contract Keep3rJobWorkable is IKeep3rJobWorkable, Keep3rJobMigration {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  uint256 internal _initialGas;\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function isKeeper(address _keeper) external override returns (bool _isKeeper) {\\n    _initialGas = _getGasLeft();\\n    if (_keepers.contains(_keeper)) {\\n      emit KeeperValidation(_initialGas);\\n      return true;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) public override returns (bool _isBondedKeeper) {\\n    _initialGas = _getGasLeft();\\n    if (\\n      _keepers.contains(_keeper) &&\\n      bonds[_keeper][_bond] >= _minBond &&\\n      workCompleted[_keeper] >= _earned &&\\n      block.timestamp - firstSeen[_keeper] >= _age\\n    ) {\\n      emit KeeperValidation(_initialGas);\\n      return true;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function worked(address _keeper) external virtual override {\\n    address _job = msg.sender;\\n    if (disputes[_job]) revert JobDisputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n\\n    if (_updateJobCreditsIfNeeded(_job)) {\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    (uint256 _boost, uint256 _oneEthQuote, uint256 _extraGas) = IKeep3rHelper(keep3rHelper).getPaymentParams(bonds[_keeper][keep3rV1]);\\n\\n    uint256 _gasLeft = _getGasLeft();\\n    uint256 _payment = _calculatePayment(_gasLeft, _extraGas, _oneEthQuote, _boost);\\n\\n    if (_payment > _jobLiquidityCredits[_job]) {\\n      _rewardJobCredits(_job);\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n      _gasLeft = _getGasLeft();\\n      _payment = _calculatePayment(_gasLeft, _extraGas, _oneEthQuote, _boost);\\n    }\\n\\n    _bondedPayment(_job, _keeper, _payment);\\n    emit KeeperWork(keep3rV1, _job, _keeper, _payment, _gasLeft);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function bondedPayment(address _keeper, uint256 _payment) public override {\\n    address _job = msg.sender;\\n\\n    if (disputes[_job]) revert JobDisputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n\\n    if (_updateJobCreditsIfNeeded(_job)) {\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    if (_payment > _jobLiquidityCredits[_job]) {\\n      _rewardJobCredits(_job);\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    _bondedPayment(_job, _keeper, _payment);\\n    emit KeeperWork(keep3rV1, _job, _keeper, _payment, _getGasLeft());\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external override {\\n    address _job = msg.sender;\\n\\n    if (disputes[_job]) revert JobDisputed();\\n    if (disputes[_keeper]) revert Disputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientFunds();\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_keeper, _amount);\\n    emit KeeperWork(_token, _job, _keeper, _amount, _getGasLeft());\\n  }\\n\\n  function _bondedPayment(\\n    address _job,\\n    address _keeper,\\n    uint256 _payment\\n  ) internal {\\n    if (_payment > _jobLiquidityCredits[_job]) revert InsufficientFunds();\\n\\n    workedAt[_job] = block.timestamp;\\n    _jobLiquidityCredits[_job] -= _payment;\\n    bonds[_keeper][keep3rV1] += _payment;\\n    workCompleted[_keeper] += _payment;\\n  }\\n\\n  /// @notice Calculate amount to be payed in KP3R, taking into account multiple parameters\\n  /// @param _gasLeft Amount of gas left after working the job\\n  /// @param _extraGas Amount of expected unaccounted gas\\n  /// @param _oneEthQuote Amount of KP3R equivalent to 1 ETH\\n  /// @param _boost Reward given to the keeper for having bonded KP3R tokens\\n  /// @return _payment Amount to be payed in KP3R tokens\\n  function _calculatePayment(\\n    uint256 _gasLeft,\\n    uint256 _extraGas,\\n    uint256 _oneEthQuote,\\n    uint256 _boost\\n  ) internal view returns (uint256 _payment) {\\n    uint256 _accountedGas = _initialGas - _gasLeft + _extraGas;\\n    _payment = (((_accountedGas * _boost) / _BASE) * _oneEthQuote) / 1 ether;\\n  }\\n\\n  /// @notice Return the gas left and add 1/64 in order to match real gas left at first level of depth (EIP-150)\\n  /// @return _gasLeft Amount of gas left recording taking into account EIP-150\\n  function _getGasLeft() internal view returns (uint256 _gasLeft) {\\n    _gasLeft = (gasleft() * 64) / 63;\\n  }\\n}\\n\",\"keccak256\":\"0x8f67c23ec95bbce4501ccb0667109a00eaab9413514c58ad62c8e03ba1ea077a\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6297,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "jobTokenCreditsAddedAt",
                "offset": 0,
                "slot": "37",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6540,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_approvedLiquidities",
                "offset": 0,
                "slot": "38",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 6548,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "liquidityAmount",
                "offset": 0,
                "slot": "40",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6554,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "rewardedAt",
                "offset": 0,
                "slot": "41",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6560,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "workedAt",
                "offset": 0,
                "slot": "42",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6566,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_tick",
                "offset": 0,
                "slot": "43",
                "type": "t_mapping(t_address,t_struct(TickCache)13178_storage)"
              },
              {
                "astId": 8024,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "pendingJobMigrations",
                "offset": 0,
                "slot": "44",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8030,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_migrationCreatedAt",
                "offset": 0,
                "slot": "45",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 8427,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                "label": "_initialGas",
                "offset": 0,
                "slot": "46",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_int56": {
                "encoding": "inplace",
                "label": "int56",
                "numberOfBytes": "7"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_struct(TickCache)13178_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)",
                "numberOfBytes": "32",
                "value": "t_struct(TickCache)13178_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(TickCache)13178_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rJobFundableLiquidity.TickCache",
                "members": [
                  {
                    "astId": 13173,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                    "label": "current",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13175,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                    "label": "difference",
                    "offset": 7,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13177,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol:Keep3rJobWorkable",
                    "label": "period",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "InsufficientFunds()": [
                {
                  "notice": "Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobMigrationImpossible()": [
                {
                  "notice": "Throws when the address of the job that requests to migrate wants to migrate to its same address"
                }
              ],
              "JobMigrationLocked()": [
                {
                  "notice": "Throws when cooldown between migrations has not yet passed"
                }
              ],
              "JobMigrationUnavailable()": [
                {
                  "notice": "Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobUnapproved()": [
                {
                  "notice": "Throws if the address claiming to be a job is not in the list of approved jobs"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobMigrationRequested(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#migrateJob function is called"
              },
              "JobMigrationSuccessful(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#acceptJobMigration function is called"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "KeeperValidation(uint256)": {
                "notice": "Emitted when a keeper is validated before a job"
              },
              "KeeperWork(address,address,address,uint256,uint256)": {
                "notice": "Emitted when a keeper works a job"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobMigration(address,address)": {
                "notice": "Completes the migration process for a job"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bondedPayment(address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "directTokenPayment(address,address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "notice": "Confirms if the current keeper is registered and has a minimum bond of any asset."
              },
              "isKeeper(address)": {
                "notice": "Confirms if the current keeper is registered"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "migrateJob(address,address)": {
                "notice": "Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingJobMigrations(address)": {
                "notice": "Maps the jobs that have requested a migration to the address they have requested to migrate to"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              },
              "worked(address)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobs.sol": {
        "Keep3rJobs": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyAKeeper",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "AlreadyDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientFunds",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobAlreadyAdded",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationImpossible",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "Dispute",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOwner",
                  "type": "address"
                }
              ],
              "name": "JobAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationSuccessful",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashLiquidity",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashToken",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperValidation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperWork",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_resolver",
                  "type": "address"
                }
              ],
              "name": "Resolve",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "acceptJobMigration",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "addJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                }
              ],
              "name": "bondedPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "directTokenPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_minBond",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_earned",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_age",
                  "type": "uint256"
                }
              ],
              "name": "isBondedKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isBondedKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "isKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "migrateJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingJobMigrations",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashTokenFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "worked",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobMigration(address,address)": {
                "details": "Unbond/withdraw process doesn't get migrated",
                "params": {
                  "_fromJob": "The address of the job that requested to migrate",
                  "_toJob": "The address to which the job wants to migrate to"
                }
              },
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addJob(address)": {
                "params": {
                  "_job": "Address of the contract for which work should be performed"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "bondedPayment(address,uint256)": {
                "details": "Pays the keeper that performs the work with KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work",
                  "_payment": "The reward that should be allocated for the job"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "directTokenPayment(address,address,uint256)": {
                "details": "Pays the keeper that performs the work with a specific token",
                "params": {
                  "_amount": "The reward that should be allocated",
                  "_keeper": "Address of the keeper that performed the work",
                  "_token": "The asset being awarded to the keeper"
                }
              },
              "dispute(address)": {
                "params": {
                  "_jobOrKeeper": "The address in dispute"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "details": "Should be used for protected functions",
                "params": {
                  "_age": "The minimum keeper age required",
                  "_bond": "The bond token being evaluated",
                  "_earned": "The minimum funds earned in the keepers lifetime",
                  "_keeper": "The keeper to check",
                  "_minBond": "The minimum amount of bonded tokens"
                },
                "returns": {
                  "_isBondedKeeper": "Whether the `_keeper` meets the given requirements"
                }
              },
              "isKeeper(address)": {
                "details": "Can be used for general (non critical) functions",
                "params": {
                  "_keeper": "The keeper being investigated"
                },
                "returns": {
                  "_isKeeper": "Whether the address passed as a parameter is a keeper or not"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_liquidityCredits": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_periodCredits": "The credits the given job has at the current period"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "migrateJob(address,address)": {
                "params": {
                  "_fromJob": "The address of the job that is requesting to migrate",
                  "_toJob": "The address at which the job is requesting to migrate"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "resolve(address)": {
                "params": {
                  "_jobOrKeeper": "The address cleared"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity that will be slashed",
                  "_job": "The address being slashed",
                  "_liquidity": "The address of the liquidity that will be slashed"
                }
              },
              "slashTokenFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of the token that will be slashed",
                  "_job": "The address of the job from which the token will be slashed",
                  "_token": "The address of the token that will be slashed"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_credits": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              },
              "worked(address)": {
                "details": "Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobMigration(address,address)": "af320e81",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addJob(address)": "c5198abc",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addSlasher(address)": "68a9f19c",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bondTime()": "5ebe23f0",
              "bondedPayment(address,uint256)": "11466d72",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "directTokenPayment(address,address,uint256)": "dd2080d6",
              "dispute(address)": "f75f9f7b",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "isBondedKeeper(address,address,uint256,uint256,uint256)": "f9d46cf2",
              "isKeeper(address)": "6ba42aaa",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityAmount(address,address)": "694798e6",
              "liquidityMinimum()": "633fb68f",
              "migrateJob(address,address)": "90a4684e",
              "observeLiquidity(address)": "165e62e7",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingJobMigrations(address)": "ec8ca643",
              "pendingUnbonds(address,address)": "21040b01",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "resolve(address)": "55ea6c47",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardPeriodTime()": "768b5d90",
              "rewardedAt(address)": "a676f9ff",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashLiquidityFromJob(address,address,uint256)": "6e2a9ca6",
              "slashTokenFromJob(address,address,uint256)": "f25e311b",
              "slashers(address)": "b87fcbff",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "unbondTime()": "a7d2e784",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workCompleted(address)": "1b44555e",
              "worked(address)": "5feeb794",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyAKeeper\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationImpossible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"Dispute\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOwner\",\"type\":\"address\"}],\"name\":\"JobAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationSuccessful\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperValidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperWork\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"Resolve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"acceptJobMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"addJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"}],\"name\":\"bondedPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"directTokenPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_earned\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_age\",\"type\":\"uint256\"}],\"name\":\"isBondedKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isBondedKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"isKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"migrateJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingJobMigrations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashTokenFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"worked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobMigration(address,address)\":{\"details\":\"Unbond/withdraw process doesn't get migrated\",\"params\":{\"_fromJob\":\"The address of the job that requested to migrate\",\"_toJob\":\"The address to which the job wants to migrate to\"}},\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addJob(address)\":{\"params\":{\"_job\":\"Address of the contract for which work should be performed\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"bondedPayment(address,uint256)\":{\"details\":\"Pays the keeper that performs the work with KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\",\"_payment\":\"The reward that should be allocated for the job\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"directTokenPayment(address,address,uint256)\":{\"details\":\"Pays the keeper that performs the work with a specific token\",\"params\":{\"_amount\":\"The reward that should be allocated\",\"_keeper\":\"Address of the keeper that performed the work\",\"_token\":\"The asset being awarded to the keeper\"}},\"dispute(address)\":{\"params\":{\"_jobOrKeeper\":\"The address in dispute\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"details\":\"Should be used for protected functions\",\"params\":{\"_age\":\"The minimum keeper age required\",\"_bond\":\"The bond token being evaluated\",\"_earned\":\"The minimum funds earned in the keepers lifetime\",\"_keeper\":\"The keeper to check\",\"_minBond\":\"The minimum amount of bonded tokens\"},\"returns\":{\"_isBondedKeeper\":\"Whether the `_keeper` meets the given requirements\"}},\"isKeeper(address)\":{\"details\":\"Can be used for general (non critical) functions\",\"params\":{\"_keeper\":\"The keeper being investigated\"},\"returns\":{\"_isKeeper\":\"Whether the address passed as a parameter is a keeper or not\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_liquidityCredits\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_periodCredits\":\"The credits the given job has at the current period\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"migrateJob(address,address)\":{\"params\":{\"_fromJob\":\"The address of the job that is requesting to migrate\",\"_toJob\":\"The address at which the job is requesting to migrate\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"resolve(address)\":{\"params\":{\"_jobOrKeeper\":\"The address cleared\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"slashLiquidityFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity that will be slashed\",\"_job\":\"The address being slashed\",\"_liquidity\":\"The address of the liquidity that will be slashed\"}},\"slashTokenFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of the token that will be slashed\",\"_job\":\"The address of the job from which the token will be slashed\",\"_token\":\"The address of the token that will be slashed\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_credits\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}},\"worked(address)\":{\"details\":\"Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAKeeper()\":[{\"notice\":\"Throws when the address that is trying to register as a keeper is already a keeper\"}],\"AlreadyDisputed()\":[{\"notice\":\"Throws when a job or keeper is already disputed\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"InsufficientFunds()\":[{\"notice\":\"Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobAlreadyAdded()\":[{\"notice\":\"Throws when trying to add a job that has already been added\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobMigrationImpossible()\":[{\"notice\":\"Throws when the address of the job that requests to migrate wants to migrate to its same address\"}],\"JobMigrationLocked()\":[{\"notice\":\"Throws when cooldown between migrations has not yet passed\"}],\"JobMigrationUnavailable()\":[{\"notice\":\"Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobTokenInsufficient()\":[{\"notice\":\"Throws when someone tries to slash more tokens than the job has\"}],\"JobTokenUnexistent()\":[{\"notice\":\"Throws when the token trying to be slashed doesn't exist\"}],\"JobUnapproved()\":[{\"notice\":\"Throws if the address claiming to be a job is not in the list of approved jobs\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"NotDisputed()\":[{\"notice\":\"Throws when a job or keeper is not disputed and someone tries to resolve the dispute\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Dispute(address,address)\":{\"notice\":\"Emitted when a keeper or a job is disputed\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobAddition(address,address)\":{\"notice\":\"Emitted when Keep3rJobManager#addJob is called\"},\"JobMigrationRequested(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#migrateJob function is called\"},\"JobMigrationSuccessful(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#acceptJobMigration function is called\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"JobSlashLiquidity(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\"},\"JobSlashToken(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashTokenFromJob is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"KeeperValidation(uint256)\":{\"notice\":\"Emitted when a keeper is validated before a job\"},\"KeeperWork(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a keeper works a job\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"Resolve(address,address)\":{\"notice\":\"Emitted when a dispute is resolved\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobMigration(address,address)\":{\"notice\":\"Completes the migration process for a job\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addJob(address)\":{\"notice\":\"Allows any caller to add a new job\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bondedPayment(address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"directTokenPayment(address,address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"dispute(address)\":{\"notice\":\"Allows governance to create a dispute for a given keeper/job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"notice\":\"Confirms if the current keeper is registered and has a minimum bond of any asset.\"},\"isKeeper(address)\":{\"notice\":\"Confirms if the current keeper is registered\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"migrateJob(address,address)\":{\"notice\":\"Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingJobMigrations(address)\":{\"notice\":\"Maps the jobs that have requested a migration to the address they have requested to migrate to\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"resolve(address)\":{\"notice\":\"Allows governance to resolve a dispute on a keeper/job\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or a slasher to slash liquidity from a job\"},\"slashTokenFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or slasher to slash a job specific token\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"},\"worked(address)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/jobs/Keep3rJobs.sol\":\"Keep3rJobs\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rParameters.sol';\\nimport './Keep3rRoles.sol';\\nimport '../../interfaces/peripherals/IKeep3rDisputable.sol';\\n\\nabstract contract Keep3rDisputable is IKeep3rDisputable, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rDisputable\\n  function dispute(address _jobOrKeeper) external override onlyDisputer {\\n    if (disputes[_jobOrKeeper]) revert AlreadyDisputed();\\n    disputes[_jobOrKeeper] = true;\\n    emit Dispute(_jobOrKeeper, msg.sender);\\n  }\\n\\n  /// @inheritdoc IKeep3rDisputable\\n  function resolve(address _jobOrKeeper) external override onlyDisputer {\\n    if (!disputes[_jobOrKeeper]) revert NotDisputed();\\n    disputes[_jobOrKeeper] = false;\\n    emit Resolve(_jobOrKeeper, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x941e9ba02b2ad3975edc444cd771ef1e5386051553632140f882258ea7e4d4bc\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobFundableCredits.sol';\\nimport './Keep3rJobFundableLiquidity.sol';\\nimport '../Keep3rDisputable.sol';\\n\\nabstract contract Keep3rJobDisputable is IKeep3rJobDisputable, Keep3rDisputable, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rJobDisputable\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override onlySlasher {\\n    if (!disputes[_job]) revert NotDisputed();\\n    if (!_jobTokens[_job].contains(_token)) revert JobTokenUnexistent();\\n    if (jobTokenCredits[_job][_token] < _amount) revert JobTokenInsufficient();\\n\\n    try IERC20(_token).transfer(governance, _amount) {} catch {}\\n    jobTokenCredits[_job][_token] -= _amount;\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit JobSlashToken(_job, _token, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobDisputable\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlySlasher {\\n    if (!disputes[_job]) revert NotDisputed();\\n\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n    try IERC20(_liquidity).transfer(governance, _amount) {} catch {}\\n    emit JobSlashLiquidity(_job, _liquidity, msg.sender, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0x86cdbf44dfa46c6b6e184e48e11cb8571e26cf50c793b6b07227c29e743da397\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableCredits is IKeep3rJobFundableCredits, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice Cooldown between withdrawals\\n  uint256 internal constant _WITHDRAW_TOKENS_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  mapping(address => mapping(address => uint256)) public override jobTokenCreditsAddedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    // KP3R shouldn't be used for direct token payments\\n    if (_token == keep3rV1) revert TokenUnallowed();\\n    uint256 _before = IERC20(_token).balanceOf(address(this));\\n    IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\\n    uint256 _received = IERC20(_token).balanceOf(address(this)) - _before;\\n    uint256 _tokenFee = (_received * fee) / _BASE;\\n    jobTokenCredits[_job][_token] += _received - _tokenFee;\\n    jobTokenCreditsAddedAt[_job][_token] = block.timestamp;\\n    IERC20(_token).safeTransfer(governance, _tokenFee);\\n    _jobTokens[_job].add(_token);\\n\\n    emit TokenCreditAddition(_job, _token, msg.sender, _received);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external override nonReentrant onlyJobOwner(_job) {\\n    if (block.timestamp <= jobTokenCreditsAddedAt[_job][_token] + _WITHDRAW_TOKENS_COOLDOWN) revert JobTokenCreditsLocked();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientJobTokenCredits();\\n    if (disputes[_job]) revert JobDisputed();\\n\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_receiver, _amount);\\n\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit TokenCreditWithdrawal(_job, _token, _receiver, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0xb600d18903a008a1ca03743de7cef8330c2d5e66db52c900822551a4be75f7a5\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/IPairManager.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '../../libraries/FullMath.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableLiquidity is IKeep3rJobFundableLiquidity, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice List of liquidities that are accepted in the system\\n  EnumerableSet.AddressSet internal _approvedLiquidities;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => mapping(address => uint256)) public override liquidityAmount;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override rewardedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override workedAt;\\n\\n  /// @notice Tracks an address and returns its TickCache\\n  mapping(address => TickCache) internal _tick;\\n\\n  // Views\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approvedLiquidities() external view override returns (address[] memory _list) {\\n    _list = _approvedLiquidities.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobPeriodCredits(address _job) public view override returns (uint256 _periodCredits) {\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        TickCache memory _tickCache = observeLiquidity(_liquidity);\\n        if (_tickCache.period != 0) {\\n          int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n          _periodCredits += _getReward(\\n            IKeep3rHelper(keep3rHelper).getKP3RsAtTick(liquidityAmount[_job][_liquidity], _tickDifference, rewardPeriodTime)\\n          );\\n        }\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobLiquidityCredits(address _job) public view override returns (uint256 _liquidityCredits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n\\n    // If the job was rewarded in the past 1 period time\\n    if ((block.timestamp - rewardedAt[_job]) < rewardPeriodTime) {\\n      // If the job has period credits, update minted job credits to new twap\\n      _liquidityCredits = _periodCredits > 0\\n        ? (_jobLiquidityCredits[_job] * _periodCredits) / _jobPeriodCredits[_job] // If the job has period credits, return remaining job credits updated to new twap\\n        : _jobLiquidityCredits[_job]; // If not, return remaining credits, forced credits should not be updated\\n    } else {\\n      // Else return a full period worth of credits if current credits have expired\\n      _liquidityCredits = _periodCredits;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function totalJobCredits(address _job) external view override returns (uint256 _credits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n    uint256 _cooldown = block.timestamp;\\n\\n    if ((rewardedAt[_job] > _period(block.timestamp - rewardPeriodTime))) {\\n      // Will calculate cooldown if it outdated\\n      if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will calculate cooldown from last reward reference in this period\\n        _cooldown -= (rewardedAt[_job] + rewardPeriodTime);\\n      } else {\\n        // Will calculate cooldown from last reward timestamp\\n        _cooldown -= rewardedAt[_job];\\n      }\\n    } else {\\n      // Will calculate cooldown from period start if expired\\n      _cooldown -= _period(block.timestamp);\\n    }\\n    _credits = jobLiquidityCredits(_job) + _phase(_cooldown, _periodCredits);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view override returns (uint256 _periodCredits) {\\n    if (_approvedLiquidities.contains(_liquidity)) {\\n      TickCache memory _tickCache = observeLiquidity(_liquidity);\\n      if (_tickCache.period != 0) {\\n        int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n        return _getReward(IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime));\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function observeLiquidity(address _liquidity) public view virtual override returns (TickCache memory _tickCache) {\\n    if (_tick[_liquidity].period == _period(block.timestamp)) {\\n      // Will return cached twaps if liquidity is updated\\n      _tickCache = _tick[_liquidity];\\n    } else {\\n      bool success;\\n      uint256 lastPeriod = _period(block.timestamp - rewardPeriodTime);\\n\\n      if (_tick[_liquidity].period == lastPeriod) {\\n        // Will only ask for current period accumulator if liquidity is outdated\\n        uint32[] memory _secondsAgo = new uint32[](1);\\n        int56 previousTick = _tick[_liquidity].current;\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n\\n        (_tickCache.current, , success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - previousTick;\\n      } else if (_tick[_liquidity].period < lastPeriod) {\\n        // Will ask for 2 accumulators if liquidity is expired\\n        uint32[] memory _secondsAgo = new uint32[](2);\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n        _secondsAgo[1] = uint32(block.timestamp - _period(block.timestamp) + rewardPeriodTime);\\n\\n        int56 _tickCumulative2;\\n        (_tickCache.current, _tickCumulative2, success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - _tickCumulative2;\\n      }\\n      if (success) {\\n        _tickCache.period = _period(block.timestamp);\\n      } else {\\n        delete _tickCache.period;\\n      }\\n    }\\n  }\\n\\n  // Methods\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external override onlyGovernance {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    _settleJobAccountance(_job);\\n    _jobLiquidityCredits[_job] += _amount;\\n    emit LiquidityCreditsForced(_job, rewardedAt[_job], _jobLiquidityCredits[_job]);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approveLiquidity(address _liquidity) external virtual override onlyGovernance {\\n    if (!_approvedLiquidities.add(_liquidity)) revert LiquidityPairApproved();\\n    _liquidityPool[_liquidity] = IPairManager(_liquidity).pool();\\n    _isKP3RToken0[_liquidity] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_liquidityPool[_liquidity]);\\n    _tick[_liquidity] = observeLiquidity(_liquidity);\\n    emit LiquidityApproval(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function revokeLiquidity(address _liquidity) external override onlyGovernance {\\n    if (!_approvedLiquidities.remove(_liquidity)) revert LiquidityPairUnexistent();\\n    emit LiquidityRevocation(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_approvedLiquidities.contains(_liquidity)) revert LiquidityPairUnapproved();\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n\\n    _jobLiquidities[_job].add(_liquidity);\\n\\n    _settleJobAccountance(_job);\\n\\n    if (_quoteLiquidity(liquidityAmount[_job][_liquidity] + _amount, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n    IERC20(_liquidity).safeTransferFrom(msg.sender, address(this), _amount);\\n    liquidityAmount[_job][_liquidity] += _amount;\\n    _jobPeriodCredits[_job] += _getReward(_quoteLiquidity(_amount, _liquidity));\\n    emit LiquidityAddition(_job, _liquidity, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlyJobOwner(_job) {\\n    canWithdrawAfter[_job][_liquidity] = block.timestamp + unbondTime;\\n    pendingUnbonds[_job][_liquidity] += _amount;\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n\\n    uint256 _remainingLiquidity = liquidityAmount[_job][_liquidity];\\n    if (_remainingLiquidity > 0 && _quoteLiquidity(_remainingLiquidity, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit Unbonding(_job, _liquidity, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external override onlyJobOwner(_job) {\\n    if (_receiver == address(0)) revert ZeroAddress();\\n    if (pendingUnbonds[_job][_liquidity] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[_job][_liquidity] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[_job]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[_job][_liquidity];\\n\\n    delete pendingUnbonds[_job][_liquidity];\\n    delete canWithdrawAfter[_job][_liquidity];\\n\\n    IERC20(_liquidity).safeTransfer(_receiver, _amount);\\n    emit LiquidityWithdrawal(_job, _liquidity, _receiver, _amount);\\n  }\\n\\n  // Internal functions\\n\\n  /// @notice Updates or rewards job liquidity credits depending on time since last job reward\\n  function _updateJobCreditsIfNeeded(address _job) internal returns (bool _rewarded) {\\n    if (rewardedAt[_job] < _period(block.timestamp)) {\\n      // Will exit function if job has been rewarded in current period\\n      if (rewardedAt[_job] <= _period(block.timestamp - rewardPeriodTime)) {\\n        // Will reset job to period syncronicity if a full period passed without rewards\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] = _period(block.timestamp);\\n        _rewarded = true;\\n      } else if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will reset job's syncronicity if last reward was more than epoch ago\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] += rewardPeriodTime;\\n        _rewarded = true;\\n      } else if (workedAt[_job] < _period(block.timestamp)) {\\n        // First keeper on period has to update job accountance to current twaps\\n        uint256 previousPeriodCredits = _jobPeriodCredits[_job];\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = (_jobLiquidityCredits[_job] * _jobPeriodCredits[_job]) / previousPeriodCredits;\\n        // Updating job accountance does not reward job\\n      }\\n    }\\n  }\\n\\n  /// @notice Only called if _jobLiquidityCredits < payment\\n  function _rewardJobCredits(address _job) internal {\\n    /// @notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)\\n    /* WARNING: this allows to top up _jobLiquidityCredits to a max of 1.99 but have to spend at least 1 */\\n    _jobLiquidityCredits[_job] += _phase(block.timestamp - rewardedAt[_job], _jobPeriodCredits[_job]);\\n    rewardedAt[_job] = block.timestamp;\\n  }\\n\\n  /// @notice Updates accountance for _jobPeriodCredits\\n  function _updateJobPeriod(address _job) internal {\\n    _jobPeriodCredits[_job] = _calculateJobPeriodCredits(_job);\\n  }\\n\\n  /// @notice Quotes the outdated job liquidities and calculates _periodCredits\\n  /// @dev This function is also responsible for keeping the KP3R/WETH quote updated\\n  function _calculateJobPeriodCredits(address _job) internal returns (uint256 _periodCredits) {\\n    if (_tick[kp3rWethPool].period != _period(block.timestamp)) {\\n      // Updates KP3R/WETH quote if needed\\n      _tick[kp3rWethPool] = observeLiquidity(kp3rWethPool);\\n    }\\n\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        if (_tick[_liquidity].period != _period(block.timestamp)) {\\n          // Updates liquidity cache only if needed\\n          _tick[_liquidity] = observeLiquidity(_liquidity);\\n        }\\n        _periodCredits += _getReward(_quoteLiquidity(liquidityAmount[_job][_liquidity], _liquidity));\\n      }\\n    }\\n  }\\n\\n  /// @notice Updates job accountance calculating the impact of the unbonded liquidity amount\\n  function _unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) internal nonReentrant {\\n    if (!_jobLiquidities[_job].contains(_liquidity)) revert JobLiquidityUnexistent();\\n    if (liquidityAmount[_job][_liquidity] < _amount) revert JobLiquidityInsufficient();\\n\\n    // Ensures current twaps in job liquidities\\n    _updateJobPeriod(_job);\\n    uint256 _periodCreditsToRemove = _getReward(_quoteLiquidity(_amount, _liquidity));\\n\\n    // A liquidity can be revoked causing a job to have 0 periodCredits\\n    if (_jobPeriodCredits[_job] > 0) {\\n      // Removes a % correspondant to a full rewardPeriodTime for the liquidity withdrawn vs all of the liquidities\\n      _jobLiquidityCredits[_job] -= (_jobLiquidityCredits[_job] * _periodCreditsToRemove) / _jobPeriodCredits[_job];\\n      _jobPeriodCredits[_job] -= _periodCreditsToRemove;\\n    }\\n\\n    liquidityAmount[_job][_liquidity] -= _amount;\\n    if (liquidityAmount[_job][_liquidity] == 0) {\\n      _jobLiquidities[_job].remove(_liquidity);\\n    }\\n  }\\n\\n  /// @notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed\\n  function _phase(uint256 _timePassed, uint256 _multiplier) internal view returns (uint256 _result) {\\n    if (_timePassed < rewardPeriodTime) {\\n      _result = (_timePassed * _multiplier) / rewardPeriodTime;\\n    } else _result = _multiplier;\\n  }\\n\\n  /// @notice Returns the start of the period of the provided timestamp\\n  function _period(uint256 _timestamp) internal view returns (uint256 _periodTimestamp) {\\n    return _timestamp - (_timestamp % rewardPeriodTime);\\n  }\\n\\n  /// @notice Calculates relation between rewardPeriod and inflationPeriod\\n  function _getReward(uint256 _baseAmount) internal view returns (uint256 _credits) {\\n    return FullMath.mulDiv(_baseAmount, rewardPeriodTime, inflationPeriod);\\n  }\\n\\n  /// @notice Returns underlying KP3R amount for a given liquidity amount\\n  function _quoteLiquidity(uint256 _amount, address _liquidity) internal view virtual returns (uint256 _quote) {\\n    if (_tick[_liquidity].period != 0) {\\n      int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tick[_liquidity].difference : -_tick[_liquidity].difference;\\n      _quote = IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime);\\n    }\\n  }\\n\\n  /// @notice Updates job credits to current quotes and rewards job's pending minted credits\\n  /// @dev Ensures a maximum of 1 period of credits\\n  function _settleJobAccountance(address _job) internal virtual {\\n    _updateJobCreditsIfNeeded(_job);\\n    _rewardJobCredits(_job);\\n    _jobLiquidityCredits[_job] = Math.min(_jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n  }\\n}\\n\",\"keccak256\":\"0x7747b2a0ee0c4e3322e92a3e1fc0f6f03be63942bc398009726b58f8c9f79cf0\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rRoles.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobManager is IKeep3rJobManager, Keep3rJobOwnership, Keep3rRoles, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @inheritdoc IKeep3rJobManager\\n  function addJob(address _job) external override {\\n    if (_jobs.contains(_job)) revert JobAlreadyAdded();\\n    if (hasBonded[_job]) revert AlreadyAKeeper();\\n    _jobs.add(_job);\\n    jobOwner[_job] = msg.sender;\\n    emit JobAddition(msg.sender, _job);\\n  }\\n}\\n\",\"keccak256\":\"0xa1fa3fde2b28e28476f0af438049043e695372ee24e1e780b67f00d14d5f660e\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\nimport './Keep3rJobFundableCredits.sol';\\nimport './Keep3rJobFundableLiquidity.sol';\\n\\nabstract contract Keep3rJobMigration is IKeep3rJobMigration, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  uint256 internal constant _MIGRATION_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  mapping(address => address) public override pendingJobMigrations;\\n  mapping(address => mapping(address => uint256)) internal _migrationCreatedAt;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function migrateJob(address _fromJob, address _toJob) external override onlyJobOwner(_fromJob) {\\n    if (_fromJob == _toJob) revert JobMigrationImpossible();\\n\\n    pendingJobMigrations[_fromJob] = _toJob;\\n    _migrationCreatedAt[_fromJob][_toJob] = block.timestamp;\\n\\n    emit JobMigrationRequested(_fromJob, _toJob);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function acceptJobMigration(address _fromJob, address _toJob) external override onlyJobOwner(_toJob) {\\n    if (disputes[_fromJob] || disputes[_toJob]) revert JobDisputed();\\n    if (pendingJobMigrations[_fromJob] != _toJob) revert JobMigrationUnavailable();\\n    if (block.timestamp < _migrationCreatedAt[_fromJob][_toJob] + _MIGRATION_COOLDOWN) revert JobMigrationLocked();\\n\\n    // force job credits update for both jobs\\n    _settleJobAccountance(_fromJob);\\n    _settleJobAccountance(_toJob);\\n\\n    // migrate tokens\\n    while (_jobTokens[_fromJob].length() > 0) {\\n      address _tokenToMigrate = _jobTokens[_fromJob].at(0);\\n      jobTokenCredits[_toJob][_tokenToMigrate] += jobTokenCredits[_fromJob][_tokenToMigrate];\\n      delete jobTokenCredits[_fromJob][_tokenToMigrate];\\n      _jobTokens[_fromJob].remove(_tokenToMigrate);\\n      _jobTokens[_toJob].add(_tokenToMigrate);\\n    }\\n\\n    // migrate liquidities\\n    while (_jobLiquidities[_fromJob].length() > 0) {\\n      address _liquidity = _jobLiquidities[_fromJob].at(0);\\n\\n      liquidityAmount[_toJob][_liquidity] += liquidityAmount[_fromJob][_liquidity];\\n      delete liquidityAmount[_fromJob][_liquidity];\\n\\n      _jobLiquidities[_toJob].add(_liquidity);\\n      _jobLiquidities[_fromJob].remove(_liquidity);\\n    }\\n\\n    // migrate job balances\\n    _jobPeriodCredits[_toJob] += _jobPeriodCredits[_fromJob];\\n    delete _jobPeriodCredits[_fromJob];\\n\\n    _jobLiquidityCredits[_toJob] += _jobLiquidityCredits[_fromJob];\\n    delete _jobLiquidityCredits[_fromJob];\\n\\n    // stop _fromJob from being a job\\n    delete rewardedAt[_fromJob];\\n    _jobs.remove(_fromJob);\\n\\n    // delete unused data slots\\n    delete jobOwner[_fromJob];\\n    delete jobPendingOwner[_fromJob];\\n    delete _migrationCreatedAt[_fromJob][_toJob];\\n    delete pendingJobMigrations[_fromJob];\\n\\n    emit JobMigrationSuccessful(_fromJob, _toJob);\\n  }\\n}\\n\",\"keccak256\":\"0xd46c3c9ce970098d8d75f11966894a341824aceb40583fcfbbc0ebda93d869f9\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobMigration.sol';\\nimport '../../../interfaces/IKeep3rHelper.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\n\\nabstract contract Keep3rJobWorkable is IKeep3rJobWorkable, Keep3rJobMigration {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  uint256 internal _initialGas;\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function isKeeper(address _keeper) external override returns (bool _isKeeper) {\\n    _initialGas = _getGasLeft();\\n    if (_keepers.contains(_keeper)) {\\n      emit KeeperValidation(_initialGas);\\n      return true;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) public override returns (bool _isBondedKeeper) {\\n    _initialGas = _getGasLeft();\\n    if (\\n      _keepers.contains(_keeper) &&\\n      bonds[_keeper][_bond] >= _minBond &&\\n      workCompleted[_keeper] >= _earned &&\\n      block.timestamp - firstSeen[_keeper] >= _age\\n    ) {\\n      emit KeeperValidation(_initialGas);\\n      return true;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function worked(address _keeper) external virtual override {\\n    address _job = msg.sender;\\n    if (disputes[_job]) revert JobDisputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n\\n    if (_updateJobCreditsIfNeeded(_job)) {\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    (uint256 _boost, uint256 _oneEthQuote, uint256 _extraGas) = IKeep3rHelper(keep3rHelper).getPaymentParams(bonds[_keeper][keep3rV1]);\\n\\n    uint256 _gasLeft = _getGasLeft();\\n    uint256 _payment = _calculatePayment(_gasLeft, _extraGas, _oneEthQuote, _boost);\\n\\n    if (_payment > _jobLiquidityCredits[_job]) {\\n      _rewardJobCredits(_job);\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n      _gasLeft = _getGasLeft();\\n      _payment = _calculatePayment(_gasLeft, _extraGas, _oneEthQuote, _boost);\\n    }\\n\\n    _bondedPayment(_job, _keeper, _payment);\\n    emit KeeperWork(keep3rV1, _job, _keeper, _payment, _gasLeft);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function bondedPayment(address _keeper, uint256 _payment) public override {\\n    address _job = msg.sender;\\n\\n    if (disputes[_job]) revert JobDisputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n\\n    if (_updateJobCreditsIfNeeded(_job)) {\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    if (_payment > _jobLiquidityCredits[_job]) {\\n      _rewardJobCredits(_job);\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    _bondedPayment(_job, _keeper, _payment);\\n    emit KeeperWork(keep3rV1, _job, _keeper, _payment, _getGasLeft());\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external override {\\n    address _job = msg.sender;\\n\\n    if (disputes[_job]) revert JobDisputed();\\n    if (disputes[_keeper]) revert Disputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientFunds();\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_keeper, _amount);\\n    emit KeeperWork(_token, _job, _keeper, _amount, _getGasLeft());\\n  }\\n\\n  function _bondedPayment(\\n    address _job,\\n    address _keeper,\\n    uint256 _payment\\n  ) internal {\\n    if (_payment > _jobLiquidityCredits[_job]) revert InsufficientFunds();\\n\\n    workedAt[_job] = block.timestamp;\\n    _jobLiquidityCredits[_job] -= _payment;\\n    bonds[_keeper][keep3rV1] += _payment;\\n    workCompleted[_keeper] += _payment;\\n  }\\n\\n  /// @notice Calculate amount to be payed in KP3R, taking into account multiple parameters\\n  /// @param _gasLeft Amount of gas left after working the job\\n  /// @param _extraGas Amount of expected unaccounted gas\\n  /// @param _oneEthQuote Amount of KP3R equivalent to 1 ETH\\n  /// @param _boost Reward given to the keeper for having bonded KP3R tokens\\n  /// @return _payment Amount to be payed in KP3R tokens\\n  function _calculatePayment(\\n    uint256 _gasLeft,\\n    uint256 _extraGas,\\n    uint256 _oneEthQuote,\\n    uint256 _boost\\n  ) internal view returns (uint256 _payment) {\\n    uint256 _accountedGas = _initialGas - _gasLeft + _extraGas;\\n    _payment = (((_accountedGas * _boost) / _BASE) * _oneEthQuote) / 1 ether;\\n  }\\n\\n  /// @notice Return the gas left and add 1/64 in order to match real gas left at first level of depth (EIP-150)\\n  /// @return _gasLeft Amount of gas left recording taking into account EIP-150\\n  function _getGasLeft() internal view returns (uint256 _gasLeft) {\\n    _gasLeft = (gasleft() * 64) / 63;\\n  }\\n}\\n\",\"keccak256\":\"0x8f67c23ec95bbce4501ccb0667109a00eaab9413514c58ad62c8e03ba1ea077a\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobDisputable.sol';\\nimport './Keep3rJobWorkable.sol';\\nimport './Keep3rJobManager.sol';\\n\\nabstract contract Keep3rJobs is Keep3rJobDisputable, Keep3rJobManager, Keep3rJobWorkable {}\\n\",\"keccak256\":\"0xc9939ffd28f6402b60ef4dd2b23cb5eb88099e4ce374248e1f2c80c5c7039df1\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Creates/resolves disputes for jobs or keepers\\n///         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\\n///         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\\ninterface IKeep3rDisputable {\\n  /// @notice Emitted when a keeper or a job is disputed\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _disputer The user that called the function and disputed the keeper\\n  event Dispute(address indexed _jobOrKeeper, address indexed _disputer);\\n\\n  /// @notice Emitted when a dispute is resolved\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _resolver The user that called the function and resolved the dispute\\n  event Resolve(address indexed _jobOrKeeper, address indexed _resolver);\\n\\n  /// @notice Throws when a job or keeper is already disputed\\n  error AlreadyDisputed();\\n\\n  /// @notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute\\n  error NotDisputed();\\n\\n  /// @notice Allows governance to create a dispute for a given keeper/job\\n  /// @param _jobOrKeeper The address in dispute\\n  function dispute(address _jobOrKeeper) external;\\n\\n  /// @notice Allows governance to resolve a dispute on a keeper/job\\n  /// @param _jobOrKeeper The address cleared\\n  function resolve(address _jobOrKeeper) external;\\n}\\n\",\"keccak256\":\"0x002b9b4c75e62d48d74b6447649d39eb5c1e128d2523bb11e08e9cd3e27b1f70\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6297,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "jobTokenCreditsAddedAt",
                "offset": 0,
                "slot": "37",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6540,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_approvedLiquidities",
                "offset": 0,
                "slot": "38",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 6548,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "liquidityAmount",
                "offset": 0,
                "slot": "40",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6554,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "rewardedAt",
                "offset": 0,
                "slot": "41",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6560,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "workedAt",
                "offset": 0,
                "slot": "42",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6566,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_tick",
                "offset": 0,
                "slot": "43",
                "type": "t_mapping(t_address,t_struct(TickCache)13178_storage)"
              },
              {
                "astId": 8024,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "pendingJobMigrations",
                "offset": 0,
                "slot": "44",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8030,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_migrationCreatedAt",
                "offset": 0,
                "slot": "45",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 8427,
                "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                "label": "_initialGas",
                "offset": 0,
                "slot": "46",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_int56": {
                "encoding": "inplace",
                "label": "int56",
                "numberOfBytes": "7"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_struct(TickCache)13178_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)",
                "numberOfBytes": "32",
                "value": "t_struct(TickCache)13178_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(TickCache)13178_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rJobFundableLiquidity.TickCache",
                "members": [
                  {
                    "astId": 13173,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                    "label": "current",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13175,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                    "label": "difference",
                    "offset": 7,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13177,
                    "contract": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol:Keep3rJobs",
                    "label": "period",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyAKeeper()": [
                {
                  "notice": "Throws when the address that is trying to register as a keeper is already a keeper"
                }
              ],
              "AlreadyDisputed()": [
                {
                  "notice": "Throws when a job or keeper is already disputed"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "InsufficientFunds()": [
                {
                  "notice": "Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobAlreadyAdded()": [
                {
                  "notice": "Throws when trying to add a job that has already been added"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobMigrationImpossible()": [
                {
                  "notice": "Throws when the address of the job that requests to migrate wants to migrate to its same address"
                }
              ],
              "JobMigrationLocked()": [
                {
                  "notice": "Throws when cooldown between migrations has not yet passed"
                }
              ],
              "JobMigrationUnavailable()": [
                {
                  "notice": "Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobTokenInsufficient()": [
                {
                  "notice": "Throws when someone tries to slash more tokens than the job has"
                }
              ],
              "JobTokenUnexistent()": [
                {
                  "notice": "Throws when the token trying to be slashed doesn't exist"
                }
              ],
              "JobUnapproved()": [
                {
                  "notice": "Throws if the address claiming to be a job is not in the list of approved jobs"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "NotDisputed()": [
                {
                  "notice": "Throws when a job or keeper is not disputed and someone tries to resolve the dispute"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Dispute(address,address)": {
                "notice": "Emitted when a keeper or a job is disputed"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobAddition(address,address)": {
                "notice": "Emitted when Keep3rJobManager#addJob is called"
              },
              "JobMigrationRequested(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#migrateJob function is called"
              },
              "JobMigrationSuccessful(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#acceptJobMigration function is called"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "JobSlashLiquidity(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called"
              },
              "JobSlashToken(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashTokenFromJob is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "KeeperValidation(uint256)": {
                "notice": "Emitted when a keeper is validated before a job"
              },
              "KeeperWork(address,address,address,uint256,uint256)": {
                "notice": "Emitted when a keeper works a job"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "Resolve(address,address)": {
                "notice": "Emitted when a dispute is resolved"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobMigration(address,address)": {
                "notice": "Completes the migration process for a job"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addJob(address)": {
                "notice": "Allows any caller to add a new job"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bondedPayment(address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "directTokenPayment(address,address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "dispute(address)": {
                "notice": "Allows governance to create a dispute for a given keeper/job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "notice": "Confirms if the current keeper is registered and has a minimum bond of any asset."
              },
              "isKeeper(address)": {
                "notice": "Confirms if the current keeper is registered"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "migrateJob(address,address)": {
                "notice": "Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingJobMigrations(address)": {
                "notice": "Maps the jobs that have requested a migration to the address they have requested to migrate to"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "resolve(address)": {
                "notice": "Allows governance to resolve a dispute on a keeper/job"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "notice": "Allows governance or a slasher to slash liquidity from a job"
              },
              "slashTokenFromJob(address,address,uint256)": {
                "notice": "Allows governance or slasher to slash a job specific token"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              },
              "worked(address)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol": {
        "Keep3rKeeperDisputable": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyAJob",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "AlreadyDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Activation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "Dispute",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "KeeperRevoke",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "KeeperSlash",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_resolver",
                  "type": "address"
                }
              ],
              "name": "Resolve",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Withdrawal",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "activate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "bond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "revoke",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonded",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_bondAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_unbondAmount",
                  "type": "uint256"
                }
              ],
              "name": "slash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "activate(address)": {
                "params": {
                  "_bonding": "The asset being activated as bond collateral"
                }
              },
              "bond(address,uint256)": {
                "params": {
                  "_amount": "The amount of bonding asset being bonded",
                  "_bonding": "The asset being bonded"
                }
              },
              "dispute(address)": {
                "params": {
                  "_jobOrKeeper": "The address in dispute"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "resolve(address)": {
                "params": {
                  "_jobOrKeeper": "The address cleared"
                }
              },
              "revoke(address)": {
                "params": {
                  "_keeper": "The address being slashed"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "slash(address,address,uint256,uint256)": {
                "params": {
                  "_bondAmount": "The bonded amount being slashed",
                  "_bonded": "The asset being slashed",
                  "_keeper": "The address being slashed",
                  "_unbondAmount": "The pending unbond amount being slashed"
                }
              },
              "unbond(address,uint256)": {
                "params": {
                  "_amount": "Allows for partial unbonding",
                  "_bonding": "The asset being unbonded"
                }
              },
              "withdraw(address)": {
                "params": {
                  "_bonding": "The asset to withdraw from the bonding pool"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "activate(address)": "1c5a9d9c",
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "bond(address,uint256)": "a515366a",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "dispute(address)": "f75f9f7b",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityMinimum()": "633fb68f",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "resolve(address)": "55ea6c47",
              "revoke(address)": "74a8f103",
              "rewardPeriodTime()": "768b5d90",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slash(address,address,uint256,uint256)": "c20297f0",
              "slashers(address)": "b87fcbff",
              "unbond(address,uint256)": "a5d059ca",
              "unbondTime()": "a7d2e784",
              "withdraw(address)": "51cff8d9",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyAJob\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Activation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"Dispute\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"KeeperRevoke\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"KeeperSlash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"Resolve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonded\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_bondAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unbondAmount\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"activate(address)\":{\"params\":{\"_bonding\":\"The asset being activated as bond collateral\"}},\"bond(address,uint256)\":{\"params\":{\"_amount\":\"The amount of bonding asset being bonded\",\"_bonding\":\"The asset being bonded\"}},\"dispute(address)\":{\"params\":{\"_jobOrKeeper\":\"The address in dispute\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"resolve(address)\":{\"params\":{\"_jobOrKeeper\":\"The address cleared\"}},\"revoke(address)\":{\"params\":{\"_keeper\":\"The address being slashed\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"slash(address,address,uint256,uint256)\":{\"params\":{\"_bondAmount\":\"The bonded amount being slashed\",\"_bonded\":\"The asset being slashed\",\"_keeper\":\"The address being slashed\",\"_unbondAmount\":\"The pending unbond amount being slashed\"}},\"unbond(address,uint256)\":{\"params\":{\"_amount\":\"Allows for partial unbonding\",\"_bonding\":\"The asset being unbonded\"}},\"withdraw(address)\":{\"params\":{\"_bonding\":\"The asset to withdraw from the bonding pool\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAJob()\":[{\"notice\":\"Throws when the address that is trying to register as a job is already a job\"}],\"AlreadyDisputed()\":[{\"notice\":\"Throws when a job or keeper is already disputed\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"NotDisputed()\":[{\"notice\":\"Throws when a job or keeper is not disputed and someone tries to resolve the dispute\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"Activation(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#activate is called\"},\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Dispute(address,address)\":{\"notice\":\"Emitted when a keeper or a job is disputed\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"KeeperRevoke(address,address)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#revoke is called\"},\"KeeperSlash(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#slash is called\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"Resolve(address,address)\":{\"notice\":\"Emitted when a dispute is resolved\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"},\"Withdrawal(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#withdraw is called\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"activate(address)\":{\"notice\":\"End of the bonding process after bonding time has passed\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"bond(address,uint256)\":{\"notice\":\"Beginning of the bonding process\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"dispute(address)\":{\"notice\":\"Allows governance to create a dispute for a given keeper/job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"resolve(address)\":{\"notice\":\"Allows governance to resolve a dispute on a keeper/job\"},\"revoke(address)\":{\"notice\":\"Blacklists a keeper from participating in the network\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slash(address,address,uint256,uint256)\":{\"notice\":\"Allows governance to slash a keeper based on a dispute\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"unbond(address,uint256)\":{\"notice\":\"Beginning of the unbonding process\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdraw(address)\":{\"notice\":\"Withdraw funds after unbonding has finished\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol\":\"Keep3rKeeperDisputable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rParameters.sol';\\nimport './Keep3rRoles.sol';\\nimport '../../interfaces/peripherals/IKeep3rDisputable.sol';\\n\\nabstract contract Keep3rDisputable is IKeep3rDisputable, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rDisputable\\n  function dispute(address _jobOrKeeper) external override onlyDisputer {\\n    if (disputes[_jobOrKeeper]) revert AlreadyDisputed();\\n    disputes[_jobOrKeeper] = true;\\n    emit Dispute(_jobOrKeeper, msg.sender);\\n  }\\n\\n  /// @inheritdoc IKeep3rDisputable\\n  function resolve(address _jobOrKeeper) external override onlyDisputer {\\n    if (!disputes[_jobOrKeeper]) revert NotDisputed();\\n    disputes[_jobOrKeeper] = false;\\n    emit Resolve(_jobOrKeeper, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x941e9ba02b2ad3975edc444cd771ef1e5386051553632140f882258ea7e4d4bc\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rKeeperFundable.sol';\\nimport '../Keep3rDisputable.sol';\\nimport '../../../interfaces/external/IKeep3rV1.sol';\\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\\n\\nabstract contract Keep3rKeeperDisputable is IKeep3rKeeperDisputable, Keep3rDisputable, Keep3rKeeperFundable {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rKeeperDisputable\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) public override onlySlasher {\\n    if (!disputes[_keeper]) revert NotDisputed();\\n    _slash(_keeper, _bonded, _bondAmount, _unbondAmount);\\n    emit KeeperSlash(_keeper, msg.sender, _bondAmount + _unbondAmount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperDisputable\\n  function revoke(address _keeper) external override onlySlasher {\\n    if (!disputes[_keeper]) revert NotDisputed();\\n    _keepers.remove(_keeper);\\n    _slash(_keeper, keep3rV1, bonds[_keeper][keep3rV1], pendingUnbonds[_keeper][keep3rV1]);\\n    emit KeeperRevoke(_keeper, msg.sender);\\n  }\\n\\n  function _slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) internal {\\n    if (_bonded != keep3rV1) {\\n      try IERC20(_bonded).transfer(governance, _bondAmount + _unbondAmount) returns (bool) {} catch (bytes memory) {}\\n    }\\n    bonds[_keeper][_bonded] -= _bondAmount;\\n    pendingUnbonds[_keeper][_bonded] -= _unbondAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x1b983519e5367b29d8cd4698c56ed9c18013f757bf0a6a2656572547aaf20208\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\\n\\nimport '../../../interfaces/external/IKeep3rV1.sol';\\nimport '../../../interfaces/external/IKeep3rV1Proxy.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\n\\nabstract contract Keep3rKeeperFundable is IKeep3rKeeperFundable, ReentrancyGuard, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function bond(address _bonding, uint256 _amount) external override nonReentrant {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (_jobs.contains(msg.sender)) revert AlreadyAJob();\\n    canActivateAfter[msg.sender][_bonding] = block.timestamp + bondTime;\\n\\n    uint256 _before = IERC20(_bonding).balanceOf(address(this));\\n    IERC20(_bonding).safeTransferFrom(msg.sender, address(this), _amount);\\n    _amount = IERC20(_bonding).balanceOf(address(this)) - _before;\\n\\n    hasBonded[msg.sender] = true;\\n    pendingBonds[msg.sender][_bonding] += _amount;\\n\\n    emit Bonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function activate(address _bonding) external override {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (canActivateAfter[msg.sender][_bonding] == 0) revert BondsUnexistent();\\n    if (canActivateAfter[msg.sender][_bonding] >= block.timestamp) revert BondsLocked();\\n\\n    delete canActivateAfter[msg.sender][_bonding];\\n\\n    uint256 _amount = _activate(msg.sender, _bonding);\\n    emit Activation(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function unbond(address _bonding, uint256 _amount) external override {\\n    canWithdrawAfter[msg.sender][_bonding] = block.timestamp + unbondTime;\\n    bonds[msg.sender][_bonding] -= _amount;\\n    pendingUnbonds[msg.sender][_bonding] += _amount;\\n\\n    emit Unbonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function withdraw(address _bonding) external override nonReentrant {\\n    if (pendingUnbonds[msg.sender][_bonding] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[msg.sender][_bonding] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[msg.sender]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[msg.sender][_bonding];\\n\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1Proxy(keep3rV1Proxy).mint(_amount);\\n    }\\n\\n    delete pendingUnbonds[msg.sender][_bonding];\\n    delete canWithdrawAfter[msg.sender][_bonding];\\n\\n    IERC20(_bonding).safeTransfer(msg.sender, _amount);\\n\\n    emit Withdrawal(msg.sender, _bonding, _amount);\\n  }\\n\\n  function _activate(address _keeper, address _bonding) internal virtual returns (uint256 _amount) {\\n    if (firstSeen[_keeper] == 0) {\\n      firstSeen[_keeper] = block.timestamp;\\n    }\\n    _keepers.add(_keeper);\\n    _amount = pendingBonds[_keeper][_bonding];\\n    delete pendingBonds[_keeper][_bonding];\\n\\n    // bond provided tokens\\n    bonds[_keeper][_bonding] += _amount;\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1(keep3rV1).burn(_amount);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcd56d53eacaa3dbffc2cb573562482ba05b51246bf273f6bde9fb5de52c54eb2\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n// solhint-disable func-name-mixedcase\\ninterface IKeep3rV1 is IERC20, IERC20Metadata {\\n  // Structs\\n  struct Checkpoint {\\n    uint32 fromBlock;\\n    uint256 votes;\\n  }\\n\\n  // Events\\n  event DelegateChanged(address indexed _delegator, address indexed _fromDelegate, address indexed _toDelegate);\\n  event DelegateVotesChanged(address indexed _delegate, uint256 _previousBalance, uint256 _newBalance);\\n  event SubmitJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event ApplyCredit(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event RemoveJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event UnbondJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event JobAdded(address indexed _job, uint256 _block, address _governance);\\n  event JobRemoved(address indexed _job, uint256 _block, address _governance);\\n  event KeeperWorked(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _block, uint256 _amount);\\n  event KeeperBonding(address indexed _keeper, uint256 _block, uint256 _active, uint256 _bond);\\n  event KeeperBonded(address indexed _keeper, uint256 _block, uint256 _activated, uint256 _bond);\\n  event KeeperUnbonding(address indexed _keeper, uint256 _block, uint256 _deactive, uint256 _bond);\\n  event KeeperUnbound(address indexed _keeper, uint256 _block, uint256 _deactivated, uint256 _bond);\\n  event KeeperSlashed(address indexed _keeper, address indexed _slasher, uint256 _block, uint256 _slash);\\n  event KeeperDispute(address indexed _keeper, uint256 _block);\\n  event KeeperResolved(address indexed _keeper, uint256 _block);\\n  event TokenCreditAddition(address indexed _credit, address indexed _job, address indexed _creditor, uint256 _block, uint256 _amount);\\n\\n  // Variables\\n  function KPRH() external returns (address);\\n\\n  function delegates(address _delegator) external view returns (address);\\n\\n  function checkpoints(address _account, uint32 _checkpoint) external view returns (Checkpoint memory);\\n\\n  function numCheckpoints(address _account) external view returns (uint32);\\n\\n  function DOMAIN_TYPEHASH() external returns (bytes32);\\n\\n  function DOMAINSEPARATOR() external returns (bytes32);\\n\\n  function DELEGATION_TYPEHASH() external returns (bytes32);\\n\\n  function PERMIT_TYPEHASH() external returns (bytes32);\\n\\n  function nonces(address _user) external view returns (uint256);\\n\\n  function BOND() external returns (uint256);\\n\\n  function UNBOND() external returns (uint256);\\n\\n  function LIQUIDITYBOND() external returns (uint256);\\n\\n  function FEE() external returns (uint256);\\n\\n  function BASE() external returns (uint256);\\n\\n  function ETH() external returns (address);\\n\\n  function bondings(address _user, address _bonding) external view returns (uint256);\\n\\n  function canWithdrawAfter(address _user, address _bonding) external view returns (uint256);\\n\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function pendingbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function bonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function votes(address _delegator) external view returns (uint256);\\n\\n  function firstSeen(address _keeper) external view returns (uint256);\\n\\n  function disputes(address _keeper) external view returns (bool);\\n\\n  function lastJob(address _keeper) external view returns (uint256);\\n\\n  function workCompleted(address _keeper) external view returns (uint256);\\n\\n  function jobs(address _job) external view returns (bool);\\n\\n  function credits(address _job, address _credit) external view returns (uint256);\\n\\n  function liquidityProvided(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmountsUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function jobProposalDelay(address _job) external view returns (uint256);\\n\\n  function liquidityApplied(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmount(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function keepers(address _keeper) external view returns (bool);\\n\\n  function blacklist(address _keeper) external view returns (bool);\\n\\n  function keeperList(uint256 _index) external view returns (address);\\n\\n  function jobList(uint256 _index) external view returns (address);\\n\\n  function governance() external returns (address);\\n\\n  function pendingGovernance() external returns (address);\\n\\n  function liquidityAccepted(address _liquidity) external view returns (bool);\\n\\n  function liquidityPairs(uint256 _index) external view returns (address);\\n\\n  // Methods\\n  function getCurrentVotes(address _account) external view returns (uint256);\\n\\n  function addCreditETH(address _job) external payable;\\n\\n  function addCredit(\\n    address _credit,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function pairs() external view returns (address[] memory);\\n\\n  function addLiquidityToJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function applyCreditToJob(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external;\\n\\n  function unbondLiquidityFromJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function removeLiquidityFromJob(address _liquidity, address _job) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function burn(uint256 _amount) external;\\n\\n  function worked(address _keeper) external;\\n\\n  function receipt(\\n    address _credit,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function receiptETH(address _keeper, uint256 _amount) external;\\n\\n  function addJob(address _job) external;\\n\\n  function getJobs() external view returns (address[] memory);\\n\\n  function removeJob(address _job) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function setGovernance(address _governance) external;\\n\\n  function acceptGovernance() external;\\n\\n  function isKeeper(address _keeper) external returns (bool);\\n\\n  function isMinKeeper(\\n    address _keeper,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  function getKeepers() external view returns (address[] memory);\\n\\n  function activate(address _bonding) external;\\n\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function withdraw(address _bonding) external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xa9806cd6666ab1b7375ef72446964a72397fd4cefc7cc8c5b37caa7c50df0246\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../peripherals/IGovernable.sol';\\n\\ninterface IKeep3rV1Proxy is IGovernable {\\n  // Structs\\n  struct Recipient {\\n    address recipient;\\n    uint256 caps;\\n  }\\n\\n  // Variables\\n  function keep3rV1() external view returns (address);\\n\\n  function minter() external view returns (address);\\n\\n  function next(address) external view returns (uint256);\\n\\n  function caps(address) external view returns (uint256);\\n\\n  function recipients() external view returns (address[] memory);\\n\\n  function recipientsCaps() external view returns (Recipient[] memory);\\n\\n  // Errors\\n  error Cooldown();\\n  error NoDrawableAmount();\\n  error ZeroAddress();\\n  error OnlyMinter();\\n\\n  // Methods\\n  function addRecipient(address recipient, uint256 amount) external;\\n\\n  function removeRecipient(address recipient) external;\\n\\n  function draw() external returns (uint256 _amount);\\n\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  function setMinter(address _minter) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function mint(address _account, uint256 _amount) external;\\n\\n  function setKeep3rV1Governance(address _governance) external;\\n\\n  function acceptKeep3rV1Governance() external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function addJob(address _job) external;\\n\\n  function removeJob(address _job) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xfb2e81fe347b39aabce849ef2d42c6df846b7ef0ed5ae952c85bbb708da99408\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Creates/resolves disputes for jobs or keepers\\n///         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\\n///         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\\ninterface IKeep3rDisputable {\\n  /// @notice Emitted when a keeper or a job is disputed\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _disputer The user that called the function and disputed the keeper\\n  event Dispute(address indexed _jobOrKeeper, address indexed _disputer);\\n\\n  /// @notice Emitted when a dispute is resolved\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _resolver The user that called the function and resolved the dispute\\n  event Resolve(address indexed _jobOrKeeper, address indexed _resolver);\\n\\n  /// @notice Throws when a job or keeper is already disputed\\n  error AlreadyDisputed();\\n\\n  /// @notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute\\n  error NotDisputed();\\n\\n  /// @notice Allows governance to create a dispute for a given keeper/job\\n  /// @param _jobOrKeeper The address in dispute\\n  function dispute(address _jobOrKeeper) external;\\n\\n  /// @notice Allows governance to resolve a dispute on a keeper/job\\n  /// @param _jobOrKeeper The address cleared\\n  function resolve(address _jobOrKeeper) external;\\n}\\n\",\"keccak256\":\"0x002b9b4c75e62d48d74b6447649d39eb5c1e128d2523bb11e08e9cd3e27b1f70\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "_keepers",
                "offset": 0,
                "slot": "1",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "workCompleted",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "firstSeen",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "disputes",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "bonds",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "hasBonded",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "_jobs",
                "offset": 0,
                "slot": "19",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "governance",
                "offset": 0,
                "slot": "21",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "22",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "slashers",
                "offset": 0,
                "slot": "23",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "disputers",
                "offset": 0,
                "slot": "24",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "25",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "26",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "bondTime",
                "offset": 0,
                "slot": "29",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "unbondTime",
                "offset": 0,
                "slot": "30",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                "label": "fee",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol:Keep3rKeeperDisputable",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyAJob()": [
                {
                  "notice": "Throws when the address that is trying to register as a job is already a job"
                }
              ],
              "AlreadyDisputed()": [
                {
                  "notice": "Throws when a job or keeper is already disputed"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "NotDisputed()": [
                {
                  "notice": "Throws when a job or keeper is not disputed and someone tries to resolve the dispute"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "Activation(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#activate is called"
              },
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Dispute(address,address)": {
                "notice": "Emitted when a keeper or a job is disputed"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "KeeperRevoke(address,address)": {
                "notice": "Emitted when Keep3rKeeperDisputable#revoke is called"
              },
              "KeeperSlash(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperDisputable#slash is called"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "Resolve(address,address)": {
                "notice": "Emitted when a dispute is resolved"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              },
              "Withdrawal(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#withdraw is called"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "activate(address)": {
                "notice": "End of the bonding process after bonding time has passed"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "bond(address,uint256)": {
                "notice": "Beginning of the bonding process"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "dispute(address)": {
                "notice": "Allows governance to create a dispute for a given keeper/job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "resolve(address)": {
                "notice": "Allows governance to resolve a dispute on a keeper/job"
              },
              "revoke(address)": {
                "notice": "Blacklists a keeper from participating in the network"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slash(address,address,uint256,uint256)": {
                "notice": "Allows governance to slash a keeper based on a dispute"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "unbond(address,uint256)": {
                "notice": "Beginning of the unbonding process"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdraw(address)": {
                "notice": "Withdraw funds after unbonding has finished"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol": {
        "Keep3rKeeperFundable": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyAJob",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Activation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Withdrawal",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "activate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "bond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "activate(address)": {
                "params": {
                  "_bonding": "The asset being activated as bond collateral"
                }
              },
              "bond(address,uint256)": {
                "params": {
                  "_amount": "The amount of bonding asset being bonded",
                  "_bonding": "The asset being bonded"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "unbond(address,uint256)": {
                "params": {
                  "_amount": "Allows for partial unbonding",
                  "_bonding": "The asset being unbonded"
                }
              },
              "withdraw(address)": {
                "params": {
                  "_bonding": "The asset to withdraw from the bonding pool"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "activate(address)": "1c5a9d9c",
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "bond(address,uint256)": "a515366a",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityMinimum()": "633fb68f",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "rewardPeriodTime()": "768b5d90",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "unbond(address,uint256)": "a5d059ca",
              "unbondTime()": "a7d2e784",
              "withdraw(address)": "51cff8d9",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyAJob\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Activation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"activate(address)\":{\"params\":{\"_bonding\":\"The asset being activated as bond collateral\"}},\"bond(address,uint256)\":{\"params\":{\"_amount\":\"The amount of bonding asset being bonded\",\"_bonding\":\"The asset being bonded\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"unbond(address,uint256)\":{\"params\":{\"_amount\":\"Allows for partial unbonding\",\"_bonding\":\"The asset being unbonded\"}},\"withdraw(address)\":{\"params\":{\"_bonding\":\"The asset to withdraw from the bonding pool\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAJob()\":[{\"notice\":\"Throws when the address that is trying to register as a job is already a job\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"Activation(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#activate is called\"},\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"},\"Withdrawal(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#withdraw is called\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"activate(address)\":{\"notice\":\"End of the bonding process after bonding time has passed\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"bond(address,uint256)\":{\"notice\":\"Beginning of the bonding process\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"unbond(address,uint256)\":{\"notice\":\"Beginning of the unbonding process\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdraw(address)\":{\"notice\":\"Withdraw funds after unbonding has finished\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol\":\"Keep3rKeeperFundable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\\n\\nimport '../../../interfaces/external/IKeep3rV1.sol';\\nimport '../../../interfaces/external/IKeep3rV1Proxy.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\n\\nabstract contract Keep3rKeeperFundable is IKeep3rKeeperFundable, ReentrancyGuard, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function bond(address _bonding, uint256 _amount) external override nonReentrant {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (_jobs.contains(msg.sender)) revert AlreadyAJob();\\n    canActivateAfter[msg.sender][_bonding] = block.timestamp + bondTime;\\n\\n    uint256 _before = IERC20(_bonding).balanceOf(address(this));\\n    IERC20(_bonding).safeTransferFrom(msg.sender, address(this), _amount);\\n    _amount = IERC20(_bonding).balanceOf(address(this)) - _before;\\n\\n    hasBonded[msg.sender] = true;\\n    pendingBonds[msg.sender][_bonding] += _amount;\\n\\n    emit Bonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function activate(address _bonding) external override {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (canActivateAfter[msg.sender][_bonding] == 0) revert BondsUnexistent();\\n    if (canActivateAfter[msg.sender][_bonding] >= block.timestamp) revert BondsLocked();\\n\\n    delete canActivateAfter[msg.sender][_bonding];\\n\\n    uint256 _amount = _activate(msg.sender, _bonding);\\n    emit Activation(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function unbond(address _bonding, uint256 _amount) external override {\\n    canWithdrawAfter[msg.sender][_bonding] = block.timestamp + unbondTime;\\n    bonds[msg.sender][_bonding] -= _amount;\\n    pendingUnbonds[msg.sender][_bonding] += _amount;\\n\\n    emit Unbonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function withdraw(address _bonding) external override nonReentrant {\\n    if (pendingUnbonds[msg.sender][_bonding] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[msg.sender][_bonding] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[msg.sender]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[msg.sender][_bonding];\\n\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1Proxy(keep3rV1Proxy).mint(_amount);\\n    }\\n\\n    delete pendingUnbonds[msg.sender][_bonding];\\n    delete canWithdrawAfter[msg.sender][_bonding];\\n\\n    IERC20(_bonding).safeTransfer(msg.sender, _amount);\\n\\n    emit Withdrawal(msg.sender, _bonding, _amount);\\n  }\\n\\n  function _activate(address _keeper, address _bonding) internal virtual returns (uint256 _amount) {\\n    if (firstSeen[_keeper] == 0) {\\n      firstSeen[_keeper] = block.timestamp;\\n    }\\n    _keepers.add(_keeper);\\n    _amount = pendingBonds[_keeper][_bonding];\\n    delete pendingBonds[_keeper][_bonding];\\n\\n    // bond provided tokens\\n    bonds[_keeper][_bonding] += _amount;\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1(keep3rV1).burn(_amount);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcd56d53eacaa3dbffc2cb573562482ba05b51246bf273f6bde9fb5de52c54eb2\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n// solhint-disable func-name-mixedcase\\ninterface IKeep3rV1 is IERC20, IERC20Metadata {\\n  // Structs\\n  struct Checkpoint {\\n    uint32 fromBlock;\\n    uint256 votes;\\n  }\\n\\n  // Events\\n  event DelegateChanged(address indexed _delegator, address indexed _fromDelegate, address indexed _toDelegate);\\n  event DelegateVotesChanged(address indexed _delegate, uint256 _previousBalance, uint256 _newBalance);\\n  event SubmitJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event ApplyCredit(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event RemoveJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event UnbondJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event JobAdded(address indexed _job, uint256 _block, address _governance);\\n  event JobRemoved(address indexed _job, uint256 _block, address _governance);\\n  event KeeperWorked(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _block, uint256 _amount);\\n  event KeeperBonding(address indexed _keeper, uint256 _block, uint256 _active, uint256 _bond);\\n  event KeeperBonded(address indexed _keeper, uint256 _block, uint256 _activated, uint256 _bond);\\n  event KeeperUnbonding(address indexed _keeper, uint256 _block, uint256 _deactive, uint256 _bond);\\n  event KeeperUnbound(address indexed _keeper, uint256 _block, uint256 _deactivated, uint256 _bond);\\n  event KeeperSlashed(address indexed _keeper, address indexed _slasher, uint256 _block, uint256 _slash);\\n  event KeeperDispute(address indexed _keeper, uint256 _block);\\n  event KeeperResolved(address indexed _keeper, uint256 _block);\\n  event TokenCreditAddition(address indexed _credit, address indexed _job, address indexed _creditor, uint256 _block, uint256 _amount);\\n\\n  // Variables\\n  function KPRH() external returns (address);\\n\\n  function delegates(address _delegator) external view returns (address);\\n\\n  function checkpoints(address _account, uint32 _checkpoint) external view returns (Checkpoint memory);\\n\\n  function numCheckpoints(address _account) external view returns (uint32);\\n\\n  function DOMAIN_TYPEHASH() external returns (bytes32);\\n\\n  function DOMAINSEPARATOR() external returns (bytes32);\\n\\n  function DELEGATION_TYPEHASH() external returns (bytes32);\\n\\n  function PERMIT_TYPEHASH() external returns (bytes32);\\n\\n  function nonces(address _user) external view returns (uint256);\\n\\n  function BOND() external returns (uint256);\\n\\n  function UNBOND() external returns (uint256);\\n\\n  function LIQUIDITYBOND() external returns (uint256);\\n\\n  function FEE() external returns (uint256);\\n\\n  function BASE() external returns (uint256);\\n\\n  function ETH() external returns (address);\\n\\n  function bondings(address _user, address _bonding) external view returns (uint256);\\n\\n  function canWithdrawAfter(address _user, address _bonding) external view returns (uint256);\\n\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function pendingbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function bonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function votes(address _delegator) external view returns (uint256);\\n\\n  function firstSeen(address _keeper) external view returns (uint256);\\n\\n  function disputes(address _keeper) external view returns (bool);\\n\\n  function lastJob(address _keeper) external view returns (uint256);\\n\\n  function workCompleted(address _keeper) external view returns (uint256);\\n\\n  function jobs(address _job) external view returns (bool);\\n\\n  function credits(address _job, address _credit) external view returns (uint256);\\n\\n  function liquidityProvided(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmountsUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function jobProposalDelay(address _job) external view returns (uint256);\\n\\n  function liquidityApplied(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmount(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function keepers(address _keeper) external view returns (bool);\\n\\n  function blacklist(address _keeper) external view returns (bool);\\n\\n  function keeperList(uint256 _index) external view returns (address);\\n\\n  function jobList(uint256 _index) external view returns (address);\\n\\n  function governance() external returns (address);\\n\\n  function pendingGovernance() external returns (address);\\n\\n  function liquidityAccepted(address _liquidity) external view returns (bool);\\n\\n  function liquidityPairs(uint256 _index) external view returns (address);\\n\\n  // Methods\\n  function getCurrentVotes(address _account) external view returns (uint256);\\n\\n  function addCreditETH(address _job) external payable;\\n\\n  function addCredit(\\n    address _credit,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function pairs() external view returns (address[] memory);\\n\\n  function addLiquidityToJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function applyCreditToJob(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external;\\n\\n  function unbondLiquidityFromJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function removeLiquidityFromJob(address _liquidity, address _job) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function burn(uint256 _amount) external;\\n\\n  function worked(address _keeper) external;\\n\\n  function receipt(\\n    address _credit,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function receiptETH(address _keeper, uint256 _amount) external;\\n\\n  function addJob(address _job) external;\\n\\n  function getJobs() external view returns (address[] memory);\\n\\n  function removeJob(address _job) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function setGovernance(address _governance) external;\\n\\n  function acceptGovernance() external;\\n\\n  function isKeeper(address _keeper) external returns (bool);\\n\\n  function isMinKeeper(\\n    address _keeper,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  function getKeepers() external view returns (address[] memory);\\n\\n  function activate(address _bonding) external;\\n\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function withdraw(address _bonding) external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xa9806cd6666ab1b7375ef72446964a72397fd4cefc7cc8c5b37caa7c50df0246\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../peripherals/IGovernable.sol';\\n\\ninterface IKeep3rV1Proxy is IGovernable {\\n  // Structs\\n  struct Recipient {\\n    address recipient;\\n    uint256 caps;\\n  }\\n\\n  // Variables\\n  function keep3rV1() external view returns (address);\\n\\n  function minter() external view returns (address);\\n\\n  function next(address) external view returns (uint256);\\n\\n  function caps(address) external view returns (uint256);\\n\\n  function recipients() external view returns (address[] memory);\\n\\n  function recipientsCaps() external view returns (Recipient[] memory);\\n\\n  // Errors\\n  error Cooldown();\\n  error NoDrawableAmount();\\n  error ZeroAddress();\\n  error OnlyMinter();\\n\\n  // Methods\\n  function addRecipient(address recipient, uint256 amount) external;\\n\\n  function removeRecipient(address recipient) external;\\n\\n  function draw() external returns (uint256 _amount);\\n\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  function setMinter(address _minter) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function mint(address _account, uint256 _amount) external;\\n\\n  function setKeep3rV1Governance(address _governance) external;\\n\\n  function acceptKeep3rV1Governance() external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function addJob(address _job) external;\\n\\n  function removeJob(address _job) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xfb2e81fe347b39aabce849ef2d42c6df846b7ef0ed5ae952c85bbb708da99408\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "_keepers",
                "offset": 0,
                "slot": "1",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "workCompleted",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "firstSeen",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "disputes",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "bonds",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "hasBonded",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "_jobs",
                "offset": 0,
                "slot": "19",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "governance",
                "offset": 0,
                "slot": "21",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "22",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "slashers",
                "offset": 0,
                "slot": "23",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "disputers",
                "offset": 0,
                "slot": "24",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "25",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "26",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "bondTime",
                "offset": 0,
                "slot": "29",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "unbondTime",
                "offset": 0,
                "slot": "30",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                "label": "fee",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol:Keep3rKeeperFundable",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyAJob()": [
                {
                  "notice": "Throws when the address that is trying to register as a job is already a job"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "Activation(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#activate is called"
              },
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              },
              "Withdrawal(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#withdraw is called"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "activate(address)": {
                "notice": "End of the bonding process after bonding time has passed"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "bond(address,uint256)": {
                "notice": "Beginning of the bonding process"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "unbond(address,uint256)": {
                "notice": "Beginning of the unbonding process"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdraw(address)": {
                "notice": "Withdraw funds after unbonding has finished"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol": {
        "Keep3rKeepers": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyAJob",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "AlreadyDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Activation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "Dispute",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "KeeperRevoke",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "KeeperSlash",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_resolver",
                  "type": "address"
                }
              ],
              "name": "Resolve",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Withdrawal",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "activate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "bond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "revoke",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonded",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_bondAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_unbondAmount",
                  "type": "uint256"
                }
              ],
              "name": "slash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "activate(address)": {
                "params": {
                  "_bonding": "The asset being activated as bond collateral"
                }
              },
              "bond(address,uint256)": {
                "params": {
                  "_amount": "The amount of bonding asset being bonded",
                  "_bonding": "The asset being bonded"
                }
              },
              "dispute(address)": {
                "params": {
                  "_jobOrKeeper": "The address in dispute"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "resolve(address)": {
                "params": {
                  "_jobOrKeeper": "The address cleared"
                }
              },
              "revoke(address)": {
                "params": {
                  "_keeper": "The address being slashed"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "slash(address,address,uint256,uint256)": {
                "params": {
                  "_bondAmount": "The bonded amount being slashed",
                  "_bonded": "The asset being slashed",
                  "_keeper": "The address being slashed",
                  "_unbondAmount": "The pending unbond amount being slashed"
                }
              },
              "unbond(address,uint256)": {
                "params": {
                  "_amount": "Allows for partial unbonding",
                  "_bonding": "The asset being unbonded"
                }
              },
              "withdraw(address)": {
                "params": {
                  "_bonding": "The asset to withdraw from the bonding pool"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "activate(address)": "1c5a9d9c",
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "bond(address,uint256)": "a515366a",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "dispute(address)": "f75f9f7b",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityMinimum()": "633fb68f",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "resolve(address)": "55ea6c47",
              "revoke(address)": "74a8f103",
              "rewardPeriodTime()": "768b5d90",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slash(address,address,uint256,uint256)": "c20297f0",
              "slashers(address)": "b87fcbff",
              "unbond(address,uint256)": "a5d059ca",
              "unbondTime()": "a7d2e784",
              "withdraw(address)": "51cff8d9",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyAJob\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Activation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"Dispute\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"KeeperRevoke\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"KeeperSlash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"Resolve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonded\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_bondAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unbondAmount\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"activate(address)\":{\"params\":{\"_bonding\":\"The asset being activated as bond collateral\"}},\"bond(address,uint256)\":{\"params\":{\"_amount\":\"The amount of bonding asset being bonded\",\"_bonding\":\"The asset being bonded\"}},\"dispute(address)\":{\"params\":{\"_jobOrKeeper\":\"The address in dispute\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"resolve(address)\":{\"params\":{\"_jobOrKeeper\":\"The address cleared\"}},\"revoke(address)\":{\"params\":{\"_keeper\":\"The address being slashed\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"slash(address,address,uint256,uint256)\":{\"params\":{\"_bondAmount\":\"The bonded amount being slashed\",\"_bonded\":\"The asset being slashed\",\"_keeper\":\"The address being slashed\",\"_unbondAmount\":\"The pending unbond amount being slashed\"}},\"unbond(address,uint256)\":{\"params\":{\"_amount\":\"Allows for partial unbonding\",\"_bonding\":\"The asset being unbonded\"}},\"withdraw(address)\":{\"params\":{\"_bonding\":\"The asset to withdraw from the bonding pool\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAJob()\":[{\"notice\":\"Throws when the address that is trying to register as a job is already a job\"}],\"AlreadyDisputed()\":[{\"notice\":\"Throws when a job or keeper is already disputed\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"NotDisputed()\":[{\"notice\":\"Throws when a job or keeper is not disputed and someone tries to resolve the dispute\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"Activation(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#activate is called\"},\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Dispute(address,address)\":{\"notice\":\"Emitted when a keeper or a job is disputed\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"KeeperRevoke(address,address)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#revoke is called\"},\"KeeperSlash(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#slash is called\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"Resolve(address,address)\":{\"notice\":\"Emitted when a dispute is resolved\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"},\"Withdrawal(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#withdraw is called\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"activate(address)\":{\"notice\":\"End of the bonding process after bonding time has passed\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"bond(address,uint256)\":{\"notice\":\"Beginning of the bonding process\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"dispute(address)\":{\"notice\":\"Allows governance to create a dispute for a given keeper/job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"resolve(address)\":{\"notice\":\"Allows governance to resolve a dispute on a keeper/job\"},\"revoke(address)\":{\"notice\":\"Blacklists a keeper from participating in the network\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slash(address,address,uint256,uint256)\":{\"notice\":\"Allows governance to slash a keeper based on a dispute\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"unbond(address,uint256)\":{\"notice\":\"Beginning of the unbonding process\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdraw(address)\":{\"notice\":\"Withdraw funds after unbonding has finished\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/contracts/peripherals/keepers/Keep3rKeepers.sol\":\"Keep3rKeepers\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rParameters.sol';\\nimport './Keep3rRoles.sol';\\nimport '../../interfaces/peripherals/IKeep3rDisputable.sol';\\n\\nabstract contract Keep3rDisputable is IKeep3rDisputable, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rDisputable\\n  function dispute(address _jobOrKeeper) external override onlyDisputer {\\n    if (disputes[_jobOrKeeper]) revert AlreadyDisputed();\\n    disputes[_jobOrKeeper] = true;\\n    emit Dispute(_jobOrKeeper, msg.sender);\\n  }\\n\\n  /// @inheritdoc IKeep3rDisputable\\n  function resolve(address _jobOrKeeper) external override onlyDisputer {\\n    if (!disputes[_jobOrKeeper]) revert NotDisputed();\\n    disputes[_jobOrKeeper] = false;\\n    emit Resolve(_jobOrKeeper, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x941e9ba02b2ad3975edc444cd771ef1e5386051553632140f882258ea7e4d4bc\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rKeeperFundable.sol';\\nimport '../Keep3rDisputable.sol';\\nimport '../../../interfaces/external/IKeep3rV1.sol';\\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\\n\\nabstract contract Keep3rKeeperDisputable is IKeep3rKeeperDisputable, Keep3rDisputable, Keep3rKeeperFundable {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rKeeperDisputable\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) public override onlySlasher {\\n    if (!disputes[_keeper]) revert NotDisputed();\\n    _slash(_keeper, _bonded, _bondAmount, _unbondAmount);\\n    emit KeeperSlash(_keeper, msg.sender, _bondAmount + _unbondAmount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperDisputable\\n  function revoke(address _keeper) external override onlySlasher {\\n    if (!disputes[_keeper]) revert NotDisputed();\\n    _keepers.remove(_keeper);\\n    _slash(_keeper, keep3rV1, bonds[_keeper][keep3rV1], pendingUnbonds[_keeper][keep3rV1]);\\n    emit KeeperRevoke(_keeper, msg.sender);\\n  }\\n\\n  function _slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) internal {\\n    if (_bonded != keep3rV1) {\\n      try IERC20(_bonded).transfer(governance, _bondAmount + _unbondAmount) returns (bool) {} catch (bytes memory) {}\\n    }\\n    bonds[_keeper][_bonded] -= _bondAmount;\\n    pendingUnbonds[_keeper][_bonded] -= _unbondAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x1b983519e5367b29d8cd4698c56ed9c18013f757bf0a6a2656572547aaf20208\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\\n\\nimport '../../../interfaces/external/IKeep3rV1.sol';\\nimport '../../../interfaces/external/IKeep3rV1Proxy.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\n\\nabstract contract Keep3rKeeperFundable is IKeep3rKeeperFundable, ReentrancyGuard, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function bond(address _bonding, uint256 _amount) external override nonReentrant {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (_jobs.contains(msg.sender)) revert AlreadyAJob();\\n    canActivateAfter[msg.sender][_bonding] = block.timestamp + bondTime;\\n\\n    uint256 _before = IERC20(_bonding).balanceOf(address(this));\\n    IERC20(_bonding).safeTransferFrom(msg.sender, address(this), _amount);\\n    _amount = IERC20(_bonding).balanceOf(address(this)) - _before;\\n\\n    hasBonded[msg.sender] = true;\\n    pendingBonds[msg.sender][_bonding] += _amount;\\n\\n    emit Bonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function activate(address _bonding) external override {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (canActivateAfter[msg.sender][_bonding] == 0) revert BondsUnexistent();\\n    if (canActivateAfter[msg.sender][_bonding] >= block.timestamp) revert BondsLocked();\\n\\n    delete canActivateAfter[msg.sender][_bonding];\\n\\n    uint256 _amount = _activate(msg.sender, _bonding);\\n    emit Activation(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function unbond(address _bonding, uint256 _amount) external override {\\n    canWithdrawAfter[msg.sender][_bonding] = block.timestamp + unbondTime;\\n    bonds[msg.sender][_bonding] -= _amount;\\n    pendingUnbonds[msg.sender][_bonding] += _amount;\\n\\n    emit Unbonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function withdraw(address _bonding) external override nonReentrant {\\n    if (pendingUnbonds[msg.sender][_bonding] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[msg.sender][_bonding] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[msg.sender]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[msg.sender][_bonding];\\n\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1Proxy(keep3rV1Proxy).mint(_amount);\\n    }\\n\\n    delete pendingUnbonds[msg.sender][_bonding];\\n    delete canWithdrawAfter[msg.sender][_bonding];\\n\\n    IERC20(_bonding).safeTransfer(msg.sender, _amount);\\n\\n    emit Withdrawal(msg.sender, _bonding, _amount);\\n  }\\n\\n  function _activate(address _keeper, address _bonding) internal virtual returns (uint256 _amount) {\\n    if (firstSeen[_keeper] == 0) {\\n      firstSeen[_keeper] = block.timestamp;\\n    }\\n    _keepers.add(_keeper);\\n    _amount = pendingBonds[_keeper][_bonding];\\n    delete pendingBonds[_keeper][_bonding];\\n\\n    // bond provided tokens\\n    bonds[_keeper][_bonding] += _amount;\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1(keep3rV1).burn(_amount);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcd56d53eacaa3dbffc2cb573562482ba05b51246bf273f6bde9fb5de52c54eb2\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rKeeperDisputable.sol';\\n\\nabstract contract Keep3rKeepers is Keep3rKeeperDisputable {}\\n\",\"keccak256\":\"0xced9f9ec9610bb34b2e87fc1f05f036d37cee5a9df61d4fe527d92b1d9c1e244\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n// solhint-disable func-name-mixedcase\\ninterface IKeep3rV1 is IERC20, IERC20Metadata {\\n  // Structs\\n  struct Checkpoint {\\n    uint32 fromBlock;\\n    uint256 votes;\\n  }\\n\\n  // Events\\n  event DelegateChanged(address indexed _delegator, address indexed _fromDelegate, address indexed _toDelegate);\\n  event DelegateVotesChanged(address indexed _delegate, uint256 _previousBalance, uint256 _newBalance);\\n  event SubmitJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event ApplyCredit(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event RemoveJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event UnbondJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event JobAdded(address indexed _job, uint256 _block, address _governance);\\n  event JobRemoved(address indexed _job, uint256 _block, address _governance);\\n  event KeeperWorked(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _block, uint256 _amount);\\n  event KeeperBonding(address indexed _keeper, uint256 _block, uint256 _active, uint256 _bond);\\n  event KeeperBonded(address indexed _keeper, uint256 _block, uint256 _activated, uint256 _bond);\\n  event KeeperUnbonding(address indexed _keeper, uint256 _block, uint256 _deactive, uint256 _bond);\\n  event KeeperUnbound(address indexed _keeper, uint256 _block, uint256 _deactivated, uint256 _bond);\\n  event KeeperSlashed(address indexed _keeper, address indexed _slasher, uint256 _block, uint256 _slash);\\n  event KeeperDispute(address indexed _keeper, uint256 _block);\\n  event KeeperResolved(address indexed _keeper, uint256 _block);\\n  event TokenCreditAddition(address indexed _credit, address indexed _job, address indexed _creditor, uint256 _block, uint256 _amount);\\n\\n  // Variables\\n  function KPRH() external returns (address);\\n\\n  function delegates(address _delegator) external view returns (address);\\n\\n  function checkpoints(address _account, uint32 _checkpoint) external view returns (Checkpoint memory);\\n\\n  function numCheckpoints(address _account) external view returns (uint32);\\n\\n  function DOMAIN_TYPEHASH() external returns (bytes32);\\n\\n  function DOMAINSEPARATOR() external returns (bytes32);\\n\\n  function DELEGATION_TYPEHASH() external returns (bytes32);\\n\\n  function PERMIT_TYPEHASH() external returns (bytes32);\\n\\n  function nonces(address _user) external view returns (uint256);\\n\\n  function BOND() external returns (uint256);\\n\\n  function UNBOND() external returns (uint256);\\n\\n  function LIQUIDITYBOND() external returns (uint256);\\n\\n  function FEE() external returns (uint256);\\n\\n  function BASE() external returns (uint256);\\n\\n  function ETH() external returns (address);\\n\\n  function bondings(address _user, address _bonding) external view returns (uint256);\\n\\n  function canWithdrawAfter(address _user, address _bonding) external view returns (uint256);\\n\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function pendingbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function bonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function votes(address _delegator) external view returns (uint256);\\n\\n  function firstSeen(address _keeper) external view returns (uint256);\\n\\n  function disputes(address _keeper) external view returns (bool);\\n\\n  function lastJob(address _keeper) external view returns (uint256);\\n\\n  function workCompleted(address _keeper) external view returns (uint256);\\n\\n  function jobs(address _job) external view returns (bool);\\n\\n  function credits(address _job, address _credit) external view returns (uint256);\\n\\n  function liquidityProvided(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmountsUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function jobProposalDelay(address _job) external view returns (uint256);\\n\\n  function liquidityApplied(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmount(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function keepers(address _keeper) external view returns (bool);\\n\\n  function blacklist(address _keeper) external view returns (bool);\\n\\n  function keeperList(uint256 _index) external view returns (address);\\n\\n  function jobList(uint256 _index) external view returns (address);\\n\\n  function governance() external returns (address);\\n\\n  function pendingGovernance() external returns (address);\\n\\n  function liquidityAccepted(address _liquidity) external view returns (bool);\\n\\n  function liquidityPairs(uint256 _index) external view returns (address);\\n\\n  // Methods\\n  function getCurrentVotes(address _account) external view returns (uint256);\\n\\n  function addCreditETH(address _job) external payable;\\n\\n  function addCredit(\\n    address _credit,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function pairs() external view returns (address[] memory);\\n\\n  function addLiquidityToJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function applyCreditToJob(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external;\\n\\n  function unbondLiquidityFromJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function removeLiquidityFromJob(address _liquidity, address _job) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function burn(uint256 _amount) external;\\n\\n  function worked(address _keeper) external;\\n\\n  function receipt(\\n    address _credit,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function receiptETH(address _keeper, uint256 _amount) external;\\n\\n  function addJob(address _job) external;\\n\\n  function getJobs() external view returns (address[] memory);\\n\\n  function removeJob(address _job) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function setGovernance(address _governance) external;\\n\\n  function acceptGovernance() external;\\n\\n  function isKeeper(address _keeper) external returns (bool);\\n\\n  function isMinKeeper(\\n    address _keeper,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  function getKeepers() external view returns (address[] memory);\\n\\n  function activate(address _bonding) external;\\n\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function withdraw(address _bonding) external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xa9806cd6666ab1b7375ef72446964a72397fd4cefc7cc8c5b37caa7c50df0246\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../peripherals/IGovernable.sol';\\n\\ninterface IKeep3rV1Proxy is IGovernable {\\n  // Structs\\n  struct Recipient {\\n    address recipient;\\n    uint256 caps;\\n  }\\n\\n  // Variables\\n  function keep3rV1() external view returns (address);\\n\\n  function minter() external view returns (address);\\n\\n  function next(address) external view returns (uint256);\\n\\n  function caps(address) external view returns (uint256);\\n\\n  function recipients() external view returns (address[] memory);\\n\\n  function recipientsCaps() external view returns (Recipient[] memory);\\n\\n  // Errors\\n  error Cooldown();\\n  error NoDrawableAmount();\\n  error ZeroAddress();\\n  error OnlyMinter();\\n\\n  // Methods\\n  function addRecipient(address recipient, uint256 amount) external;\\n\\n  function removeRecipient(address recipient) external;\\n\\n  function draw() external returns (uint256 _amount);\\n\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  function setMinter(address _minter) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function mint(address _account, uint256 _amount) external;\\n\\n  function setKeep3rV1Governance(address _governance) external;\\n\\n  function acceptKeep3rV1Governance() external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function addJob(address _job) external;\\n\\n  function removeJob(address _job) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xfb2e81fe347b39aabce849ef2d42c6df846b7ef0ed5ae952c85bbb708da99408\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Creates/resolves disputes for jobs or keepers\\n///         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\\n///         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\\ninterface IKeep3rDisputable {\\n  /// @notice Emitted when a keeper or a job is disputed\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _disputer The user that called the function and disputed the keeper\\n  event Dispute(address indexed _jobOrKeeper, address indexed _disputer);\\n\\n  /// @notice Emitted when a dispute is resolved\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _resolver The user that called the function and resolved the dispute\\n  event Resolve(address indexed _jobOrKeeper, address indexed _resolver);\\n\\n  /// @notice Throws when a job or keeper is already disputed\\n  error AlreadyDisputed();\\n\\n  /// @notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute\\n  error NotDisputed();\\n\\n  /// @notice Allows governance to create a dispute for a given keeper/job\\n  /// @param _jobOrKeeper The address in dispute\\n  function dispute(address _jobOrKeeper) external;\\n\\n  /// @notice Allows governance to resolve a dispute on a keeper/job\\n  /// @param _jobOrKeeper The address cleared\\n  function resolve(address _jobOrKeeper) external;\\n}\\n\",\"keccak256\":\"0x002b9b4c75e62d48d74b6447649d39eb5c1e128d2523bb11e08e9cd3e27b1f70\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 5368,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "_keepers",
                "offset": 0,
                "slot": "1",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "workCompleted",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "firstSeen",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "disputes",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "bonds",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "hasBonded",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "_jobs",
                "offset": 0,
                "slot": "19",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "governance",
                "offset": 0,
                "slot": "21",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "22",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "slashers",
                "offset": 0,
                "slot": "23",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "disputers",
                "offset": 0,
                "slot": "24",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "25",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "26",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "bondTime",
                "offset": 0,
                "slot": "29",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "unbondTime",
                "offset": 0,
                "slot": "30",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                "label": "fee",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol:Keep3rKeepers",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyAJob()": [
                {
                  "notice": "Throws when the address that is trying to register as a job is already a job"
                }
              ],
              "AlreadyDisputed()": [
                {
                  "notice": "Throws when a job or keeper is already disputed"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "NotDisputed()": [
                {
                  "notice": "Throws when a job or keeper is not disputed and someone tries to resolve the dispute"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "Activation(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#activate is called"
              },
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Dispute(address,address)": {
                "notice": "Emitted when a keeper or a job is disputed"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "KeeperRevoke(address,address)": {
                "notice": "Emitted when Keep3rKeeperDisputable#revoke is called"
              },
              "KeeperSlash(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperDisputable#slash is called"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "Resolve(address,address)": {
                "notice": "Emitted when a dispute is resolved"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              },
              "Withdrawal(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#withdraw is called"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "activate(address)": {
                "notice": "End of the bonding process after bonding time has passed"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "bond(address,uint256)": {
                "notice": "Beginning of the bonding process"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "dispute(address)": {
                "notice": "Allows governance to create a dispute for a given keeper/job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "resolve(address)": {
                "notice": "Allows governance to resolve a dispute on a keeper/job"
              },
              "revoke(address)": {
                "notice": "Blacklists a keeper from participating in the network"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slash(address,address,uint256,uint256)": {
                "notice": "Allows governance to slash a keeper based on a dispute"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "unbond(address,uint256)": {
                "notice": "Beginning of the unbonding process"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdraw(address)": {
                "notice": "Withdraw funds after unbonding has finished"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/BasicJob.sol": {
        "BasicJob": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3r",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "KeeperNotValid",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "array",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3r",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "nonce",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "work",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_howHard",
                  "type": "uint256"
                }
              ],
              "name": "workHard",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_howHard",
                  "type": "uint256"
                }
              ],
              "name": "workRefund",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_9507": {
                  "entryPoint": null,
                  "id": 9507,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 84,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:306:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "95:209:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "141:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "150:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "153:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "143:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "143:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "143:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "116:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "112:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "112:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "137:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "108:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "108:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "105:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "166:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "185:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "179:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "179:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "170:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "258:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "267:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "270:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "260:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "260:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "260:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "217:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "228:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "243:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "248:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "239:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "239:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "252:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "235:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "235:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "224:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "224:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "214:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "214:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "207:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "207:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "204:70:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "283:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "293:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "283:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "61:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "72:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "84:6:84",
                            "type": ""
                          }
                        ],
                        "src": "14:290:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506040516105a43803806105a483398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610511806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063322e9f041461006757806338d94193146100715780633bb39c3314610097578063634c7bb5146100aa578063affed0e0146100ca578063ead731ad146100d3575b600080fd5b61006f6100e6565b005b61008461007f36600461046f565b6101cd565b6040519081526020015b60405180910390f35b61006f6100a536600461046f565b6101ee565b6000546100bd906001600160a01b031681565b60405161008e9190610488565b61008460015481565b61006f6100e136600461046f565b61030b565b6000546040516335d2155560e11b81526001600160a01b0390911690636ba42aaa90610116903390600401610488565b602060405180830381600087803b15801561013057600080fd5b505af1158015610144573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101689190610446565b506000546040516317fbade560e21b81526001600160a01b0390911690635feeb79490610199903390600401610488565b600060405180830381600087803b1580156101b357600080fd5b505af11580156101c7573d6000803e3d6000fd5b50505050565b600281815481106101dd57600080fd5b600091825260209091200154905081565b6000546040516335d2155560e11b81526001600160a01b0390911690636ba42aaa9061021e903390600401610488565b602060405180830381600087803b15801561023857600080fd5b505af115801561024c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102709190610446565b506001545b818110156102a5576001805490600061028d8361049c565b9190505550808061029d9061049c565b915050610275565b506000546040516317fbade560e21b81526001600160a01b0390911690635feeb794906102d6903390600401610488565b600060405180830381600087803b1580156102f057600080fd5b505af1158015610304573d6000803e3d6000fd5b5050505050565b6000546040516335d2155560e11b81526001600160a01b0390911690636ba42aaa9061033b903390600401610488565b602060405180830381600087803b15801561035557600080fd5b505af1158015610369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038d9190610446565b5060005b818110156103e057600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01819055806103d88161049c565b915050610391565b505b600254156104165760028054806103fb576103fb6104c5565b600190038181906000526020600020016000905590556103e2565b6000546040516317fbade560e21b81526001600160a01b0390911690635feeb794906102d6903390600401610488565b60006020828403121561045857600080fd5b8151801515811461046857600080fd5b9392505050565b60006020828403121561048157600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60006000198214156104be57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220e618dd31d52cfbca42f2c80d15350d20e611a971515a2413b80c679c77995a3f64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x5A4 CODESIZE SUB DUP1 PUSH2 0x5A4 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x54 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x84 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x511 DUP1 PUSH2 0x93 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x322E9F04 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x38D94193 EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x3BB39C33 EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x634C7BB5 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0xAFFED0E0 EQ PUSH2 0xCA JUMPI DUP1 PUSH4 0xEAD731AD EQ PUSH2 0xD3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0xE6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x84 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x46F JUMP JUMPDEST PUSH2 0x1CD JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6F PUSH2 0xA5 CALLDATASIZE PUSH1 0x4 PUSH2 0x46F JUMP JUMPDEST PUSH2 0x1EE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0xBD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8E SWAP2 SWAP1 PUSH2 0x488 JUMP JUMPDEST PUSH2 0x84 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x6F PUSH2 0xE1 CALLDATASIZE PUSH1 0x4 PUSH2 0x46F JUMP JUMPDEST PUSH2 0x30B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x35D21555 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6BA42AAA SWAP1 PUSH2 0x116 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x488 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x144 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x168 SWAP2 SWAP1 PUSH2 0x446 JUMP JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x17FBADE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FEEB794 SWAP1 PUSH2 0x199 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x35D21555 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6BA42AAA SWAP1 PUSH2 0x21E SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x488 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x270 SWAP2 SWAP1 PUSH2 0x446 JUMP JUMPDEST POP PUSH1 0x1 SLOAD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x1 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x28D DUP4 PUSH2 0x49C JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP DUP1 DUP1 PUSH2 0x29D SWAP1 PUSH2 0x49C JUMP JUMPDEST SWAP2 POP POP PUSH2 0x275 JUMP JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x17FBADE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FEEB794 SWAP1 PUSH2 0x2D6 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x35D21555 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6BA42AAA SWAP1 PUSH2 0x33B SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x488 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x369 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38D SWAP2 SWAP1 PUSH2 0x446 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3E0 JUMPI PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE ADD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x3D8 DUP2 PUSH2 0x49C JUMP JUMPDEST SWAP2 POP POP PUSH2 0x391 JUMP JUMPDEST POP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x416 JUMPI PUSH1 0x2 DUP1 SLOAD DUP1 PUSH2 0x3FB JUMPI PUSH2 0x3FB PUSH2 0x4C5 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE PUSH2 0x3E2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x17FBADE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FEEB794 SWAP1 PUSH2 0x2D6 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x468 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x481 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x4BE JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE6 XOR 0xDD BALANCE 0xD5 0x2C 0xFB 0xCA TIMESTAMP CALLCODE 0xC8 0xD ISZERO CALLDATALOAD 0xD KECCAK256 0xE6 GT 0xA9 PUSH18 0x515A2413B80C679C77995A3F64736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "102:656:44:-:0;;;227:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;262:6;:16;;-1:-1:-1;;;;;;262:16:44;-1:-1:-1;;;;;262:16:44;;;;;;;;;;102:656;;14:290:84;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:84;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:84:o;:::-;102:656:44;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@array_9497": {
                  "entryPoint": 461,
                  "id": 9497,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3r_9492": {
                  "entryPoint": null,
                  "id": 9492,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@nonce_9494": {
                  "entryPoint": null,
                  "id": 9494,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@workHard_9536": {
                  "entryPoint": 494,
                  "id": 9536,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@workRefund_9572": {
                  "entryPoint": 779,
                  "id": 9572,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@work_9513": {
                  "entryPoint": 230,
                  "id": 9513,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 1094,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 1135,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 1160,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "increment_t_uint256": {
                  "entryPoint": 1180,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x31": {
                  "entryPoint": 1221,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1237:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "92:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "138:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "147:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "150:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "140:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "140:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "140:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "113:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "122:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "109:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "109:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "134:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "105:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "105:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "102:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "163:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "182:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "176:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "176:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "167:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "245:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "254:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "257:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "247:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "247:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "247:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "214:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "235:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "228:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "228:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "221:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "221:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "211:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "211:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "204:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "204:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "201:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "270:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "280:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "270:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "58:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "69:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "81:6:84",
                            "type": ""
                          }
                        ],
                        "src": "14:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "366:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "412:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "421:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "424:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "414:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "414:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "414:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "387:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "396:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "383:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "383:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "408:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "379:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "379:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "376:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "437:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "460:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "447:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "447:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "437:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "332:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "343:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "355:6:84",
                            "type": ""
                          }
                        ],
                        "src": "296:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "582:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "592:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "604:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "615:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "600:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "600:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "592:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "634:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "649:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "665:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "670:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "661:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "661:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "674:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "657:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "657:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "645:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "645:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "627:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "627:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "627:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "551:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "562:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "573:4:84",
                            "type": ""
                          }
                        ],
                        "src": "481:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "790:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "800:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "812:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "823:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "808:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "808:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "800:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "842:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "853:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "835:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "835:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "835:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "759:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "770:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "781:4:84",
                            "type": ""
                          }
                        ],
                        "src": "689:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "918:185:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "957:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "978:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "985:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "990:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "981:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "981:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "971:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "971:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "971:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1022:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1025:4:84",
                                          "type": "",
                                          "value": "0x11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1015:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1015:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1015:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1050:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1053:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1043:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1043:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1043:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "934:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "945:1:84",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "941:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "941:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "931:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "931:17:84"
                              },
                              "nodeType": "YulIf",
                              "src": "928:140:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1077:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1088:5:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1095:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1084:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1084:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "1077:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "increment_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "900:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "910:3:84",
                            "type": ""
                          }
                        ],
                        "src": "871:232:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1140:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1157:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1164:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1169:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1160:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1160:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1150:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1150:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1150:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1197:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1200:4:84",
                                    "type": "",
                                    "value": "0x31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1190:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1190:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1190:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1221:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1224:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1214:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1214:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1214:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x31",
                        "nodeType": "YulFunctionDefinition",
                        "src": "1108:127:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100625760003560e01c8063322e9f041461006757806338d94193146100715780633bb39c3314610097578063634c7bb5146100aa578063affed0e0146100ca578063ead731ad146100d3575b600080fd5b61006f6100e6565b005b61008461007f36600461046f565b6101cd565b6040519081526020015b60405180910390f35b61006f6100a536600461046f565b6101ee565b6000546100bd906001600160a01b031681565b60405161008e9190610488565b61008460015481565b61006f6100e136600461046f565b61030b565b6000546040516335d2155560e11b81526001600160a01b0390911690636ba42aaa90610116903390600401610488565b602060405180830381600087803b15801561013057600080fd5b505af1158015610144573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101689190610446565b506000546040516317fbade560e21b81526001600160a01b0390911690635feeb79490610199903390600401610488565b600060405180830381600087803b1580156101b357600080fd5b505af11580156101c7573d6000803e3d6000fd5b50505050565b600281815481106101dd57600080fd5b600091825260209091200154905081565b6000546040516335d2155560e11b81526001600160a01b0390911690636ba42aaa9061021e903390600401610488565b602060405180830381600087803b15801561023857600080fd5b505af115801561024c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102709190610446565b506001545b818110156102a5576001805490600061028d8361049c565b9190505550808061029d9061049c565b915050610275565b506000546040516317fbade560e21b81526001600160a01b0390911690635feeb794906102d6903390600401610488565b600060405180830381600087803b1580156102f057600080fd5b505af1158015610304573d6000803e3d6000fd5b5050505050565b6000546040516335d2155560e11b81526001600160a01b0390911690636ba42aaa9061033b903390600401610488565b602060405180830381600087803b15801561035557600080fd5b505af1158015610369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038d9190610446565b5060005b818110156103e057600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01819055806103d88161049c565b915050610391565b505b600254156104165760028054806103fb576103fb6104c5565b600190038181906000526020600020016000905590556103e2565b6000546040516317fbade560e21b81526001600160a01b0390911690635feeb794906102d6903390600401610488565b60006020828403121561045857600080fd5b8151801515811461046857600080fd5b9392505050565b60006020828403121561048157600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60006000198214156104be57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220e618dd31d52cfbca42f2c80d15350d20e611a971515a2413b80c679c77995a3f64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x322E9F04 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x38D94193 EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x3BB39C33 EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x634C7BB5 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0xAFFED0E0 EQ PUSH2 0xCA JUMPI DUP1 PUSH4 0xEAD731AD EQ PUSH2 0xD3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0xE6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x84 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x46F JUMP JUMPDEST PUSH2 0x1CD JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6F PUSH2 0xA5 CALLDATASIZE PUSH1 0x4 PUSH2 0x46F JUMP JUMPDEST PUSH2 0x1EE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0xBD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8E SWAP2 SWAP1 PUSH2 0x488 JUMP JUMPDEST PUSH2 0x84 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x6F PUSH2 0xE1 CALLDATASIZE PUSH1 0x4 PUSH2 0x46F JUMP JUMPDEST PUSH2 0x30B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x35D21555 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6BA42AAA SWAP1 PUSH2 0x116 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x488 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x144 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x168 SWAP2 SWAP1 PUSH2 0x446 JUMP JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x17FBADE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FEEB794 SWAP1 PUSH2 0x199 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x35D21555 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6BA42AAA SWAP1 PUSH2 0x21E SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x488 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x270 SWAP2 SWAP1 PUSH2 0x446 JUMP JUMPDEST POP PUSH1 0x1 SLOAD JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2A5 JUMPI PUSH1 0x1 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x28D DUP4 PUSH2 0x49C JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP DUP1 DUP1 PUSH2 0x29D SWAP1 PUSH2 0x49C JUMP JUMPDEST SWAP2 POP POP PUSH2 0x275 JUMP JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x17FBADE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FEEB794 SWAP1 PUSH2 0x2D6 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x35D21555 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6BA42AAA SWAP1 PUSH2 0x33B SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x488 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x369 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38D SWAP2 SWAP1 PUSH2 0x446 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3E0 JUMPI PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE ADD DUP2 SWAP1 SSTORE DUP1 PUSH2 0x3D8 DUP2 PUSH2 0x49C JUMP JUMPDEST SWAP2 POP POP PUSH2 0x391 JUMP JUMPDEST POP JUMPDEST PUSH1 0x2 SLOAD ISZERO PUSH2 0x416 JUMPI PUSH1 0x2 DUP1 SLOAD DUP1 PUSH2 0x3FB JUMPI PUSH2 0x3FB PUSH2 0x4C5 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE PUSH2 0x3E2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x17FBADE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FEEB794 SWAP1 PUSH2 0x2D6 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x468 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x481 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x4BE JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE6 XOR 0xDD BALANCE 0xD5 0x2C 0xFB 0xCA TIMESTAMP CALLCODE 0xC8 0xD ISZERO CALLDATALOAD 0xD KECCAK256 0xE6 GT 0xA9 PUSH18 0x515A2413B80C679C77995A3F64736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "102:656:44:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;287:34;;;:::i;:::-;;200:22;;;;;;:::i;:::-;;:::i;:::-;;;835:25:84;;;823:2;808:18;200:22:44;;;;;;;;325:127;;;;;;:::i;:::-;;:::i;151:21::-;;;;;-1:-1:-1;;;;;151:21:44;;;;;;;;;;:::i;176:20::-;;;;;;456:184;;;;;;:::i;:::-;;:::i;287:34::-;676:6;;668:36;;-1:-1:-1;;;668:36:44;;-1:-1:-1;;;;;676:6:44;;;;668:24;;:36;;693:10;;668:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;725:6:44;;717:34;;-1:-1:-1;;;717:34:44;;-1:-1:-1;;;;;725:6:44;;;;717:22;;:34;;740:10;;717:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;287:::o;200:22::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;200:22:44;:::o;325:127::-;676:6;;668:36;;-1:-1:-1;;;668:36:44;;-1:-1:-1;;;;;676:6:44;;;;668:24;;:36;;693:10;;668:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;400:5:44::1;::::0;383:65:::1;411:8;407:1;:12;383:65;;;434:5;:7:::0;;;:5:::1;:7;::::0;::::1;:::i;:::-;;;;;;421:3;;;;;:::i;:::-;;;;383:65;;;-1:-1:-1::0;725:6:44;;717:34;;-1:-1:-1;;;717:34:44;;-1:-1:-1;;;;;725:6:44;;;;717:22;;:34;;740:10;;717:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;325:127;:::o;456:184::-;676:6;;668:36;;-1:-1:-1;;;668:36:44;;-1:-1:-1;;;;;676:6:44;;;;668:24;;:36;;693:10;;668:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;521:9:::1;516:63;536:8;532:1;:12;516:63;;;559:5;:13:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;559:13:44;;;;;::::1;::::0;;;570:1;546:3:::1;570:1:::0;546:3:::1;:::i;:::-;;;;516:63;;;;585:51;592:5;:12:::0;:16;585:51:::1;;618:5;:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;585:51;;;725:6:::0;;717:34;;-1:-1:-1;;;717:34:44;;-1:-1:-1;;;;;725:6:44;;;;717:22;;:34;;740:10;;717:34;;;:::i;14:277:84:-;81:6;134:2;122:9;113:7;109:23;105:32;102:52;;;150:1;147;140:12;102:52;182:9;176:16;235:5;228:13;221:21;214:5;211:32;201:60;;257:1;254;247:12;201:60;280:5;14:277;-1:-1:-1;;;14:277:84:o;296:180::-;355:6;408:2;396:9;387:7;383:23;379:32;376:52;;;424:1;421;414:12;376:52;-1:-1:-1;447:23:84;;296:180;-1:-1:-1;296:180:84:o;481:203::-;-1:-1:-1;;;;;645:32:84;;;;627:51;;615:2;600:18;;481:203::o;871:232::-;910:3;-1:-1:-1;;931:17:84;;928:140;;;990:10;985:3;981:20;978:1;971:31;1025:4;1022:1;1015:15;1053:4;1050:1;1043:15;928:140;-1:-1:-1;1095:1:84;1084:13;;871:232::o;1108:127::-;1169:10;1164:3;1160:20;1157:1;1150:31;1200:4;1197:1;1190:15;1224:4;1221:1;1214:15"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "259400",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "array(uint256)": "4564",
                "keep3r()": "2405",
                "nonce()": "2350",
                "work()": "infinite",
                "workHard(uint256)": "infinite",
                "workRefund(uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "array(uint256)": "38d94193",
              "keep3r()": "634c7bb5",
              "nonce()": "affed0e0",
              "work()": "322e9f04",
              "workHard(uint256)": "3bb39c33",
              "workRefund(uint256)": "ead731ad"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3r\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"KeeperNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"array\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3r\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"work\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_howHard\",\"type\":\"uint256\"}],\"name\":\"workHard\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_howHard\",\"type\":\"uint256\"}],\"name\":\"workRefund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/BasicJob.sol\":\"BasicJob\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/for-test/BasicJob.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../interfaces/IKeep3r.sol';\\n\\ncontract BasicJob {\\n  error KeeperNotValid();\\n\\n  address public keep3r;\\n  uint256 public nonce;\\n  uint256[] public array;\\n\\n  constructor(address _keep3r) {\\n    keep3r = _keep3r;\\n  }\\n\\n  function work() external upkeep {}\\n\\n  function workHard(uint256 _howHard) external upkeep {\\n    for (uint256 i = nonce; i < _howHard; i++) {\\n      nonce++;\\n    }\\n  }\\n\\n  function workRefund(uint256 _howHard) external upkeep {\\n    for (uint256 i; i < _howHard; i++) {\\n      array.push(i);\\n    }\\n\\n    while (array.length > 0) {\\n      array.pop();\\n    }\\n  }\\n\\n  modifier upkeep() {\\n    IKeep3r(keep3r).isKeeper(msg.sender);\\n    _;\\n    IKeep3r(keep3r).worked(msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x1025990395eeb8181a266f82dc866107d710650f0bc1d2aea174736ade1400ec\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3r.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './peripherals/IKeep3rJobs.sol';\\nimport './peripherals/IKeep3rKeepers.sol';\\nimport './peripherals/IKeep3rAccountance.sol';\\nimport './peripherals/IKeep3rRoles.sol';\\nimport './peripherals/IKeep3rParameters.sol';\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rV2 contract\\n/// @notice This contract inherits all the functionality of Keep3rV2\\ninterface IKeep3r is IKeep3rJobs, IKeep3rKeepers, IKeep3rAccountance, IKeep3rRoles, IKeep3rParameters {\\n\\n}\\n\",\"keccak256\":\"0x57e234140074d771239eeb6f08b6fc049c838c2a34aefadbbd542672e63bc686\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 9492,
                "contract": "solidity/for-test/BasicJob.sol:BasicJob",
                "label": "keep3r",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 9494,
                "contract": "solidity/for-test/BasicJob.sol:BasicJob",
                "label": "nonce",
                "offset": 0,
                "slot": "1",
                "type": "t_uint256"
              },
              {
                "astId": 9497,
                "contract": "solidity/for-test/BasicJob.sol:BasicJob",
                "label": "array",
                "offset": 0,
                "slot": "2",
                "type": "t_array(t_uint256)dyn_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_uint256)dyn_storage": {
                "base": "t_uint256",
                "encoding": "dynamic_array",
                "label": "uint256[]",
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "solidity/for-test/ERC20ForTest.sol": {
        "ERC20ForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "_name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "_symbol",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "_initialAccount",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_initialBalance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_value",
                  "type": "uint256"
                }
              ],
              "name": "approveInternal",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "burn",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "deposit",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "mint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_value",
                  "type": "uint256"
                }
              ],
              "name": "transferInternal",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "See {IERC20-allowance}."
              },
              "approve(address,uint256)": {
                "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
              },
              "balanceOf(address)": {
                "details": "See {IERC20-balanceOf}."
              },
              "decimals()": {
                "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
              },
              "decreaseAllowance(address,uint256)": {
                "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
              },
              "increaseAllowance(address,uint256)": {
                "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
              },
              "name()": {
                "details": "Returns the name of the token."
              },
              "symbol()": {
                "details": "Returns the symbol of the token, usually a shorter version of the name."
              },
              "totalSupply()": {
                "details": "See {IERC20-totalSupply}."
              },
              "transfer(address,uint256)": {
                "details": "See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
              },
              "transferFrom(address,address,uint256)": {
                "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_84": {
                  "entryPoint": null,
                  "id": 84,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_9619": {
                  "entryPoint": null,
                  "id": 9619,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_afterTokenTransfer_584": {
                  "entryPoint": null,
                  "id": 584,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_beforeTokenTransfer_573": {
                  "entryPoint": null,
                  "id": 573,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_mint_445": {
                  "entryPoint": 130,
                  "id": 445,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "abi_decode_string_fromMemory": {
                  "entryPoint": 528,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_addresst_uint256_fromMemory": {
                  "entryPoint": 711,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 858,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "extract_byte_array_length": {
                  "entryPoint": 897,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x41": {
                  "entryPoint": 958,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:2986:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "78:821:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "127:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "136:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "139:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "129:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "129:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "129:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "106:6:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "114:4:84",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "102:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "102:17:84"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "121:3:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "98:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "98:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "91:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "91:35:84"
                              },
                              "nodeType": "YulIf",
                              "src": "88:55:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "152:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "168:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "162:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "162:13:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "156:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "184:28:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "202:2:84",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "206:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "198:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "198:10:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "210:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "194:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "194:18:84"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "188:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "235:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "237:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "237:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "237:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "227:2:84"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "231:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "224:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "224:10:84"
                              },
                              "nodeType": "YulIf",
                              "src": "221:36:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "266:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "280:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "276:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "276:7:84"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "270:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "292:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "312:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "306:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "306:9:84"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "296:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "324:71:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "346:6:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "370:2:84"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "374:4:84",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "366:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "366:13:84"
                                              },
                                              {
                                                "name": "_3",
                                                "nodeType": "YulIdentifier",
                                                "src": "381:2:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "362:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "362:22:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "386:2:84",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "358:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "358:31:84"
                                      },
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "391:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "354:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "354:40:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "342:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "342:53:84"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "328:10:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "454:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "456:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "456:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "456:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "413:10:84"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "425:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "410:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "410:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "433:10:84"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "445:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "430:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "430:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "407:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "407:46:84"
                              },
                              "nodeType": "YulIf",
                              "src": "404:72:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "492:2:84",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "496:10:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "485:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "485:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "485:22:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "523:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "531:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "516:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "516:18:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "516:18:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "543:14:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "553:4:84",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "547:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "603:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "612:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "615:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "605:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "605:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "605:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "580:6:84"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "588:2:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "576:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "576:15:84"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "593:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "572:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "572:24:84"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "598:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "569:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "569:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "566:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "628:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "637:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "632:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "693:87:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "memPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "722:6:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "730:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "718:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "718:14:84"
                                            },
                                            {
                                              "name": "_4",
                                              "nodeType": "YulIdentifier",
                                              "src": "734:2:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "714:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "714:23:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "offset",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "753:6:84"
                                                    },
                                                    {
                                                      "name": "i",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "761:1:84"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "749:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "749:14:84"
                                                },
                                                {
                                                  "name": "_4",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "765:2:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "745:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "745:23:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "739:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "739:30:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "707:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "707:63:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "707:63:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "658:1:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "661:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "655:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "655:9:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "665:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "667:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "676:1:84"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "679:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "672:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "672:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "667:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "651:3:84",
                                "statements": []
                              },
                              "src": "647:133:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "810:59:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "memPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "839:6:84"
                                                },
                                                {
                                                  "name": "_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "847:2:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "835:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "835:15:84"
                                            },
                                            {
                                              "name": "_4",
                                              "nodeType": "YulIdentifier",
                                              "src": "852:2:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "831:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "831:24:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "857:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "824:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "824:35:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "824:35:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "795:1:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "798:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "792:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "792:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "789:80:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "878:15:84",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "887:6:84"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "878:5:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_string_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "52:6:84",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "60:3:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "68:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:885:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1056:639:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1103:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1112:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1115:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1105:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1105:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1105:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1077:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1086:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1073:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1073:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1098:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1069:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1069:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1066:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1128:30:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1148:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1142:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1142:16:84"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1132:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1167:28:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1185:2:84",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1189:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1181:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1181:10:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1193:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "1177:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1177:18:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1171:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1222:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1231:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1234:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1224:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1224:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1224:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1210:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1218:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1207:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1207:14:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1204:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1247:71:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1290:9:84"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1301:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1286:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1286:22:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1310:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1257:28:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1257:61:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1247:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1327:41:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1353:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1364:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1349:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1349:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1343:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1343:25:84"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1331:8:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1397:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1406:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1409:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1399:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1399:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1399:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1383:8:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1393:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1380:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1380:16:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1377:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1422:73:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1465:9:84"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1476:8:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1461:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1461:24:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1487:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1432:28:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1432:63:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1422:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1504:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1527:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1538:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1523:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1523:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1517:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1517:25:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1508:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1605:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1614:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1617:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1607:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1607:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1607:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1564:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "1575:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1590:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1595:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1586:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1586:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1599:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "1582:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1582:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "1571:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1571:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1561:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1561:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1554:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1554:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1551:70:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1630:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1640:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1630:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1654:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1674:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1685:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1670:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1670:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1664:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1664:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "1654:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_addresst_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "998:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1009:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1021:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1029:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1037:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "1045:6:84",
                            "type": ""
                          }
                        ],
                        "src": "904:791:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1874:181:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1891:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1902:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1884:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1884:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1884:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1925:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1936:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1921:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1921:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1941:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1914:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1914:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1914:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1964:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1975:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1960:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1960:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "1980:33:84",
                                    "type": "",
                                    "value": "ERC20: mint to the zero address"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1953:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1953:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1953:61:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2023:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2035:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2046:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2031:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2031:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2023:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1851:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1865:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1700:355:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2161:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2171:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2183:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2194:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2179:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2179:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2171:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2213:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2224:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2206:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2206:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2206:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2130:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2141:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2152:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2060:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2290:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2325:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2346:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2353:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2358:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "2349:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2349:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2339:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2339:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2339:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2390:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2393:4:84",
                                          "type": "",
                                          "value": "0x11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2383:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2383:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2383:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2418:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2421:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2411:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2411:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2411:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "2306:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "2313:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "2309:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2309:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2303:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2303:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2300:136:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2445:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "2456:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "2459:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2452:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2452:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "2445:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "2273:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "2276:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "2282:3:84",
                            "type": ""
                          }
                        ],
                        "src": "2242:225:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2527:325:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2537:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2551:1:84",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "2554:4:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "2547:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2547:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "2537:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2568:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "2598:4:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2604:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "2594:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2594:12:84"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "2572:18:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2645:31:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "2647:27:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "2661:6:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2669:4:84",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "2657:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2657:17:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "2647:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "2625:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2618:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2618:26:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2615:61:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2735:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2756:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2763:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2768:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "2759:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2759:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2749:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2749:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2749:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2800:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2803:4:84",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2793:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2793:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2793:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2828:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2831:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2821:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2821:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2821:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "2691:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "2714:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2722:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2711:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2711:14:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "2688:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2688:38:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2685:161:84"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "2507:4:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "2516:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2472:380:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2889:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2906:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2913:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2918:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "2909:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2909:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2899:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2899:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2899:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2946:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2949:4:84",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2939:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2939:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2939:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2970:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2973:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "2963:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2963:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2963:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "2857:127:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), 0)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_addresst_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n        let value := mload(add(headStart, 64))\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value2 := value\n        value3 := mload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        sum := add(x, y)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040523480156200001157600080fd5b5060405162001066380380620010668339810160408190526200003491620002c7565b8351849084906200004d9060039060208501906200016a565b508051620000639060049060208401906200016a565b5050506200007882826200008260201b60201c565b50505050620003d4565b6001600160a01b038216620000dd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000f191906200035a565b90915550506001600160a01b03821660009081526020819052604081208054839290620001209084906200035a565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620001789062000381565b90600052602060002090601f0160209004810192826200019c5760008555620001e7565b82601f10620001b757805160ff1916838001178555620001e7565b82800160010185558215620001e7579182015b82811115620001e7578251825591602001919060010190620001ca565b50620001f5929150620001f9565b5090565b5b80821115620001f55760008155600101620001fa565b600082601f8301126200022257600080fd5b81516001600160401b03808211156200023f576200023f620003be565b604051601f8301601f19908116603f011681019082821181831017156200026a576200026a620003be565b816040528381526020925086838588010111156200028757600080fd5b600091505b83821015620002ab57858201830151818301840152908201906200028c565b83821115620002bd5760008385830101525b9695505050505050565b60008060008060808587031215620002de57600080fd5b84516001600160401b0380821115620002f657600080fd5b620003048883890162000210565b955060208701519150808211156200031b57600080fd5b506200032a8782880162000210565b604087015190945090506001600160a01b03811681146200034a57600080fd5b6060959095015193969295505050565b600082198211156200037c57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200039657607f821691505b60208210811415620003b857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b610c8280620003e46000396000f3fe6080604052600436106100c35760003560e01c806306fdde03146100c8578063095ea7b3146100f357806318160ddd14610123578063222f5be01461014257806323b872dd14610164578063313ce5671461018457806339509351146101a057806340c10f19146101c057806356189cb4146101e057806370a082311461020057806395d89b41146102365780639dc29fac1461024b578063a457c2d71461026b578063a9059cbb1461028b578063b6b55f25146102ab578063dd62ed3e146102bc575b600080fd5b3480156100d457600080fd5b506100dd610302565b6040516100ea9190610b57565b60405180910390f35b3480156100ff57600080fd5b5061011361010e366004610b14565b610394565b60405190151581526020016100ea565b34801561012f57600080fd5b506002545b6040519081526020016100ea565b34801561014e57600080fd5b5061016261015d366004610ad8565b6103aa565b005b34801561017057600080fd5b5061011361017f366004610ad8565b6103ba565b34801561019057600080fd5b50604051601281526020016100ea565b3480156101ac57600080fd5b506101136101bb366004610b14565b610469565b3480156101cc57600080fd5b506101626101db366004610b14565b6104a5565b3480156101ec57600080fd5b506101626101fb366004610ad8565b6104b3565b34801561020c57600080fd5b5061013461021b366004610a83565b6001600160a01b031660009081526020819052604090205490565b34801561024257600080fd5b506100dd6104be565b34801561025757600080fd5b50610162610266366004610b14565b6104cd565b34801561027757600080fd5b50610113610286366004610b14565b6104d7565b34801561029757600080fd5b506101136102a6366004610b14565b610570565b6101626102b9366004610b3e565b50565b3480156102c857600080fd5b506101346102d7366004610aa5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031190610bdb565b80601f016020809104026020016040519081016040528092919081815260200182805461033d90610bdb565b801561038a5780601f1061035f5761010080835404028352916020019161038a565b820191906000526020600020905b81548152906001019060200180831161036d57829003601f168201915b5050505050905090565b60006103a133848461057d565b50600192915050565b6103b58383836106a1565b505050565b60006103c78484846106a1565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156104515760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61045e853385840361057d565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103a19185906104a0908690610bac565b61057d565b6104af828261085e565b5050565b6103b583838361057d565b60606004805461031190610bdb565b6104af828261092b565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156105595760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610448565b610566338585840361057d565b5060019392505050565b60006103a13384846106a1565b6001600160a01b0383166105df5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610448565b6001600160a01b0382166106405760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610448565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166107055760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610448565b6001600160a01b0382166107675760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610448565b6001600160a01b038316600090815260208190526040902054818110156107df5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610448565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610816908490610bac565b92505081905550826001600160a01b0316846001600160a01b0316600080516020610c2d8339815191528460405161085091815260200190565b60405180910390a350505050565b6001600160a01b0382166108b45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610448565b80600260008282546108c69190610bac565b90915550506001600160a01b038216600090815260208190526040812080548392906108f3908490610bac565b90915550506040518181526001600160a01b03831690600090600080516020610c2d8339815191529060200160405180910390a35050565b6001600160a01b03821661098b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610448565b6001600160a01b038216600090815260208190526040902054818110156109ff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610448565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610a2e908490610bc4565b90915550506040518281526000906001600160a01b03851690600080516020610c2d8339815191529060200160405180910390a3505050565b80356001600160a01b0381168114610a7e57600080fd5b919050565b600060208284031215610a9557600080fd5b610a9e82610a67565b9392505050565b60008060408385031215610ab857600080fd5b610ac183610a67565b9150610acf60208401610a67565b90509250929050565b600080600060608486031215610aed57600080fd5b610af684610a67565b9250610b0460208501610a67565b9150604084013590509250925092565b60008060408385031215610b2757600080fd5b610b3083610a67565b946020939093013593505050565b600060208284031215610b5057600080fd5b5035919050565b600060208083528351808285015260005b81811015610b8457858101830151858201604001528201610b68565b81811115610b96576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610bbf57610bbf610c16565b500190565b600082821015610bd657610bd6610c16565b500390565b600181811c90821680610bef57607f821691505b60208210811415610c1057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204c6d6353f1ea511c726274f598074b76b3847fedbf07e0bcad63f55c0bfee6fd64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1066 CODESIZE SUB DUP1 PUSH3 0x1066 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x2C7 JUMP JUMPDEST DUP4 MLOAD DUP5 SWAP1 DUP5 SWAP1 PUSH3 0x4D SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x16A JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x63 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x16A JUMP JUMPDEST POP POP POP PUSH3 0x78 DUP3 DUP3 PUSH3 0x82 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP POP POP POP PUSH3 0x3D4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xDD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH3 0xF1 SWAP2 SWAP1 PUSH3 0x35A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH3 0x120 SWAP1 DUP5 SWAP1 PUSH3 0x35A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x178 SWAP1 PUSH3 0x381 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x19C JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1E7 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1B7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1E7 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1E7 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1E7 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1CA JUMP JUMPDEST POP PUSH3 0x1F5 SWAP3 SWAP2 POP PUSH3 0x1F9 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1F5 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1FA JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x23F JUMPI PUSH3 0x23F PUSH3 0x3BE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x26A JUMPI PUSH3 0x26A PUSH3 0x3BE JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x287 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x2AB JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x28C JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x2BD JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x2DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x2F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x304 DUP9 DUP4 DUP10 ADD PUSH3 0x210 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x31B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x32A DUP8 DUP3 DUP9 ADD PUSH3 0x210 JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD SWAP1 SWAP5 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x34A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 SWAP6 SWAP1 SWAP6 ADD MLOAD SWAP4 SWAP7 SWAP3 SWAP6 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH3 0x37C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x396 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x3B8 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0xC82 DUP1 PUSH3 0x3E4 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xF3 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0x222F5BE0 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1A0 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x56189CB4 EQ PUSH2 0x1E0 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x200 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x236 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x24B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0xB6B55F25 EQ PUSH2 0x2AB JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2BC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDD PUSH2 0x302 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEA SWAP2 SWAP1 PUSH2 0xB57 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x113 PUSH2 0x10E CALLDATASIZE PUSH1 0x4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x394 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xEA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xEA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0xAD8 JUMP JUMPDEST PUSH2 0x3AA JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x113 PUSH2 0x17F CALLDATASIZE PUSH1 0x4 PUSH2 0xAD8 JUMP JUMPDEST PUSH2 0x3BA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xEA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x113 PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x1DB CALLDATASIZE PUSH1 0x4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x4A5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x1FB CALLDATASIZE PUSH1 0x4 PUSH2 0xAD8 JUMP JUMPDEST PUSH2 0x4B3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x134 PUSH2 0x21B CALLDATASIZE PUSH1 0x4 PUSH2 0xA83 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDD PUSH2 0x4BE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x266 CALLDATASIZE PUSH1 0x4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x4CD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x113 PUSH2 0x286 CALLDATASIZE PUSH1 0x4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x4D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x113 PUSH2 0x2A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x570 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x2B9 CALLDATASIZE PUSH1 0x4 PUSH2 0xB3E JUMP JUMPDEST POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x134 PUSH2 0x2D7 CALLDATASIZE PUSH1 0x4 PUSH2 0xAA5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x311 SWAP1 PUSH2 0xBDB JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x33D SWAP1 PUSH2 0xBDB JUMP JUMPDEST DUP1 ISZERO PUSH2 0x38A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x35F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x38A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x36D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A1 CALLER DUP5 DUP5 PUSH2 0x57D JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3B5 DUP4 DUP4 DUP4 PUSH2 0x6A1 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C7 DUP5 DUP5 DUP5 PUSH2 0x6A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 DUP2 LT ISZERO PUSH2 0x451 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732061 PUSH1 0x44 DUP3 ADD MSTORE PUSH8 0x6C6C6F77616E6365 PUSH1 0xC0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x45E DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x57D JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x3A1 SWAP2 DUP6 SWAP1 PUSH2 0x4A0 SWAP1 DUP7 SWAP1 PUSH2 0xBAC JUMP JUMPDEST PUSH2 0x57D JUMP JUMPDEST PUSH2 0x4AF DUP3 DUP3 PUSH2 0x85E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x3B5 DUP4 DUP4 DUP4 PUSH2 0x57D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x311 SWAP1 PUSH2 0xBDB JUMP JUMPDEST PUSH2 0x4AF DUP3 DUP3 PUSH2 0x92B JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD DUP3 DUP2 LT ISZERO PUSH2 0x559 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH2 0x566 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x57D JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A1 CALLER DUP5 DUP5 PUSH2 0x6A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x640 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x705 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x767 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x7DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP6 DUP6 SUB SWAP1 SSTORE SWAP2 DUP6 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x816 SWAP1 DUP5 SWAP1 PUSH2 0xBAC JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC2D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP5 PUSH1 0x40 MLOAD PUSH2 0x850 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x8B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x448 JUMP JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x8C6 SWAP2 SWAP1 PUSH2 0xBAC JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x8F3 SWAP1 DUP5 SWAP1 PUSH2 0xBAC JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC2D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x98B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x9FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP4 DUP4 SUB SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0xA2E SWAP1 DUP5 SWAP1 PUSH2 0xBC4 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC2D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xA7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA9E DUP3 PUSH2 0xA67 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAC1 DUP4 PUSH2 0xA67 JUMP JUMPDEST SWAP2 POP PUSH2 0xACF PUSH1 0x20 DUP5 ADD PUSH2 0xA67 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xAED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAF6 DUP5 PUSH2 0xA67 JUMP JUMPDEST SWAP3 POP PUSH2 0xB04 PUSH1 0x20 DUP6 ADD PUSH2 0xA67 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xB27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB30 DUP4 PUSH2 0xA67 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB84 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xB68 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xB96 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xBBF JUMPI PUSH2 0xBBF PUSH2 0xC16 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xBD6 JUMPI PUSH2 0xBD6 PUSH2 0xC16 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xBEF JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0xC10 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0xDD CALLCODE MSTORE 0xAD SHL 0xE2 0xC8 SWAP12 PUSH10 0xC2B068FC378DAA952BA7 CALL PUSH4 0xC4A11628 CREATE2 GAS 0x4D CREATE2 0x23 0xB3 0xEF LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4C PUSH14 0x6353F1EA511C726274F598074B76 0xB3 DUP5 PUSH32 0xEDBF07E0BCAD63F55C0BFEE6FD64736F6C634300080700330000000000000000 ",
              "sourceMap": "122:819:45:-:0;;;157:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1972:13:1;;289:5:45;;296:7;;1972:13:1;;:5;;:13;;;;;:::i;:::-;-1:-1:-1;1995:17:1;;;;:7;;:17;;;;;:::i;:::-;;1906:113;;311:39:45::1;317:15;334;311:5;;;:39;;:::i;:::-;157:198:::0;;;;122:819;;8254:389:1;-1:-1:-1;;;;;8337:21:1;;8329:65;;;;-1:-1:-1;;;8329:65:1;;1902:2:84;8329:65:1;;;1884:21:84;1941:2;1921:18;;;1914:30;1980:33;1960:18;;;1953:61;2031:18;;8329:65:1;;;;;;;;8481:6;8465:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8497:18:1;;:9;:18;;;;;;;;;;:28;;8519:6;;8497:9;:28;;8519:6;;8497:28;:::i;:::-;;;;-1:-1:-1;;8540:37:1;;2206:25:84;;;-1:-1:-1;;;;;8540:37:1;;;8557:1;;8540:37;;2194:2:84;2179:18;8540:37:1;;;;;;;8254:389;;:::o;122:819:45:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;122:819:45;;;-1:-1:-1;122:819:45;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:885:84;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;162:13;;-1:-1:-1;;;;;224:10:84;;;221:36;;;237:18;;:::i;:::-;312:2;306:9;280:2;366:13;;-1:-1:-1;;362:22:84;;;386:2;358:31;354:40;342:53;;;410:18;;;430:22;;;407:46;404:72;;;456:18;;:::i;:::-;496:10;492:2;485:22;531:2;523:6;516:18;553:4;543:14;;598:3;593:2;588;580:6;576:15;572:24;569:33;566:53;;;615:1;612;605:12;566:53;637:1;628:10;;647:133;661:2;658:1;655:9;647:133;;;749:14;;;745:23;;739:30;718:14;;;714:23;;707:63;672:10;;;;647:133;;;798:2;795:1;792:9;789:80;;;857:1;852:2;847;839:6;835:15;831:24;824:35;789:80;887:6;14:885;-1:-1:-1;;;;;;14:885:84:o;904:791::-;1021:6;1029;1037;1045;1098:3;1086:9;1077:7;1073:23;1069:33;1066:53;;;1115:1;1112;1105:12;1066:53;1142:16;;-1:-1:-1;;;;;1207:14:84;;;1204:34;;;1234:1;1231;1224:12;1204:34;1257:61;1310:7;1301:6;1290:9;1286:22;1257:61;:::i;:::-;1247:71;;1364:2;1353:9;1349:18;1343:25;1327:41;;1393:2;1383:8;1380:16;1377:36;;;1409:1;1406;1399:12;1377:36;;1432:63;1487:7;1476:8;1465:9;1461:24;1432:63;:::i;:::-;1538:2;1523:18;;1517:25;1422:73;;-1:-1:-1;1517:25:84;-1:-1:-1;;;;;;1571:31:84;;1561:42;;1551:70;;1617:1;1614;1607:12;1551:70;1685:2;1670:18;;;;1664:25;904:791;;;;-1:-1:-1;;;904:791:84:o;2242:225::-;2282:3;2313:1;2309:6;2306:1;2303:13;2300:136;;;2358:10;2353:3;2349:20;2346:1;2339:31;2393:4;2390:1;2383:15;2421:4;2418:1;2411:15;2300:136;-1:-1:-1;2452:9:84;;2242:225::o;2472:380::-;2551:1;2547:12;;;;2594;;;2615:61;;2669:4;2661:6;2657:17;2647:27;;2615:61;2722:2;2714:6;2711:14;2691:18;2688:38;2685:161;;;2768:10;2763:3;2759:20;2756:1;2749:31;2803:4;2800:1;2793:15;2831:4;2828:1;2821:15;2685:161;;2472:380;;;:::o;2857:127::-;2918:10;2913:3;2909:20;2906:1;2899:31;2949:4;2946:1;2939:15;2973:4;2970:1;2963:15;2857:127;122:819:45;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_afterTokenTransfer_584": {
                  "entryPoint": null,
                  "id": 584,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_approve_562": {
                  "entryPoint": 1405,
                  "id": 562,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_beforeTokenTransfer_573": {
                  "entryPoint": null,
                  "id": 573,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_burn_517": {
                  "entryPoint": 2347,
                  "id": 517,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_mint_445": {
                  "entryPoint": 2142,
                  "id": 445,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_msgSender_1221": {
                  "entryPoint": null,
                  "id": 1221,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_transfer_389": {
                  "entryPoint": 1697,
                  "id": 389,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@allowance_177": {
                  "entryPoint": null,
                  "id": 177,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@approveInternal_9677": {
                  "entryPoint": 1203,
                  "id": 9677,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@approve_198": {
                  "entryPoint": 916,
                  "id": 198,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@balanceOf_138": {
                  "entryPoint": null,
                  "id": 138,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@burn_9645": {
                  "entryPoint": 1229,
                  "id": 9645,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@decimals_114": {
                  "entryPoint": null,
                  "id": 114,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@decreaseAllowance_312": {
                  "entryPoint": 1239,
                  "id": 312,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@deposit_9683": {
                  "entryPoint": null,
                  "id": 9683,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@increaseAllowance_273": {
                  "entryPoint": 1129,
                  "id": 273,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@mint_9632": {
                  "entryPoint": 1189,
                  "id": 9632,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@name_94": {
                  "entryPoint": 770,
                  "id": 94,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@symbol_104": {
                  "entryPoint": 1214,
                  "id": 104,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@totalSupply_124": {
                  "entryPoint": null,
                  "id": 124,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@transferFrom_246": {
                  "entryPoint": 954,
                  "id": 246,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@transferInternal_9661": {
                  "entryPoint": 938,
                  "id": 9661,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@transfer_159": {
                  "entryPoint": 1392,
                  "id": 159,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_address": {
                  "entryPoint": 2663,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 2691,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 2725,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_uint256": {
                  "entryPoint": 2776,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 2836,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 2878,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 2903,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 2988,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 3012,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "extract_byte_array_length": {
                  "entryPoint": 3035,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 3094,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:7372:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "111:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "262:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "308:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "317:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "320:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "310:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "310:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "310:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "292:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "279:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "275:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "272:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "333:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "362:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "333:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "228:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "239:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "251:6:84",
                            "type": ""
                          }
                        ],
                        "src": "192:186:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "470:173:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "516:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "525:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "528:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "518:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "518:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "518:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "491:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "500:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "487:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "487:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "512:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "480:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "541:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "570:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "551:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "551:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "541:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "589:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "622:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "633:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "618:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "618:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "599:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "599:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "589:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "428:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "439:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "451:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "459:6:84",
                            "type": ""
                          }
                        ],
                        "src": "383:260:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "752:224:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "798:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "807:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "810:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "800:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "800:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "800:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "773:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "782:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "769:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "769:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "794:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "765:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "765:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "762:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "823:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "852:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "833:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "833:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "823:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "871:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "904:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "915:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "900:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "900:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "881:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "881:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "871:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "928:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "955:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "966:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "951:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "951:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "938:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "938:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "928:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "702:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "713:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "725:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "733:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "741:6:84",
                            "type": ""
                          }
                        ],
                        "src": "648:328:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1068:167:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1114:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1123:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1126:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1116:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1116:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1116:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1089:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1098:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1085:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1085:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1110:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1081:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1081:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1078:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1139:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1168:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1149:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1149:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1139:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1187:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1214:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1225:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1210:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1210:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1197:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1197:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1187:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1026:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1037:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1049:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1057:6:84",
                            "type": ""
                          }
                        ],
                        "src": "981:254:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1310:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1356:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1365:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1368:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1358:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1358:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1358:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1331:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1340:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1327:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1327:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1352:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1323:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1323:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1320:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1381:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1404:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1391:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1391:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1381:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1276:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1287:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1299:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1240:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1520:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1530:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1542:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1553:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1538:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1538:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1530:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1572:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "1597:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "1590:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1590:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "1583:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1583:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1565:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1565:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1565:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1489:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1500:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1511:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1425:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1738:476:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1748:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1758:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1752:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1776:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1787:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1769:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1769:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1769:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1799:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1819:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1813:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1813:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "1803:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1846:9:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1857:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1842:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1842:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1862:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1835:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1835:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1835:34:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1878:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1887:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "1882:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1947:90:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "headStart",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1976:9:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1987:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "1972:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1972:17:84"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1991:2:84",
                                              "type": "",
                                              "value": "64"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "1968:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1968:26:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "value0",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2010:6:84"
                                                    },
                                                    {
                                                      "name": "i",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2018:1:84"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2006:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "2006:14:84"
                                                },
                                                {
                                                  "name": "_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2022:2:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "2002:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2002:23:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "1996:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1996:30:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1961:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1961:66:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1961:66:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1908:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1911:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1905:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1905:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1919:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1921:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1930:1:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1933:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1926:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1926:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1921:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1901:3:84",
                                "statements": []
                              },
                              "src": "1897:140:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2071:66:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "headStart",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2100:9:84"
                                                },
                                                {
                                                  "name": "length",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2111:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "2096:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2096:22:84"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2120:2:84",
                                              "type": "",
                                              "value": "64"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "2092:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2092:31:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2125:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2085:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2085:42:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2085:42:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "2052:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2055:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2049:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2049:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2046:91:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2146:62:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2162:9:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "2181:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2189:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "2177:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2177:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2198:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "2194:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2194:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2173:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2173:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2158:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2158:45:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2205:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2154:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2154:54:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2146:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1707:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1718:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1729:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1617:597:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2393:225:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2410:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2421:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2403:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2403:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2403:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2444:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2455:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2440:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2440:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2460:2:84",
                                    "type": "",
                                    "value": "35"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2433:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2433:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2433:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2483:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2494:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2479:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2479:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2499:34:84",
                                    "type": "",
                                    "value": "ERC20: transfer to the zero addr"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2472:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2472:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2472:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2554:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2565:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2550:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2550:18:84"
                                  },
                                  {
                                    "hexValue": "657373",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2570:5:84",
                                    "type": "",
                                    "value": "ess"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2543:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2543:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2543:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2585:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2597:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2608:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2593:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2593:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2585:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2370:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2384:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2219:399:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2797:224:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2814:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2825:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2807:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2807:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2807:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2848:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2859:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2844:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2844:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2864:2:84",
                                    "type": "",
                                    "value": "34"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2837:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2837:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2837:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2887:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2898:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2883:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2883:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2903:34:84",
                                    "type": "",
                                    "value": "ERC20: burn amount exceeds balan"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2876:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2876:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2876:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2958:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2969:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2954:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2954:18:84"
                                  },
                                  {
                                    "hexValue": "6365",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2974:4:84",
                                    "type": "",
                                    "value": "ce"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2947:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2947:32:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2947:32:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2988:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3000:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3011:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2996:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2996:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2988:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2774:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2788:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2623:398:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3200:224:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3217:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3228:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3210:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3210:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3210:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3251:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3262:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3247:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3247:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3267:2:84",
                                    "type": "",
                                    "value": "34"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3240:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3240:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3240:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3290:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3301:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3286:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3286:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a20617070726f766520746f20746865207a65726f206164647265",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3306:34:84",
                                    "type": "",
                                    "value": "ERC20: approve to the zero addre"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3279:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3279:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3279:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3361:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3372:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3357:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3357:18:84"
                                  },
                                  {
                                    "hexValue": "7373",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3377:4:84",
                                    "type": "",
                                    "value": "ss"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3350:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3350:32:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3350:32:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3391:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3403:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3414:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3399:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3399:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3391:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3177:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3191:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3026:398:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3603:228:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3620:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3631:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3613:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3613:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3613:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3654:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3665:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3650:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3650:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3670:2:84",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3643:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3643:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3643:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3693:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3704:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3689:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3689:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3709:34:84",
                                    "type": "",
                                    "value": "ERC20: transfer amount exceeds b"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3682:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3682:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3682:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3764:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3775:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3760:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3760:18:84"
                                  },
                                  {
                                    "hexValue": "616c616e6365",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3780:8:84",
                                    "type": "",
                                    "value": "alance"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3753:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3753:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3753:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3798:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3810:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3821:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3806:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3806:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3798:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3580:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3594:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3429:402:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4010:230:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4027:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4038:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4020:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4020:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4020:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4061:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4072:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4057:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4057:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4077:2:84",
                                    "type": "",
                                    "value": "40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4050:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4050:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4050:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4100:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4111:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4096:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4096:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732061",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4116:34:84",
                                    "type": "",
                                    "value": "ERC20: transfer amount exceeds a"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4089:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4089:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4089:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4171:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4182:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4167:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4167:18:84"
                                  },
                                  {
                                    "hexValue": "6c6c6f77616e6365",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4187:10:84",
                                    "type": "",
                                    "value": "llowance"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4160:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4160:38:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4160:38:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4207:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4219:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4230:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4215:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4215:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4207:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3987:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4001:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3836:404:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4419:223:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4436:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4447:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4429:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4429:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4429:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4470:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4481:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4466:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4466:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4486:2:84",
                                    "type": "",
                                    "value": "33"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4459:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4459:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4459:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4509:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4520:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4505:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4505:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f20616464726573",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4525:34:84",
                                    "type": "",
                                    "value": "ERC20: burn from the zero addres"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4498:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4498:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4498:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4580:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4591:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4576:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4576:18:84"
                                  },
                                  {
                                    "hexValue": "73",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4596:3:84",
                                    "type": "",
                                    "value": "s"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4569:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4569:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4569:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4609:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4621:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4632:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4617:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4617:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4609:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4396:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4410:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4245:397:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4821:227:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4838:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4849:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4831:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4831:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4831:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4872:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4883:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4868:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4868:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4888:2:84",
                                    "type": "",
                                    "value": "37"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4861:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4861:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4861:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4911:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4922:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4907:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4907:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f206164",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4927:34:84",
                                    "type": "",
                                    "value": "ERC20: transfer from the zero ad"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4900:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4900:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4900:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4982:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4993:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4978:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4978:18:84"
                                  },
                                  {
                                    "hexValue": "6472657373",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4998:7:84",
                                    "type": "",
                                    "value": "dress"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4971:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4971:35:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4971:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5015:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5027:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5038:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5023:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5023:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5015:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4798:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4812:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4647:401:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5227:226:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5244:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5255:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5237:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5237:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5237:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5278:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5289:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5274:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5274:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5294:2:84",
                                    "type": "",
                                    "value": "36"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5267:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5267:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5267:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5317:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5328:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5313:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5313:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f20616464",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5333:34:84",
                                    "type": "",
                                    "value": "ERC20: approve from the zero add"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5306:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5306:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5306:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5388:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5399:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5384:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5384:18:84"
                                  },
                                  {
                                    "hexValue": "72657373",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5404:6:84",
                                    "type": "",
                                    "value": "ress"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5377:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5377:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5377:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5420:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5432:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5443:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5428:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5428:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5420:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5204:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5218:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5053:400:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5632:227:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5649:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5660:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5642:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5642:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5642:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5683:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5694:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5679:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5679:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5699:2:84",
                                    "type": "",
                                    "value": "37"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5672:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5672:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5672:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5722:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5733:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5718:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5718:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5738:34:84",
                                    "type": "",
                                    "value": "ERC20: decreased allowance below"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5711:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5711:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5711:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5793:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5804:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5789:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5789:18:84"
                                  },
                                  {
                                    "hexValue": "207a65726f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5809:7:84",
                                    "type": "",
                                    "value": " zero"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5782:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5782:35:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5782:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5826:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5838:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5849:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5834:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5834:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5826:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5609:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5623:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5458:401:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6038:181:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6055:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6066:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6048:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6048:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6048:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6089:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6100:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6085:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6085:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6105:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6078:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6078:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6078:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6128:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6139:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6124:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6124:18:84"
                                  },
                                  {
                                    "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "6144:33:84",
                                    "type": "",
                                    "value": "ERC20: mint to the zero address"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6117:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6117:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6117:61:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6187:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6199:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6210:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6195:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6195:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6187:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6015:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6029:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5864:355:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6325:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6335:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6347:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6358:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6343:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6343:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6335:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6377:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6388:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6370:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6370:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6370:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6294:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6305:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6316:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6224:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6503:87:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6513:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6525:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6536:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6521:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6521:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6513:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6555:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6570:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6578:4:84",
                                        "type": "",
                                        "value": "0xff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6566:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6566:17:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6548:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6548:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6548:36:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6472:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6483:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6494:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6406:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6643:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6670:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "6672:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6672:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6672:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6659:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "6666:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "6662:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6662:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6656:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6656:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6653:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6701:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6712:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6715:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6708:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6708:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "6701:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "6626:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "6629:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "6635:3:84",
                            "type": ""
                          }
                        ],
                        "src": "6595:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6777:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6799:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "6801:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6801:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6801:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6793:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6796:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6790:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6790:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6787:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6830:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6842:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6845:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "6838:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6838:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "6830:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "6759:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "6762:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "6768:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6728:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6913:325:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6923:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6937:1:84",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "6940:4:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6933:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6933:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "6923:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6954:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "6984:4:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6990:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "6980:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6980:12:84"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "6958:18:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7031:31:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7033:27:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "7047:6:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7055:4:84",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "7043:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7043:17:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "7033:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "7011:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "7004:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7004:26:84"
                              },
                              "nodeType": "YulIf",
                              "src": "7001:61:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7121:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7142:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "7149:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "7154:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "7145:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7145:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7135:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7135:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7135:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7186:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7189:4:84",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7179:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7179:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7179:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7214:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7217:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7207:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7207:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7207:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "7077:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "7100:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7108:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "7097:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7097:14:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "7074:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7074:38:84"
                              },
                              "nodeType": "YulIf",
                              "src": "7071:161:84"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "6893:4:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "6902:6:84",
                            "type": ""
                          }
                        ],
                        "src": "6858:380:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7275:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7292:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7299:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7304:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7295:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7295:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7285:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7285:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7285:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7332:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7335:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7325:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7325:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7325:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7356:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7359:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "7349:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7349:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7349:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "7243:127:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: burn amount exceeds balan\")\n        mstore(add(headStart, 96), \"ce\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"ERC20: transfer amount exceeds b\")\n        mstore(add(headStart, 96), \"alance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 40)\n        mstore(add(headStart, 64), \"ERC20: transfer amount exceeds a\")\n        mstore(add(headStart, 96), \"llowance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"ERC20: burn from the zero addres\")\n        mstore(add(headStart, 96), \"s\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: decreased allowance below\")\n        mstore(add(headStart, 96), \" zero\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "6080604052600436106100c35760003560e01c806306fdde03146100c8578063095ea7b3146100f357806318160ddd14610123578063222f5be01461014257806323b872dd14610164578063313ce5671461018457806339509351146101a057806340c10f19146101c057806356189cb4146101e057806370a082311461020057806395d89b41146102365780639dc29fac1461024b578063a457c2d71461026b578063a9059cbb1461028b578063b6b55f25146102ab578063dd62ed3e146102bc575b600080fd5b3480156100d457600080fd5b506100dd610302565b6040516100ea9190610b57565b60405180910390f35b3480156100ff57600080fd5b5061011361010e366004610b14565b610394565b60405190151581526020016100ea565b34801561012f57600080fd5b506002545b6040519081526020016100ea565b34801561014e57600080fd5b5061016261015d366004610ad8565b6103aa565b005b34801561017057600080fd5b5061011361017f366004610ad8565b6103ba565b34801561019057600080fd5b50604051601281526020016100ea565b3480156101ac57600080fd5b506101136101bb366004610b14565b610469565b3480156101cc57600080fd5b506101626101db366004610b14565b6104a5565b3480156101ec57600080fd5b506101626101fb366004610ad8565b6104b3565b34801561020c57600080fd5b5061013461021b366004610a83565b6001600160a01b031660009081526020819052604090205490565b34801561024257600080fd5b506100dd6104be565b34801561025757600080fd5b50610162610266366004610b14565b6104cd565b34801561027757600080fd5b50610113610286366004610b14565b6104d7565b34801561029757600080fd5b506101136102a6366004610b14565b610570565b6101626102b9366004610b3e565b50565b3480156102c857600080fd5b506101346102d7366004610aa5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031190610bdb565b80601f016020809104026020016040519081016040528092919081815260200182805461033d90610bdb565b801561038a5780601f1061035f5761010080835404028352916020019161038a565b820191906000526020600020905b81548152906001019060200180831161036d57829003601f168201915b5050505050905090565b60006103a133848461057d565b50600192915050565b6103b58383836106a1565b505050565b60006103c78484846106a1565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156104515760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61045e853385840361057d565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103a19185906104a0908690610bac565b61057d565b6104af828261085e565b5050565b6103b583838361057d565b60606004805461031190610bdb565b6104af828261092b565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156105595760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610448565b610566338585840361057d565b5060019392505050565b60006103a13384846106a1565b6001600160a01b0383166105df5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610448565b6001600160a01b0382166106405760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610448565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166107055760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610448565b6001600160a01b0382166107675760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610448565b6001600160a01b038316600090815260208190526040902054818110156107df5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610448565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610816908490610bac565b92505081905550826001600160a01b0316846001600160a01b0316600080516020610c2d8339815191528460405161085091815260200190565b60405180910390a350505050565b6001600160a01b0382166108b45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610448565b80600260008282546108c69190610bac565b90915550506001600160a01b038216600090815260208190526040812080548392906108f3908490610bac565b90915550506040518181526001600160a01b03831690600090600080516020610c2d8339815191529060200160405180910390a35050565b6001600160a01b03821661098b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610448565b6001600160a01b038216600090815260208190526040902054818110156109ff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610448565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610a2e908490610bc4565b90915550506040518281526000906001600160a01b03851690600080516020610c2d8339815191529060200160405180910390a3505050565b80356001600160a01b0381168114610a7e57600080fd5b919050565b600060208284031215610a9557600080fd5b610a9e82610a67565b9392505050565b60008060408385031215610ab857600080fd5b610ac183610a67565b9150610acf60208401610a67565b90509250929050565b600080600060608486031215610aed57600080fd5b610af684610a67565b9250610b0460208501610a67565b9150604084013590509250925092565b60008060408385031215610b2757600080fd5b610b3083610a67565b946020939093013593505050565b600060208284031215610b5057600080fd5b5035919050565b600060208083528351808285015260005b81811015610b8457858101830151858201604001528201610b68565b81811115610b96576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610bbf57610bbf610c16565b500190565b600082821015610bd657610bd6610c16565b500390565b600181811c90821680610bef57607f821691505b60208210811415610c1057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204c6d6353f1ea511c726274f598074b76b3847fedbf07e0bcad63f55c0bfee6fd64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xF3 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0x222F5BE0 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1A0 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x56189CB4 EQ PUSH2 0x1E0 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x200 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x236 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x24B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0xB6B55F25 EQ PUSH2 0x2AB JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2BC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDD PUSH2 0x302 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEA SWAP2 SWAP1 PUSH2 0xB57 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x113 PUSH2 0x10E CALLDATASIZE PUSH1 0x4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x394 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xEA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xEA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0xAD8 JUMP JUMPDEST PUSH2 0x3AA JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x113 PUSH2 0x17F CALLDATASIZE PUSH1 0x4 PUSH2 0xAD8 JUMP JUMPDEST PUSH2 0x3BA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xEA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x113 PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x1DB CALLDATASIZE PUSH1 0x4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x4A5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x1FB CALLDATASIZE PUSH1 0x4 PUSH2 0xAD8 JUMP JUMPDEST PUSH2 0x4B3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x134 PUSH2 0x21B CALLDATASIZE PUSH1 0x4 PUSH2 0xA83 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDD PUSH2 0x4BE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x162 PUSH2 0x266 CALLDATASIZE PUSH1 0x4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x4CD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x113 PUSH2 0x286 CALLDATASIZE PUSH1 0x4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x4D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x113 PUSH2 0x2A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x570 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x2B9 CALLDATASIZE PUSH1 0x4 PUSH2 0xB3E JUMP JUMPDEST POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x134 PUSH2 0x2D7 CALLDATASIZE PUSH1 0x4 PUSH2 0xAA5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x311 SWAP1 PUSH2 0xBDB JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x33D SWAP1 PUSH2 0xBDB JUMP JUMPDEST DUP1 ISZERO PUSH2 0x38A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x35F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x38A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x36D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A1 CALLER DUP5 DUP5 PUSH2 0x57D JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3B5 DUP4 DUP4 DUP4 PUSH2 0x6A1 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C7 DUP5 DUP5 DUP5 PUSH2 0x6A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 DUP2 LT ISZERO PUSH2 0x451 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732061 PUSH1 0x44 DUP3 ADD MSTORE PUSH8 0x6C6C6F77616E6365 PUSH1 0xC0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x45E DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x57D JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x3A1 SWAP2 DUP6 SWAP1 PUSH2 0x4A0 SWAP1 DUP7 SWAP1 PUSH2 0xBAC JUMP JUMPDEST PUSH2 0x57D JUMP JUMPDEST PUSH2 0x4AF DUP3 DUP3 PUSH2 0x85E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x3B5 DUP4 DUP4 DUP4 PUSH2 0x57D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x311 SWAP1 PUSH2 0xBDB JUMP JUMPDEST PUSH2 0x4AF DUP3 DUP3 PUSH2 0x92B JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD DUP3 DUP2 LT ISZERO PUSH2 0x559 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH2 0x566 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x57D JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A1 CALLER DUP5 DUP5 PUSH2 0x6A1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x640 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x705 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x767 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x7DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP6 DUP6 SUB SWAP1 SSTORE SWAP2 DUP6 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x816 SWAP1 DUP5 SWAP1 PUSH2 0xBAC JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC2D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP5 PUSH1 0x40 MLOAD PUSH2 0x850 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x8B4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x448 JUMP JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x8C6 SWAP2 SWAP1 PUSH2 0xBAC JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x8F3 SWAP1 DUP5 SWAP1 PUSH2 0xBAC JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC2D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x98B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x9FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x448 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP4 DUP4 SUB SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0xA2E SWAP1 DUP5 SWAP1 PUSH2 0xBC4 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xC2D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xA7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA9E DUP3 PUSH2 0xA67 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAC1 DUP4 PUSH2 0xA67 JUMP JUMPDEST SWAP2 POP PUSH2 0xACF PUSH1 0x20 DUP5 ADD PUSH2 0xA67 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xAED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAF6 DUP5 PUSH2 0xA67 JUMP JUMPDEST SWAP3 POP PUSH2 0xB04 PUSH1 0x20 DUP6 ADD PUSH2 0xA67 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xB27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB30 DUP4 PUSH2 0xA67 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB84 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xB68 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xB96 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xBBF JUMPI PUSH2 0xBBF PUSH2 0xC16 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xBD6 JUMPI PUSH2 0xBD6 PUSH2 0xC16 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xBEF JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0xC10 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0xDD CALLCODE MSTORE 0xAD SHL 0xE2 0xC8 SWAP12 PUSH10 0xC2B068FC378DAA952BA7 CALL PUSH4 0xC4A11628 CREATE2 GAS 0x4D CREATE2 0x23 0xB3 0xEF LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4C PUSH14 0x6353F1EA511C726274F598074B76 0xB3 DUP5 PUSH32 0xEDBF07E0BCAD63F55C0BFEE6FD64736F6C634300080700330000000000000000 ",
              "sourceMap": "122:819:45:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2084:98:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4181:166;;;;;;;;;;-1:-1:-1;4181:166:1;;;;;:::i;:::-;;:::i;:::-;;;1590:14:84;;1583:22;1565:41;;1553:2;1538:18;4181:166:1;1425:187:84;3172:106:1;;;;;;;;;;-1:-1:-1;3259:12:1;;3172:106;;;6370:25:84;;;6358:2;6343:18;3172:106:1;6224:177:84;549:133:45;;;;;;;;;;-1:-1:-1;549:133:45;;;;;:::i;:::-;;:::i;:::-;;4814:478:1;;;;;;;;;;-1:-1:-1;4814:478:1;;;;;:::i;:::-;;:::i;3021:91::-;;;;;;;;;;-1:-1:-1;3021:91:1;;3103:2;6548:36:84;;6536:2;6521:18;3021:91:1;6406:184:84;5687:212:1;;;;;;;;;;-1:-1:-1;5687:212:1;;;;;:::i;:::-;;:::i;359:91:45:-;;;;;;;;;;-1:-1:-1;359:91:45;;;;;:::i;:::-;;:::i;686:143::-;;;;;;;;;;-1:-1:-1;686:143:45;;;;;:::i;:::-;;:::i;3336:125:1:-;;;;;;;;;;-1:-1:-1;3336:125:1;;;;;:::i;:::-;-1:-1:-1;;;;;3436:18:1;3410:7;3436:18;;;;;;;;;;;;3336:125;2295:102;;;;;;;;;;;;;:::i;454:91:45:-;;;;;;;;;;-1:-1:-1;454:91:45;;;;;:::i;:::-;;:::i;6386:405:1:-;;;;;;;;;;-1:-1:-1;6386:405:1;;;;;:::i;:::-;;:::i;3664:172::-;;;;;;;;;;-1:-1:-1;3664:172:1;;;;;:::i;:::-;;:::i;833:106:45:-;;;;;;:::i;:::-;;;3894:149:1;;;;;;;;;;-1:-1:-1;3894:149:1;;;;;:::i;:::-;-1:-1:-1;;;;;4009:18:1;;;3983:7;4009:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3894:149;2084:98;2138:13;2170:5;2163:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2084:98;:::o;4181:166::-;4264:4;4280:39;666:10:6;4303:7:1;4312:6;4280:8;:39::i;:::-;-1:-1:-1;4336:4:1;4181:166;;;;:::o;549:133:45:-;648:29;658:5;665:3;670:6;648:9;:29::i;:::-;549:133;;;:::o;4814:478:1:-;4950:4;4966:36;4976:6;4984:9;4995:6;4966:9;:36::i;:::-;-1:-1:-1;;;;;5040:19:1;;5013:24;5040:19;;;:11;:19;;;;;;;;666:10:6;5040:33:1;;;;;;;;5091:26;;;;5083:79;;;;-1:-1:-1;;;5083:79:1;;4038:2:84;5083:79:1;;;4020:21:84;4077:2;4057:18;;;4050:30;4116:34;4096:18;;;4089:62;-1:-1:-1;;;4167:18:84;;;4160:38;4215:19;;5083:79:1;;;;;;;;;5196:57;5205:6;666:10:6;5246:6:1;5227:16;:25;5196:8;:57::i;:::-;-1:-1:-1;5281:4:1;;4814:478;-1:-1:-1;;;;4814:478:1:o;5687:212::-;666:10:6;5775:4:1;5823:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5823:34:1;;;;;;;;;;5775:4;;5791:80;;5814:7;;5823:47;;5860:10;;5823:47;:::i;:::-;5791:8;:80::i;359:91:45:-;421:24;427:8;437:7;421:5;:24::i;:::-;359:91;;:::o;686:143::-;790:34;799:6;807:8;817:6;790:8;:34::i;2295:102:1:-;2351:13;2383:7;2376:14;;;;;:::i;454:91:45:-;516:24;522:8;532:7;516:5;:24::i;6386:405:1:-;666:10:6;6479:4:1;6522:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6522:34:1;;;;;;;;;;6574:35;;;;6566:85;;;;-1:-1:-1;;;6566:85:1;;5660:2:84;6566:85:1;;;5642:21:84;5699:2;5679:18;;;5672:30;5738:34;5718:18;;;5711:62;-1:-1:-1;;;5789:18:84;;;5782:35;5834:19;;6566:85:1;5458:401:84;6566:85:1;6685:67;666:10:6;6708:7:1;6736:15;6717:16;:34;6685:8;:67::i;:::-;-1:-1:-1;6780:4:1;;6386:405;-1:-1:-1;;;6386:405:1:o;3664:172::-;3750:4;3766:42;666:10:6;3790:9:1;3801:6;3766:9;:42::i;9962:370::-;-1:-1:-1;;;;;10093:19:1;;10085:68;;;;-1:-1:-1;;;10085:68:1;;5255:2:84;10085:68:1;;;5237:21:84;5294:2;5274:18;;;5267:30;5333:34;5313:18;;;5306:62;-1:-1:-1;;;5384:18:84;;;5377:34;5428:19;;10085:68:1;5053:400:84;10085:68:1;-1:-1:-1;;;;;10171:21:1;;10163:68;;;;-1:-1:-1;;;10163:68:1;;3228:2:84;10163:68:1;;;3210:21:84;3267:2;3247:18;;;3240:30;3306:34;3286:18;;;3279:62;-1:-1:-1;;;3357:18:84;;;3350:32;3399:19;;10163:68:1;3026:398:84;10163:68:1;-1:-1:-1;;;;;10242:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10293:32;;6370:25:84;;;10293:32:1;;6343:18:84;10293:32:1;;;;;;;9962:370;;;:::o;7265:713::-;-1:-1:-1;;;;;7400:20:1;;7392:70;;;;-1:-1:-1;;;7392:70:1;;4849:2:84;7392:70:1;;;4831:21:84;4888:2;4868:18;;;4861:30;4927:34;4907:18;;;4900:62;-1:-1:-1;;;4978:18:84;;;4971:35;5023:19;;7392:70:1;4647:401:84;7392:70:1;-1:-1:-1;;;;;7480:23:1;;7472:71;;;;-1:-1:-1;;;7472:71:1;;2421:2:84;7472:71:1;;;2403:21:84;2460:2;2440:18;;;2433:30;2499:34;2479:18;;;2472:62;-1:-1:-1;;;2550:18:84;;;2543:33;2593:19;;7472:71:1;2219:399:84;7472:71:1;-1:-1:-1;;;;;7636:17:1;;7612:21;7636:17;;;;;;;;;;;7671:23;;;;7663:74;;;;-1:-1:-1;;;7663:74:1;;3631:2:84;7663:74:1;;;3613:21:84;3670:2;3650:18;;;3643:30;3709:34;3689:18;;;3682:62;-1:-1:-1;;;3760:18:84;;;3753:36;3806:19;;7663:74:1;3429:402:84;7663:74:1;-1:-1:-1;;;;;7771:17:1;;;:9;:17;;;;;;;;;;;7791:22;;;7771:42;;7833:20;;;;;;;;:30;;7807:6;;7771:9;7833:30;;7807:6;;7833:30;:::i;:::-;;;;;;;;7896:9;-1:-1:-1;;;;;7879:35:1;7888:6;-1:-1:-1;;;;;7879:35:1;-1:-1:-1;;;;;;;;;;;7907:6:1;7879:35;;;;6370:25:84;;6358:2;6343:18;;6224:177;7879:35:1;;;;;;;;7382:596;7265:713;;;:::o;8254:389::-;-1:-1:-1;;;;;8337:21:1;;8329:65;;;;-1:-1:-1;;;8329:65:1;;6066:2:84;8329:65:1;;;6048:21:84;6105:2;6085:18;;;6078:30;6144:33;6124:18;;;6117:61;6195:18;;8329:65:1;5864:355:84;8329:65:1;8481:6;8465:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8497:18:1;;:9;:18;;;;;;;;;;:28;;8519:6;;8497:9;:28;;8519:6;;8497:28;:::i;:::-;;;;-1:-1:-1;;8540:37:1;;6370:25:84;;;-1:-1:-1;;;;;8540:37:1;;;8557:1;;-1:-1:-1;;;;;;;;;;;8540:37:1;6358:2:84;6343:18;8540:37:1;;;;;;;359:91:45;;:::o;8963:576:1:-;-1:-1:-1;;;;;9046:21:1;;9038:67;;;;-1:-1:-1;;;9038:67:1;;4447:2:84;9038:67:1;;;4429:21:84;4486:2;4466:18;;;4459:30;4525:34;4505:18;;;4498:62;-1:-1:-1;;;4576:18:84;;;4569:31;4617:19;;9038:67:1;4245:397:84;9038:67:1;-1:-1:-1;;;;;9201:18:1;;9176:22;9201:18;;;;;;;;;;;9237:24;;;;9229:71;;;;-1:-1:-1;;;9229:71:1;;2825:2:84;9229:71:1;;;2807:21:84;2864:2;2844:18;;;2837:30;2903:34;2883:18;;;2876:62;-1:-1:-1;;;2954:18:84;;;2947:32;2996:19;;9229:71:1;2623:398:84;9229:71:1;-1:-1:-1;;;;;9334:18:1;;:9;:18;;;;;;;;;;9355:23;;;9334:44;;9398:12;:22;;9372:6;;9334:9;9398:22;;9372:6;;9398:22;:::i;:::-;;;;-1:-1:-1;;9436:37:1;;6370:25:84;;;9462:1:1;;-1:-1:-1;;;;;9436:37:1;;;-1:-1:-1;;;;;;;;;;;9436:37:1;6358:2:84;6343:18;9436:37:1;;;;;;;549:133:45;;;:::o;14:173:84:-;82:20;;-1:-1:-1;;;;;131:31:84;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:84:o;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:52;;;1126:1;1123;1116:12;1078:52;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;981:254:84:o;1240:180::-;1299:6;1352:2;1340:9;1331:7;1327:23;1323:32;1320:52;;;1368:1;1365;1358:12;1320:52;-1:-1:-1;1391:23:84;;1240:180;-1:-1:-1;1240:180:84:o;1617:597::-;1729:4;1758:2;1787;1776:9;1769:21;1819:6;1813:13;1862:6;1857:2;1846:9;1842:18;1835:34;1887:1;1897:140;1911:6;1908:1;1905:13;1897:140;;;2006:14;;;2002:23;;1996:30;1972:17;;;1991:2;1968:26;1961:66;1926:10;;1897:140;;;2055:6;2052:1;2049:13;2046:91;;;2125:1;2120:2;2111:6;2100:9;2096:22;2092:31;2085:42;2046:91;-1:-1:-1;2198:2:84;2177:15;-1:-1:-1;;2173:29:84;2158:45;;;;2205:2;2154:54;;1617:597;-1:-1:-1;;;1617:597:84:o;6595:128::-;6635:3;6666:1;6662:6;6659:1;6656:13;6653:39;;;6672:18;;:::i;:::-;-1:-1:-1;6708:9:84;;6595:128::o;6728:125::-;6768:4;6796:1;6793;6790:8;6787:34;;;6801:18;;:::i;:::-;-1:-1:-1;6838:9:84;;6728:125::o;6858:380::-;6937:1;6933:12;;;;6980;;;7001:61;;7055:4;7047:6;7043:17;7033:27;;7001:61;7108:2;7100:6;7097:14;7077:18;7074:38;7071:161;;;7154:10;7149:3;7145:20;7142:1;7135:31;7189:4;7186:1;7179:15;7217:4;7214:1;7207:15;7071:161;;6858:380;;;:::o;7243:127::-;7304:10;7299:3;7295:20;7292:1;7285:31;7335:4;7332:1;7325:15;7359:4;7356:1;7349:15"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "640400",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "allowance(address,address)": "infinite",
                "approve(address,uint256)": "24596",
                "approveInternal(address,address,uint256)": "infinite",
                "balanceOf(address)": "2716",
                "burn(address,uint256)": "infinite",
                "decimals()": "265",
                "decreaseAllowance(address,uint256)": "27130",
                "deposit(uint256)": "473",
                "increaseAllowance(address,uint256)": "27044",
                "mint(address,uint256)": "infinite",
                "name()": "infinite",
                "symbol()": "infinite",
                "totalSupply()": "2303",
                "transfer(address,uint256)": "infinite",
                "transferFrom(address,address,uint256)": "infinite",
                "transferInternal(address,address,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "approveInternal(address,address,uint256)": "56189cb4",
              "balanceOf(address)": "70a08231",
              "burn(address,uint256)": "9dc29fac",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "deposit(uint256)": "b6b55f25",
              "increaseAllowance(address,uint256)": "39509351",
              "mint(address,uint256)": "40c10f19",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "transferInternal(address,address,uint256)": "222f5be0"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_initialAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_initialBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approveInternal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferInternal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/ERC20ForTest.sol\":\"ERC20ForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `recipient` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(_msgSender(), recipient, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        _approve(_msgSender(), spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` and `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``sender``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        _transfer(sender, recipient, amount);\\n\\n        uint256 currentAllowance = _allowances[sender][_msgSender()];\\n        require(currentAllowance >= amount, \\\"ERC20: transfer amount exceeds allowance\\\");\\n        unchecked {\\n            _approve(sender, _msgSender(), currentAllowance - amount);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        uint256 currentAllowance = _allowances[_msgSender()][spender];\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(_msgSender(), spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `sender` to `recipient`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` cannot be the zero address.\\n     * - `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal virtual {\\n        require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(sender, recipient, amount);\\n\\n        uint256 senderBalance = _balances[sender];\\n        require(senderBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[sender] = senderBalance - amount;\\n        }\\n        _balances[recipient] += amount;\\n\\n        emit Transfer(sender, recipient, amount);\\n\\n        _afterTokenTransfer(sender, recipient, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        _balances[account] += amount;\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n        }\\n        _totalSupply -= amount;\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n}\\n\",\"keccak256\":\"0xb03df8481a954604ad0c9125680893b2e3f7ff770fe470e38b89ac61b84e8072\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\"},\"solidity/for-test/ERC20ForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/ERC20.sol';\\n\\ncontract ERC20ForTest is ERC20 {\\n  constructor(\\n    string memory _name,\\n    string memory _symbol,\\n    address _initialAccount,\\n    uint256 _initialBalance\\n  ) ERC20(_name, _symbol) {\\n    _mint(_initialAccount, _initialBalance);\\n  }\\n\\n  function mint(address _account, uint256 _amount) public {\\n    _mint(_account, _amount);\\n  }\\n\\n  function burn(address _account, uint256 _amount) public {\\n    _burn(_account, _amount);\\n  }\\n\\n  function transferInternal(\\n    address _from,\\n    address _to,\\n    uint256 _value\\n  ) public {\\n    _transfer(_from, _to, _value);\\n  }\\n\\n  function approveInternal(\\n    address _owner,\\n    address _spender,\\n    uint256 _value\\n  ) public {\\n    _approve(_owner, _spender, _value);\\n  }\\n\\n  function deposit(uint256 _amount) external payable {\\n    // Function added for compatibility with WETH\\n  }\\n}\\n\",\"keccak256\":\"0xf524eb8158f110d1d3f8f8935043f708629c279c1463f7cd82a3acfc9e92ef56\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 55,
                "contract": "solidity/for-test/ERC20ForTest.sol:ERC20ForTest",
                "label": "_balances",
                "offset": 0,
                "slot": "0",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 61,
                "contract": "solidity/for-test/ERC20ForTest.sol:ERC20ForTest",
                "label": "_allowances",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 63,
                "contract": "solidity/for-test/ERC20ForTest.sol:ERC20ForTest",
                "label": "_totalSupply",
                "offset": 0,
                "slot": "2",
                "type": "t_uint256"
              },
              {
                "astId": 65,
                "contract": "solidity/for-test/ERC20ForTest.sol:ERC20ForTest",
                "label": "_name",
                "offset": 0,
                "slot": "3",
                "type": "t_string_storage"
              },
              {
                "astId": 67,
                "contract": "solidity/for-test/ERC20ForTest.sol:ERC20ForTest",
                "label": "_symbol",
                "offset": 0,
                "slot": "4",
                "type": "t_string_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "solidity/for-test/IUniswapV3PoolForTest.sol": {
        "IUniswapV3PoolForTest": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "Burn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "name": "Collect",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "name": "CollectProtocol",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "paid0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "paid1",
                  "type": "uint256"
                }
              ],
              "name": "Flash",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint16",
                  "name": "observationCardinalityNextOld",
                  "type": "uint16"
                },
                {
                  "indexed": false,
                  "internalType": "uint16",
                  "name": "observationCardinalityNextNew",
                  "type": "uint16"
                }
              ],
              "name": "IncreaseObservationCardinalityNext",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "indexed": false,
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "Initialize",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "indexed": true,
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "Mint",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol0Old",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol1Old",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol0New",
                  "type": "uint8"
                },
                {
                  "indexed": false,
                  "internalType": "uint8",
                  "name": "feeProtocol1New",
                  "type": "uint8"
                }
              ],
              "name": "SetFeeProtocol",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "amount0",
                  "type": "int256"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "amount1",
                  "type": "int256"
                },
                {
                  "indexed": false,
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "indexed": false,
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "indexed": false,
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "Swap",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                }
              ],
              "name": "burn",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount0Requested",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1Requested",
                  "type": "uint128"
                }
              ],
              "name": "collect",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint128",
                  "name": "amount0Requested",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1Requested",
                  "type": "uint128"
                }
              ],
              "name": "collectProtocol",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "amount0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "amount1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint24",
                  "name": "",
                  "type": "uint24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "feeGrowthGlobal0X128",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "feeGrowthGlobal1X128",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "flash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint16",
                  "name": "observationCardinalityNext",
                  "type": "uint16"
                }
              ],
              "name": "increaseObservationCardinalityNext",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                }
              ],
              "name": "initialize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidity",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "maxLiquidityPerTick",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                },
                {
                  "internalType": "uint128",
                  "name": "amount",
                  "type": "uint128"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "observations",
              "outputs": [
                {
                  "internalType": "uint32",
                  "name": "blockTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "int56",
                  "name": "tickCumulative",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityCumulativeX128",
                  "type": "uint160"
                },
                {
                  "internalType": "bool",
                  "name": "initialized",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint32[]",
                  "name": "secondsAgos",
                  "type": "uint32[]"
                }
              ],
              "name": "observe",
              "outputs": [
                {
                  "internalType": "int56[]",
                  "name": "tickCumulatives",
                  "type": "int56[]"
                },
                {
                  "internalType": "uint160[]",
                  "name": "secondsPerLiquidityCumulativeX128s",
                  "type": "uint160[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "key",
                  "type": "bytes32"
                }
              ],
              "name": "positions",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "_liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside0LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside1LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "protocolFees",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "token0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "token1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint8",
                  "name": "feeProtocol0",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "feeProtocol1",
                  "type": "uint8"
                }
              ],
              "name": "setFeeProtocol",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "slot0",
              "outputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceX96",
                  "type": "uint160"
                },
                {
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                },
                {
                  "internalType": "uint16",
                  "name": "observationIndex",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "observationCardinality",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "observationCardinalityNext",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "feeProtocol",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "unlocked",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tickLower",
                  "type": "int24"
                },
                {
                  "internalType": "int24",
                  "name": "tickUpper",
                  "type": "int24"
                }
              ],
              "name": "snapshotCumulativesInside",
              "outputs": [
                {
                  "internalType": "int56",
                  "name": "tickCumulativeInside",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityInsideX128",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsInside",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "zeroForOne",
                  "type": "bool"
                },
                {
                  "internalType": "int256",
                  "name": "amountSpecified",
                  "type": "int256"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtPriceLimitX96",
                  "type": "uint160"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "swap",
              "outputs": [
                {
                  "internalType": "int256",
                  "name": "amount0",
                  "type": "int256"
                },
                {
                  "internalType": "int256",
                  "name": "amount1",
                  "type": "int256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int16",
                  "name": "wordPosition",
                  "type": "int16"
                }
              ],
              "name": "tickBitmap",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickSpacing",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "int24",
                  "name": "tick",
                  "type": "int24"
                }
              ],
              "name": "ticks",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidityGross",
                  "type": "uint128"
                },
                {
                  "internalType": "int128",
                  "name": "liquidityNet",
                  "type": "int128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthOutside0X128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthOutside1X128",
                  "type": "uint256"
                },
                {
                  "internalType": "int56",
                  "name": "tickCumulativeOutside",
                  "type": "int56"
                },
                {
                  "internalType": "uint160",
                  "name": "secondsPerLiquidityOutsideX128",
                  "type": "uint160"
                },
                {
                  "internalType": "uint32",
                  "name": "secondsOutside",
                  "type": "uint32"
                },
                {
                  "internalType": "bool",
                  "name": "initialized",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token0",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "params": {
                  "owner": "The account of the token owner",
                  "spender": "The account of the token spender"
                },
                "returns": {
                  "_0": "The current allowance granted by `owner` to `spender`"
                }
              },
              "approve(address,uint256)": {
                "params": {
                  "amount": "The amount of tokens allowed to be used by `spender`",
                  "spender": "The account which will be allowed to spend a given amount of the owners tokens"
                },
                "returns": {
                  "_0": "Returns true for a successful approval, false for unsuccessful"
                }
              },
              "balanceOf(address)": {
                "params": {
                  "account": "The account for which to look up the number of tokens it has, i.e. its balance"
                },
                "returns": {
                  "_0": "The number of tokens held by the account"
                }
              },
              "burn(int24,int24,uint128)": {
                "details": "Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0Fees must be collected separately via a call to #collect",
                "params": {
                  "amount": "How much liquidity to burn",
                  "tickLower": "The lower tick of the position for which to burn liquidity",
                  "tickUpper": "The upper tick of the position for which to burn liquidity"
                },
                "returns": {
                  "amount0": "The amount of token0 sent to the recipient",
                  "amount1": "The amount of token1 sent to the recipient"
                }
              },
              "collect(address,int24,int24,uint128,uint128)": {
                "details": "Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.",
                "params": {
                  "amount0Requested": "How much token0 should be withdrawn from the fees owed",
                  "amount1Requested": "How much token1 should be withdrawn from the fees owed",
                  "recipient": "The address which should receive the fees collected",
                  "tickLower": "The lower tick of the position for which to collect fees",
                  "tickUpper": "The upper tick of the position for which to collect fees"
                },
                "returns": {
                  "amount0": "The amount of fees collected in token0",
                  "amount1": "The amount of fees collected in token1"
                }
              },
              "collectProtocol(address,uint128,uint128)": {
                "params": {
                  "amount0Requested": "The maximum amount of token0 to send, can be 0 to collect fees in only token1",
                  "amount1Requested": "The maximum amount of token1 to send, can be 0 to collect fees in only token0",
                  "recipient": "The address to which collected protocol fees should be sent"
                },
                "returns": {
                  "amount0": "The protocol fee collected in token0",
                  "amount1": "The protocol fee collected in token1"
                }
              },
              "factory()": {
                "returns": {
                  "_0": "The contract address"
                }
              },
              "fee()": {
                "returns": {
                  "_0": "The fee"
                }
              },
              "feeGrowthGlobal0X128()": {
                "details": "This value can overflow the uint256"
              },
              "feeGrowthGlobal1X128()": {
                "details": "This value can overflow the uint256"
              },
              "flash(address,uint256,uint256,bytes)": {
                "details": "The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallbackCan be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling with 0 amount{0,1} and sending the donation amount(s) from the callback",
                "params": {
                  "amount0": "The amount of token0 to send",
                  "amount1": "The amount of token1 to send",
                  "data": "Any data to be passed through to the callback",
                  "recipient": "The address which will receive the token0 and token1 amounts"
                }
              },
              "increaseObservationCardinalityNext(uint16)": {
                "details": "This method is no-op if the pool already has an observationCardinalityNext greater than or equal to the input observationCardinalityNext.",
                "params": {
                  "observationCardinalityNext": "The desired minimum number of observations for the pool to store"
                }
              },
              "initialize(uint160)": {
                "details": "Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value",
                "params": {
                  "sqrtPriceX96": "the initial sqrt price of the pool as a Q64.96"
                }
              },
              "liquidity()": {
                "details": "This value has no relationship to the total liquidity across all ticks"
              },
              "maxLiquidityPerTick()": {
                "details": "This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool",
                "returns": {
                  "_0": "The max amount of liquidity per tick"
                }
              },
              "mint(address,int24,int24,uint128,bytes)": {
                "details": "The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends on tickLower, tickUpper, the amount of liquidity, and the current price.",
                "params": {
                  "amount": "The amount of liquidity to mint",
                  "data": "Any data that should be passed through to the callback",
                  "recipient": "The address for which the liquidity will be created",
                  "tickLower": "The lower tick of the position in which to add liquidity",
                  "tickUpper": "The upper tick of the position in which to add liquidity"
                },
                "returns": {
                  "amount0": "The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback",
                  "amount1": "The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback"
                }
              },
              "observations(uint256)": {
                "details": "You most likely want to use #observe() instead of this method to get an observation as of some amount of time ago, rather than at a specific index in the array.",
                "params": {
                  "index": "The element of the observations array to fetch"
                },
                "returns": {
                  "blockTimestamp": "The timestamp of the observation, Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, Returns initialized whether the observation has been initialized and the values are safe to use"
                }
              },
              "observe(uint32[])": {
                "details": "To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, you must call it with secondsAgos = [3600, 0].The time weighted average tick represents the geometric time weighted average price of the pool, in log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.",
                "params": {
                  "secondsAgos": "From how long ago each cumulative tick and liquidity value should be returned"
                },
                "returns": {
                  "secondsPerLiquidityCumulativeX128s": "Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block timestamp",
                  "tickCumulatives": "Cumulative tick values as of each `secondsAgos` from the current block timestamp"
                }
              },
              "positions(bytes32)": {
                "params": {
                  "key": "The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper"
                },
                "returns": {
                  "_liquidity": "The amount of liquidity in the position, Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke"
                }
              },
              "protocolFees()": {
                "details": "Protocol fees will never exceed uint128 max in either token"
              },
              "setFeeProtocol(uint8,uint8)": {
                "params": {
                  "feeProtocol0": "new protocol fee for token0 of the pool",
                  "feeProtocol1": "new protocol fee for token1 of the pool"
                }
              },
              "slot0()": {
                "returns": {
                  "sqrtPriceX96": "The current price of the pool as a sqrt(token1/token0) Q64.96 value tick The current tick of the pool, i.e. according to the last tick transition that was run. This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick boundary. observationIndex The index of the last oracle observation that was written, observationCardinality The current maximum number of observations stored in the pool, observationCardinalityNext The next maximum number of observations, to be updated when the observation. feeProtocol The protocol fee for both tokens of the pool. Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. unlocked Whether the pool is currently locked to reentrancy"
                }
              },
              "snapshotCumulativesInside(int24,int24)": {
                "details": "Snapshots must only be compared to other snapshots, taken over a period for which a position existed. I.e., snapshots cannot be compared if a position is not held for the entire period between when the first snapshot is taken and the second snapshot is taken.",
                "params": {
                  "tickLower": "The lower tick of the range",
                  "tickUpper": "The upper tick of the range"
                },
                "returns": {
                  "secondsInside": "The snapshot of seconds per liquidity for the range",
                  "secondsPerLiquidityInsideX128": "The snapshot of seconds per liquidity for the range",
                  "tickCumulativeInside": "The snapshot of the tick accumulator for the range"
                }
              },
              "swap(address,bool,int256,uint160,bytes)": {
                "details": "The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback",
                "params": {
                  "amountSpecified": "The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)",
                  "data": "Any data to be passed through to the callback",
                  "recipient": "The address to receive the output of the swap",
                  "sqrtPriceLimitX96": "The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap",
                  "zeroForOne": "The direction of the swap, true for token0 to token1, false for token1 to token0"
                },
                "returns": {
                  "amount0": "The delta of the balance of token0 of the pool, exact when negative, minimum when positive",
                  "amount1": "The delta of the balance of token1 of the pool, exact when negative, minimum when positive"
                }
              },
              "tickSpacing()": {
                "details": "Ticks can only be used at multiples of this value, minimum of 1 and always positive e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... This value is an int24 to avoid casting even though it is always positive.",
                "returns": {
                  "_0": "The tick spacing"
                }
              },
              "ticks(int24)": {
                "params": {
                  "tick": "The tick to look up"
                },
                "returns": {
                  "liquidityGross": "the total amount of position liquidity that uses the pool either as tick lower or tick upper, liquidityNet how much liquidity changes when the pool price crosses the tick, feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, secondsOutside the seconds spent on the other side of the tick from the current tick, initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. In addition, these values are only relative and must be used only in comparison to previous snapshots for a specific position."
                }
              },
              "token0()": {
                "returns": {
                  "_0": "The token contract address"
                }
              },
              "token1()": {
                "returns": {
                  "_0": "The token contract address"
                }
              },
              "transfer(address,uint256)": {
                "params": {
                  "amount": "The number of tokens to send from the sender to the recipient",
                  "recipient": "The account that will receive the amount transferred"
                },
                "returns": {
                  "_0": "Returns true for a successful transfer, false for an unsuccessful transfer"
                }
              },
              "transferFrom(address,address,uint256)": {
                "params": {
                  "amount": "The amount of the transfer",
                  "recipient": "The recipient of the transfer",
                  "sender": "The account from which the transfer will be initiated"
                },
                "returns": {
                  "_0": "Returns true for a successful transfer, false for unsuccessful"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "burn(int24,int24,uint128)": "a34123a7",
              "collect(address,int24,int24,uint128,uint128)": "4f1eb3d8",
              "collectProtocol(address,uint128,uint128)": "85b66729",
              "factory()": "c45a0155",
              "fee()": "ddca3f43",
              "feeGrowthGlobal0X128()": "f3058399",
              "feeGrowthGlobal1X128()": "46141319",
              "flash(address,uint256,uint256,bytes)": "490e6cbc",
              "increaseObservationCardinalityNext(uint16)": "32148f67",
              "initialize(uint160)": "f637731d",
              "liquidity()": "1a686502",
              "maxLiquidityPerTick()": "70cf754a",
              "mint(address,int24,int24,uint128,bytes)": "3c8a7d8d",
              "observations(uint256)": "252c09d7",
              "observe(uint32[])": "883bdbfd",
              "positions(bytes32)": "514ea4bf",
              "protocolFees()": "1ad8b03b",
              "setFeeProtocol(uint8,uint8)": "8206a4d1",
              "slot0()": "3850c7bd",
              "snapshotCumulativesInside(int24,int24)": "a38807f2",
              "swap(address,bool,int256,uint160,bytes)": "128acb08",
              "tickBitmap(int16)": "5339c296",
              "tickSpacing()": "d0c93a7c",
              "ticks(int24)": "f30dba93",
              "token0()": "0dfe1681",
              "token1()": "d21220a7",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"Collect\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"CollectProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid1\",\"type\":\"uint256\"}],\"name\":\"Flash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextOld\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextNew\",\"type\":\"uint16\"}],\"name\":\"IncreaseObservationCardinalityNext\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Initialize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0New\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1New\",\"type\":\"uint8\"}],\"name\":\"SetFeeProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collectProtocol\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal0X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal1X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"flash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"}],\"name\":\"increaseObservationCardinalityNext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidity\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLiquidityPerTick\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"observations\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"blockTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"int56\",\"name\":\"tickCumulative\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityCumulativeX128\",\"type\":\"uint160\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"secondsAgos\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56[]\",\"name\":\"tickCumulatives\",\"type\":\"int56[]\"},{\"internalType\":\"uint160[]\",\"name\":\"secondsPerLiquidityCumulativeX128s\",\"type\":\"uint160[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"positions\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"_liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFees\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"token0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"token1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"feeProtocol0\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol1\",\"type\":\"uint8\"}],\"name\":\"setFeeProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slot0\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint16\",\"name\":\"observationIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinality\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"snapshotCumulativesInside\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"tickCumulativeInside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityInsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsInside\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int16\",\"name\":\"wordPosition\",\"type\":\"int16\"}],\"name\":\"tickBitmap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"ticks\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside0X128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside1X128\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"tickCumulativeOutside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityOutsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsOutside\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"params\":{\"owner\":\"The account of the token owner\",\"spender\":\"The account of the token spender\"},\"returns\":{\"_0\":\"The current allowance granted by `owner` to `spender`\"}},\"approve(address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens allowed to be used by `spender`\",\"spender\":\"The account which will be allowed to spend a given amount of the owners tokens\"},\"returns\":{\"_0\":\"Returns true for a successful approval, false for unsuccessful\"}},\"balanceOf(address)\":{\"params\":{\"account\":\"The account for which to look up the number of tokens it has, i.e. its balance\"},\"returns\":{\"_0\":\"The number of tokens held by the account\"}},\"burn(int24,int24,uint128)\":{\"details\":\"Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0Fees must be collected separately via a call to #collect\",\"params\":{\"amount\":\"How much liquidity to burn\",\"tickLower\":\"The lower tick of the position for which to burn liquidity\",\"tickUpper\":\"The upper tick of the position for which to burn liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 sent to the recipient\",\"amount1\":\"The amount of token1 sent to the recipient\"}},\"collect(address,int24,int24,uint128,uint128)\":{\"details\":\"Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\",\"params\":{\"amount0Requested\":\"How much token0 should be withdrawn from the fees owed\",\"amount1Requested\":\"How much token1 should be withdrawn from the fees owed\",\"recipient\":\"The address which should receive the fees collected\",\"tickLower\":\"The lower tick of the position for which to collect fees\",\"tickUpper\":\"The upper tick of the position for which to collect fees\"},\"returns\":{\"amount0\":\"The amount of fees collected in token0\",\"amount1\":\"The amount of fees collected in token1\"}},\"collectProtocol(address,uint128,uint128)\":{\"params\":{\"amount0Requested\":\"The maximum amount of token0 to send, can be 0 to collect fees in only token1\",\"amount1Requested\":\"The maximum amount of token1 to send, can be 0 to collect fees in only token0\",\"recipient\":\"The address to which collected protocol fees should be sent\"},\"returns\":{\"amount0\":\"The protocol fee collected in token0\",\"amount1\":\"The protocol fee collected in token1\"}},\"factory()\":{\"returns\":{\"_0\":\"The contract address\"}},\"fee()\":{\"returns\":{\"_0\":\"The fee\"}},\"feeGrowthGlobal0X128()\":{\"details\":\"This value can overflow the uint256\"},\"feeGrowthGlobal1X128()\":{\"details\":\"This value can overflow the uint256\"},\"flash(address,uint256,uint256,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallbackCan be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling with 0 amount{0,1} and sending the donation amount(s) from the callback\",\"params\":{\"amount0\":\"The amount of token0 to send\",\"amount1\":\"The amount of token1 to send\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address which will receive the token0 and token1 amounts\"}},\"increaseObservationCardinalityNext(uint16)\":{\"details\":\"This method is no-op if the pool already has an observationCardinalityNext greater than or equal to the input observationCardinalityNext.\",\"params\":{\"observationCardinalityNext\":\"The desired minimum number of observations for the pool to store\"}},\"initialize(uint160)\":{\"details\":\"Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\",\"params\":{\"sqrtPriceX96\":\"the initial sqrt price of the pool as a Q64.96\"}},\"liquidity()\":{\"details\":\"This value has no relationship to the total liquidity across all ticks\"},\"maxLiquidityPerTick()\":{\"details\":\"This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\",\"returns\":{\"_0\":\"The max amount of liquidity per tick\"}},\"mint(address,int24,int24,uint128,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends on tickLower, tickUpper, the amount of liquidity, and the current price.\",\"params\":{\"amount\":\"The amount of liquidity to mint\",\"data\":\"Any data that should be passed through to the callback\",\"recipient\":\"The address for which the liquidity will be created\",\"tickLower\":\"The lower tick of the position in which to add liquidity\",\"tickUpper\":\"The upper tick of the position in which to add liquidity\"},\"returns\":{\"amount0\":\"The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\",\"amount1\":\"The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\"}},\"observations(uint256)\":{\"details\":\"You most likely want to use #observe() instead of this method to get an observation as of some amount of time ago, rather than at a specific index in the array.\",\"params\":{\"index\":\"The element of the observations array to fetch\"},\"returns\":{\"blockTimestamp\":\"The timestamp of the observation, Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, Returns initialized whether the observation has been initialized and the values are safe to use\"}},\"observe(uint32[])\":{\"details\":\"To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, you must call it with secondsAgos = [3600, 0].The time weighted average tick represents the geometric time weighted average price of the pool, in log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\",\"params\":{\"secondsAgos\":\"From how long ago each cumulative tick and liquidity value should be returned\"},\"returns\":{\"secondsPerLiquidityCumulativeX128s\":\"Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block timestamp\",\"tickCumulatives\":\"Cumulative tick values as of each `secondsAgos` from the current block timestamp\"}},\"positions(bytes32)\":{\"params\":{\"key\":\"The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\"},\"returns\":{\"_liquidity\":\"The amount of liquidity in the position, Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\"}},\"protocolFees()\":{\"details\":\"Protocol fees will never exceed uint128 max in either token\"},\"setFeeProtocol(uint8,uint8)\":{\"params\":{\"feeProtocol0\":\"new protocol fee for token0 of the pool\",\"feeProtocol1\":\"new protocol fee for token1 of the pool\"}},\"slot0()\":{\"returns\":{\"sqrtPriceX96\":\"The current price of the pool as a sqrt(token1/token0) Q64.96 value tick The current tick of the pool, i.e. according to the last tick transition that was run. This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick boundary. observationIndex The index of the last oracle observation that was written, observationCardinality The current maximum number of observations stored in the pool, observationCardinalityNext The next maximum number of observations, to be updated when the observation. feeProtocol The protocol fee for both tokens of the pool. Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. unlocked Whether the pool is currently locked to reentrancy\"}},\"snapshotCumulativesInside(int24,int24)\":{\"details\":\"Snapshots must only be compared to other snapshots, taken over a period for which a position existed. I.e., snapshots cannot be compared if a position is not held for the entire period between when the first snapshot is taken and the second snapshot is taken.\",\"params\":{\"tickLower\":\"The lower tick of the range\",\"tickUpper\":\"The upper tick of the range\"},\"returns\":{\"secondsInside\":\"The snapshot of seconds per liquidity for the range\",\"secondsPerLiquidityInsideX128\":\"The snapshot of seconds per liquidity for the range\",\"tickCumulativeInside\":\"The snapshot of the tick accumulator for the range\"}},\"swap(address,bool,int256,uint160,bytes)\":{\"details\":\"The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\",\"params\":{\"amountSpecified\":\"The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\",\"data\":\"Any data to be passed through to the callback\",\"recipient\":\"The address to receive the output of the swap\",\"sqrtPriceLimitX96\":\"The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this value after the swap. If one for zero, the price cannot be greater than this value after the swap\",\"zeroForOne\":\"The direction of the swap, true for token0 to token1, false for token1 to token0\"},\"returns\":{\"amount0\":\"The delta of the balance of token0 of the pool, exact when negative, minimum when positive\",\"amount1\":\"The delta of the balance of token1 of the pool, exact when negative, minimum when positive\"}},\"tickSpacing()\":{\"details\":\"Ticks can only be used at multiples of this value, minimum of 1 and always positive e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... This value is an int24 to avoid casting even though it is always positive.\",\"returns\":{\"_0\":\"The tick spacing\"}},\"ticks(int24)\":{\"params\":{\"tick\":\"The tick to look up\"},\"returns\":{\"liquidityGross\":\"the total amount of position liquidity that uses the pool either as tick lower or tick upper, liquidityNet how much liquidity changes when the pool price crosses the tick, feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, secondsOutside the seconds spent on the other side of the tick from the current tick, initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. In addition, these values are only relative and must be used only in comparison to previous snapshots for a specific position.\"}},\"token0()\":{\"returns\":{\"_0\":\"The token contract address\"}},\"token1()\":{\"returns\":{\"_0\":\"The token contract address\"}},\"transfer(address,uint256)\":{\"params\":{\"amount\":\"The number of tokens to send from the sender to the recipient\",\"recipient\":\"The account that will receive the amount transferred\"},\"returns\":{\"_0\":\"Returns true for a successful transfer, false for an unsuccessful transfer\"}},\"transferFrom(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the transfer\",\"recipient\":\"The recipient of the transfer\",\"sender\":\"The account from which the transfer will be initiated\"},\"returns\":{\"_0\":\"Returns true for a successful transfer, false for unsuccessful\"}}},\"version\":1},\"userdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"notice\":\"Event emitted when the approval amount for the spender of a given owner's tokens changes.\"},\"Burn(address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when a position's liquidity is removed\"},\"Collect(address,address,int24,int24,uint128,uint128)\":{\"notice\":\"Emitted when fees are collected by the owner of a position\"},\"CollectProtocol(address,address,uint128,uint128)\":{\"notice\":\"Emitted when the collected protocol fees are withdrawn by the factory owner\"},\"Flash(address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"Emitted by the pool for any flashes of token0/token1\"},\"IncreaseObservationCardinalityNext(uint16,uint16)\":{\"notice\":\"Emitted by the pool for increases to the number of observations that can be stored\"},\"Initialize(uint160,int24)\":{\"notice\":\"Emitted exactly once by a pool when #initialize is first called on the pool\"},\"Mint(address,address,int24,int24,uint128,uint256,uint256)\":{\"notice\":\"Emitted when liquidity is minted for a given position\"},\"SetFeeProtocol(uint8,uint8,uint8,uint8)\":{\"notice\":\"Emitted when the protocol fee is changed by the pool\"},\"Swap(address,address,int256,int256,uint160,uint128,int24)\":{\"notice\":\"Emitted by the pool for any swaps between token0 and token1\"},\"Transfer(address,address,uint256)\":{\"notice\":\"Event emitted when tokens are transferred from one address to another, either via `#transfer` or `#transferFrom`.\"}},\"kind\":\"user\",\"methods\":{\"allowance(address,address)\":{\"notice\":\"Returns the current allowance given to a spender by an owner\"},\"approve(address,uint256)\":{\"notice\":\"Sets the allowance of a spender from the `msg.sender` to the value `amount`\"},\"balanceOf(address)\":{\"notice\":\"Returns the balance of a token\"},\"burn(int24,int24,uint128)\":{\"notice\":\"Burn liquidity from the sender and account tokens owed for the liquidity to the position\"},\"collect(address,int24,int24,uint128,uint128)\":{\"notice\":\"Collects tokens owed to a position\"},\"collectProtocol(address,uint128,uint128)\":{\"notice\":\"Collect the protocol fee accrued to the pool\"},\"factory()\":{\"notice\":\"The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\"},\"fee()\":{\"notice\":\"The pool's fee in hundredths of a bip, i.e. 1e-6\"},\"feeGrowthGlobal0X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\"},\"feeGrowthGlobal1X128()\":{\"notice\":\"The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\"},\"flash(address,uint256,uint256,bytes)\":{\"notice\":\"Receive token0 and/or token1 and pay it back, plus a fee, in the callback\"},\"increaseObservationCardinalityNext(uint16)\":{\"notice\":\"Increase the maximum number of price and liquidity observations that this pool will store\"},\"initialize(uint160)\":{\"notice\":\"Sets the initial price for the pool\"},\"liquidity()\":{\"notice\":\"The currently in range liquidity available to the pool\"},\"maxLiquidityPerTick()\":{\"notice\":\"The maximum amount of position liquidity that can use any tick in the range\"},\"mint(address,int24,int24,uint128,bytes)\":{\"notice\":\"Adds liquidity for the given recipient/tickLower/tickUpper position\"},\"observations(uint256)\":{\"notice\":\"Returns data about a specific observation index\"},\"observe(uint32[])\":{\"notice\":\"Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\"},\"positions(bytes32)\":{\"notice\":\"Returns the information about a position by the position's key\"},\"protocolFees()\":{\"notice\":\"The amounts of token0 and token1 that are owed to the protocol\"},\"setFeeProtocol(uint8,uint8)\":{\"notice\":\"Set the denominator of the protocol's % share of the fees\"},\"slot0()\":{\"notice\":\"The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas when accessed externally.\"},\"snapshotCumulativesInside(int24,int24)\":{\"notice\":\"Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\"},\"swap(address,bool,int256,uint160,bytes)\":{\"notice\":\"Swap token0 for token1, or token1 for token0\"},\"tickBitmap(int16)\":{\"notice\":\"Returns 256 packed tick initialized boolean values. See TickBitmap for more information\"},\"tickSpacing()\":{\"notice\":\"The pool tick spacing\"},\"ticks(int24)\":{\"notice\":\"Look up information about a specific tick in the pool\"},\"token0()\":{\"notice\":\"The first of the two tokens of the pool, sorted by address\"},\"token1()\":{\"notice\":\"The second of the two tokens of the pool, sorted by address\"},\"transfer(address,uint256)\":{\"notice\":\"Transfers the amount of token from the `msg.sender` to the recipient\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Transfers `amount` tokens from `sender` to `recipient` up to the allowance given to the `msg.sender`\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/IUniswapV3PoolForTest.sol\":\"IUniswapV3PoolForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@uniswap/v3-core/contracts/interfaces/IERC20Minimal.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Minimal ERC20 interface for Uniswap\\n/// @notice Contains a subset of the full ERC20 interface that is used in Uniswap V3\\ninterface IERC20Minimal {\\n    /// @notice Returns the balance of a token\\n    /// @param account The account for which to look up the number of tokens it has, i.e. its balance\\n    /// @return The number of tokens held by the account\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /// @notice Transfers the amount of token from the `msg.sender` to the recipient\\n    /// @param recipient The account that will receive the amount transferred\\n    /// @param amount The number of tokens to send from the sender to the recipient\\n    /// @return Returns true for a successful transfer, false for an unsuccessful transfer\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /// @notice Returns the current allowance given to a spender by an owner\\n    /// @param owner The account of the token owner\\n    /// @param spender The account of the token spender\\n    /// @return The current allowance granted by `owner` to `spender`\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /// @notice Sets the allowance of a spender from the `msg.sender` to the value `amount`\\n    /// @param spender The account which will be allowed to spend a given amount of the owners tokens\\n    /// @param amount The amount of tokens allowed to be used by `spender`\\n    /// @return Returns true for a successful approval, false for unsuccessful\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /// @notice Transfers `amount` tokens from `sender` to `recipient` up to the allowance given to the `msg.sender`\\n    /// @param sender The account from which the transfer will be initiated\\n    /// @param recipient The recipient of the transfer\\n    /// @param amount The amount of the transfer\\n    /// @return Returns true for a successful transfer, false for unsuccessful\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /// @notice Event emitted when tokens are transferred from one address to another, either via `#transfer` or `#transferFrom`.\\n    /// @param from The account from which the tokens were sent, i.e. the balance decreased\\n    /// @param to The account to which the tokens were sent, i.e. the balance increased\\n    /// @param value The amount of tokens that were transferred\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /// @notice Event emitted when the approval amount for the spender of a given owner's tokens changes.\\n    /// @param owner The account that approved spending of its tokens\\n    /// @param spender The account for which the spending allowance was modified\\n    /// @param value The new allowance from the owner to the spender\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xbbb4fbd3cf2221bba3218d27871f61f2852ff296cbe81946b935481ff181f735\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\nimport './pool/IUniswapV3PoolImmutables.sol';\\nimport './pool/IUniswapV3PoolState.sol';\\nimport './pool/IUniswapV3PoolDerivedState.sol';\\nimport './pool/IUniswapV3PoolActions.sol';\\nimport './pool/IUniswapV3PoolOwnerActions.sol';\\nimport './pool/IUniswapV3PoolEvents.sol';\\n\\n/// @title The interface for a Uniswap V3 Pool\\n/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform\\n/// to the ERC20 specification\\n/// @dev The pool interface is broken up into many smaller pieces\\ninterface IUniswapV3Pool is\\n    IUniswapV3PoolImmutables,\\n    IUniswapV3PoolState,\\n    IUniswapV3PoolDerivedState,\\n    IUniswapV3PoolActions,\\n    IUniswapV3PoolOwnerActions,\\n    IUniswapV3PoolEvents\\n{\\n\\n}\\n\",\"keccak256\":\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissionless pool actions\\n/// @notice Contains pool methods that can be called by anyone\\ninterface IUniswapV3PoolActions {\\n    /// @notice Sets the initial price for the pool\\n    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\\n    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96\\n    function initialize(uint160 sqrtPriceX96) external;\\n\\n    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback\\n    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\\n    /// on tickLower, tickUpper, the amount of liquidity, and the current price.\\n    /// @param recipient The address for which the liquidity will be created\\n    /// @param tickLower The lower tick of the position in which to add liquidity\\n    /// @param tickUpper The upper tick of the position in which to add liquidity\\n    /// @param amount The amount of liquidity to mint\\n    /// @param data Any data that should be passed through to the callback\\n    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    function mint(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount,\\n        bytes calldata data\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Collects tokens owed to a position\\n    /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\\n    /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\\n    /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\\n    /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\\n    /// @param recipient The address which should receive the fees collected\\n    /// @param tickLower The lower tick of the position for which to collect fees\\n    /// @param tickUpper The upper tick of the position for which to collect fees\\n    /// @param amount0Requested How much token0 should be withdrawn from the fees owed\\n    /// @param amount1Requested How much token1 should be withdrawn from the fees owed\\n    /// @return amount0 The amount of fees collected in token0\\n    /// @return amount1 The amount of fees collected in token1\\n    function collect(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n\\n    /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\\n    /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\\n    /// @dev Fees must be collected separately via a call to #collect\\n    /// @param tickLower The lower tick of the position for which to burn liquidity\\n    /// @param tickUpper The upper tick of the position for which to burn liquidity\\n    /// @param amount How much liquidity to burn\\n    /// @return amount0 The amount of token0 sent to the recipient\\n    /// @return amount1 The amount of token1 sent to the recipient\\n    function burn(\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Swap token0 for token1, or token1 for token0\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\\n    /// @param recipient The address to receive the output of the swap\\n    /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\\n    /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\\n    /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\\n    /// value after the swap. If one for zero, the price cannot be greater than this value after the swap\\n    /// @param data Any data to be passed through to the callback\\n    /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\\n    /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive\\n    function swap(\\n        address recipient,\\n        bool zeroForOne,\\n        int256 amountSpecified,\\n        uint160 sqrtPriceLimitX96,\\n        bytes calldata data\\n    ) external returns (int256 amount0, int256 amount1);\\n\\n    /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback\\n    /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\\n    /// with 0 amount{0,1} and sending the donation amount(s) from the callback\\n    /// @param recipient The address which will receive the token0 and token1 amounts\\n    /// @param amount0 The amount of token0 to send\\n    /// @param amount1 The amount of token1 to send\\n    /// @param data Any data to be passed through to the callback\\n    function flash(\\n        address recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        bytes calldata data\\n    ) external;\\n\\n    /// @notice Increase the maximum number of price and liquidity observations that this pool will store\\n    /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\\n    /// the input observationCardinalityNext.\\n    /// @param observationCardinalityNext The desired minimum number of observations for the pool to store\\n    function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;\\n}\\n\",\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that is not stored\\n/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the\\n/// blockchain. The functions here may have variable gas costs.\\ninterface IUniswapV3PoolDerivedState {\\n    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\\n    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\\n    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\\n    /// you must call it with secondsAgos = [3600, 0].\\n    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\\n    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\\n    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\\n    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\\n    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\\n    /// timestamp\\n    function observe(uint32[] calldata secondsAgos)\\n        external\\n        view\\n        returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\\n\\n    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\\n    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\\n    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\\n    /// snapshot is taken and the second snapshot is taken.\\n    /// @param tickLower The lower tick of the range\\n    /// @param tickUpper The upper tick of the range\\n    /// @return tickCumulativeInside The snapshot of the tick accumulator for the range\\n    /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\\n    /// @return secondsInside The snapshot of seconds per liquidity for the range\\n    function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)\\n        external\\n        view\\n        returns (\\n            int56 tickCumulativeInside,\\n            uint160 secondsPerLiquidityInsideX128,\\n            uint32 secondsInside\\n        );\\n}\\n\",\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Events emitted by a pool\\n/// @notice Contains all events emitted by the pool\\ninterface IUniswapV3PoolEvents {\\n    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool\\n    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\\n    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\\n    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\\n    event Initialize(uint160 sqrtPriceX96, int24 tick);\\n\\n    /// @notice Emitted when liquidity is minted for a given position\\n    /// @param sender The address that minted the liquidity\\n    /// @param owner The owner of the position and recipient of any minted liquidity\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity minted to the position range\\n    /// @param amount0 How much token0 was required for the minted liquidity\\n    /// @param amount1 How much token1 was required for the minted liquidity\\n    event Mint(\\n        address sender,\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted when fees are collected by the owner of a position\\n    /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\\n    /// @param owner The owner of the position for which fees are collected\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount0 The amount of token0 fees collected\\n    /// @param amount1 The amount of token1 fees collected\\n    event Collect(\\n        address indexed owner,\\n        address recipient,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount0,\\n        uint128 amount1\\n    );\\n\\n    /// @notice Emitted when a position's liquidity is removed\\n    /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\\n    /// @param owner The owner of the position for which liquidity is removed\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity to remove\\n    /// @param amount0 The amount of token0 withdrawn\\n    /// @param amount1 The amount of token1 withdrawn\\n    event Burn(\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted by the pool for any swaps between token0 and token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the output of the swap\\n    /// @param amount0 The delta of the token0 balance of the pool\\n    /// @param amount1 The delta of the token1 balance of the pool\\n    /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\\n    /// @param liquidity The liquidity of the pool after the swap\\n    /// @param tick The log base 1.0001 of price of the pool after the swap\\n    event Swap(\\n        address indexed sender,\\n        address indexed recipient,\\n        int256 amount0,\\n        int256 amount1,\\n        uint160 sqrtPriceX96,\\n        uint128 liquidity,\\n        int24 tick\\n    );\\n\\n    /// @notice Emitted by the pool for any flashes of token0/token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the tokens from flash\\n    /// @param amount0 The amount of token0 that was flashed\\n    /// @param amount1 The amount of token1 that was flashed\\n    /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\\n    /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\\n    event Flash(\\n        address indexed sender,\\n        address indexed recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        uint256 paid0,\\n        uint256 paid1\\n    );\\n\\n    /// @notice Emitted by the pool for increases to the number of observations that can be stored\\n    /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\\n    /// just before a mint/swap/burn.\\n    /// @param observationCardinalityNextOld The previous value of the next observation cardinality\\n    /// @param observationCardinalityNextNew The updated value of the next observation cardinality\\n    event IncreaseObservationCardinalityNext(\\n        uint16 observationCardinalityNextOld,\\n        uint16 observationCardinalityNextNew\\n    );\\n\\n    /// @notice Emitted when the protocol fee is changed by the pool\\n    /// @param feeProtocol0Old The previous value of the token0 protocol fee\\n    /// @param feeProtocol1Old The previous value of the token1 protocol fee\\n    /// @param feeProtocol0New The updated value of the token0 protocol fee\\n    /// @param feeProtocol1New The updated value of the token1 protocol fee\\n    event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);\\n\\n    /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner\\n    /// @param sender The address that collects the protocol fees\\n    /// @param recipient The address that receives the collected protocol fees\\n    /// @param amount0 The amount of token0 protocol fees that is withdrawn\\n    /// @param amount0 The amount of token1 protocol fees that is withdrawn\\n    event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that never changes\\n/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values\\ninterface IUniswapV3PoolImmutables {\\n    /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\\n    /// @return The contract address\\n    function factory() external view returns (address);\\n\\n    /// @notice The first of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token0() external view returns (address);\\n\\n    /// @notice The second of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token1() external view returns (address);\\n\\n    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6\\n    /// @return The fee\\n    function fee() external view returns (uint24);\\n\\n    /// @notice The pool tick spacing\\n    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\\n    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\\n    /// This value is an int24 to avoid casting even though it is always positive.\\n    /// @return The tick spacing\\n    function tickSpacing() external view returns (int24);\\n\\n    /// @notice The maximum amount of position liquidity that can use any tick in the range\\n    /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\\n    /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\\n    /// @return The max amount of liquidity per tick\\n    function maxLiquidityPerTick() external view returns (uint128);\\n}\\n\",\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissioned pool actions\\n/// @notice Contains pool methods that may only be called by the factory owner\\ninterface IUniswapV3PoolOwnerActions {\\n    /// @notice Set the denominator of the protocol's % share of the fees\\n    /// @param feeProtocol0 new protocol fee for token0 of the pool\\n    /// @param feeProtocol1 new protocol fee for token1 of the pool\\n    function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;\\n\\n    /// @notice Collect the protocol fee accrued to the pool\\n    /// @param recipient The address to which collected protocol fees should be sent\\n    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\\n    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\\n    /// @return amount0 The protocol fee collected in token0\\n    /// @return amount1 The protocol fee collected in token1\\n    function collectProtocol(\\n        address recipient,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that can change\\n/// @notice These methods compose the pool's state, and can change with any frequency including multiple times\\n/// per transaction\\ninterface IUniswapV3PoolState {\\n    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\\n    /// when accessed externally.\\n    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\\n    /// tick The current tick of the pool, i.e. according to the last tick transition that was run.\\n    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\\n    /// boundary.\\n    /// observationIndex The index of the last oracle observation that was written,\\n    /// observationCardinality The current maximum number of observations stored in the pool,\\n    /// observationCardinalityNext The next maximum number of observations, to be updated when the observation.\\n    /// feeProtocol The protocol fee for both tokens of the pool.\\n    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\\n    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\\n    /// unlocked Whether the pool is currently locked to reentrancy\\n    function slot0()\\n        external\\n        view\\n        returns (\\n            uint160 sqrtPriceX96,\\n            int24 tick,\\n            uint16 observationIndex,\\n            uint16 observationCardinality,\\n            uint16 observationCardinalityNext,\\n            uint8 feeProtocol,\\n            bool unlocked\\n        );\\n\\n    /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal0X128() external view returns (uint256);\\n\\n    /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal1X128() external view returns (uint256);\\n\\n    /// @notice The amounts of token0 and token1 that are owed to the protocol\\n    /// @dev Protocol fees will never exceed uint128 max in either token\\n    function protocolFees() external view returns (uint128 token0, uint128 token1);\\n\\n    /// @notice The currently in range liquidity available to the pool\\n    /// @dev This value has no relationship to the total liquidity across all ticks\\n    function liquidity() external view returns (uint128);\\n\\n    /// @notice Look up information about a specific tick in the pool\\n    /// @param tick The tick to look up\\n    /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\\n    /// tick upper,\\n    /// liquidityNet how much liquidity changes when the pool price crosses the tick,\\n    /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\\n    /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\\n    /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\\n    /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\\n    /// secondsOutside the seconds spent on the other side of the tick from the current tick,\\n    /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\\n    /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\\n    /// In addition, these values are only relative and must be used only in comparison to previous snapshots for\\n    /// a specific position.\\n    function ticks(int24 tick)\\n        external\\n        view\\n        returns (\\n            uint128 liquidityGross,\\n            int128 liquidityNet,\\n            uint256 feeGrowthOutside0X128,\\n            uint256 feeGrowthOutside1X128,\\n            int56 tickCumulativeOutside,\\n            uint160 secondsPerLiquidityOutsideX128,\\n            uint32 secondsOutside,\\n            bool initialized\\n        );\\n\\n    /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information\\n    function tickBitmap(int16 wordPosition) external view returns (uint256);\\n\\n    /// @notice Returns the information about a position by the position's key\\n    /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\\n    /// @return _liquidity The amount of liquidity in the position,\\n    /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\\n    /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\\n    /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\\n    /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\\n    function positions(bytes32 key)\\n        external\\n        view\\n        returns (\\n            uint128 _liquidity,\\n            uint256 feeGrowthInside0LastX128,\\n            uint256 feeGrowthInside1LastX128,\\n            uint128 tokensOwed0,\\n            uint128 tokensOwed1\\n        );\\n\\n    /// @notice Returns data about a specific observation index\\n    /// @param index The element of the observations array to fetch\\n    /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\\n    /// ago, rather than at a specific index in the array.\\n    /// @return blockTimestamp The timestamp of the observation,\\n    /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\\n    /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\\n    /// Returns initialized whether the observation has been initialized and the values are safe to use\\n    function observations(uint256 index)\\n        external\\n        view\\n        returns (\\n            uint32 blockTimestamp,\\n            int56 tickCumulative,\\n            uint160 secondsPerLiquidityCumulativeX128,\\n            bool initialized\\n        );\\n}\\n\",\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\"},\"solidity/for-test/IUniswapV3PoolForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@uniswap/v3-core/contracts/interfaces/IERC20Minimal.sol';\\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IUniswapV3PoolForTest is IERC20Minimal, IUniswapV3Pool {\\n\\n}\\n\",\"keccak256\":\"0x77b5a3b1d3489c0a2fc0b5dd8577d393b25575bd6d0dc39c5216bf59094687b3\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "events": {
              "Approval(address,address,uint256)": {
                "notice": "Event emitted when the approval amount for the spender of a given owner's tokens changes."
              },
              "Burn(address,int24,int24,uint128,uint256,uint256)": {
                "notice": "Emitted when a position's liquidity is removed"
              },
              "Collect(address,address,int24,int24,uint128,uint128)": {
                "notice": "Emitted when fees are collected by the owner of a position"
              },
              "CollectProtocol(address,address,uint128,uint128)": {
                "notice": "Emitted when the collected protocol fees are withdrawn by the factory owner"
              },
              "Flash(address,address,uint256,uint256,uint256,uint256)": {
                "notice": "Emitted by the pool for any flashes of token0/token1"
              },
              "IncreaseObservationCardinalityNext(uint16,uint16)": {
                "notice": "Emitted by the pool for increases to the number of observations that can be stored"
              },
              "Initialize(uint160,int24)": {
                "notice": "Emitted exactly once by a pool when #initialize is first called on the pool"
              },
              "Mint(address,address,int24,int24,uint128,uint256,uint256)": {
                "notice": "Emitted when liquidity is minted for a given position"
              },
              "SetFeeProtocol(uint8,uint8,uint8,uint8)": {
                "notice": "Emitted when the protocol fee is changed by the pool"
              },
              "Swap(address,address,int256,int256,uint160,uint128,int24)": {
                "notice": "Emitted by the pool for any swaps between token0 and token1"
              },
              "Transfer(address,address,uint256)": {
                "notice": "Event emitted when tokens are transferred from one address to another, either via `#transfer` or `#transferFrom`."
              }
            },
            "kind": "user",
            "methods": {
              "allowance(address,address)": {
                "notice": "Returns the current allowance given to a spender by an owner"
              },
              "approve(address,uint256)": {
                "notice": "Sets the allowance of a spender from the `msg.sender` to the value `amount`"
              },
              "balanceOf(address)": {
                "notice": "Returns the balance of a token"
              },
              "burn(int24,int24,uint128)": {
                "notice": "Burn liquidity from the sender and account tokens owed for the liquidity to the position"
              },
              "collect(address,int24,int24,uint128,uint128)": {
                "notice": "Collects tokens owed to a position"
              },
              "collectProtocol(address,uint128,uint128)": {
                "notice": "Collect the protocol fee accrued to the pool"
              },
              "factory()": {
                "notice": "The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface"
              },
              "fee()": {
                "notice": "The pool's fee in hundredths of a bip, i.e. 1e-6"
              },
              "feeGrowthGlobal0X128()": {
                "notice": "The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool"
              },
              "feeGrowthGlobal1X128()": {
                "notice": "The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool"
              },
              "flash(address,uint256,uint256,bytes)": {
                "notice": "Receive token0 and/or token1 and pay it back, plus a fee, in the callback"
              },
              "increaseObservationCardinalityNext(uint16)": {
                "notice": "Increase the maximum number of price and liquidity observations that this pool will store"
              },
              "initialize(uint160)": {
                "notice": "Sets the initial price for the pool"
              },
              "liquidity()": {
                "notice": "The currently in range liquidity available to the pool"
              },
              "maxLiquidityPerTick()": {
                "notice": "The maximum amount of position liquidity that can use any tick in the range"
              },
              "mint(address,int24,int24,uint128,bytes)": {
                "notice": "Adds liquidity for the given recipient/tickLower/tickUpper position"
              },
              "observations(uint256)": {
                "notice": "Returns data about a specific observation index"
              },
              "observe(uint32[])": {
                "notice": "Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp"
              },
              "positions(bytes32)": {
                "notice": "Returns the information about a position by the position's key"
              },
              "protocolFees()": {
                "notice": "The amounts of token0 and token1 that are owed to the protocol"
              },
              "setFeeProtocol(uint8,uint8)": {
                "notice": "Set the denominator of the protocol's % share of the fees"
              },
              "slot0()": {
                "notice": "The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas when accessed externally."
              },
              "snapshotCumulativesInside(int24,int24)": {
                "notice": "Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range"
              },
              "swap(address,bool,int256,uint160,bytes)": {
                "notice": "Swap token0 for token1, or token1 for token0"
              },
              "tickBitmap(int16)": {
                "notice": "Returns 256 packed tick initialized boolean values. See TickBitmap for more information"
              },
              "tickSpacing()": {
                "notice": "The pool tick spacing"
              },
              "ticks(int24)": {
                "notice": "Look up information about a specific tick in the pool"
              },
              "token0()": {
                "notice": "The first of the two tokens of the pool, sorted by address"
              },
              "token1()": {
                "notice": "The second of the two tokens of the pool, sorted by address"
              },
              "transfer(address,uint256)": {
                "notice": "Transfers the amount of token from the `msg.sender` to the recipient"
              },
              "transferFrom(address,address,uint256)": {
                "notice": "Transfers `amount` tokens from `sender` to `recipient` up to the allowance given to the `msg.sender`"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/JobForTest.sol": {
        "JobForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3r",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "InvalidKeeper",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "keep3r",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "nonce",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "work",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_factor",
                  "type": "uint256"
                }
              ],
              "name": "workHard",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_9712": {
                  "entryPoint": null,
                  "id": 9712,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 84,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:306:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "95:209:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "141:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "150:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "153:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "143:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "143:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "143:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "116:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "112:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "112:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "137:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "108:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "108:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "105:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "166:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "185:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "179:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "179:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "170:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "258:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "267:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "270:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "260:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "260:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "260:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "217:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "228:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "243:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "248:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "239:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "239:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "252:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "235:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "235:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "224:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "224:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "214:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "214:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "207:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "207:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "204:70:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "283:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "293:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "283:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "61:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "72:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "84:6:84",
                            "type": ""
                          }
                        ],
                        "src": "14:290:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b5060405161049938038061049983398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610406806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063322e9f04146100515780633bb39c331461005b578063634c7bb51461006e578063affed0e014610097575b600080fd5b6100596100ae565b005b610059610069366004610353565b6101e7565b600054610081906001600160a01b031681565b60405161008e919061036c565b60405180910390f35b6100a060015481565b60405190815260200161008e565b6000546040516335d2155560e11b81526001600160a01b0390911690636ba42aaa906100de90339060040161036c565b602060405180830381600087803b1580156100f857600080fd5b505af115801561010c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610130919061032a565b61014d57604051637671ff4960e11b815260040160405180910390fd5b60005b6103e8811015610182576001805490600061016a8361039f565b9190505550808061017a9061039f565b915050610150565b506000546040516317fbade560e21b81526001600160a01b0390911690635feeb794906101b390339060040161036c565b600060405180830381600087803b1580156101cd57600080fd5b505af11580156101e1573d6000803e3d6000fd5b50505050565b6000546040516335d2155560e11b81526001600160a01b0390911690636ba42aaa9061021790339060040161036c565b602060405180830381600087803b15801561023157600080fd5b505af1158015610245573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610269919061032a565b61028657604051637671ff4960e11b815260040160405180910390fd5b60005b610295826103e8610380565b8110156102c457600180549060006102ac8361039f565b919050555080806102bc9061039f565b915050610289565b506000546040516317fbade560e21b81526001600160a01b0390911690635feeb794906102f590339060040161036c565b600060405180830381600087803b15801561030f57600080fd5b505af1158015610323573d6000803e3d6000fd5b5050505050565b60006020828403121561033c57600080fd5b8151801515811461034c57600080fd5b9392505050565b60006020828403121561036557600080fd5b5035919050565b6001600160a01b0391909116815260200190565b600081600019048311821515161561039a5761039a6103ba565b500290565b60006000198214156103b3576103b36103ba565b5060010190565b634e487b7160e01b600052601160045260246000fdfea26469706673582212208bf08bb618db158f5b04aeb240aaa866b5b603abef8be40595b29d6d0b35ce6a64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x499 CODESIZE SUB DUP1 PUSH2 0x499 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x54 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x84 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x406 DUP1 PUSH2 0x93 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x322E9F04 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x3BB39C33 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x634C7BB5 EQ PUSH2 0x6E JUMPI DUP1 PUSH4 0xAFFED0E0 EQ PUSH2 0x97 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0xAE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x59 PUSH2 0x69 CALLDATASIZE PUSH1 0x4 PUSH2 0x353 JUMP JUMPDEST PUSH2 0x1E7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x81 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8E SWAP2 SWAP1 PUSH2 0x36C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA0 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x35D21555 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6BA42AAA SWAP1 PUSH2 0xDE SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x36C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x32A JUMP JUMPDEST PUSH2 0x14D JUMPI PUSH1 0x40 MLOAD PUSH4 0x7671FF49 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x3E8 DUP2 LT ISZERO PUSH2 0x182 JUMPI PUSH1 0x1 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x16A DUP4 PUSH2 0x39F JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP DUP1 DUP1 PUSH2 0x17A SWAP1 PUSH2 0x39F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x150 JUMP JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x17FBADE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FEEB794 SWAP1 PUSH2 0x1B3 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x36C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x35D21555 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6BA42AAA SWAP1 PUSH2 0x217 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x36C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x245 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x32A JUMP JUMPDEST PUSH2 0x286 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7671FF49 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x295 DUP3 PUSH2 0x3E8 PUSH2 0x380 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x2C4 JUMPI PUSH1 0x1 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x2AC DUP4 PUSH2 0x39F JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP DUP1 DUP1 PUSH2 0x2BC SWAP1 PUSH2 0x39F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x289 JUMP JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x17FBADE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FEEB794 SWAP1 PUSH2 0x2F5 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x36C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x323 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x365 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x39A JUMPI PUSH2 0x39A PUSH2 0x3BA JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x3B3 JUMPI PUSH2 0x3B3 PUSH2 0x3BA JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP12 CREATE DUP12 0xB6 XOR 0xDB ISZERO DUP16 JUMPDEST DIV 0xAE 0xB2 BLOCKHASH 0xAA 0xA8 PUSH7 0xB5B603ABEF8BE4 SDIV SWAP6 0xB2 SWAP14 PUSH14 0xB35CE6A64736F6C634300080700 CALLER ",
              "sourceMap": "102:596:47:-:0;;;201:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;236:6;:16;;-1:-1:-1;;;;;;236:16:47;-1:-1:-1;;;;;236:16:47;;;;;;;;;;102:596;;14:290:84;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:84;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:84:o;:::-;102:596:47;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@keep3r_9700": {
                  "entryPoint": null,
                  "id": 9700,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@nonce_9702": {
                  "entryPoint": null,
                  "id": 9702,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@workHard_9792": {
                  "entryPoint": 487,
                  "id": 9792,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@work_9750": {
                  "entryPoint": 174,
                  "id": 9750,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 810,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 851,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 876,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 896,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "increment_t_uint256": {
                  "entryPoint": 927,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 954,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1313:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "92:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "138:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "147:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "150:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "140:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "140:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "140:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "113:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "122:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "109:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "109:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "134:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "105:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "105:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "102:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "163:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "182:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "176:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "176:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "167:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "245:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "254:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "257:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "247:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "247:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "247:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "214:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "235:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "228:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "228:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "221:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "221:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "211:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "211:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "204:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "204:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "201:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "270:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "280:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "270:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "58:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "69:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "81:6:84",
                            "type": ""
                          }
                        ],
                        "src": "14:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "366:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "412:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "421:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "424:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "414:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "414:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "414:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "387:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "396:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "383:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "383:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "408:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "379:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "379:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "376:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "437:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "460:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "447:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "447:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "437:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "332:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "343:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "355:6:84",
                            "type": ""
                          }
                        ],
                        "src": "296:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "582:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "592:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "604:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "615:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "600:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "600:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "592:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "634:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "649:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "665:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "670:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "661:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "661:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "674:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "657:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "657:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "645:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "645:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "627:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "627:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "627:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "551:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "562:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "573:4:84",
                            "type": ""
                          }
                        ],
                        "src": "481:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "790:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "800:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "812:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "823:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "808:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "808:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "800:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "842:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "853:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "835:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "835:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "835:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "759:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "770:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "781:4:84",
                            "type": ""
                          }
                        ],
                        "src": "689:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "923:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "982:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "984:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "984:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "984:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "954:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "947:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "947:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "940:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "940:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "962:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "973:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "969:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "969:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "977:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "965:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "965:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "959:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "959:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "936:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "936:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "933:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1013:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "1028:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "1031:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "1024:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1024:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "1013:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "902:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "905:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "911:7:84",
                            "type": ""
                          }
                        ],
                        "src": "871:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1091:88:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1122:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "1124:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1124:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1124:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1107:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1118:1:84",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "1114:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1114:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "1104:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1104:17:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1101:43:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1153:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1164:5:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1171:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1160:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1160:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "1153:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "increment_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1073:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "1083:3:84",
                            "type": ""
                          }
                        ],
                        "src": "1044:135:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1216:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1233:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1240:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1245:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1236:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1236:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1226:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1226:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1226:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1273:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1276:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1266:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1266:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1266:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1297:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1300:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1290:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1290:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1290:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "1184:127:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c8063322e9f04146100515780633bb39c331461005b578063634c7bb51461006e578063affed0e014610097575b600080fd5b6100596100ae565b005b610059610069366004610353565b6101e7565b600054610081906001600160a01b031681565b60405161008e919061036c565b60405180910390f35b6100a060015481565b60405190815260200161008e565b6000546040516335d2155560e11b81526001600160a01b0390911690636ba42aaa906100de90339060040161036c565b602060405180830381600087803b1580156100f857600080fd5b505af115801561010c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610130919061032a565b61014d57604051637671ff4960e11b815260040160405180910390fd5b60005b6103e8811015610182576001805490600061016a8361039f565b9190505550808061017a9061039f565b915050610150565b506000546040516317fbade560e21b81526001600160a01b0390911690635feeb794906101b390339060040161036c565b600060405180830381600087803b1580156101cd57600080fd5b505af11580156101e1573d6000803e3d6000fd5b50505050565b6000546040516335d2155560e11b81526001600160a01b0390911690636ba42aaa9061021790339060040161036c565b602060405180830381600087803b15801561023157600080fd5b505af1158015610245573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610269919061032a565b61028657604051637671ff4960e11b815260040160405180910390fd5b60005b610295826103e8610380565b8110156102c457600180549060006102ac8361039f565b919050555080806102bc9061039f565b915050610289565b506000546040516317fbade560e21b81526001600160a01b0390911690635feeb794906102f590339060040161036c565b600060405180830381600087803b15801561030f57600080fd5b505af1158015610323573d6000803e3d6000fd5b5050505050565b60006020828403121561033c57600080fd5b8151801515811461034c57600080fd5b9392505050565b60006020828403121561036557600080fd5b5035919050565b6001600160a01b0391909116815260200190565b600081600019048311821515161561039a5761039a6103ba565b500290565b60006000198214156103b3576103b36103ba565b5060010190565b634e487b7160e01b600052601160045260246000fdfea26469706673582212208bf08bb618db158f5b04aeb240aaa866b5b603abef8be40595b29d6d0b35ce6a64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x322E9F04 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x3BB39C33 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x634C7BB5 EQ PUSH2 0x6E JUMPI DUP1 PUSH4 0xAFFED0E0 EQ PUSH2 0x97 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0xAE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x59 PUSH2 0x69 CALLDATASIZE PUSH1 0x4 PUSH2 0x353 JUMP JUMPDEST PUSH2 0x1E7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x81 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8E SWAP2 SWAP1 PUSH2 0x36C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA0 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x35D21555 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6BA42AAA SWAP1 PUSH2 0xDE SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x36C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x130 SWAP2 SWAP1 PUSH2 0x32A JUMP JUMPDEST PUSH2 0x14D JUMPI PUSH1 0x40 MLOAD PUSH4 0x7671FF49 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x3E8 DUP2 LT ISZERO PUSH2 0x182 JUMPI PUSH1 0x1 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x16A DUP4 PUSH2 0x39F JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP DUP1 DUP1 PUSH2 0x17A SWAP1 PUSH2 0x39F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x150 JUMP JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x17FBADE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FEEB794 SWAP1 PUSH2 0x1B3 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x36C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x35D21555 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x6BA42AAA SWAP1 PUSH2 0x217 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x36C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x245 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x269 SWAP2 SWAP1 PUSH2 0x32A JUMP JUMPDEST PUSH2 0x286 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7671FF49 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x295 DUP3 PUSH2 0x3E8 PUSH2 0x380 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x2C4 JUMPI PUSH1 0x1 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x2AC DUP4 PUSH2 0x39F JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP DUP1 DUP1 PUSH2 0x2BC SWAP1 PUSH2 0x39F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x289 JUMP JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x17FBADE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x5FEEB794 SWAP1 PUSH2 0x2F5 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x36C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x323 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x365 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x39A JUMPI PUSH2 0x39A PUSH2 0x3BA JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x3B3 JUMPI PUSH2 0x3B3 PUSH2 0x3BA JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP12 CREATE DUP12 0xB6 XOR 0xDB ISZERO DUP16 JUMPDEST DIV 0xAE 0xB2 BLOCKHASH 0xAA 0xA8 PUSH7 0xB5B603ABEF8BE4 SDIV SWAP6 0xB2 SWAP14 PUSH14 0xB35CE6A64736F6C634300080700 CALLER ",
              "sourceMap": "102:596:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;261:201;;;:::i;:::-;;466:230;;;;;;:::i;:::-;;:::i;151:21::-;;;;;-1:-1:-1;;;;;151:21:47;;;;;;;;;;:::i;:::-;;;;;;;;176:20;;;;;;;;;835:25:84;;;823:2;808:18;176:20:47;689:177:84;261:201:47;305:6;;297:36;;-1:-1:-1;;;297:36:47;;-1:-1:-1;;;;;305:6:47;;;;297:24;;:36;;322:10;;297:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;292:65;;342:15;;-1:-1:-1;;;342:15:47;;;;;;;;;;;292:65;369:9;364:53;384:4;380:1;:8;364:53;;;403:5;:7;;;:5;:7;;;:::i;:::-;;;;;;390:3;;;;;:::i;:::-;;;;364:53;;;-1:-1:-1;431:6:47;;423:34;;-1:-1:-1;;;423:34:47;;-1:-1:-1;;;;;431:6:47;;;;423:22;;:34;;446:10;;423:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;261:201::o;466:230::-;529:6;;521:36;;-1:-1:-1;;;521:36:47;;-1:-1:-1;;;;;529:6:47;;;;521:24;;:36;;546:10;;521:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;516:65;;566:15;;-1:-1:-1;;;566:15:47;;;;;;;;;;;516:65;593:9;588:63;608:14;615:7;608:4;:14;:::i;:::-;604:1;:18;588:63;;;637:5;:7;;;:5;:7;;;:::i;:::-;;;;;;624:3;;;;;:::i;:::-;;;;588:63;;;-1:-1:-1;665:6:47;;657:34;;-1:-1:-1;;;657:34:47;;-1:-1:-1;;;;;665:6:47;;;;657:22;;:34;;680:10;;657:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;466:230;:::o;14:277:84:-;81:6;134:2;122:9;113:7;109:23;105:32;102:52;;;150:1;147;140:12;102:52;182:9;176:16;235:5;228:13;221:21;214:5;211:32;201:60;;257:1;254;247:12;201:60;280:5;14:277;-1:-1:-1;;;14:277:84:o;296:180::-;355:6;408:2;396:9;387:7;383:23;379:32;376:52;;;424:1;421;414:12;376:52;-1:-1:-1;447:23:84;;296:180;-1:-1:-1;296:180:84:o;481:203::-;-1:-1:-1;;;;;645:32:84;;;;627:51;;615:2;600:18;;481:203::o;871:168::-;911:7;977:1;973;969:6;965:14;962:1;959:21;954:1;947:9;940:17;936:45;933:71;;;984:18;;:::i;:::-;-1:-1:-1;1024:9:84;;871:168::o;1044:135::-;1083:3;-1:-1:-1;;1104:17:84;;1101:43;;;1124:18;;:::i;:::-;-1:-1:-1;1171:1:84;1160:13;;1044:135::o;1184:127::-;1245:10;1240:3;1236:20;1233:1;1226:31;1276:4;1273:1;1266:15;1300:4;1297:1;1290:15"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "206000",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "keep3r()": "2383",
                "nonce()": "2339",
                "work()": "infinite",
                "workHard(uint256)": "infinite"
              }
            },
            "methodIdentifiers": {
              "keep3r()": "634c7bb5",
              "nonce()": "affed0e0",
              "work()": "322e9f04",
              "workHard(uint256)": "3bb39c33"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3r\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidKeeper\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"keep3r\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"work\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_factor\",\"type\":\"uint256\"}],\"name\":\"workHard\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/JobForTest.sol\":\"JobForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/for-test/JobForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../interfaces/IKeep3r.sol';\\n\\ncontract JobForTest {\\n  error InvalidKeeper();\\n  address public keep3r;\\n  uint256 public nonce;\\n\\n  constructor(address _keep3r) {\\n    keep3r = _keep3r;\\n  }\\n\\n  function work() external {\\n    if (!IKeep3r(keep3r).isKeeper(msg.sender)) revert InvalidKeeper();\\n\\n    for (uint256 i; i < 1000; i++) {\\n      nonce++;\\n    }\\n\\n    IKeep3r(keep3r).worked(msg.sender);\\n  }\\n\\n  function workHard(uint256 _factor) external {\\n    if (!IKeep3r(keep3r).isKeeper(msg.sender)) revert InvalidKeeper();\\n\\n    for (uint256 i; i < 1000 * _factor; i++) {\\n      nonce++;\\n    }\\n\\n    IKeep3r(keep3r).worked(msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x399bb5de1fd8e09bd46993fd9fd423bf5955238edacee0b44f985604fb74272b\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3r.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './peripherals/IKeep3rJobs.sol';\\nimport './peripherals/IKeep3rKeepers.sol';\\nimport './peripherals/IKeep3rAccountance.sol';\\nimport './peripherals/IKeep3rRoles.sol';\\nimport './peripherals/IKeep3rParameters.sol';\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rV2 contract\\n/// @notice This contract inherits all the functionality of Keep3rV2\\ninterface IKeep3r is IKeep3rJobs, IKeep3rKeepers, IKeep3rAccountance, IKeep3rRoles, IKeep3rParameters {\\n\\n}\\n\",\"keccak256\":\"0x57e234140074d771239eeb6f08b6fc049c838c2a34aefadbbd542672e63bc686\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 9700,
                "contract": "solidity/for-test/JobForTest.sol:JobForTest",
                "label": "keep3r",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 9702,
                "contract": "solidity/for-test/JobForTest.sol:JobForTest",
                "label": "nonce",
                "offset": 0,
                "slot": "1",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "solidity/for-test/Keep3rForTest.sol": {
        "Keep3rForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "AlreadyAJob",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "AlreadyAKeeper",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "AlreadyDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientFunds",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobAlreadyAdded",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationImpossible",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Activation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "Dispute",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                }
              ],
              "name": "DustSent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOwner",
                  "type": "address"
                }
              ],
              "name": "JobAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationSuccessful",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashLiquidity",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashToken",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "KeeperRevoke",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "KeeperSlash",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperValidation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperWork",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_resolver",
                  "type": "address"
                }
              ],
              "name": "Resolve",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Withdrawal",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "acceptJobMigration",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "activate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "addJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "bond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                }
              ],
              "name": "bondedPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "directTokenPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_minBond",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_earned",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_age",
                  "type": "uint256"
                }
              ],
              "name": "isBondedKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isBondedKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "isKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "migrateJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingJobMigrations",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "revoke",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                }
              ],
              "name": "sendDust",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonded",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_bondAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_unbondAmount",
                  "type": "uint256"
                }
              ],
              "name": "slash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashTokenFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "viewTickOrder",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "worked",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobMigration(address,address)": {
                "details": "Unbond/withdraw process doesn't get migrated",
                "params": {
                  "_fromJob": "The address of the job that requested to migrate",
                  "_toJob": "The address to which the job wants to migrate to"
                }
              },
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "activate(address)": {
                "params": {
                  "_bonding": "The asset being activated as bond collateral"
                }
              },
              "addJob(address)": {
                "params": {
                  "_job": "Address of the contract for which work should be performed"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "bond(address,uint256)": {
                "params": {
                  "_amount": "The amount of bonding asset being bonded",
                  "_bonding": "The asset being bonded"
                }
              },
              "bondedPayment(address,uint256)": {
                "details": "Pays the keeper that performs the work with KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work",
                  "_payment": "The reward that should be allocated for the job"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "directTokenPayment(address,address,uint256)": {
                "details": "Pays the keeper that performs the work with a specific token",
                "params": {
                  "_amount": "The reward that should be allocated",
                  "_keeper": "Address of the keeper that performed the work",
                  "_token": "The asset being awarded to the keeper"
                }
              },
              "dispute(address)": {
                "params": {
                  "_jobOrKeeper": "The address in dispute"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "details": "Should be used for protected functions",
                "params": {
                  "_age": "The minimum keeper age required",
                  "_bond": "The bond token being evaluated",
                  "_earned": "The minimum funds earned in the keepers lifetime",
                  "_keeper": "The keeper to check",
                  "_minBond": "The minimum amount of bonded tokens"
                },
                "returns": {
                  "_isBondedKeeper": "Whether the `_keeper` meets the given requirements"
                }
              },
              "isKeeper(address)": {
                "details": "Can be used for general (non critical) functions",
                "params": {
                  "_keeper": "The keeper being investigated"
                },
                "returns": {
                  "_isKeeper": "Whether the address passed as a parameter is a keeper or not"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_liquidityCredits": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_periodCredits": "The credits the given job has at the current period"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "migrateJob(address,address)": {
                "params": {
                  "_fromJob": "The address of the job that is requesting to migrate",
                  "_toJob": "The address at which the job is requesting to migrate"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "resolve(address)": {
                "params": {
                  "_jobOrKeeper": "The address cleared"
                }
              },
              "revoke(address)": {
                "params": {
                  "_keeper": "The address being slashed"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "sendDust(address,uint256,address)": {
                "params": {
                  "_amount": "The amount of the token that will be transferred",
                  "_to": "The address that will receive the idle funds",
                  "_token": "The token that will be transferred"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "slash(address,address,uint256,uint256)": {
                "params": {
                  "_bondAmount": "The bonded amount being slashed",
                  "_bonded": "The asset being slashed",
                  "_keeper": "The address being slashed",
                  "_unbondAmount": "The pending unbond amount being slashed"
                }
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity that will be slashed",
                  "_job": "The address being slashed",
                  "_liquidity": "The address of the liquidity that will be slashed"
                }
              },
              "slashTokenFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of the token that will be slashed",
                  "_job": "The address of the job from which the token will be slashed",
                  "_token": "The address of the token that will be slashed"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_credits": "The total credits of the given job"
                }
              },
              "unbond(address,uint256)": {
                "params": {
                  "_amount": "Allows for partial unbonding",
                  "_bonding": "The asset being unbonded"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdraw(address)": {
                "params": {
                  "_bonding": "The asset to withdraw from the bonding pool"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              },
              "worked(address)": {
                "details": "Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_18": {
                  "entryPoint": null,
                  "id": 18,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_2471": {
                  "entryPoint": null,
                  "id": 2471,
                  "parameterSlots": 5,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5689": {
                  "entryPoint": null,
                  "id": 5689,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_9819": {
                  "entryPoint": null,
                  "id": 9819,
                  "parameterSlots": 5,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 443,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_addresst_addresst_address_fromMemory": {
                  "entryPoint": 472,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 5
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 584,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1238:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "345:401:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "392:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "401:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "404:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "394:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "394:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "394:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "366:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "375:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "362:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "362:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "387:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "358:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "358:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "355:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "417:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "457:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "427:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "427:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "417:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "476:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "520:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "531:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "516:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "516:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "486:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "486:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "476:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "544:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "588:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "599:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "584:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "584:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "554:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "554:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "544:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "612:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "656:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "667:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "652:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "652:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "622:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "622:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "612:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "680:60:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "724:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "735:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "720:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "720:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "690:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "690:50:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "680:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "279:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "290:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "302:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "310:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "318:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "326:6:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "334:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:550:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "829:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "875:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "884:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "887:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "877:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "877:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "877:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "850:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "859:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "846:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "846:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "871:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "842:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "842:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "839:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "900:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "919:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "913:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "913:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "904:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "982:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "991:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "994:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "984:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "984:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "984:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "951:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "972:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "965:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "965:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "958:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "958:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "948:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "948:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "941:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "941:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "938:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1007:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1017:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1007:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "795:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "806:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "818:6:84",
                            "type": ""
                          }
                        ],
                        "src": "751:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1134:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1144:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1156:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1167:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1152:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1152:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1144:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1186:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1201:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1217:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1222:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1213:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1213:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1226:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1209:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1209:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1197:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1197:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1179:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1179:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1179:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1103:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1114:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1125:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1033:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526203f480601f55621275006020556729a2241af62c000060215562069780602255622cd300602355601e6024553480156200003e57600080fd5b5060405162006295380380620062958339810160408190526200006191620001d8565b600160005584848484848383838388806001600160a01b038116620000985760405162b293ed60e81b815260040160405180910390fd5b601780546001600160a01b03199081166001600160a01b0393841617909155601d80548216888416178155601b80548316888516179055601c80548316878516179055601e8054831686851690811782556000818152600e602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200014357600080fd5b505afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e919062000248565b6001600160a01b03919091166000908152600f60205260409020805460ff191691151591909117905550620002739b505050505050505050505050565b80516001600160a01b0381168114620001d357600080fd5b919050565b600080600080600060a08688031215620001f157600080fd5b620001fc86620001bb565b94506200020c60208701620001bb565b93506200021c60408701620001bb565b92506200022c60608701620001bb565b91506200023c60808701620001bb565b90509295509295909350565b6000602082840312156200025b57600080fd5b815180151581146200026c57600080fd5b9392505050565b61601280620002836000396000f3fe608060405234801561001057600080fd5b50600436106104075760003560e01c80638fe204dd11610228578063c20297f01161013c578063ec00cdfc116100be578063ec00cdfc14610b01578063ec8ca64314610b14578063f0f346b914610b3d578063f11a1d1a14610b50578063f136a09d14610b63578063f25e311b14610b83578063f39c38a014610b96578063f75f9f7b14610ba9578063f9d46cf214610bbc578063fc253d2b14610bcf578063fe75bc4614610bd857600080fd5b8063c20297f014610a15578063c5198abc14610a28578063c7ae40d014610a3b578063cb4be2bb14610a4e578063cb54694d14610a61578063cd22af1b14610a74578063d55995fe14610a9f578063dd2080d614610ab2578063ddca3f4314610ac5578063e326ac4314610ace578063ebbb619414610aee57600080fd5b80638fe204dd1461082857806390a4684e1461083b578063951dc22c1461084e578063966abd001461085657806398e90a0f146108695780639d5c33d814610892578063a2145809146108a5578063a39744b5146108b8578063a515366a146108e3578063a5d059ca146108f6578063a676f9ff14610909578063a7d2e78414610929578063aac6aa9c14610932578063ab033ea914610945578063af320e8114610958578063b0103b1a1461096b578063b23922331461098e578063b440027f146109a1578063b600702a146109cc578063b7e77340146109df578063b87fcbff146109f257600080fd5b8063594a3a931161031f578063594a3a931461068457806359a2255e146106975780635aa6e675146106aa5780635ebe23f0146106bd5780635feeb794146106c6578063633fb68f146106d957806364bb43ee146106e257806368a9f19c146106f5578063694798e61461070857806369fe0e2d146107335780636ba42aaa146107465780636cf262bc146107595780636e2a9ca61461076c57806372da828a1461077f57806374a8f10314610792578063768b5d90146107a55780637b40c913146107ae5780637c8fce23146107c1578063878c723e146107c95780638bb6dfa8146107f25780638cb22b761461080557600080fd5b8063034d4c611461040c57806307b435c2146104325780630c620bce1461045d5780630d6a1f87146104725780631101eb411461048557806311466d721461049a57806315006b82146104ad578063160e1e31146104d8578063165e62e7146104eb578063168f92e7146105285780631b44555e146105535780631c5a9d9c146105735780631ef94b911461058657806321040b01146105a6578063238efcbc146105d1578063274a8db4146105d9578063454c50311461060c57806351cff8d91461063857806352a4de291461064b57806355ea6c471461065e578063575288bf14610671575b600080fd5b61041f61041a366004615963565b610beb565b6040519081526020015b60405180910390f35b61041f61044036600461599d565b601260209081526000928352604080842090915290825290205481565b610465610cf1565b6040516104299190615d12565b61041f610480366004615b4c565b610d02565b610498610493366004615a21565b610e08565b005b6104986104a8366004615b4c565b610f62565b61041f6104bb36600461599d565b601060209081526000928352604080842090915290825290205481565b6104986104e6366004615963565b6110f1565b6104fe6104f9366004615963565b611257565b604080518251600690810b825260208085015190910b908201529181015190820152606001610429565b61041f61053636600461599d565b600960209081526000928352604080842090915290825290205481565b61041f610561366004615963565b60056020526000908152604090205481565b610498610581366004615963565b61161d565b601b54610599906001600160a01b031681565b6040516104299190615c89565b61041f6105b436600461599d565b601360209081526000928352604080842090915290825290205481565b610498611756565b6105fc6105e7366004615963565b601a6020526000908152604090205460ff1681565b6040519015158152602001610429565b6105fc61061a366004615963565b6001600160a01b03166000908152600f602052604090205460ff1690565b610498610646366004615963565b6117e2565b610498610659366004615a21565b6119eb565b61049861066c366004615963565b611c1c565b61049861067f366004615a21565b611cd0565b61049861069236600461599d565b611f93565b6104986106a5366004615963565b612038565b601754610599906001600160a01b031681565b61041f601f5481565b6104986106d4366004615963565b6120ea565b61041f60215481565b6104986106f0366004615963565b612354565b610498610703366004615963565b6123d6565b61041f61071636600461599d565b602860209081526000928352604080842090915290825290205481565b610498610741366004615c0d565b61248e565b6105fc610754366004615963565b6124ee565b61041f610767366004615963565b61254e565b61049861077a366004615a21565b612684565b61049861078d366004615963565b6127d3565b6104986107a0366004615963565b612870565b61041f60225481565b601e54610599906001600160a01b031681565b61046561296b565b6105996107d7366004615963565b6001602052600090815260409020546001600160a01b031681565b61041f610800366004615963565b612977565b6105fc610813366004615963565b60146020526000908152604090205460ff1681565b610498610836366004615c0d565b612a1a565b61049861084936600461599d565b612a78565b610465612b66565b610498610864366004615b78565b612b72565b610599610877366004615963565b6002602052600090815260409020546001600160a01b031681565b6104986108a0366004615963565b612c88565b6104986108b33660046159d6565b612d40565b61041f6108c636600461599d565b600860209081526000928352604080842090915290825290205481565b6104986108f1366004615b4c565b612f10565b610498610904366004615b4c565b613171565b61041f610917366004615963565b60296020526000908152604090205481565b61041f60205481565b610498610940366004615963565b613244565b610498610953366004615963565b6132f8565b61049861096636600461599d565b61336e565b6105fc610979366004615963565b60076020526000908152604090205460ff1681565b61049861099c366004615c0d565b6137ed565b61041f6109af36600461599d565b602560209081526000928352604080842090915290825290205481565b6104986109da366004615963565b61384d565b6104986109ed366004615c0d565b613a72565b6105fc610a00366004615963565b60196020526000908152604090205460ff1681565b610498610a23366004615ab5565b613ad2565b610498610a36366004615963565b613b94565b601c54610599906001600160a01b031681565b610498610a5c366004615963565b613c59565b610498610a6f366004615c0d565b613cf6565b61041f610a8236600461599d565b601160209081526000928352604080842090915290825290205481565b610498610aad366004615a62565b613d7a565b610498610ac0366004615a21565b613fb1565b61041f60245481565b61041f610adc366004615963565b60066020526000908152604090205481565b610498610afc366004615c0d565b61412e565b610498610b0f366004615963565b61418e565b610599610b22366004615963565b602c602052600090815260409020546001600160a01b031681565b610498610b4b366004615963565b61422b565b601d54610599906001600160a01b031681565b61041f610b71366004615963565b602a6020526000908152604090205481565b610498610b91366004615a21565b6142df565b601854610599906001600160a01b031681565b610498610bb7366004615963565b614524565b6105fc610bca366004615afb565b6145dc565b61041f60235481565b610498610be6366004615b4c565b6146c5565b600080610bf78361254e565b6022549091504290610c1290610c0d9083615e93565b6147b5565b6001600160a01b0385166000908152602960205260409020541115610cb6576022546001600160a01b038516600090815260296020526040902054610c579042615e93565b10610c93576022546001600160a01b038516600090815260296020526040902054610c829190615df8565b610c8c9082615e93565b9050610ccc565b6001600160a01b038416600090815260296020526040902054610c8c9082615e93565b610cbf426147b5565b610cc99082615e93565b90505b610cd681836147cf565b610cdf85612977565b610ce99190615df8565b949350505050565b6060610cfd60266147f9565b905090565b6000610d0f60268461480d565b15610e02576000610d1f84611257565b90508060400151600014610e00576001600160a01b0384166000908152600f602052604081205460ff16610d60578160200151610d5b90615f05565b610d66565b81602001515b601d5460225460405163a0d2710760e01b8152929350610df7926001600160a01b039092169163a0d2710791610da29189918791600401615dc9565b60206040518083038186803b158015610dba57600080fd5b505afa158015610dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df29190615c26565b61482f565b92505050610e02565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610e4457604051636efb4f4160e11b815260040160405180910390fd5b602054610e519042615df8565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610ea0908490615df8565b90915550610eb19050848484614840565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590610ef05750602154610eee8286614a4e565b105b15610f0e57604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de85604051610f5391815260200190565b60405180910390a35050505050565b3360008181526007602052604090205460ff1615610f935760405163ad2fdf3b60e01b815260040160405180910390fd5b610f9e60158261480d565b610fba5760405162941a5760e11b815260040160405180910390fd5b610fc381614b6c565b1561101e576001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd833981519152936110159390929091615de2565b60405180910390a25b6001600160a01b0381166000908152600a602052604090205482111561109d5761104781614d42565b6001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd833981519152936110949390929091615de2565b60405180910390a25b6110a8818484614dd0565b601b546001600160a01b03808516918382169116600080516020615f9d833981519152856110d4614eb4565b6040805192835260208301919091520160405180910390a4505050565b6017546001600160a01b0316331461111c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166111435760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b906111a4908490600401615c89565b60206040518083038186803b1580156111bc57600080fd5b505afa1580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f49190615baf565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa9061124c908390615c89565b60405180910390a150565b604080516060810182526000808252602082018190529181019190915261127d426147b5565b6001600160a01b0383166000908152602b602052604090206001015414156112f357506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b60008061130760225442610c0d9190615e93565b6001600160a01b0385166000908152602b602052604090206001015490915081141561146b57604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b611374426147b5565b61137e9042615e93565b8260008151811061139157611391615f6e565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926113ed9291909116908690600401615c9d565b60606040518083038186803b15801561140557600080fd5b505afa158015611419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143d9190615bca565b600692830b90920b80885291955061145791839150615e43565b600690810b900b6020860152506115f49050565b6001600160a01b0384166000908152602b60205260409020600101548111156115f4576040805160028082526060820183526000926020830190803683370190505090506114b8426147b5565b6114c29042615e93565b816000815181106114d5576114d5615f6e565b602002602001019063ffffffff16908163ffffffff16815250506022546114fb426147b5565b6115059042615e93565b61150f9190615df8565b8160018151811061152257611522615f6e565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d919261157a9216908690600401615c9d565b60606040518083038186803b15801561159257600080fd5b505afa1580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ca9190615bca565b600692830b90920b80885291955091506115e5908290615e43565b600690810b900b602086015250505b811561160d57611603426147b5565b6040840152611615565b600060408401525b50505b919050565b3360009081526007602052604090205460ff161561164e576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205461168f57604051636258f48160e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205442116116d257604051630fd0eeef60e11b815260040160405180910390fd5b3360008181526011602090815260408083206001600160a01b03861684529091528120819055906117039083614ece565b9050816001600160a01b0316336001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a758360405161174a91815260200190565b60405180910390a35050565b6018546001600160a01b0316331461178157604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916117d891615c89565b60405180910390a1565b6002600054141561180e5760405162461bcd60e51b815260040161180590615d92565b60405180910390fd5b600260009081553381526013602090815260408083206001600160a01b03851684529091529020546118535760405163184c088160e21b815260040160405180910390fd5b3360009081526012602090815260408083206001600160a01b03851684529091529020544211611896576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526007602052604090205460ff16156118c7576040516362e6201d60e01b815260040160405180910390fd5b3360009081526013602090815260408083206001600160a01b0385811680865291909352922054601b5490929116141561195a57601c5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b15801561194157600080fd5b505af1158015611955573d6000803e3d6000fd5b505050505b3360008181526013602090815260408083206001600160a01b038716808552908352818420849055848452601283528184208185529092528220919091556119a29183614fe5565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b60026000541415611a0e5760405162461bcd60e51b815260040161180590615d92565b6002600055611a1e60268361480d565b611a3b5760405163e0b6aead60e01b815260040160405180910390fd5b611a4660158461480d565b611a6357604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611a859083615040565b50611a8f83615055565b6021546001600160a01b03808516600090815260286020908152604080832093871683529290522054611acd90611ac7908490615df8565b84614a4e565b1015611aec57604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd83398151915293611b399390929091615de2565b60405180910390a2611b566001600160a01b0383163330846150b3565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611b8d908490615df8565b90915550611ba09050610df28284614a4e565b6001600160a01b0384166000908152600b602052604081208054909190611bc8908490615df8565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b336000908152601a602052604090205460ff16611c4c57604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16611c85576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b60026000541415611cf35760405162461bcd60e51b815260040161180590615d92565b6002600055611d0360158461480d565b611d2057604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b0383811691161415611d4e5760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611d7d903090600401615c89565b60206040518083038186803b158015611d9557600080fd5b505afa158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd9190615c26565b9050611de46001600160a01b0384163330856150b3565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611e139190615c89565b60206040518083038186803b158015611e2b57600080fd5b505afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e639190615c26565b611e6d9190615e93565b9050600061271060245483611e829190615e24565b611e8c9190615e10565b9050611e988183615e93565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190611ecf908490615df8565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611f0c921683614fe5565b6001600160a01b0386166000908152600c60205260409020611f2e9086615040565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb85604051611f7e91815260200190565b60405180910390a45050600160005550505050565b6001600160a01b038281166000908152600160205260409020548391163314611fcf57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526002602052604090205482911633146120745760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b3360008181526007602052604090205460ff161561211b5760405163ad2fdf3b60e01b815260040160405180910390fd5b61212660158261480d565b6121425760405162941a5760e11b815260040160405180910390fd5b61214b81614b6c565b156121a6576001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd8339815191529361219d9390929091615de2565b60405180910390a25b601d546001600160a01b038381166000908152600860209081526040808320601b548516845290915280822054905163435b21c160e01b8152600481019190915290928392839291169063435b21c19060240160606040518083038186803b15801561221157600080fd5b505afa158015612225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122499190615c3f565b9250925092506000612259614eb4565b90506000612269828486886150f1565b6001600160a01b0387166000908152600a60205260409020549091508111156123035761229586614d42565b6001600160a01b038616600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd833981519152936122e29390929091615de2565b60405180910390a26122f2614eb4565b9150612300828486886150f1565b90505b61230e868883614dd0565b601b5460408051838152602081018590526001600160a01b038a8116938a821693911691600080516020615f9d833981519152910160405180910390a450505050505050565b6017546001600160a01b0316331461237f576040516354348f0360e01b815260040160405180910390fd5b61238a60268261514e565b6123a757604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e568160405161124c9190615c89565b6017546001600160a01b03163314612401576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff161561243b5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b9061124c908390615c89565b6017546001600160a01b031633146124b9576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d9060200161124c565b60006124f8614eb4565b602e5561250660038361480d565b15611618577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e5460405161253e91815260200190565b60405180910390a1506001919050565b6000805b6001600160a01b0383166000908152600d6020526040902061257390615163565b81101561267e576001600160a01b0383166000908152600d6020526040812061259c908361516d565b90506125a960268261480d565b1561266b5760006125b982611257565b90508060400151600014612669576001600160a01b0382166000908152600f602052604081205460ff166125fa5781602001516125f590615f05565b612600565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b815294955061265b94929093169263a0d2710792610da2928791600401615dc9565b6126659086615df8565b9450505b505b508061267681615ed6565b915050612552565b50919050565b3360009081526019602052604090205460ff166126b457604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff166126ed576040516310cec38560e21b815260040160405180910390fd5b6126f8838383614840565b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb9261272c92909116908590600401615cf9565b602060405180830381600087803b15801561274657600080fd5b505af1925050508015612776575060408051601f3d908101601f1916820190925261277391810190615baf565b60015b61277f57612781565b505b336001600160a01b0316836001600160a01b03167f6e10247c3c094d220ee99436c164b7f38d63b335a20ed817cbefaee4bb02d20e84846040516127c6929190615cf9565b60405180910390a3505050565b6017546001600160a01b031633146127fe576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166128255760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b09061124c908390615c89565b3360009081526019602052604090205460ff166128a057604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff166128d9576040516310cec38560e21b815260040160405180910390fd5b6128e460038261514e565b50601b546001600160a01b0380831660008181526008602090815260408083209490951680835293815284822054928252601381528482208483529052929092205461293292849291615179565b60405133906001600160a01b038316907f038a17b9b553c0c3fc2ed14b957a5d8420a1666fd2efe5c1b3fe5f23eea61bb390600090a350565b6060610cfd60156147f9565b6000806129838361254e565b6022546001600160a01b038516600090815260296020526040902054919250906129ad9042615e93565b1015610e0257600081116129d9576001600160a01b0383166000908152600a6020526040902054612a13565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054612a09908390615e24565b612a139190615e10565b915061267e565b6017546001600160a01b03163314612a45576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee2910161124c565b6001600160a01b038281166000908152600160205260409020548391163314612ab457604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415612ae75760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d825280832094835293905282902042905590517fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c90612b59908590615c89565b60405180910390a2505050565b6060610cfd60036147f9565b6017546001600160a01b03163314612b9d576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612bc45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612c25576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015612c1f573d6000803e3d6000fd5b50612c39565b612c396001600160a01b0384168284614fe5565b604080516001600160a01b0385811682526020820185905283168183015290517f9a3055ded8c8b5f21bbf4946c5afab6e1fa8b3f057922658e5e1ade125fb0b1e9181900360600190a1505050565b6017546001600160a01b03163314612cb3576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1615612ced5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f9061124c908390615c89565b6001600160a01b038381166000908152600160205260409020548491163314612d7c57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038216612da35760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260136020908152604080832093871683529290522054612de65760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211612e2b576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615612e65576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590612eb2908483614fe5565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051612f0191815260200190565b60405180910390a45050505050565b60026000541415612f335760405162461bcd60e51b815260040161180590615d92565b600260009081553381526007602052604090205460ff1615612f68576040516362e6201d60e01b815260040160405180910390fd5b612f7360153361480d565b15612f915760405163d7229c4360e01b815260040160405180910390fd5b601f54612f9e9042615df8565b3360009081526011602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81529091906370a0823190612fe9903090600401615c89565b60206040518083038186803b15801561300157600080fd5b505afa158015613015573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130399190615c26565b90506130506001600160a01b0384163330856150b3565b6040516370a0823160e01b815281906001600160a01b038516906370a082319061307e903090600401615c89565b60206040518083038186803b15801561309657600080fd5b505afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190615c26565b6130d89190615e93565b336000908152601460209081526040808320805460ff19166001179055601082528083206001600160a01b0388168452909152812080549294508492909190613122908490615df8565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b60205461317e9042615df8565b3360008181526012602090815260408083206001600160a01b038816808552908352818420959095559282526008815282822093825292909252812080548392906131ca908490615e93565b90915550503360009081526013602090815260408083206001600160a01b038616845290915281208054839290613202908490615df8565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de9060200161174a565b6017546001600160a01b0316331461326f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff166132a8576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d0259061124c908390615c89565b6017546001600160a01b03163314613323576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f9061124c908390615c89565b6001600160a01b0381811660009081526001602052604090205482911633146133aa57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16806133e957506001600160a01b03821660009081526007602052604090205460ff165b156134075760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c602052604090205481169083161461344457604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d602090815260408083209386168352929052205461347690603c90615df8565b421015613496576040516356248e9760e01b815260040160405180910390fd5b61349f83615055565b6134a882615055565b6001600160a01b0383166000908152600c602052604081206134c990615163565b11156135ab576001600160a01b0383166000908152600c602052604081206134f1908261516d565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a16855292825280842092845291905281208054939450919261353f908490615df8565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c90915220613581908261514e565b506001600160a01b0383166000908152600c602052604090206135a49082615040565b50506134a8565b6001600160a01b0383166000908152600d602052604081206135cc90615163565b11156136ae576001600160a01b0383166000908152600d602052604081206135f4908261516d565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a168552928252808420928452919052812080549394509192613642908490615df8565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d9052206136849082615040565b506001600160a01b0384166000908152600d602052604090206136a7908261514e565b50506135ab565b6001600160a01b038084166000908152600b6020526040808220549285168252812080549091906136e0908490615df8565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a90915280822054928516825281208054909190613724908490615df8565b90915550506001600160a01b0383166000908152600a60209081526040808320839055602990915281205561375a60158461514e565b506001600160a01b03808416600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055938352602c909152908190208054909216909155517f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f290612b59908690615c89565b6017546001600160a01b03163314613818576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb699060200161124c565b6017546001600160a01b03163314613878576040516354348f0360e01b815260040160405180910390fd5b613883602682615040565b6138a05760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156138d957600080fd5b505afa1580156138ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139119190615980565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b916139659190600401615c89565b60206040518083038186803b15801561397d57600080fd5b505afa158015613991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b59190615baf565b6001600160a01b0382166000908152600f60205260409020805460ff19169115159190911790556139e581611257565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b9061124c908390615c89565b6017546001600160a01b03163314613a9d576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b439060200161124c565b3360009081526019602052604090205460ff16613b0257604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff16613b3b576040516310cec38560e21b815260040160405180910390fd5b613b4784848484615179565b336001600160a01b0385167f10a73de7ab6e9023aa6e2bc23f7abf4dcef591487e7e55f44c00e34fe60d56db613b7d8486615df8565b60405190815260200160405180910390a350505050565b613b9f60158261480d565b15613bbd57604051630809740d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604090205460ff1615613bf757604051632f3d320560e01b815260040160405180910390fd5b613c02601582615040565b506001600160a01b03811660008181526001602052604080822080546001600160a01b03191633908117909155905190917fed3faef50715743626cd57de74281a2b17cdbfc11c0486feda541fb911e0293d91a350565b6017546001600160a01b03163314613c84576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116613cab5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae2509061124c908390615c89565b6017546001600160a01b03163314613d21576040516354348f0360e01b815260040160405180910390fd5b62015180811015613d4557604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d99060200161124c565b60026000541415613d9d5760405162461bcd60e51b815260040161180590615d92565b600260009081556001600160a01b03858116825260016020526040909120548591163314613dde57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054613e1090603c90615df8565b4211613e2f57604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115613e755760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615613eaf5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290613ee6908490615e93565b90915550613f0090506001600160a01b0385168385614fe5565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054613f4e576001600160a01b0385166000908152600c60205260409020613f4c908561514e565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051613f9d91815260200190565b60405180910390a450506001600055505050565b3360008181526007602052604090205460ff1615613fe25760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff161561401c576040516362e6201d60e01b815260040160405180910390fd5b61402760158261480d565b6140435760405162941a5760e11b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905220548211156140895760405163356680b760e01b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905290812080548492906140c0908490615e93565b909155506140da90506001600160a01b0385168484614fe5565b826001600160a01b0316816001600160a01b0316856001600160a01b0316600080516020615f9d83398151915285614110614eb4565b6040805192835260208301919091520160405180910390a450505050565b6017546001600160a01b03163314614159576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e79060200161124c565b6017546001600160a01b031633146141b9576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166141e05760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf9061124c908390615c89565b6017546001600160a01b03163314614256576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661428f57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e9061124c908390615c89565b3360009081526019602052604090205460ff1661430f57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16614348576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b0383166000908152600c6020526040902061436a908361480d565b61438757604051632eda7a1160e01b815260040160405180910390fd5b6001600160a01b038084166000908152600960209081526040808320938616835292905220548111156143cc5760405162919bed60e01b815260040160405180910390fd5b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb9261440092909116908590600401615cf9565b602060405180830381600087803b15801561441a57600080fd5b505af192505050801561444a575060408051601f3d908101601f1916820190925261444791810190615baf565b60015b61445357614455565b505b6001600160a01b0380841660009081526009602090815260408083209386168352929052908120805483929061448c908490615e93565b90915550506001600160a01b038084166000908152600960209081526040808320938616835292905220546144df576001600160a01b0383166000908152600c602052604090206144dd908361514e565b505b336001600160a01b0316836001600160a01b03167f20262b97130b5cb8f80624eed2733df2b05db4a0789b4a3d0157e1d31833310484846040516127c6929190615cf9565b336000908152601a602052604090205460ff1661455457604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff161561458e576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b60006145e6614eb4565b602e556145f460038761480d565b801561462557506001600160a01b038087166000908152600860209081526040808320938916835292905220548411155b801561464957506001600160a01b0386166000908152600560205260409020548311155b801561467857506001600160a01b03861660009081526006602052604090205482906146759042615e93565b10155b156146bc577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e546040516146b091815260200190565b60405180910390a15060015b95945050505050565b6017546001600160a01b031633146146f0576040516354348f0360e01b815260040160405180910390fd5b6146fb60158361480d565b61471857604051636211d34960e01b815260040160405180910390fd5b61472182615055565b6001600160a01b0382166000908152600a602052604081208054839290614749908490615df8565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d1926147a9928252602082015260400190565b60405180910390a25050565b6000602254826147c59190615ef1565b610e029083615e93565b600060225483101561267e576022546147e88385615e24565b6147f29190615e10565b9050610e02565b60606000614806836152cf565b9392505050565b6001600160a01b03811660009081526001830160205260408120541515614806565b6000610e028260225460235461532b565b600260005414156148635760405162461bcd60e51b815260040161180590615d92565b600260009081556001600160a01b0384168152600d60205260409020614889908361480d565b6148a5576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156148eb5760405163435b562560e01b815260040160405180910390fd5b6148f4836153d9565b6000614903610df28385614a4e565b6001600160a01b0385166000908152600b6020526040902054909150156149b9576001600160a01b0384166000908152600b6020908152604080832054600a90925290912054614954908390615e24565b61495e9190615e10565b6001600160a01b0385166000908152600a602052604081208054909190614986908490615e93565b90915550506001600160a01b0384166000908152600b6020526040812080548392906149b3908490615e93565b90915550505b6001600160a01b038085166000908152602860209081526040808320938716835292905290812080548492906149f0908490615e93565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054614a43576001600160a01b0384166000908152600d60205260409020614a41908461514e565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610e02576001600160a01b0382166000908152600f602052604081205460ff16614ac0576001600160a01b0383166000908152602b6020526040902054614abb90600160381b900460060b615f05565b614ae4565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d2710791614b1c9188918691600401615dc9565b60206040518083038186803b158015614b3457600080fd5b505afa158015614b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce99190615c26565b6000614b77426147b5565b6001600160a01b038316600090815260296020526040902054101561161857614ba760225442610c0d9190615e93565b6001600160a01b03831660009081526029602052604090205411614c1d57614bce826153d9565b6001600160a01b0382166000908152600b6020908152604080832054600a90925290912055614bfc426147b5565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b038316600090815260296020526040902054614c439042615e93565b10614c9f57614c51826153d9565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460299092528220805491929091614c90908490615df8565b90915550600191506116189050565b614ca8426147b5565b6001600160a01b0383166000908152602a60205260409020541015611618576001600160a01b0382166000908152600b6020526040902054614ce9836153d9565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291614d1991615e24565b614d239190615e10565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260296020526040902054614d8790614d699042615e93565b6001600160a01b0383166000908152600b60205260409020546147cf565b6001600160a01b0382166000908152600a602052604081208054909190614daf908490615df8565b90915550506001600160a01b03166000908152602960205260409020429055565b6001600160a01b0383166000908152600a6020526040902054811115614e095760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0383166000908152602a60209081526040808320429055600a90915281208054839290614e3e908490615e93565b90915550506001600160a01b038083166000908152600860209081526040808320601b5490941683529290529081208054839290614e7d908490615df8565b90915550506001600160a01b03821660009081526005602052604081208054839290614eaa908490615df8565b9091555050505050565b6000603f5a614ec4906040615e24565b610cfd9190615e10565b6001600160a01b038216600090815260066020526040812054614f07576001600160a01b03831660009081526006602052604090204290555b614f12600384615040565b50506001600160a01b03808316600081815260106020908152604080832094861680845294825280832080549084905593835260088252808320948352939052918220805491928392614f66908490615df8565b9091555050601b546001600160a01b0383811691161415610e0257601b54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b158015614fc757600080fd5b505af1158015614fdb573d6000803e3d6000fd5b5050505092915050565b61503b8363a9059cbb60e01b8484604051602401615004929190615cf9565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526153fe565b505050565b6000614806836001600160a01b0384166154d0565b61505e81614b6c565b5061506881614d42565b6001600160a01b0381166000908152600a6020908152604080832054600b90925290912054615097919061551f565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b03808516602483015283166044820152606481018290526150eb9085906323b872dd60e01b90608401615004565b50505050565b6000808486602e546151039190615e93565b61510d9190615df8565b9050670de0b6b3a7640000846127106151268685615e24565b6151309190615e10565b61513a9190615e24565b6151449190615e10565b9695505050505050565b6000614806836001600160a01b038416615535565b6000610e02825490565b60006148068383615628565b601b546001600160a01b03848116911614615251576017546001600160a01b038085169163a9059cbb91166151ae8486615df8565b6040518363ffffffff1660e01b81526004016151cb929190615cf9565b602060405180830381600087803b1580156151e557600080fd5b505af1925050508015615215575060408051601f3d908101601f1916820190925261521291810190615baf565b60015b61524f573d808015615243576040519150601f19603f3d011682016040523d82523d6000602084013e615248565b606091505b5050615251565b505b6001600160a01b03808516600090815260086020908152604080832093871683529290529081208054849290615288908490615e93565b90915550506001600160a01b038085166000908152601360209081526040808320938716835292905290812080548392906152c4908490615e93565b909155505050505050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561531f57602002820191906000526020600020905b81548152602001906001019080831161530b575b50505050509050919050565b600080806000198587098587029250828110838203039150508060001415615365576000841161535a57600080fd5b508290049050614806565b80841161537157600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6153e281615652565b6001600160a01b039091166000908152600b6020526040902055565b6000615453826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166158369092919063ffffffff16565b80519091501561503b57808060200190518101906154719190615baf565b61503b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611805565b600081815260018301602052604081205461551757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e02565b506000610e02565b600081831061552e5781614806565b5090919050565b6000818152600183016020526040812054801561561e576000615559600183615e93565b855490915060009061556d90600190615e93565b90508181146155d257600086600001828154811061558d5761558d615f6e565b90600052602060002001549050808760000184815481106155b0576155b0615f6e565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806155e3576155e3615f58565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610e02565b6000915050610e02565b600082600001828154811061563f5761563f615f6e565b9060005260206000200154905092915050565b600061565d426147b5565b601e546001600160a01b03166000908152602b6020526040902060010154146156f457601e54615695906001600160a01b0316611257565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d6020526040902061571890615163565b81101561267e576001600160a01b0383166000908152600d60205260408120615741908361516d565b905061574e60268261480d565b156158235761575c426147b5565b6001600160a01b0382166000908152602b6020526040902060010154146157e25761578681611257565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b0380851660009081526028602090815260408083209385168352929052205461581690610df29083614a4e565b6158209084615df8565b92505b508061582e81615ed6565b9150506156f7565b6060610ce9848460008585843b61588f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611805565b600080866001600160a01b031685876040516158ab9190615c6d565b60006040518083038185875af1925050503d80600081146158e8576040519150601f19603f3d011682016040523d82523d6000602084013e6158ed565b606091505b50915091506158fd828286615908565b979650505050505050565b60608315615917575081614806565b8251156159275782518084602001fd5b8160405162461bcd60e51b81526004016118059190615d5f565b8051801515811461161857600080fd5b8051600681900b811461161857600080fd5b60006020828403121561597557600080fd5b813561480681615f84565b60006020828403121561599257600080fd5b815161480681615f84565b600080604083850312156159b057600080fd5b82356159bb81615f84565b915060208301356159cb81615f84565b809150509250929050565b6000806000606084860312156159eb57600080fd5b83356159f681615f84565b92506020840135615a0681615f84565b91506040840135615a1681615f84565b809150509250925092565b600080600060608486031215615a3657600080fd5b8335615a4181615f84565b92506020840135615a5181615f84565b929592945050506040919091013590565b60008060008060808587031215615a7857600080fd5b8435615a8381615f84565b93506020850135615a9381615f84565b9250604085013591506060850135615aaa81615f84565b939692955090935050565b60008060008060808587031215615acb57600080fd5b8435615ad681615f84565b93506020850135615ae681615f84565b93969395505050506040820135916060013590565b600080600080600060a08688031215615b1357600080fd5b8535615b1e81615f84565b94506020860135615b2e81615f84565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215615b5f57600080fd5b8235615b6a81615f84565b946020939093013593505050565b600080600060608486031215615b8d57600080fd5b8335615b9881615f84565b9250602084013591506040840135615a1681615f84565b600060208284031215615bc157600080fd5b61480682615941565b600080600060608486031215615bdf57600080fd5b615be884615951565b9250615bf660208501615951565b9150615c0460408501615941565b90509250925092565b600060208284031215615c1f57600080fd5b5035919050565b600060208284031215615c3857600080fd5b5051919050565b600080600060608486031215615c5457600080fd5b8351925060208401519150604084015190509250925092565b60008251615c7f818460208701615eaa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015615cec57845163ffffffff1683529383019391830191600101615cca565b5090979650505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015615d535783516001600160a01b031683529284019291840191600101615d2e565b50909695505050505050565b6020815260008251806020840152615d7e816040850160208701615eaa565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b9283526020830191909152604082015260600190565b60008219821115615e0b57615e0b615f2c565b500190565b600082615e1f57615e1f615f42565b500490565b6000816000190483118215151615615e3e57615e3e615f2c565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615615e6e57615e6e615f2c565b81667fffffffffffff018313811615615e8957615e89615f2c565b5090039392505050565b600082821015615ea557615ea5615f2c565b500390565b60005b83811015615ec5578181015183820152602001615ead565b838111156150eb5750506000910152565b6000600019821415615eea57615eea615f2c565b5060010190565b600082615f0057615f00615f42565b500690565b60008160060b667fffffffffffff19811415615f2357615f23615f2c565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114615f9957600080fd5b5056fe46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfaee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c3820a2646970667358221220c3d0538d6a43aafc625ae68fb6d81b9f20ab2c3b40e7c00a11a5eeaea069909564736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x3F480 PUSH1 0x1F SSTORE PUSH3 0x127500 PUSH1 0x20 SSTORE PUSH8 0x29A2241AF62C0000 PUSH1 0x21 SSTORE PUSH3 0x69780 PUSH1 0x22 SSTORE PUSH3 0x2CD300 PUSH1 0x23 SSTORE PUSH1 0x1E PUSH1 0x24 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x6295 CODESIZE SUB DUP1 PUSH3 0x6295 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x61 SWAP2 PUSH3 0x1D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE DUP5 DUP5 DUP5 DUP5 DUP5 DUP4 DUP4 DUP4 DUP4 DUP9 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x98 JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1D DUP1 SLOAD DUP3 AND DUP9 DUP5 AND OR DUP2 SSTORE PUSH1 0x1B DUP1 SLOAD DUP4 AND DUP9 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1C DUP1 SLOAD DUP4 AND DUP8 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1E DUP1 SLOAD DUP4 AND DUP7 DUP6 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP6 AND SWAP1 SWAP2 OR SWAP1 SWAP4 SSTORE SWAP1 SLOAD SWAP1 SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x696A437B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x158 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x17E SWAP2 SWAP1 PUSH3 0x248 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x273 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH3 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1FC DUP7 PUSH3 0x1BB JUMP JUMPDEST SWAP5 POP PUSH3 0x20C PUSH1 0x20 DUP8 ADD PUSH3 0x1BB JUMP JUMPDEST SWAP4 POP PUSH3 0x21C PUSH1 0x40 DUP8 ADD PUSH3 0x1BB JUMP JUMPDEST SWAP3 POP PUSH3 0x22C PUSH1 0x60 DUP8 ADD PUSH3 0x1BB JUMP JUMPDEST SWAP2 POP PUSH3 0x23C PUSH1 0x80 DUP8 ADD PUSH3 0x1BB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x26C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x6012 DUP1 PUSH3 0x283 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x407 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8FE204DD GT PUSH2 0x228 JUMPI DUP1 PUSH4 0xC20297F0 GT PUSH2 0x13C JUMPI DUP1 PUSH4 0xEC00CDFC GT PUSH2 0xBE JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0xB01 JUMPI DUP1 PUSH4 0xEC8CA643 EQ PUSH2 0xB14 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0xB3D JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0xB50 JUMPI DUP1 PUSH4 0xF136A09D EQ PUSH2 0xB63 JUMPI DUP1 PUSH4 0xF25E311B EQ PUSH2 0xB83 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0xB96 JUMPI DUP1 PUSH4 0xF75F9F7B EQ PUSH2 0xBA9 JUMPI DUP1 PUSH4 0xF9D46CF2 EQ PUSH2 0xBBC JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0xBCF JUMPI DUP1 PUSH4 0xFE75BC46 EQ PUSH2 0xBD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC20297F0 EQ PUSH2 0xA15 JUMPI DUP1 PUSH4 0xC5198ABC EQ PUSH2 0xA28 JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0xA3B JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0xA4E JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0xA61 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0xA74 JUMPI DUP1 PUSH4 0xD55995FE EQ PUSH2 0xA9F JUMPI DUP1 PUSH4 0xDD2080D6 EQ PUSH2 0xAB2 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0xAC5 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0xACE JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0xAEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x828 JUMPI DUP1 PUSH4 0x90A4684E EQ PUSH2 0x83B JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x84E JUMPI DUP1 PUSH4 0x966ABD00 EQ PUSH2 0x856 JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x869 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x892 JUMPI DUP1 PUSH4 0xA2145809 EQ PUSH2 0x8A5 JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x8B8 JUMPI DUP1 PUSH4 0xA515366A EQ PUSH2 0x8E3 JUMPI DUP1 PUSH4 0xA5D059CA EQ PUSH2 0x8F6 JUMPI DUP1 PUSH4 0xA676F9FF EQ PUSH2 0x909 JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x929 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x932 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x945 JUMPI DUP1 PUSH4 0xAF320E81 EQ PUSH2 0x958 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x96B JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x98E JUMPI DUP1 PUSH4 0xB440027F EQ PUSH2 0x9A1 JUMPI DUP1 PUSH4 0xB600702A EQ PUSH2 0x9CC JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x9DF JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x9F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x594A3A93 GT PUSH2 0x31F JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x684 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x697 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x6AA JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x6BD JUMPI DUP1 PUSH4 0x5FEEB794 EQ PUSH2 0x6C6 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x6D9 JUMPI DUP1 PUSH4 0x64BB43EE EQ PUSH2 0x6E2 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x6F5 JUMPI DUP1 PUSH4 0x694798E6 EQ PUSH2 0x708 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x733 JUMPI DUP1 PUSH4 0x6BA42AAA EQ PUSH2 0x746 JUMPI DUP1 PUSH4 0x6CF262BC EQ PUSH2 0x759 JUMPI DUP1 PUSH4 0x6E2A9CA6 EQ PUSH2 0x76C JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x77F JUMPI DUP1 PUSH4 0x74A8F103 EQ PUSH2 0x792 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x7A5 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x7AE JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x7C1 JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x7C9 JUMPI DUP1 PUSH4 0x8BB6DFA8 EQ PUSH2 0x7F2 JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34D4C61 EQ PUSH2 0x40C JUMPI DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x432 JUMPI DUP1 PUSH4 0xC620BCE EQ PUSH2 0x45D JUMPI DUP1 PUSH4 0xD6A1F87 EQ PUSH2 0x472 JUMPI DUP1 PUSH4 0x1101EB41 EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0x11466D72 EQ PUSH2 0x49A JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x4D8 JUMPI DUP1 PUSH4 0x165E62E7 EQ PUSH2 0x4EB JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x528 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x553 JUMPI DUP1 PUSH4 0x1C5A9D9C EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x586 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x5A6 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x5D1 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x5D9 JUMPI DUP1 PUSH4 0x454C5031 EQ PUSH2 0x60C JUMPI DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x638 JUMPI DUP1 PUSH4 0x52A4DE29 EQ PUSH2 0x64B JUMPI DUP1 PUSH4 0x55EA6C47 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x575288BF EQ PUSH2 0x671 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41F PUSH2 0x41A CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0xBEB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x41F PUSH2 0x440 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x465 PUSH2 0xCF1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x429 SWAP2 SWAP1 PUSH2 0x5D12 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x480 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B4C JUMP JUMPDEST PUSH2 0xD02 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x493 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A21 JUMP JUMPDEST PUSH2 0xE08 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x498 PUSH2 0x4A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B4C JUMP JUMPDEST PUSH2 0xF62 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x4BB CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x4E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x10F1 JUMP JUMPDEST PUSH2 0x4FE PUSH2 0x4F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x1257 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND DUP3 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 SIGNEXTEND SWAP1 DUP3 ADD MSTORE SWAP2 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x429 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x536 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x561 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x581 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x161D JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x599 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x429 SWAP2 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x5B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x1756 JUMP JUMPDEST PUSH2 0x5FC PUSH2 0x5E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x429 JUMP JUMPDEST PUSH2 0x5FC PUSH2 0x61A CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x646 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x17E2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x659 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A21 JUMP JUMPDEST PUSH2 0x19EB JUMP JUMPDEST PUSH2 0x498 PUSH2 0x66C CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x1C1C JUMP JUMPDEST PUSH2 0x498 PUSH2 0x67F CALLDATASIZE PUSH1 0x4 PUSH2 0x5A21 JUMP JUMPDEST PUSH2 0x1CD0 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x692 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH2 0x1F93 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x6A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x2038 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x599 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x41F PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x6D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x20EA JUMP JUMPDEST PUSH2 0x41F PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x6F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x2354 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x703 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x23D6 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x716 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x741 CALLDATASIZE PUSH1 0x4 PUSH2 0x5C0D JUMP JUMPDEST PUSH2 0x248E JUMP JUMPDEST PUSH2 0x5FC PUSH2 0x754 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x24EE JUMP JUMPDEST PUSH2 0x41F PUSH2 0x767 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x254E JUMP JUMPDEST PUSH2 0x498 PUSH2 0x77A CALLDATASIZE PUSH1 0x4 PUSH2 0x5A21 JUMP JUMPDEST PUSH2 0x2684 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x78D CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x27D3 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x7A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x2870 JUMP JUMPDEST PUSH2 0x41F PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x599 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x465 PUSH2 0x296B JUMP JUMPDEST PUSH2 0x599 PUSH2 0x7D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x800 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x2977 JUMP JUMPDEST PUSH2 0x5FC PUSH2 0x813 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x836 CALLDATASIZE PUSH1 0x4 PUSH2 0x5C0D JUMP JUMPDEST PUSH2 0x2A1A JUMP JUMPDEST PUSH2 0x498 PUSH2 0x849 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH2 0x2A78 JUMP JUMPDEST PUSH2 0x465 PUSH2 0x2B66 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x864 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B78 JUMP JUMPDEST PUSH2 0x2B72 JUMP JUMPDEST PUSH2 0x599 PUSH2 0x877 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x8A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x2C88 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x8B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x59D6 JUMP JUMPDEST PUSH2 0x2D40 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x8C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x8F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B4C JUMP JUMPDEST PUSH2 0x2F10 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x904 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B4C JUMP JUMPDEST PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x917 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x41F PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x940 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x3244 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x953 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x32F8 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x966 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH2 0x336E JUMP JUMPDEST PUSH2 0x5FC PUSH2 0x979 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x99C CALLDATASIZE PUSH1 0x4 PUSH2 0x5C0D JUMP JUMPDEST PUSH2 0x37ED JUMP JUMPDEST PUSH2 0x41F PUSH2 0x9AF CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x9DA CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x384D JUMP JUMPDEST PUSH2 0x498 PUSH2 0x9ED CALLDATASIZE PUSH1 0x4 PUSH2 0x5C0D JUMP JUMPDEST PUSH2 0x3A72 JUMP JUMPDEST PUSH2 0x5FC PUSH2 0xA00 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xA23 CALLDATASIZE PUSH1 0x4 PUSH2 0x5AB5 JUMP JUMPDEST PUSH2 0x3AD2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xA36 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x3B94 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x599 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xA5C CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x3C59 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xA6F CALLDATASIZE PUSH1 0x4 PUSH2 0x5C0D JUMP JUMPDEST PUSH2 0x3CF6 JUMP JUMPDEST PUSH2 0x41F PUSH2 0xA82 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xAAD CALLDATASIZE PUSH1 0x4 PUSH2 0x5A62 JUMP JUMPDEST PUSH2 0x3D7A JUMP JUMPDEST PUSH2 0x498 PUSH2 0xAC0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A21 JUMP JUMPDEST PUSH2 0x3FB1 JUMP JUMPDEST PUSH2 0x41F PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x41F PUSH2 0xADC CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xAFC CALLDATASIZE PUSH1 0x4 PUSH2 0x5C0D JUMP JUMPDEST PUSH2 0x412E JUMP JUMPDEST PUSH2 0x498 PUSH2 0xB0F CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x418E JUMP JUMPDEST PUSH2 0x599 PUSH2 0xB22 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xB4B CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x422B JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x599 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x41F PUSH2 0xB71 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xB91 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A21 JUMP JUMPDEST PUSH2 0x42DF JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x599 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xBB7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x4524 JUMP JUMPDEST PUSH2 0x5FC PUSH2 0xBCA CALLDATASIZE PUSH1 0x4 PUSH2 0x5AFB JUMP JUMPDEST PUSH2 0x45DC JUMP JUMPDEST PUSH2 0x41F PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xBE6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B4C JUMP JUMPDEST PUSH2 0x46C5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xBF7 DUP4 PUSH2 0x254E JUMP JUMPDEST PUSH1 0x22 SLOAD SWAP1 SWAP2 POP TIMESTAMP SWAP1 PUSH2 0xC12 SWAP1 PUSH2 0xC0D SWAP1 DUP4 PUSH2 0x5E93 JUMP JUMPDEST PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO PUSH2 0xCB6 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST LT PUSH2 0xC93 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC82 SWAP2 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST PUSH2 0xC8C SWAP1 DUP3 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 POP PUSH2 0xCCC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC8C SWAP1 DUP3 PUSH2 0x5E93 JUMP JUMPDEST PUSH2 0xCBF TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH2 0xCC9 SWAP1 DUP3 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0xCD6 DUP2 DUP4 PUSH2 0x47CF JUMP JUMPDEST PUSH2 0xCDF DUP6 PUSH2 0x2977 JUMP JUMPDEST PUSH2 0xCE9 SWAP2 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCFD PUSH1 0x26 PUSH2 0x47F9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD0F PUSH1 0x26 DUP5 PUSH2 0x480D JUMP JUMPDEST ISZERO PUSH2 0xE02 JUMPI PUSH1 0x0 PUSH2 0xD1F DUP5 PUSH2 0x1257 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0xE00 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xD60 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xD5B SWAP1 PUSH2 0x5F05 JUMP JUMPDEST PUSH2 0xD66 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH2 0xDF7 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0xDA2 SWAP2 DUP10 SWAP2 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x5DC9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDCE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDF2 SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST PUSH2 0x482F JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xE02 JUMP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0xE44 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 SLOAD PUSH2 0xE51 SWAP1 TIMESTAMP PUSH2 0x5DF8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0xEA0 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0xEB1 SWAP1 POP DUP5 DUP5 DUP5 PUSH2 0x4840 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xEF0 JUMPI POP PUSH1 0x21 SLOAD PUSH2 0xEEE DUP3 DUP7 PUSH2 0x4A4E JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0xF0E JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE DUP6 PUSH1 0x40 MLOAD PUSH2 0xF53 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xF93 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF9E PUSH1 0x15 DUP3 PUSH2 0x480D JUMP JUMPDEST PUSH2 0xFBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFC3 DUP2 PUSH2 0x4B6C JUMP JUMPDEST ISZERO PUSH2 0x101E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5FBD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1015 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x109D JUMPI PUSH2 0x1047 DUP2 PUSH2 0x4D42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5FBD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1094 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH2 0x10A8 DUP2 DUP5 DUP5 PUSH2 0x4DD0 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 DUP4 DUP3 AND SWAP2 AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH2 0x10D4 PUSH2 0x4EB4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x111C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1143 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x11A4 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11F4 SWAP2 SWAP1 PUSH2 0x5BAF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x127D TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ ISZERO PUSH2 0x12F3 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1307 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xC0D SWAP2 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 SWAP2 POP DUP2 EQ ISZERO PUSH2 0x146B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x6 SIGNEXTEND PUSH2 0x1374 TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH2 0x137E SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1391 JUMPI PUSH2 0x1391 PUSH2 0x5F6E JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD SWAP3 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP2 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x13ED SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C9D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1419 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x143D SWAP2 SWAP1 PUSH2 0x5BCA JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP PUSH2 0x1457 SWAP2 DUP4 SWAP2 POP PUSH2 0x5E43 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP PUSH2 0x15F4 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 GT ISZERO PUSH2 0x15F4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x14B8 TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH2 0x14C2 SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x14D5 JUMPI PUSH2 0x14D5 PUSH2 0x5F6E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x22 SLOAD PUSH2 0x14FB TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH2 0x1505 SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST PUSH2 0x150F SWAP2 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x1522 JUMPI PUSH2 0x1522 PUSH2 0x5F6E JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP3 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x157A SWAP3 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C9D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15CA SWAP2 SWAP1 PUSH2 0x5BCA JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP SWAP2 POP PUSH2 0x15E5 SWAP1 DUP3 SWAP1 PUSH2 0x5E43 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x160D JUMPI PUSH2 0x1603 TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1615 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP5 ADD MSTORE JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x164E JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x168F JUMPI PUSH1 0x40 MLOAD PUSH4 0x6258F481 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x16D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFD0EEEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP2 SWAP1 SSTORE SWAP1 PUSH2 0x1703 SWAP1 DUP4 PUSH2 0x4ECE JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3673530133B6DA67E9854F605B0CFA7BB9798CD33C18036DFC10D8DA7C4D4A75 DUP4 PUSH1 0x40 MLOAD PUSH2 0x174A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1781 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x17D8 SWAP2 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x180E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP1 PUSH2 0x5D92 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x1853 JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x1896 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x18C7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP1 DUP7 MSTORE SWAP2 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SLOAD PUSH1 0x1B SLOAD SWAP1 SWAP3 SWAP2 AND EQ ISZERO PUSH2 0x195A JUMPI PUSH1 0x1C SLOAD PUSH1 0x40 MLOAD PUSH4 0x140E25AD PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xA0712D68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1941 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1955 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x12 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP2 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x19A2 SWAP2 DUP4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x2717EAD6B9200DD235AAD468C9809EA400FE33AC69B5BFAA6D3E90FC922B6398 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x1A0E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP1 PUSH2 0x5D92 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1A1E PUSH1 0x26 DUP4 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x1A3B JUMPI PUSH1 0x40 MLOAD PUSH4 0xE0B6AEAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1A46 PUSH1 0x15 DUP5 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x1A63 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1A85 SWAP1 DUP4 PUSH2 0x5040 JUMP JUMPDEST POP PUSH2 0x1A8F DUP4 PUSH2 0x5055 JUMP JUMPDEST PUSH1 0x21 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1ACD SWAP1 PUSH2 0x1AC7 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST DUP5 PUSH2 0x4A4E JUMP JUMPDEST LT ISZERO PUSH2 0x1AEC JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5FBD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1B39 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x1B56 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x50B3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1B8D SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1BA0 SWAP1 POP PUSH2 0xDF2 DUP3 DUP5 PUSH2 0x4A4E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1BC8 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 SWAP1 DUP7 AND SWAP1 PUSH32 0x4E186BC75A2220191B826BAFF3EE63C3E970E94E58A9007FF94C9A7B8E6EBB3F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1C4C JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1C85 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0xE02B2375D8FB4AEF3E5BC5D53BFFCF70B6F185C5C93E69DCBE8B6CFC58E837E2 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x1CF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP1 PUSH2 0x5D92 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1D03 PUSH1 0x15 DUP5 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x1D20 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1D4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x822D97 PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1D7D SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DCD SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST SWAP1 POP PUSH2 0x1DE4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x50B3 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E13 SWAP2 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E3F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E63 SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST PUSH2 0x1E6D SWAP2 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2710 PUSH1 0x24 SLOAD DUP4 PUSH2 0x1E82 SWAP2 SWAP1 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x1E8C SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E98 DUP2 DUP4 PUSH2 0x5E93 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1ECF SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x17 SLOAD PUSH2 0x1F0C SWAP3 AND DUP4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1F2E SWAP1 DUP7 PUSH2 0x5040 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEC1A37D4A331A5059081E0FB5DA1735E7890900CD215A4FB1E9F2779FD7B83EB DUP6 PUSH1 0x40 MLOAD PUSH2 0x1F7E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x1FCF JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x2074 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x211B JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2126 PUSH1 0x15 DUP3 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x2142 JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x214B DUP2 PUSH2 0x4B6C JUMP JUMPDEST ISZERO PUSH2 0x21A6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5FBD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x219D SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1B SLOAD DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0x435B21C1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP3 DUP4 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x435B21C1 SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2225 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2249 SWAP2 SWAP1 PUSH2 0x5C3F JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x2259 PUSH2 0x4EB4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2269 DUP3 DUP5 DUP7 DUP9 PUSH2 0x50F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 GT ISZERO PUSH2 0x2303 JUMPI PUSH2 0x2295 DUP7 PUSH2 0x4D42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5FBD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x22E2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x22F2 PUSH2 0x4EB4 JUMP JUMPDEST SWAP2 POP PUSH2 0x2300 DUP3 DUP5 DUP7 DUP9 PUSH2 0x50F1 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x230E DUP7 DUP9 DUP4 PUSH2 0x4DD0 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP4 DUP11 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x237F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x238A PUSH1 0x26 DUP3 PUSH2 0x514E JUMP JUMPDEST PUSH2 0x23A7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8D08B1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x51199D699BDFD516FA88DD0D2F8487C40C147B4867ACAA23ADC8D4DF6B098E56 DUP2 PUSH1 0x40 MLOAD PUSH2 0x124C SWAP2 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2401 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x243B JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x24B9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x124C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x24F8 PUSH2 0x4EB4 JUMP JUMPDEST PUSH1 0x2E SSTORE PUSH2 0x2506 PUSH1 0x3 DUP4 PUSH2 0x480D JUMP JUMPDEST ISZERO PUSH2 0x1618 JUMPI PUSH32 0x4851CAD52E624C8F7A1D44C28A80DB05988BA2451FC0DB6B0EC338D8ECA95AFB PUSH1 0x2E SLOAD PUSH1 0x40 MLOAD PUSH2 0x253E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2573 SWAP1 PUSH2 0x5163 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x267E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x259C SWAP1 DUP4 PUSH2 0x516D JUMP JUMPDEST SWAP1 POP PUSH2 0x25A9 PUSH1 0x26 DUP3 PUSH2 0x480D JUMP JUMPDEST ISZERO PUSH2 0x266B JUMPI PUSH1 0x0 PUSH2 0x25B9 DUP3 PUSH2 0x1257 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x2669 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x25FA JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x25F5 SWAP1 PUSH2 0x5F05 JUMP JUMPDEST PUSH2 0x2600 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SLOAD PUSH1 0x22 SLOAD SWAP2 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH2 0x265B SWAP5 SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0xA0D27107 SWAP3 PUSH2 0xDA2 SWAP3 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x5DC9 JUMP JUMPDEST PUSH2 0x2665 SWAP1 DUP7 PUSH2 0x5DF8 JUMP JUMPDEST SWAP5 POP POP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x2676 DUP2 PUSH2 0x5ED6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2552 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x26B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x26ED JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x26F8 DUP4 DUP4 DUP4 PUSH2 0x4840 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH2 0x272C SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CF9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2746 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x2776 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x2773 SWAP2 DUP2 ADD SWAP1 PUSH2 0x5BAF JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x277F JUMPI PUSH2 0x2781 JUMP JUMPDEST POP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6E10247C3C094D220EE99436C164B7F38D63B335A20ED817CBEFAEE4BB02D20E DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x27C6 SWAP3 SWAP2 SWAP1 PUSH2 0x5CF9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x27FE JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2825 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x28A0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x28D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x28E4 PUSH1 0x3 DUP3 PUSH2 0x514E JUMP JUMPDEST POP PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP6 AND DUP1 DUP4 MSTORE SWAP4 DUP2 MSTORE DUP5 DUP3 KECCAK256 SLOAD SWAP3 DUP3 MSTORE PUSH1 0x13 DUP2 MSTORE DUP5 DUP3 KECCAK256 DUP5 DUP4 MSTORE SWAP1 MSTORE SWAP3 SWAP1 SWAP3 KECCAK256 SLOAD PUSH2 0x2932 SWAP3 DUP5 SWAP3 SWAP2 PUSH2 0x5179 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x38A17B9B553C0C3FC2ED14B957A5D8420A1666FD2EFE5C1B3FE5F23EEA61BB3 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCFD PUSH1 0x15 PUSH2 0x47F9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2983 DUP4 PUSH2 0x254E JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x29AD SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST LT ISZERO PUSH2 0xE02 JUMPI PUSH1 0x0 DUP2 GT PUSH2 0x29D9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2A13 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x2A09 SWAP1 DUP4 SWAP1 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x2A13 SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST SWAP2 POP PUSH2 0x267E JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2A45 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0x124C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x2AB4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2AE7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAFE7AD49 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP6 DUP9 AND SWAP6 DUP7 OR SWAP1 SSTORE PUSH1 0x2D DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE SWAP1 MLOAD PUSH32 0xFF0456758201108DE53C0FF04C69988D4678FF455B2CE6F733328CF85722C04C SWAP1 PUSH2 0x2B59 SWAP1 DUP6 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCFD PUSH1 0x3 PUSH2 0x47F9 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2B9D JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2BC4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2C25 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 DUP4 ISZERO PUSH2 0x8FC MUL SWAP1 DUP5 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2C1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x2C39 JUMP JUMPDEST PUSH2 0x2C39 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP3 DUP5 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP6 SWAP1 MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH32 0x9A3055DED8C8B5F21BBF4946C5AFAB6E1FA8B3F057922658E5E1ADE125FB0B1E SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2CB3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2CED JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x2D7C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2DA3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2DE6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x2E2B JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2E65 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x12 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE SWAP1 PUSH2 0x2EB2 SWAP1 DUP5 DUP4 PUSH2 0x4FE5 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFDB7893BF11F50C621E59CC7F1CF540E94295CB27CA869EC7ED7618CA7928862 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2F01 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x2F33 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP1 PUSH2 0x5D92 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2F68 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2F73 PUSH1 0x15 CALLER PUSH2 0x480D JUMP JUMPDEST ISZERO PUSH2 0x2F91 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD7229C43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F SLOAD PUSH2 0x2F9E SWAP1 TIMESTAMP PUSH2 0x5DF8 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2FE9 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3001 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3015 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3039 SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST SWAP1 POP PUSH2 0x3050 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x50B3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x307E SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3096 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30CE SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST PUSH2 0x30D8 SWAP2 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x10 DUP3 MSTORE DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP3 SWAP5 POP DUP5 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x3122 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 CALLER SWAP1 PUSH32 0xA7E66869262026842E8D81F5E6806CDC8D846E27C824E2E22F4FE51442771B34 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x20 SLOAD PUSH2 0x317E SWAP1 TIMESTAMP PUSH2 0x5DF8 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x8 DUP2 MSTORE DUP3 DUP3 KECCAK256 SWAP4 DUP3 MSTORE SWAP3 SWAP1 SWAP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x31CA SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x3202 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE SWAP1 PUSH1 0x20 ADD PUSH2 0x174A JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x326F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x32A8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3323 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x33AA JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x33E9 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x3407 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 AND SWAP1 DUP4 AND EQ PUSH2 0x3444 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCED616B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3476 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x3496 JUMPI PUSH1 0x40 MLOAD PUSH4 0x56248E97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x349F DUP4 PUSH2 0x5055 JUMP JUMPDEST PUSH2 0x34A8 DUP3 PUSH2 0x5055 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x34C9 SWAP1 PUSH2 0x5163 JUMP JUMPDEST GT ISZERO PUSH2 0x35AB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x34F1 SWAP1 DUP3 PUSH2 0x516D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x353F SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP3 SWAP1 SSTORE SWAP2 DUP2 MSTORE PUSH1 0xC SWAP1 SWAP2 MSTORE KECCAK256 PUSH2 0x3581 SWAP1 DUP3 PUSH2 0x514E JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x35A4 SWAP1 DUP3 PUSH2 0x5040 JUMP JUMPDEST POP POP PUSH2 0x34A8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x35CC SWAP1 PUSH2 0x5163 JUMP JUMPDEST GT ISZERO PUSH2 0x36AE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x35F4 SWAP1 DUP3 PUSH2 0x516D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x3642 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE SWAP3 DUP7 AND DUP3 MSTORE PUSH1 0xD SWAP1 MSTORE KECCAK256 PUSH2 0x3684 SWAP1 DUP3 PUSH2 0x5040 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x36A7 SWAP1 DUP3 PUSH2 0x514E JUMP JUMPDEST POP POP PUSH2 0x35AB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x36E0 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x3724 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0x29 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x375A PUSH1 0x15 DUP5 PUSH2 0x514E JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x2D DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 DUP9 AND DUP1 DUP6 MSTORE SWAP6 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x2C SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9B712B63E3FB1325FA042D3C238CE8144937875065900528EA1E4F3B00F379F2 SWAP1 PUSH2 0x2B59 SWAP1 DUP7 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3818 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x124C JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3878 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3883 PUSH1 0x26 DUP3 PUSH2 0x5040 JUMP JUMPDEST PUSH2 0x38A0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF25E6B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3911 SWAP2 SWAP1 PUSH2 0x5980 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 DUP4 AND SWAP4 DUP5 OR SWAP1 SSTORE PUSH1 0x1D SLOAD SWAP1 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0x696A437B SWAP2 PUSH2 0x3965 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x397D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3991 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39B5 SWAP2 SWAP1 PUSH2 0x5BAF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x39E5 DUP2 PUSH2 0x1257 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 DUP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xABFA8DB4D238FA78BF4E15FCC91328DD35F3978F200E2857A56BB719732B7B0B SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3A9D JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x124C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3B02 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3B3B JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3B47 DUP5 DUP5 DUP5 DUP5 PUSH2 0x5179 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH32 0x10A73DE7AB6E9023AA6E2BC23F7ABF4DCEF591487E7E55F44C00E34FE60D56DB PUSH2 0x3B7D DUP5 DUP7 PUSH2 0x5DF8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH2 0x3B9F PUSH1 0x15 DUP3 PUSH2 0x480D JUMP JUMPDEST ISZERO PUSH2 0x3BBD JUMPI PUSH1 0x40 MLOAD PUSH4 0x809740D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3BF7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F3D3205 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3C02 PUSH1 0x15 DUP3 PUSH2 0x5040 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP2 PUSH32 0xED3FAEF50715743626CD57DE74281A2B17CDBFC11C0486FEDA541FB911E0293D SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3C84 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x3CAB JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3D21 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x3D45 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0x124C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x3D9D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP1 PUSH2 0x5D92 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 AND CALLER EQ PUSH2 0x3DDE JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3E10 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x3E2F JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E0B4075 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP4 GT ISZERO PUSH2 0x3E75 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24AE82D PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3EAF JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x3EE6 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x3F00 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP4 DUP6 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3F4E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3F4C SWAP1 DUP6 PUSH2 0x514E JUMP JUMPDEST POP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x53E982DD9EC088D634C74C98FBBC161F808B4B6469A26C657120B9A31CB34BFE DUP7 PUSH1 0x40 MLOAD PUSH2 0x3F9D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3FE2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x401C JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4027 PUSH1 0x15 DUP3 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x4043 JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4089 JUMPI PUSH1 0x40 MLOAD PUSH4 0x356680B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x40C0 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x40DA SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 DUP5 PUSH2 0x4FE5 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH2 0x4110 PUSH2 0x4EB4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4159 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x124C JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x41B9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x41E0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4256 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x428F JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x430F JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4348 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x436A SWAP1 DUP4 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x4387 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EDA7A11 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x43CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x919BED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH2 0x4400 SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CF9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x441A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x444A JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x4447 SWAP2 DUP2 ADD SWAP1 PUSH2 0x5BAF JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x4453 JUMPI PUSH2 0x4455 JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x448C SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x44DF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x44DD SWAP1 DUP4 PUSH2 0x514E JUMP JUMPDEST POP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x20262B97130B5CB8F80624EED2733DF2B05DB4A0789B4A3D0157E1D318333104 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x27C6 SWAP3 SWAP2 SWAP1 PUSH2 0x5CF9 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4554 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x458E JUMPI PUSH1 0x40 MLOAD PUSH4 0x4EE891B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x70125A1C0F5202217AAE14EC399ABFAAA13C2FD98A91D43BD3A897DD4751E80 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45E6 PUSH2 0x4EB4 JUMP JUMPDEST PUSH1 0x2E SSTORE PUSH2 0x45F4 PUSH1 0x3 DUP8 PUSH2 0x480D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4625 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP10 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP5 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x4649 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x4678 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH2 0x4675 SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST LT ISZERO JUMPDEST ISZERO PUSH2 0x46BC JUMPI PUSH32 0x4851CAD52E624C8F7A1D44C28A80DB05988BA2451FC0DB6B0EC338D8ECA95AFB PUSH1 0x2E SLOAD PUSH1 0x40 MLOAD PUSH2 0x46B0 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x46F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x46FB PUSH1 0x15 DUP4 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x4718 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4721 DUP3 PUSH2 0x5055 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4749 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x5ABCF5031FDBD3BADB9D1E09094208DE329AEE72730E87650F346584205D23D1 SWAP3 PUSH2 0x47A9 SWAP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP3 PUSH2 0x47C5 SWAP2 SWAP1 PUSH2 0x5EF1 JUMP JUMPDEST PUSH2 0xE02 SWAP1 DUP4 PUSH2 0x5E93 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP4 LT ISZERO PUSH2 0x267E JUMPI PUSH1 0x22 SLOAD PUSH2 0x47E8 DUP4 DUP6 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x47F2 SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST SWAP1 POP PUSH2 0xE02 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x4806 DUP4 PUSH2 0x52CF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x4806 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE02 DUP3 PUSH1 0x22 SLOAD PUSH1 0x23 SLOAD PUSH2 0x532B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x4863 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP1 PUSH2 0x5D92 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x4889 SWAP1 DUP4 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x48A5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x41CFA5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x48EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x435B5625 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x48F4 DUP4 PUSH2 0x53D9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4903 PUSH2 0xDF2 DUP4 DUP6 PUSH2 0x4A4E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x49B9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x4954 SWAP1 DUP4 SWAP1 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x495E SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x4986 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x49B3 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x49F0 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x4A43 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x4A41 SWAP1 DUP5 PUSH2 0x514E JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0xE02 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4AC0 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4ABB SWAP1 PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND PUSH2 0x5F05 JUMP JUMPDEST PUSH2 0x4AE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x4B1C SWAP2 DUP9 SWAP2 DUP7 SWAP2 PUSH1 0x4 ADD PUSH2 0x5DC9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4B34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4B48 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCE9 SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B77 TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1618 JUMPI PUSH2 0x4BA7 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xC0D SWAP2 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT PUSH2 0x4C1D JUMPI PUSH2 0x4BCE DUP3 PUSH2 0x53D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x4BFC TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4C43 SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST LT PUSH2 0x4C9F JUMPI PUSH2 0x4C51 DUP3 PUSH2 0x53D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SSTORE PUSH1 0x22 SLOAD PUSH1 0x29 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x4C90 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x1 SWAP2 POP PUSH2 0x1618 SWAP1 POP JUMP JUMPDEST PUSH2 0x4CA8 TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1618 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4CE9 DUP4 PUSH2 0x53D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP3 SWAP2 PUSH2 0x4D19 SWAP2 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x4D23 SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4D87 SWAP1 PUSH2 0x4D69 SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x47CF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x4DAF SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x4E09 JUMPI PUSH1 0x40 MLOAD PUSH4 0x356680B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4E3E SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1B SLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4E7D SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4EAA SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3F GAS PUSH2 0x4EC4 SWAP1 PUSH1 0x40 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0xCFD SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x4F07 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMPDEST PUSH2 0x4F12 PUSH1 0x3 DUP5 PUSH2 0x5040 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x8 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE SWAP2 DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 DUP4 SWAP3 PUSH2 0x4F66 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xE02 JUMPI PUSH1 0x1B SLOAD PUSH1 0x40 MLOAD PUSH4 0x852CD8D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x42966C68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4FC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4FDB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x503B DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x5004 SWAP3 SWAP2 SWAP1 PUSH2 0x5CF9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x53FE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4806 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x54D0 JUMP JUMPDEST PUSH2 0x505E DUP2 PUSH2 0x4B6C JUMP JUMPDEST POP PUSH2 0x5068 DUP2 PUSH2 0x4D42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x5097 SWAP2 SWAP1 PUSH2 0x551F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x50EB SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x5004 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 DUP7 PUSH1 0x2E SLOAD PUSH2 0x5103 SWAP2 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST PUSH2 0x510D SWAP2 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP5 PUSH2 0x2710 PUSH2 0x5126 DUP7 DUP6 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x5130 SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST PUSH2 0x513A SWAP2 SWAP1 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x5144 SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4806 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x5535 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE02 DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4806 DUP4 DUP4 PUSH2 0x5628 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x5251 JUMPI PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 PUSH4 0xA9059CBB SWAP2 AND PUSH2 0x51AE DUP5 DUP7 PUSH2 0x5DF8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51CB SWAP3 SWAP2 SWAP1 PUSH2 0x5CF9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x51E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x5215 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x5212 SWAP2 DUP2 ADD SWAP1 PUSH2 0x5BAF JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x524F JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x5243 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5248 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP PUSH2 0x5251 JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x5288 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x52C4 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x531F JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x530B JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x5365 JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x535A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x4806 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x5371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x53E2 DUP2 PUSH2 0x5652 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5453 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5836 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x503B JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x5471 SWAP2 SWAP1 PUSH2 0x5BAF JUMP JUMPDEST PUSH2 0x503B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1805 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x5517 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xE02 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xE02 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x552E JUMPI DUP2 PUSH2 0x4806 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x561E JUMPI PUSH1 0x0 PUSH2 0x5559 PUSH1 0x1 DUP4 PUSH2 0x5E93 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x556D SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x55D2 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x558D JUMPI PUSH2 0x558D PUSH2 0x5F6E JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x55B0 JUMPI PUSH2 0x55B0 PUSH2 0x5F6E JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x55E3 JUMPI PUSH2 0x55E3 PUSH2 0x5F58 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xE02 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0xE02 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x563F JUMPI PUSH2 0x563F PUSH2 0x5F6E JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x565D TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x56F4 JUMPI PUSH1 0x1E SLOAD PUSH2 0x5695 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1257 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x5718 SWAP1 PUSH2 0x5163 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x267E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x5741 SWAP1 DUP4 PUSH2 0x516D JUMP JUMPDEST SWAP1 POP PUSH2 0x574E PUSH1 0x26 DUP3 PUSH2 0x480D JUMP JUMPDEST ISZERO PUSH2 0x5823 JUMPI PUSH2 0x575C TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x57E2 JUMPI PUSH2 0x5786 DUP2 PUSH2 0x1257 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x5816 SWAP1 PUSH2 0xDF2 SWAP1 DUP4 PUSH2 0x4A4E JUMP JUMPDEST PUSH2 0x5820 SWAP1 DUP5 PUSH2 0x5DF8 JUMP JUMPDEST SWAP3 POP JUMPDEST POP DUP1 PUSH2 0x582E DUP2 PUSH2 0x5ED6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x56F7 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCE9 DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 DUP5 EXTCODESIZE PUSH2 0x588F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1805 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x58AB SWAP2 SWAP1 PUSH2 0x5C6D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x58E8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x58ED JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x58FD DUP3 DUP3 DUP7 PUSH2 0x5908 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x5917 JUMPI POP DUP2 PUSH2 0x4806 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x5927 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP2 SWAP1 PUSH2 0x5D5F JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x6 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x1618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5975 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4806 DUP2 PUSH2 0x5F84 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5992 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4806 DUP2 PUSH2 0x5F84 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x59B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x59BB DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x59CB DUP2 PUSH2 0x5F84 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x59EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x59F6 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x5A06 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x5A16 DUP2 PUSH2 0x5F84 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5A36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5A41 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x5A51 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5A78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5A83 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x5A93 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x5AAA DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5ACB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5AD6 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x5AE6 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x5B13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x5B1E DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x5B2E DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5B5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5B6A DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5B8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5B98 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x5A16 DUP2 PUSH2 0x5F84 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5BC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4806 DUP3 PUSH2 0x5941 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5BDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5BE8 DUP5 PUSH2 0x5951 JUMP JUMPDEST SWAP3 POP PUSH2 0x5BF6 PUSH1 0x20 DUP6 ADD PUSH2 0x5951 JUMP JUMPDEST SWAP2 POP PUSH2 0x5C04 PUSH1 0x40 DUP6 ADD PUSH2 0x5941 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5C1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5C38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5C54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x5C7F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x5EAA JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 DUP3 ADD SWAP2 SWAP1 PUSH1 0x60 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5CEC JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5CCA JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5D53 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5D2E JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x5D7E DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x5EAA JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x6 SWAP2 SWAP1 SWAP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5E0B JUMPI PUSH2 0x5E0B PUSH2 0x5F2C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5E1F JUMPI PUSH2 0x5E1F PUSH2 0x5F42 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5E3E JUMPI PUSH2 0x5E3E PUSH2 0x5F2C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x5E6E JUMPI PUSH2 0x5E6E PUSH2 0x5F2C JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x5E89 JUMPI PUSH2 0x5E89 PUSH2 0x5F2C JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x5EA5 JUMPI PUSH2 0x5EA5 PUSH2 0x5F2C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5EC5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5EAD JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x50EB JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x5EEA JUMPI PUSH2 0x5EEA PUSH2 0x5F2C JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5F00 JUMPI PUSH2 0x5F00 PUSH2 0x5F42 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x5F23 JUMPI PUSH2 0x5F23 PUSH2 0x5F2C JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5F99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID CHAINID CALLCODE XOR ADDMOD PUSH26 0xA7123A197CC3828C28955D70D661C70ACBDC02450DAF5F9A9C1C STATICCALL 0xEE EXTCODEHASH 0xD 0xAB 0xA9 DUP4 PUSH30 0x1AB0597ACF34328550E4832D02E24E467825E7C2DD318C3820A264697066 PUSH20 0x58221220C3D0538D6A43AAFC625AE68FB6D81B9F KECCAK256 0xAB 0x2C EXTCODESIZE BLOCKHASH 0xE7 0xC0 EXP GT 0xA5 0xEE 0xAE LOG0 PUSH10 0x909564736F6C63430008 SMOD STOP CALLER ",
              "sourceMap": "100:383:48:-:0;;;702:6:31;667:41;;786:7;749:44;;877:7;834:50;;968:6;925:49;;1057:7;1015:49;;1135:2;1105:32;;137:225:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1637:1:0;1742:7;:22;290:11:48;303:13;318:9;329:14;345:13;303;318:9;329:14;345:13;290:11;;-1:-1:-1;;;;;357:25:28;;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;;;-1:-1:-1;;;;;422:24:28;;;;;;;1479:12:31;:28;;;;;;;;;;1513:8;:20;;;;;;;;;;1539:13;:30;;;;;;;;;;1575:12;:28;;;;;;;;;;;;-1:-1:-1;1609:28:31;;;:14;:28;;;;;;;:43;;;;;;;;;;;1703:12;;1730;;1689:54;;-1:-1:-1;;;1689:54:31;;1730:12;;;1689:54;;;1179:51:84;1703:12:31;;;;-1:-1:-1;1689:40:31;;1152:18:84;;1689:54:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1658:28:31;;;;;;;;:13;:28;;;;;:85;;-1:-1:-1;;1658:85:31;;;;;;;;;;-1:-1:-1;100:383:48;;-1:-1:-1;;;;;;;;;;;;100:383:48;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:550::-;302:6;310;318;326;334;387:3;375:9;366:7;362:23;358:33;355:53;;;404:1;401;394:12;355:53;427:40;457:9;427:40;:::i;:::-;417:50;;486:49;531:2;520:9;516:18;486:49;:::i;:::-;476:59;;554:49;599:2;588:9;584:18;554:49;:::i;:::-;544:59;;622:49;667:2;656:9;652:18;622:49;:::i;:::-;612:59;;690:50;735:3;724:9;720:19;690:50;:::i;:::-;680:60;;196:550;;;;;;;;:::o;751:277::-;818:6;871:2;859:9;850:7;846:23;842:32;839:52;;;887:1;884;877:12;839:52;919:9;913:16;972:5;965:13;958:21;951:5;948:32;938:60;;994:1;991;984:12;938:60;1017:5;751:277;-1:-1:-1;;;751:277:84:o;1033:203::-;100:383:48;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_activate_9478": {
                  "entryPoint": 20174,
                  "id": 9478,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_add_1372": {
                  "entryPoint": 21712,
                  "id": 1372,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_at_1506": {
                  "entryPoint": 22056,
                  "id": 1506,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_bondedPayment_8852": {
                  "entryPoint": 19920,
                  "id": 8852,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_calculateJobPeriodCredits_7702": {
                  "entryPoint": 22098,
                  "id": 7702,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_calculatePayment_8890": {
                  "entryPoint": 20721,
                  "id": 8890,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@_callOptionalReturn_911": {
                  "entryPoint": 21502,
                  "id": 911,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_contains_1475": {
                  "entryPoint": null,
                  "id": 1475,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_getGasLeft_8907": {
                  "entryPoint": 20148,
                  "id": 8907,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_getReward_7863": {
                  "entryPoint": 18479,
                  "id": 7863,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_length_1489": {
                  "entryPoint": null,
                  "id": 1489,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_period_7847": {
                  "entryPoint": 18357,
                  "id": 7847,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_phase_7831": {
                  "entryPoint": 18383,
                  "id": 7831,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_quoteLiquidity_7909": {
                  "entryPoint": 19022,
                  "id": 7909,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_remove_1456": {
                  "entryPoint": 21813,
                  "id": 1456,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_rewardJobCredits_7597": {
                  "entryPoint": 19778,
                  "id": 7597,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_settleJobAccountance_7938": {
                  "entryPoint": 20565,
                  "id": 7938,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_slash_9078": {
                  "entryPoint": 20857,
                  "id": 9078,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_unbondLiquidityFromJob_7802": {
                  "entryPoint": 18496,
                  "id": 7802,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_updateJobCreditsIfNeeded_7567": {
                  "entryPoint": 19308,
                  "id": 7567,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_updateJobPeriod_7612": {
                  "entryPoint": 21465,
                  "id": 7612,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_values_1520": {
                  "entryPoint": 21199,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 5974,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@acceptJobMigration_8291": {
                  "entryPoint": 13166,
                  "id": 8291,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@acceptJobOwnership_8373": {
                  "entryPoint": 8248,
                  "id": 8373,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@activate_9270": {
                  "entryPoint": 5661,
                  "id": 9270,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 11400,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addJob_7999": {
                  "entryPoint": 15252,
                  "id": 7999,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addLiquidityToJob_7283": {
                  "entryPoint": 6635,
                  "id": 7283,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 9174,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addTokenCreditsToJob_6417": {
                  "entryPoint": 7376,
                  "id": 6417,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@add_1658": {
                  "entryPoint": 20544,
                  "id": 1658,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@approveLiquidity_7148": {
                  "entryPoint": 14413,
                  "id": 7148,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@approvedLiquidities_6581": {
                  "entryPoint": 3313,
                  "id": 6581,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@at_1754": {
                  "entryPoint": 20845,
                  "id": 1754,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@bondTime_5611": {
                  "entryPoint": null,
                  "id": 5611,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bond_9206": {
                  "entryPoint": 12048,
                  "id": 9206,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@bondedPayment_8730": {
                  "entryPoint": 3938,
                  "id": 8730,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@changeJobOwnership_8336": {
                  "entryPoint": 8083,
                  "id": 8336,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@contains_1712": {
                  "entryPoint": 18445,
                  "id": 1712,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@directTokenPayment_8806": {
                  "entryPoint": 16305,
                  "id": 8806,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@dispute_5547": {
                  "entryPoint": 17700,
                  "id": 5547,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_5636": {
                  "entryPoint": null,
                  "id": 5636,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@forceLiquidityCreditsToJob_7094": {
                  "entryPoint": 18117,
                  "id": 7094,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@functionCallWithValue_1073": {
                  "entryPoint": null,
                  "id": 1073,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@functionCall_1003": {
                  "entryPoint": 22582,
                  "id": 1003,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@inflationPeriod_5631": {
                  "entryPoint": null,
                  "id": 5631,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@isBondedKeeper_8512": {
                  "entryPoint": 17884,
                  "id": 8512,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "@isContract_932": {
                  "entryPoint": null,
                  "id": 932,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@isKeeper_8454": {
                  "entryPoint": 9454,
                  "id": 8454,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobLiquidityCredits_6715": {
                  "entryPoint": 10615,
                  "id": 6715,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobOwner_8303": {
                  "entryPoint": null,
                  "id": 8303,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPendingOwner_8309": {
                  "entryPoint": null,
                  "id": 8309,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPeriodCredits_6663": {
                  "entryPoint": 9550,
                  "id": 6663,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobTokenCreditsAddedAt_6297": {
                  "entryPoint": null,
                  "id": 6297,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 10603,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keep3rHelper_5602": {
                  "entryPoint": null,
                  "id": 5602,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1Proxy_5598": {
                  "entryPoint": null,
                  "id": 5598,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1_5594": {
                  "entryPoint": null,
                  "id": 5594,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keepers_5506": {
                  "entryPoint": 11110,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@kp3rWethPool_5606": {
                  "entryPoint": null,
                  "id": 5606,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@length_1727": {
                  "entryPoint": 20835,
                  "id": 1727,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@liquidityAmount_6548": {
                  "entryPoint": null,
                  "id": 6548,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@liquidityMinimum_5621": {
                  "entryPoint": null,
                  "id": 5621,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@migrateJob_8070": {
                  "entryPoint": 10872,
                  "id": 8070,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@min_1270": {
                  "entryPoint": 21791,
                  "id": 1270,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@mulDiv_4263": {
                  "entryPoint": 21291,
                  "id": 4263,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@observeLiquidity_7053": {
                  "entryPoint": 4695,
                  "id": 7053,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingJobMigrations_8024": {
                  "entryPoint": null,
                  "id": 8024,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@quoteLiquidity_6849": {
                  "entryPoint": 3330,
                  "id": 6849,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@removeDisputer_6072": {
                  "entryPoint": 16939,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 12868,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@remove_1685": {
                  "entryPoint": 20814,
                  "id": 1685,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@resolve_5577": {
                  "entryPoint": 7196,
                  "id": 5577,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@revokeLiquidity_7171": {
                  "entryPoint": 9044,
                  "id": 7171,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@revoke_9025": {
                  "entryPoint": 10352,
                  "id": 9025,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@rewardPeriodTime_5626": {
                  "entryPoint": null,
                  "id": 5626,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@rewardedAt_6554": {
                  "entryPoint": null,
                  "id": 6554,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@safeTransferFrom_745": {
                  "entryPoint": 20659,
                  "id": 745,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@safeTransfer_719": {
                  "entryPoint": 20453,
                  "id": 719,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@sendDust_5256": {
                  "entryPoint": 11122,
                  "id": 5256,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@setBondTime_5836": {
                  "entryPoint": 14962,
                  "id": 5836,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setFee_5933": {
                  "entryPoint": 9358,
                  "id": 5933,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 13048,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setInflationPeriod_5915": {
                  "entryPoint": 14317,
                  "id": 5915,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rHelper_5717": {
                  "entryPoint": 10195,
                  "id": 5717,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1Proxy_5773": {
                  "entryPoint": 15449,
                  "id": 5773,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1_5745": {
                  "entryPoint": 16782,
                  "id": 5745,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_5818": {
                  "entryPoint": 4337,
                  "id": 5818,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setLiquidityMinimum_5872": {
                  "entryPoint": 16686,
                  "id": 5872,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRewardPeriodTime_5897": {
                  "entryPoint": 15606,
                  "id": 5897,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setUnbondTime_5854": {
                  "entryPoint": 10778,
                  "id": 5854,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@slashLiquidityFromJob_6258": {
                  "entryPoint": 9860,
                  "id": 6258,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@slashTokenFromJob_6210": {
                  "entryPoint": 17119,
                  "id": 6210,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@slash_8980": {
                  "entryPoint": 15058,
                  "id": 8980,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@totalJobCredits_6795": {
                  "entryPoint": 3051,
                  "id": 6795,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@unbondLiquidityFromJob_7351": {
                  "entryPoint": 3592,
                  "id": 7351,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@unbondTime_5616": {
                  "entryPoint": null,
                  "id": 5616,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@unbond_9317": {
                  "entryPoint": 12657,
                  "id": 9317,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 18425,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@verifyCallResult_1208": {
                  "entryPoint": 22792,
                  "id": 1208,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@viewTickOrder_9831": {
                  "entryPoint": null,
                  "id": 9831,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@withdrawLiquidityFromJob_7443": {
                  "entryPoint": 11584,
                  "id": 7443,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@withdrawTokenCreditsFromJob_6507": {
                  "entryPoint": 15738,
                  "id": 6507,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@withdraw_9413": {
                  "entryPoint": 6114,
                  "id": 9413,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@workedAt_6560": {
                  "entryPoint": null,
                  "id": 6560,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@worked_8642": {
                  "entryPoint": 8426,
                  "id": 8642,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_bool_fromMemory": {
                  "entryPoint": 22849,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_int56_fromMemory": {
                  "entryPoint": 22865,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 22883,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 22912,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 22941,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_address": {
                  "entryPoint": 22998,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256": {
                  "entryPoint": 23073,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_address": {
                  "entryPoint": 23138,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_uint256": {
                  "entryPoint": 23221,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256": {
                  "entryPoint": 23291,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 5
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 23372,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_uint256t_address": {
                  "entryPoint": 23416,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 23471,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_int56t_int56t_bool_fromMemory": {
                  "entryPoint": 23498,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 23565,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256_fromMemory": {
                  "entryPoint": 23590,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory": {
                  "entryPoint": 23615,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 23661,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 23689,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 23709,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": 23801,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 23826,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 23903,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 23954,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed": {
                  "entryPoint": 24009,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": 24034,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 24056,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 24080,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 24100,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_int56": {
                  "entryPoint": 24131,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 24211,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 24234,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "increment_t_uint256": {
                  "entryPoint": 24278,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mod_t_uint256": {
                  "entryPoint": 24305,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "negate_t_int56": {
                  "entryPoint": 24325,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 24364,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x12": {
                  "entryPoint": 24386,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x31": {
                  "entryPoint": 24408,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x32": {
                  "entryPoint": 24430,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_address": {
                  "entryPoint": 24452,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:15007:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "71:107:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "81:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "96:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "90:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "90:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "81:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "156:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "165:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "168:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "158:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "158:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "158:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "146:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "139:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "139:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "132:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "132:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "122:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "122:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "115:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "115:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "112:60:84"
                            }
                          ]
                        },
                        "name": "abi_decode_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "50:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "61:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "241:106:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "251:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "266:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "260:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "260:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "251:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "325:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "334:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "337:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "327:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "327:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "327:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "295:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "313:1:84",
                                            "type": "",
                                            "value": "6"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "316:5:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "302:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "302:20:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "292:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "292:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "285:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "285:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "282:59:84"
                            }
                          ]
                        },
                        "name": "abi_decode_int56_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "220:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "231:5:84",
                            "type": ""
                          }
                        ],
                        "src": "183:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "422:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "468:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "477:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "480:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "470:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "470:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "470:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "443:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "452:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "439:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "439:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "464:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "435:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "435:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "432:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "493:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "519:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "506:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "506:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "497:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "563:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "538:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "538:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "538:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "578:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "588:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "578:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "388:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "399:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "411:6:84",
                            "type": ""
                          }
                        ],
                        "src": "352:247:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "685:170:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "731:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "740:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "743:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "733:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "733:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "733:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "706:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "715:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "702:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "702:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "727:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "698:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "698:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "695:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "756:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "775:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "769:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "769:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "760:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "819:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "794:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "794:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "794:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "834:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "844:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "834:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "651:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "662:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "674:6:84",
                            "type": ""
                          }
                        ],
                        "src": "604:251:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "947:301:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "993:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1002:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1005:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "995:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "995:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "995:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "968:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "977:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "964:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "964:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "989:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "960:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "960:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "957:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1018:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1044:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1031:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1031:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1022:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1088:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1063:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1063:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1063:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1103:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1113:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1103:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1127:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1159:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1170:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1155:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1155:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1142:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1142:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1131:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1208:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1183:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1183:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1183:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1225:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1235:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1225:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "905:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "916:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "928:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "936:6:84",
                            "type": ""
                          }
                        ],
                        "src": "860:388:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1357:425:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1403:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1412:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1415:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1405:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1405:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1405:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1378:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1387:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1374:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1374:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1399:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1370:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1370:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1367:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1428:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1454:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1441:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1441:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1432:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1498:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1473:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1473:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1473:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1513:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1523:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1513:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1537:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1569:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1580:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1565:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1565:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1552:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1552:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1541:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1618:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1593:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1593:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1593:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1635:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1645:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1635:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1661:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1693:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1704:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1689:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1689:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1676:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1676:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1665:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1742:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1717:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1717:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1717:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1759:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "1769:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1759:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1307:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1318:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1330:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1338:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1346:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1253:529:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1891:352:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1937:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1946:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1949:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1939:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1939:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1939:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1912:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1921:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1908:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1908:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1933:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1904:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1904:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1901:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1962:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1988:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1975:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1975:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1966:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2032:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2007:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2007:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2007:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2047:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2057:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2047:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2071:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2103:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2114:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2099:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2099:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2086:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2086:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2075:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2152:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2127:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2127:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2127:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2169:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "2179:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2169:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2195:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2222:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2233:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2218:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2218:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2205:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2205:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2195:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1841:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1852:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1864:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1872:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1880:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1787:456:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2369:477:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2416:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2425:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2428:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2418:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2418:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2418:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2390:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2399:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2386:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2386:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2411:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2382:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2382:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2379:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2441:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2467:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2454:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2454:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2445:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2511:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2486:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2486:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2486:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2526:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2536:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2526:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2550:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2582:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2593:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2578:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2578:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2565:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2565:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2554:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2631:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2606:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2606:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2606:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2648:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "2658:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2648:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2674:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2701:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2712:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2697:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2697:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2684:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2684:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2674:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2725:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2757:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2768:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2753:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2753:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2740:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2740:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2729:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2806:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2781:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2781:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2781:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2823:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "2833:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "2823:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2311:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2322:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2334:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2342:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2350:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2358:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2248:598:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2972:404:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3019:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3028:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3031:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3021:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3021:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3021:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2993:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3002:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2989:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2989:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3014:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2985:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2985:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2982:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3044:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3070:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3057:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3057:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3048:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3114:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3089:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3089:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3089:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3129:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3139:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3129:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3153:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3185:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3196:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3181:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3181:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3168:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3168:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3157:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3234:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3209:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3209:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3209:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3251:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "3261:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3251:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3277:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3304:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3315:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3300:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3300:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3287:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3287:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3277:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3328:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3355:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3366:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3351:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3351:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3338:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3338:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "3328:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2914:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2925:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2937:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2945:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2953:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2961:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2851:525:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3519:456:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3566:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3575:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3578:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3568:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3568:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3568:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3540:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3549:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3536:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3536:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3561:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3532:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3532:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3529:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3591:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3617:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3604:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3604:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3595:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3661:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3636:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3636:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3636:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3676:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3686:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3676:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3700:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3732:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3743:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3728:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3728:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3715:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3715:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3704:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3781:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3756:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3756:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3756:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3798:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "3808:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3798:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3824:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3851:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3862:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3847:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3847:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3834:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3834:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3824:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3875:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3902:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3913:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3898:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3898:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3885:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3885:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "3875:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3926:43:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3953:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3964:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3949:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3949:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3936:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3936:33:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3926:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3453:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3464:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3476:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3484:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3492:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "3500:6:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "3508:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3381:594:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4067:228:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4113:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4122:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4125:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4115:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4115:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4115:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4088:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4097:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4084:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4084:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4109:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4080:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4080:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4077:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4138:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4164:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4151:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4151:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4142:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4208:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4183:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4183:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4183:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4223:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4233:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4223:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4247:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4274:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4285:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4270:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4270:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4257:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4257:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4247:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4025:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4036:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4048:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4056:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3980:315:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4404:352:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4450:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4459:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4462:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4452:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4452:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4452:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4425:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4434:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4421:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4421:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4446:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4417:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4417:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4414:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4475:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4501:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4488:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4488:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4479:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4545:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4520:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4520:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4520:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4560:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4570:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4560:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4584:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4611:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4622:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4607:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4607:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4594:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4594:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4584:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4635:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4667:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4678:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4663:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4663:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4650:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4650:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4639:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4716:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4691:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4691:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4691:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4733:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "4743:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4733:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4354:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4365:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4377:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4385:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4393:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4300:456:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4839:124:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4885:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4894:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4897:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4887:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4887:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4887:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4860:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4869:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4856:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4856:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4881:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4852:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4852:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4849:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4910:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4947:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4920:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4920:37:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4910:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4805:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4816:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4828:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4761:202:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5076:256:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5122:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5131:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5134:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5124:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5124:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5124:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5097:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5106:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5093:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5093:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5118:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5089:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5089:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5086:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5147:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5185:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_int56_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5157:27:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5157:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5147:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5204:57:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5246:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5257:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5242:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5242:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_int56_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5214:27:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5214:47:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5204:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5270:56:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5311:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5322:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5307:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5307:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5280:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5280:46:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5270:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int56t_int56t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5026:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5037:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5049:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5057:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5065:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4968:364:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5407:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5453:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5462:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5465:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5455:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5455:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5455:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5428:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5437:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5424:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5424:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5449:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5420:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5420:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5417:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5478:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5501:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5488:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5488:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5478:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5373:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5384:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5396:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5337:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5603:103:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5649:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5658:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5661:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5651:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5651:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5651:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5624:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5633:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5620:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5620:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5645:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5616:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5616:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5613:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5674:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5690:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5684:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5684:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5674:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5569:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5580:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5592:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5522:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5826:191:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5872:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5881:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5884:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5874:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5874:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5874:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5847:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5856:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5843:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5843:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5868:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5839:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5839:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5836:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5897:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5913:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5907:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5907:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5897:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5932:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5952:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5963:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5948:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5948:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5942:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5942:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5932:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5976:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5996:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6007:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5992:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5992:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5986:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5986:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5976:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5776:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5787:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5799:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5807:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5815:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5711:306:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6159:137:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6169:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6189:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6183:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6183:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6173:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6231:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6239:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6227:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6227:17:84"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6246:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6251:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6205:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6205:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6205:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6267:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6278:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6283:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6274:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6274:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "6267:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "6135:3:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6140:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "6151:3:84",
                            "type": ""
                          }
                        ],
                        "src": "6022:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6402:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6412:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6424:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6435:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6420:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6420:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6412:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6454:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6469:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6485:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6490:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "6481:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6481:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6494:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "6477:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6477:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6465:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6465:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6447:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6447:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6447:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6371:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6382:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6393:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6301:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6666:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6676:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6688:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6699:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6684:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6684:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6676:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6711:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6729:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6734:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6725:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6725:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6738:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "6721:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6721:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6715:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6756:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6771:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6779:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6767:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6767:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6749:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6749:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6749:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6803:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6814:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6799:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6799:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6823:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6831:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6819:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6819:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6792:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6792:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6792:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6855:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6866:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6851:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6851:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6871:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6844:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6844:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6844:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6619:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6630:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6638:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6646:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6657:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6509:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7066:567:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7076:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7094:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7105:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7090:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7090:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7080:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7124:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7139:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7155:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7160:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "7151:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7151:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7164:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "7147:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7147:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7135:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7135:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7117:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7117:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7117:51:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7177:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7187:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7181:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7209:9:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7220:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7205:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7205:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7225:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7198:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7198:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7198:30:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7237:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "7248:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "7241:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7263:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7283:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7277:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7277:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "7267:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7306:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7314:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7299:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7299:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7299:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7330:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7341:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7352:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7337:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7337:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "7330:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7364:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7382:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7390:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7378:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7378:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "7368:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7402:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7411:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "7406:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7470:137:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "7491:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "7506:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "7500:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "7500:13:84"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "7515:10:84",
                                              "type": "",
                                              "value": "0xffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "7496:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7496:30:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7484:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7484:43:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7484:43:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7540:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "7551:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "7556:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7547:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7547:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "7540:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7572:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "7586:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "7594:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7582:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7582:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "7572:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "7432:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7435:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7429:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7429:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "7443:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7445:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "7454:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7457:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7450:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7450:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "7445:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "7425:3:84",
                                "statements": []
                              },
                              "src": "7421:186:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7616:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "7624:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7616:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7027:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7038:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7046:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7057:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6889:744:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7767:145:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7777:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7789:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7800:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7785:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7785:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7777:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7819:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7834:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7850:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7855:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "7846:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7846:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7859:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "7842:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7842:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7830:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7830:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7812:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7812:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7812:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7883:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7894:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7879:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7879:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7899:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7872:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7872:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7872:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7728:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7739:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7747:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7758:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7638:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8074:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8084:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8096:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8107:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8092:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8092:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8084:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8119:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8137:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8142:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8133:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8133:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8146:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "8129:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8129:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8123:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8164:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8179:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8187:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8175:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8175:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8157:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8157:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8157:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8211:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8222:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8207:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8207:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8227:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8200:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8200:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8200:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8254:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8265:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8250:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8250:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "8274:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8282:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8270:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8270:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8243:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8243:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8243:43:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8027:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8038:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8046:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8054:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8065:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7917:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8448:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8458:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8468:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8462:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8479:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8497:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8508:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8493:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8493:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8483:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8527:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8538:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8520:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8520:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8520:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8550:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "8561:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "8554:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8576:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8596:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8590:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8590:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "8580:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8619:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8627:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8612:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8612:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8612:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8643:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8654:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8665:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8650:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8650:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "8643:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8677:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8695:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8703:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8691:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8691:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "8681:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8715:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8724:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "8719:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8783:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "8804:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "8819:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "8813:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "8813:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "8836:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "8841:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "8832:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "8832:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "8845:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "8828:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "8828:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "8809:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "8809:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "8797:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8797:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8797:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "8862:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "8873:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "8878:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "8869:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8869:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "8862:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "8894:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "8908:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "8916:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "8904:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8904:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "8894:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "8745:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8748:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8742:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8742:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "8756:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "8758:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "8767:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "8770:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "8763:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8763:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "8758:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "8738:3:84",
                                "statements": []
                              },
                              "src": "8734:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8938:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "8946:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8938:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8417:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8428:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8439:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8297:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9055:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9065:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9077:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9088:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9073:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9073:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9065:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9107:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "9132:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "9125:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9125:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "9118:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9118:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9100:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9100:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9100:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9024:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9035:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9046:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8960:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9273:262:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9290:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9301:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9283:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9283:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9283:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9313:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9333:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "9327:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9327:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "9317:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9360:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9371:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9356:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9356:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "9376:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9349:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9349:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9349:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "9418:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9426:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9414:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9414:15:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9435:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9446:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9431:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9431:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "9451:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "9392:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9392:66:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9392:66:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9467:62:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9483:9:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "9502:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9510:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "9498:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9498:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9519:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "9515:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9515:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "9494:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9494:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9479:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9479:45:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9526:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9475:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9475:54:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9467:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9242:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9253:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9264:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9152:383:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9714:228:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9731:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9742:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9724:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9724:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9724:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9765:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9776:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9761:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9761:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9781:2:84",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9754:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9754:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9754:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9804:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9815:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9800:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9800:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9820:34:84",
                                    "type": "",
                                    "value": "Address: insufficient balance fo"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9793:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9793:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9793:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9875:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9886:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9871:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9871:18:84"
                                  },
                                  {
                                    "hexValue": "722063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9891:8:84",
                                    "type": "",
                                    "value": "r call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9864:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9864:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9864:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9909:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9921:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9932:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9917:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9917:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9909:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9691:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9705:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9540:402:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10121:179:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10138:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10149:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10131:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10131:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10131:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10172:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10183:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10168:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10168:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10188:2:84",
                                    "type": "",
                                    "value": "29"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10161:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10161:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10161:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10211:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10222:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10207:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10207:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "10227:31:84",
                                    "type": "",
                                    "value": "Address: call to non-contract"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10200:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10200:59:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10200:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10268:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10280:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10291:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10276:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10276:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10268:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10098:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10112:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9947:353:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10479:232:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10496:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10507:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10489:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10489:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10489:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10530:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10541:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10526:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10526:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10546:2:84",
                                    "type": "",
                                    "value": "42"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10519:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10519:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10519:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10569:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10580:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10565:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10565:18:84"
                                  },
                                  {
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "10585:34:84",
                                    "type": "",
                                    "value": "SafeERC20: ERC20 operation did n"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10558:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10558:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10558:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10640:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10651:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10636:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10636:18:84"
                                  },
                                  {
                                    "hexValue": "6f742073756363656564",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "10656:12:84",
                                    "type": "",
                                    "value": "ot succeed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10629:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10629:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10629:40:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10678:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10690:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10701:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10686:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10686:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10678:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10456:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10470:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10305:406:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10890:181:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10907:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10918:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10900:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10900:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10900:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10941:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10952:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10937:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10937:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10957:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10930:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10930:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10930:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10980:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10991:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10976:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10976:18:84"
                                  },
                                  {
                                    "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "10996:33:84",
                                    "type": "",
                                    "value": "ReentrancyGuard: reentrant call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10969:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10969:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10969:61:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11039:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11051:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11062:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11047:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11047:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11039:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10867:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10881:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10716:355:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11233:239:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11243:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11255:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11266:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11251:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11251:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11243:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11285:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11307:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "11316:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "11310:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11310:13:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "11296:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11296:28:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11278:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11278:47:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11278:47:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11345:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11356:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11341:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11341:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11374:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "11387:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11395:4:84",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "11383:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11383:17:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "11377:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11377:24:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "11363:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11363:39:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11334:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11334:69:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11334:69:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11423:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11434:4:84",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11419:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11419:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "11451:6:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "11459:4:84",
                                            "type": "",
                                            "value": "0x40"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "11447:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11447:17:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "11441:5:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11441:24:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11412:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11412:54:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11412:54:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11202:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11213:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11224:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11076:396:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11578:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11588:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11600:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11611:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11596:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11596:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11588:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11630:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "11641:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11623:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11623:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11623:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11547:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11558:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11569:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11477:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11812:177:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11822:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11834:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11845:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11830:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11830:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11822:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11864:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "11875:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11857:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11857:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11857:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11902:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11913:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11898:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11898:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11929:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "11932:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "11918:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11918:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11891:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11891:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11891:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11960:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11971:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11956:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11956:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "11976:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11949:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11949:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11949:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11765:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "11776:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "11784:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11792:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11803:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11659:330:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12123:119:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12133:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12145:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12156:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12141:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12141:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "12133:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12175:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "12186:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12168:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12168:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12168:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12213:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12224:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12209:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12209:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "12229:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12202:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12202:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12202:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12084:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "12095:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "12103:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12114:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11994:248:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12404:162:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12414:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12426:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12437:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12422:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12422:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "12414:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12456:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "12467:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12449:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12449:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12449:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12494:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12505:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12490:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12490:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "12510:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12483:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12483:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12483:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12537:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12548:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12533:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12533:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "12553:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12526:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12526:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12526:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12357:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "12368:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "12376:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "12384:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12395:4:84",
                            "type": ""
                          }
                        ],
                        "src": "12247:319:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12619:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12646:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "12648:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12648:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12648:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12635:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "12642:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "12638:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12638:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "12632:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12632:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12629:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12677:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12688:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12691:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12684:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12684:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "12677:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "12602:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "12605:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "12611:3:84",
                            "type": ""
                          }
                        ],
                        "src": "12571:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12750:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12773:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "12775:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12775:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12775:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12770:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "12763:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12763:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12760:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12804:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12813:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12816:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "12809:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12809:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "12804:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "12735:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "12738:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "12744:1:84",
                            "type": ""
                          }
                        ],
                        "src": "12704:120:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12881:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12940:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "12942:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12942:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12942:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "12912:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "12905:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12905:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "12898:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12898:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "12920:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12931:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "12927:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "12927:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "12935:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "12923:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12923:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "12917:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12917:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "12894:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12894:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12891:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12971:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12986:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12989:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "12982:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12982:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "12971:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "12860:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "12863:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "12869:7:84",
                            "type": ""
                          }
                        ],
                        "src": "12829:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13049:312:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13059:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13081:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "13084:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "13070:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13070:16:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "13063:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13095:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13117:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "13120:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "13106:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13106:16:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "13099:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13131:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "13145:3:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13150:1:84",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13141:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13141:11:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "13135:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13223:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "13225:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13225:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13225:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "13175:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "13168:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13168:10:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "13184:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "13197:16:84",
                                                "type": "",
                                                "value": "0x7fffffffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "13193:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "13193:21:84"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "13216:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "13189:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13189:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "13180:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13180:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "13164:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13164:58:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13161:84:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13303:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "13305:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13305:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13305:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "13261:2:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "13269:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "13278:16:84",
                                            "type": "",
                                            "value": "0x7fffffffffffff"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "13296:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "13274:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13274:26:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sgt",
                                      "nodeType": "YulIdentifier",
                                      "src": "13265:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13265:36:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "13257:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13257:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13254:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13334:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "13346:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "13351:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "13342:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13342:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "13334:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "13031:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "13034:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "13040:4:84",
                            "type": ""
                          }
                        ],
                        "src": "13002:359:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13415:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13437:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "13439:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13439:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13439:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "13431:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "13434:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13428:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13428:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13425:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13468:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "13480:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "13483:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "13476:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13476:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "13468:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "13397:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "13400:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "13406:4:84",
                            "type": ""
                          }
                        ],
                        "src": "13366:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13549:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13559:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "13568:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "13563:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13628:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "13653:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "13658:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "13649:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13649:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13672:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13677:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "13668:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "13668:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "13662:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13662:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "13642:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13642:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13642:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "13589:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "13592:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13586:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13586:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "13600:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "13602:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "13611:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13614:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "13607:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13607:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "13602:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "13582:3:84",
                                "statements": []
                              },
                              "src": "13578:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13717:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "13730:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "13735:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "13726:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "13726:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13744:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "13719:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13719:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13719:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "13706:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "13709:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "13703:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13703:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13700:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "13527:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "13532:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "13537:6:84",
                            "type": ""
                          }
                        ],
                        "src": "13496:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13806:88:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13837:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "13839:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13839:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13839:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "13822:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13833:1:84",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "13829:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13829:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "13819:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13819:17:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13816:43:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13868:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "13879:5:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13886:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13875:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13875:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "13868:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "increment_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "13788:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "13798:3:84",
                            "type": ""
                          }
                        ],
                        "src": "13759:135:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13937:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13960:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "13962:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13962:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13962:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "13957:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "13950:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13950:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13947:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13991:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "14000:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "14003:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "13996:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13996:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "13991:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "13922:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "13925:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "13931:1:84",
                            "type": ""
                          }
                        ],
                        "src": "13899:112:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14058:151:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14068:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14094:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "14097:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "14083:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14083:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "14072:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14150:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "14152:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14152:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14152:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14118:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14131:16:84",
                                        "type": "",
                                        "value": "0x7fffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "14127:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14127:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "14115:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14115:34:84"
                              },
                              "nodeType": "YulIf",
                              "src": "14112:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "14181:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14192:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14195:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "14188:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14188:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "14181:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "14040:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "14050:3:84",
                            "type": ""
                          }
                        ],
                        "src": "14016:193:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14246:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14263:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14270:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14275:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14266:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14266:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14256:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14256:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14256:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14303:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14306:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14296:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14296:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14296:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14327:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14330:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "14320:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14320:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14320:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14214:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14378:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14395:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14402:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14407:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14398:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14398:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14388:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14388:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14388:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14435:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14438:4:84",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14428:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14428:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14428:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14459:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14462:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "14452:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14452:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14452:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14346:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14510:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14527:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14534:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14539:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14530:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14530:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14520:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14520:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14520:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14567:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14570:4:84",
                                    "type": "",
                                    "value": "0x31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14560:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14560:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14560:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14591:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14594:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "14584:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14584:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14584:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x31",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14478:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14642:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14659:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14666:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14671:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14662:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14662:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14652:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14652:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14652:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14699:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14702:4:84",
                                    "type": "",
                                    "value": "0x32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14692:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14692:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14692:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14723:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14726:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "14716:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14716:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14716:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x32",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14610:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14774:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14791:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14798:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14803:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "14794:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14794:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14784:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14784:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14784:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14831:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14834:4:84",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14824:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14824:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14824:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14855:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14858:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "14848:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14848:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14848:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "14742:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14919:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "14983:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "14992:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "14995:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "14985:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14985:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "14985:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "14942:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "14953:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "14968:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "14973:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "14964:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "14964:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "14977:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "14960:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "14960:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "14949:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "14949:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "14939:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14939:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "14932:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14932:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "14929:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "14908:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14874:131:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_bool_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_int56_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, signextend(6, value))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let value_2 := calldataload(add(headStart, 96))\n        validator_revert_address(value_2)\n        value3 := value_2\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_bool_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_int56t_int56t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_int56_fromMemory(headStart)\n        value1 := abi_decode_int56_fromMemory(add(headStart, 32))\n        value2 := abi_decode_bool_fromMemory(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let pos := tail_1\n        let length := mload(value1)\n        mstore(tail_1, length)\n        pos := add(headStart, 96)\n        let srcPtr := add(value1, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, signextend(6, mload(value0)))\n        mstore(add(headStart, 0x20), signextend(6, mload(add(value0, 0x20))))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), signextend(6, value1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_int56(x, y) -> diff\n    {\n        let x_1 := signextend(6, x)\n        let y_1 := signextend(6, y)\n        let _1 := slt(y_1, 0)\n        if and(iszero(_1), slt(x_1, add(not(0x7fffffffffffff), y_1))) { panic_error_0x11() }\n        if and(_1, sgt(x_1, add(0x7fffffffffffff, y_1))) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function negate_t_int56(value) -> ret\n    {\n        let value_1 := signextend(6, value)\n        if eq(value_1, not(0x7fffffffffffff)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106104075760003560e01c80638fe204dd11610228578063c20297f01161013c578063ec00cdfc116100be578063ec00cdfc14610b01578063ec8ca64314610b14578063f0f346b914610b3d578063f11a1d1a14610b50578063f136a09d14610b63578063f25e311b14610b83578063f39c38a014610b96578063f75f9f7b14610ba9578063f9d46cf214610bbc578063fc253d2b14610bcf578063fe75bc4614610bd857600080fd5b8063c20297f014610a15578063c5198abc14610a28578063c7ae40d014610a3b578063cb4be2bb14610a4e578063cb54694d14610a61578063cd22af1b14610a74578063d55995fe14610a9f578063dd2080d614610ab2578063ddca3f4314610ac5578063e326ac4314610ace578063ebbb619414610aee57600080fd5b80638fe204dd1461082857806390a4684e1461083b578063951dc22c1461084e578063966abd001461085657806398e90a0f146108695780639d5c33d814610892578063a2145809146108a5578063a39744b5146108b8578063a515366a146108e3578063a5d059ca146108f6578063a676f9ff14610909578063a7d2e78414610929578063aac6aa9c14610932578063ab033ea914610945578063af320e8114610958578063b0103b1a1461096b578063b23922331461098e578063b440027f146109a1578063b600702a146109cc578063b7e77340146109df578063b87fcbff146109f257600080fd5b8063594a3a931161031f578063594a3a931461068457806359a2255e146106975780635aa6e675146106aa5780635ebe23f0146106bd5780635feeb794146106c6578063633fb68f146106d957806364bb43ee146106e257806368a9f19c146106f5578063694798e61461070857806369fe0e2d146107335780636ba42aaa146107465780636cf262bc146107595780636e2a9ca61461076c57806372da828a1461077f57806374a8f10314610792578063768b5d90146107a55780637b40c913146107ae5780637c8fce23146107c1578063878c723e146107c95780638bb6dfa8146107f25780638cb22b761461080557600080fd5b8063034d4c611461040c57806307b435c2146104325780630c620bce1461045d5780630d6a1f87146104725780631101eb411461048557806311466d721461049a57806315006b82146104ad578063160e1e31146104d8578063165e62e7146104eb578063168f92e7146105285780631b44555e146105535780631c5a9d9c146105735780631ef94b911461058657806321040b01146105a6578063238efcbc146105d1578063274a8db4146105d9578063454c50311461060c57806351cff8d91461063857806352a4de291461064b57806355ea6c471461065e578063575288bf14610671575b600080fd5b61041f61041a366004615963565b610beb565b6040519081526020015b60405180910390f35b61041f61044036600461599d565b601260209081526000928352604080842090915290825290205481565b610465610cf1565b6040516104299190615d12565b61041f610480366004615b4c565b610d02565b610498610493366004615a21565b610e08565b005b6104986104a8366004615b4c565b610f62565b61041f6104bb36600461599d565b601060209081526000928352604080842090915290825290205481565b6104986104e6366004615963565b6110f1565b6104fe6104f9366004615963565b611257565b604080518251600690810b825260208085015190910b908201529181015190820152606001610429565b61041f61053636600461599d565b600960209081526000928352604080842090915290825290205481565b61041f610561366004615963565b60056020526000908152604090205481565b610498610581366004615963565b61161d565b601b54610599906001600160a01b031681565b6040516104299190615c89565b61041f6105b436600461599d565b601360209081526000928352604080842090915290825290205481565b610498611756565b6105fc6105e7366004615963565b601a6020526000908152604090205460ff1681565b6040519015158152602001610429565b6105fc61061a366004615963565b6001600160a01b03166000908152600f602052604090205460ff1690565b610498610646366004615963565b6117e2565b610498610659366004615a21565b6119eb565b61049861066c366004615963565b611c1c565b61049861067f366004615a21565b611cd0565b61049861069236600461599d565b611f93565b6104986106a5366004615963565b612038565b601754610599906001600160a01b031681565b61041f601f5481565b6104986106d4366004615963565b6120ea565b61041f60215481565b6104986106f0366004615963565b612354565b610498610703366004615963565b6123d6565b61041f61071636600461599d565b602860209081526000928352604080842090915290825290205481565b610498610741366004615c0d565b61248e565b6105fc610754366004615963565b6124ee565b61041f610767366004615963565b61254e565b61049861077a366004615a21565b612684565b61049861078d366004615963565b6127d3565b6104986107a0366004615963565b612870565b61041f60225481565b601e54610599906001600160a01b031681565b61046561296b565b6105996107d7366004615963565b6001602052600090815260409020546001600160a01b031681565b61041f610800366004615963565b612977565b6105fc610813366004615963565b60146020526000908152604090205460ff1681565b610498610836366004615c0d565b612a1a565b61049861084936600461599d565b612a78565b610465612b66565b610498610864366004615b78565b612b72565b610599610877366004615963565b6002602052600090815260409020546001600160a01b031681565b6104986108a0366004615963565b612c88565b6104986108b33660046159d6565b612d40565b61041f6108c636600461599d565b600860209081526000928352604080842090915290825290205481565b6104986108f1366004615b4c565b612f10565b610498610904366004615b4c565b613171565b61041f610917366004615963565b60296020526000908152604090205481565b61041f60205481565b610498610940366004615963565b613244565b610498610953366004615963565b6132f8565b61049861096636600461599d565b61336e565b6105fc610979366004615963565b60076020526000908152604090205460ff1681565b61049861099c366004615c0d565b6137ed565b61041f6109af36600461599d565b602560209081526000928352604080842090915290825290205481565b6104986109da366004615963565b61384d565b6104986109ed366004615c0d565b613a72565b6105fc610a00366004615963565b60196020526000908152604090205460ff1681565b610498610a23366004615ab5565b613ad2565b610498610a36366004615963565b613b94565b601c54610599906001600160a01b031681565b610498610a5c366004615963565b613c59565b610498610a6f366004615c0d565b613cf6565b61041f610a8236600461599d565b601160209081526000928352604080842090915290825290205481565b610498610aad366004615a62565b613d7a565b610498610ac0366004615a21565b613fb1565b61041f60245481565b61041f610adc366004615963565b60066020526000908152604090205481565b610498610afc366004615c0d565b61412e565b610498610b0f366004615963565b61418e565b610599610b22366004615963565b602c602052600090815260409020546001600160a01b031681565b610498610b4b366004615963565b61422b565b601d54610599906001600160a01b031681565b61041f610b71366004615963565b602a6020526000908152604090205481565b610498610b91366004615a21565b6142df565b601854610599906001600160a01b031681565b610498610bb7366004615963565b614524565b6105fc610bca366004615afb565b6145dc565b61041f60235481565b610498610be6366004615b4c565b6146c5565b600080610bf78361254e565b6022549091504290610c1290610c0d9083615e93565b6147b5565b6001600160a01b0385166000908152602960205260409020541115610cb6576022546001600160a01b038516600090815260296020526040902054610c579042615e93565b10610c93576022546001600160a01b038516600090815260296020526040902054610c829190615df8565b610c8c9082615e93565b9050610ccc565b6001600160a01b038416600090815260296020526040902054610c8c9082615e93565b610cbf426147b5565b610cc99082615e93565b90505b610cd681836147cf565b610cdf85612977565b610ce99190615df8565b949350505050565b6060610cfd60266147f9565b905090565b6000610d0f60268461480d565b15610e02576000610d1f84611257565b90508060400151600014610e00576001600160a01b0384166000908152600f602052604081205460ff16610d60578160200151610d5b90615f05565b610d66565b81602001515b601d5460225460405163a0d2710760e01b8152929350610df7926001600160a01b039092169163a0d2710791610da29189918791600401615dc9565b60206040518083038186803b158015610dba57600080fd5b505afa158015610dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df29190615c26565b61482f565b92505050610e02565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610e4457604051636efb4f4160e11b815260040160405180910390fd5b602054610e519042615df8565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610ea0908490615df8565b90915550610eb19050848484614840565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590610ef05750602154610eee8286614a4e565b105b15610f0e57604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de85604051610f5391815260200190565b60405180910390a35050505050565b3360008181526007602052604090205460ff1615610f935760405163ad2fdf3b60e01b815260040160405180910390fd5b610f9e60158261480d565b610fba5760405162941a5760e11b815260040160405180910390fd5b610fc381614b6c565b1561101e576001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd833981519152936110159390929091615de2565b60405180910390a25b6001600160a01b0381166000908152600a602052604090205482111561109d5761104781614d42565b6001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd833981519152936110949390929091615de2565b60405180910390a25b6110a8818484614dd0565b601b546001600160a01b03808516918382169116600080516020615f9d833981519152856110d4614eb4565b6040805192835260208301919091520160405180910390a4505050565b6017546001600160a01b0316331461111c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166111435760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b906111a4908490600401615c89565b60206040518083038186803b1580156111bc57600080fd5b505afa1580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f49190615baf565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa9061124c908390615c89565b60405180910390a150565b604080516060810182526000808252602082018190529181019190915261127d426147b5565b6001600160a01b0383166000908152602b602052604090206001015414156112f357506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b60008061130760225442610c0d9190615e93565b6001600160a01b0385166000908152602b602052604090206001015490915081141561146b57604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b611374426147b5565b61137e9042615e93565b8260008151811061139157611391615f6e565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926113ed9291909116908690600401615c9d565b60606040518083038186803b15801561140557600080fd5b505afa158015611419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143d9190615bca565b600692830b90920b80885291955061145791839150615e43565b600690810b900b6020860152506115f49050565b6001600160a01b0384166000908152602b60205260409020600101548111156115f4576040805160028082526060820183526000926020830190803683370190505090506114b8426147b5565b6114c29042615e93565b816000815181106114d5576114d5615f6e565b602002602001019063ffffffff16908163ffffffff16815250506022546114fb426147b5565b6115059042615e93565b61150f9190615df8565b8160018151811061152257611522615f6e565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d919261157a9216908690600401615c9d565b60606040518083038186803b15801561159257600080fd5b505afa1580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ca9190615bca565b600692830b90920b80885291955091506115e5908290615e43565b600690810b900b602086015250505b811561160d57611603426147b5565b6040840152611615565b600060408401525b50505b919050565b3360009081526007602052604090205460ff161561164e576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205461168f57604051636258f48160e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b038516845290915290205442116116d257604051630fd0eeef60e11b815260040160405180910390fd5b3360008181526011602090815260408083206001600160a01b03861684529091528120819055906117039083614ece565b9050816001600160a01b0316336001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a758360405161174a91815260200190565b60405180910390a35050565b6018546001600160a01b0316331461178157604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916117d891615c89565b60405180910390a1565b6002600054141561180e5760405162461bcd60e51b815260040161180590615d92565b60405180910390fd5b600260009081553381526013602090815260408083206001600160a01b03851684529091529020546118535760405163184c088160e21b815260040160405180910390fd5b3360009081526012602090815260408083206001600160a01b03851684529091529020544211611896576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526007602052604090205460ff16156118c7576040516362e6201d60e01b815260040160405180910390fd5b3360009081526013602090815260408083206001600160a01b0385811680865291909352922054601b5490929116141561195a57601c5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b15801561194157600080fd5b505af1158015611955573d6000803e3d6000fd5b505050505b3360008181526013602090815260408083206001600160a01b038716808552908352818420849055848452601283528184208185529092528220919091556119a29183614fe5565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b60026000541415611a0e5760405162461bcd60e51b815260040161180590615d92565b6002600055611a1e60268361480d565b611a3b5760405163e0b6aead60e01b815260040160405180910390fd5b611a4660158461480d565b611a6357604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611a859083615040565b50611a8f83615055565b6021546001600160a01b03808516600090815260286020908152604080832093871683529290522054611acd90611ac7908490615df8565b84614a4e565b1015611aec57604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd83398151915293611b399390929091615de2565b60405180910390a2611b566001600160a01b0383163330846150b3565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611b8d908490615df8565b90915550611ba09050610df28284614a4e565b6001600160a01b0384166000908152600b602052604081208054909190611bc8908490615df8565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b336000908152601a602052604090205460ff16611c4c57604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16611c85576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b60026000541415611cf35760405162461bcd60e51b815260040161180590615d92565b6002600055611d0360158461480d565b611d2057604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b0383811691161415611d4e5760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611d7d903090600401615c89565b60206040518083038186803b158015611d9557600080fd5b505afa158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd9190615c26565b9050611de46001600160a01b0384163330856150b3565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611e139190615c89565b60206040518083038186803b158015611e2b57600080fd5b505afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e639190615c26565b611e6d9190615e93565b9050600061271060245483611e829190615e24565b611e8c9190615e10565b9050611e988183615e93565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190611ecf908490615df8565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611f0c921683614fe5565b6001600160a01b0386166000908152600c60205260409020611f2e9086615040565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb85604051611f7e91815260200190565b60405180910390a45050600160005550505050565b6001600160a01b038281166000908152600160205260409020548391163314611fcf57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526002602052604090205482911633146120745760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b3360008181526007602052604090205460ff161561211b5760405163ad2fdf3b60e01b815260040160405180910390fd5b61212660158261480d565b6121425760405162941a5760e11b815260040160405180910390fd5b61214b81614b6c565b156121a6576001600160a01b038116600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd8339815191529361219d9390929091615de2565b60405180910390a25b601d546001600160a01b038381166000908152600860209081526040808320601b548516845290915280822054905163435b21c160e01b8152600481019190915290928392839291169063435b21c19060240160606040518083038186803b15801561221157600080fd5b505afa158015612225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122499190615c3f565b9250925092506000612259614eb4565b90506000612269828486886150f1565b6001600160a01b0387166000908152600a60205260409020549091508111156123035761229586614d42565b6001600160a01b038616600081815260296020908152604080832054600a835281842054600b90935292819020549051600080516020615fbd833981519152936122e29390929091615de2565b60405180910390a26122f2614eb4565b9150612300828486886150f1565b90505b61230e868883614dd0565b601b5460408051838152602081018590526001600160a01b038a8116938a821693911691600080516020615f9d833981519152910160405180910390a450505050505050565b6017546001600160a01b0316331461237f576040516354348f0360e01b815260040160405180910390fd5b61238a60268261514e565b6123a757604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e568160405161124c9190615c89565b6017546001600160a01b03163314612401576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff161561243b5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b9061124c908390615c89565b6017546001600160a01b031633146124b9576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d9060200161124c565b60006124f8614eb4565b602e5561250660038361480d565b15611618577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e5460405161253e91815260200190565b60405180910390a1506001919050565b6000805b6001600160a01b0383166000908152600d6020526040902061257390615163565b81101561267e576001600160a01b0383166000908152600d6020526040812061259c908361516d565b90506125a960268261480d565b1561266b5760006125b982611257565b90508060400151600014612669576001600160a01b0382166000908152600f602052604081205460ff166125fa5781602001516125f590615f05565b612600565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b815294955061265b94929093169263a0d2710792610da2928791600401615dc9565b6126659086615df8565b9450505b505b508061267681615ed6565b915050612552565b50919050565b3360009081526019602052604090205460ff166126b457604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff166126ed576040516310cec38560e21b815260040160405180910390fd5b6126f8838383614840565b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb9261272c92909116908590600401615cf9565b602060405180830381600087803b15801561274657600080fd5b505af1925050508015612776575060408051601f3d908101601f1916820190925261277391810190615baf565b60015b61277f57612781565b505b336001600160a01b0316836001600160a01b03167f6e10247c3c094d220ee99436c164b7f38d63b335a20ed817cbefaee4bb02d20e84846040516127c6929190615cf9565b60405180910390a3505050565b6017546001600160a01b031633146127fe576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166128255760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b09061124c908390615c89565b3360009081526019602052604090205460ff166128a057604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff166128d9576040516310cec38560e21b815260040160405180910390fd5b6128e460038261514e565b50601b546001600160a01b0380831660008181526008602090815260408083209490951680835293815284822054928252601381528482208483529052929092205461293292849291615179565b60405133906001600160a01b038316907f038a17b9b553c0c3fc2ed14b957a5d8420a1666fd2efe5c1b3fe5f23eea61bb390600090a350565b6060610cfd60156147f9565b6000806129838361254e565b6022546001600160a01b038516600090815260296020526040902054919250906129ad9042615e93565b1015610e0257600081116129d9576001600160a01b0383166000908152600a6020526040902054612a13565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054612a09908390615e24565b612a139190615e10565b915061267e565b6017546001600160a01b03163314612a45576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee2910161124c565b6001600160a01b038281166000908152600160205260409020548391163314612ab457604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415612ae75760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d825280832094835293905282902042905590517fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c90612b59908590615c89565b60405180910390a2505050565b6060610cfd60036147f9565b6017546001600160a01b03163314612b9d576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612bc45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612c25576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015612c1f573d6000803e3d6000fd5b50612c39565b612c396001600160a01b0384168284614fe5565b604080516001600160a01b0385811682526020820185905283168183015290517f9a3055ded8c8b5f21bbf4946c5afab6e1fa8b3f057922658e5e1ade125fb0b1e9181900360600190a1505050565b6017546001600160a01b03163314612cb3576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1615612ced5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f9061124c908390615c89565b6001600160a01b038381166000908152600160205260409020548491163314612d7c57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038216612da35760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260136020908152604080832093871683529290522054612de65760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211612e2b576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615612e65576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590612eb2908483614fe5565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051612f0191815260200190565b60405180910390a45050505050565b60026000541415612f335760405162461bcd60e51b815260040161180590615d92565b600260009081553381526007602052604090205460ff1615612f68576040516362e6201d60e01b815260040160405180910390fd5b612f7360153361480d565b15612f915760405163d7229c4360e01b815260040160405180910390fd5b601f54612f9e9042615df8565b3360009081526011602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81529091906370a0823190612fe9903090600401615c89565b60206040518083038186803b15801561300157600080fd5b505afa158015613015573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130399190615c26565b90506130506001600160a01b0384163330856150b3565b6040516370a0823160e01b815281906001600160a01b038516906370a082319061307e903090600401615c89565b60206040518083038186803b15801561309657600080fd5b505afa1580156130aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ce9190615c26565b6130d89190615e93565b336000908152601460209081526040808320805460ff19166001179055601082528083206001600160a01b0388168452909152812080549294508492909190613122908490615df8565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b60205461317e9042615df8565b3360008181526012602090815260408083206001600160a01b038816808552908352818420959095559282526008815282822093825292909252812080548392906131ca908490615e93565b90915550503360009081526013602090815260408083206001600160a01b038616845290915281208054839290613202908490615df8565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de9060200161174a565b6017546001600160a01b0316331461326f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff166132a8576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d0259061124c908390615c89565b6017546001600160a01b03163314613323576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f9061124c908390615c89565b6001600160a01b0381811660009081526001602052604090205482911633146133aa57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16806133e957506001600160a01b03821660009081526007602052604090205460ff165b156134075760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c602052604090205481169083161461344457604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d602090815260408083209386168352929052205461347690603c90615df8565b421015613496576040516356248e9760e01b815260040160405180910390fd5b61349f83615055565b6134a882615055565b6001600160a01b0383166000908152600c602052604081206134c990615163565b11156135ab576001600160a01b0383166000908152600c602052604081206134f1908261516d565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a16855292825280842092845291905281208054939450919261353f908490615df8565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c90915220613581908261514e565b506001600160a01b0383166000908152600c602052604090206135a49082615040565b50506134a8565b6001600160a01b0383166000908152600d602052604081206135cc90615163565b11156136ae576001600160a01b0383166000908152600d602052604081206135f4908261516d565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a168552928252808420928452919052812080549394509192613642908490615df8565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d9052206136849082615040565b506001600160a01b0384166000908152600d602052604090206136a7908261514e565b50506135ab565b6001600160a01b038084166000908152600b6020526040808220549285168252812080549091906136e0908490615df8565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a90915280822054928516825281208054909190613724908490615df8565b90915550506001600160a01b0383166000908152600a60209081526040808320839055602990915281205561375a60158461514e565b506001600160a01b03808416600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055938352602c909152908190208054909216909155517f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f290612b59908690615c89565b6017546001600160a01b03163314613818576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb699060200161124c565b6017546001600160a01b03163314613878576040516354348f0360e01b815260040160405180910390fd5b613883602682615040565b6138a05760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156138d957600080fd5b505afa1580156138ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139119190615980565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b916139659190600401615c89565b60206040518083038186803b15801561397d57600080fd5b505afa158015613991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b59190615baf565b6001600160a01b0382166000908152600f60205260409020805460ff19169115159190911790556139e581611257565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b9061124c908390615c89565b6017546001600160a01b03163314613a9d576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b439060200161124c565b3360009081526019602052604090205460ff16613b0257604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff16613b3b576040516310cec38560e21b815260040160405180910390fd5b613b4784848484615179565b336001600160a01b0385167f10a73de7ab6e9023aa6e2bc23f7abf4dcef591487e7e55f44c00e34fe60d56db613b7d8486615df8565b60405190815260200160405180910390a350505050565b613b9f60158261480d565b15613bbd57604051630809740d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604090205460ff1615613bf757604051632f3d320560e01b815260040160405180910390fd5b613c02601582615040565b506001600160a01b03811660008181526001602052604080822080546001600160a01b03191633908117909155905190917fed3faef50715743626cd57de74281a2b17cdbfc11c0486feda541fb911e0293d91a350565b6017546001600160a01b03163314613c84576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116613cab5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae2509061124c908390615c89565b6017546001600160a01b03163314613d21576040516354348f0360e01b815260040160405180910390fd5b62015180811015613d4557604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d99060200161124c565b60026000541415613d9d5760405162461bcd60e51b815260040161180590615d92565b600260009081556001600160a01b03858116825260016020526040909120548591163314613dde57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054613e1090603c90615df8565b4211613e2f57604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115613e755760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615613eaf5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290613ee6908490615e93565b90915550613f0090506001600160a01b0385168385614fe5565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054613f4e576001600160a01b0385166000908152600c60205260409020613f4c908561514e565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051613f9d91815260200190565b60405180910390a450506001600055505050565b3360008181526007602052604090205460ff1615613fe25760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff161561401c576040516362e6201d60e01b815260040160405180910390fd5b61402760158261480d565b6140435760405162941a5760e11b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905220548211156140895760405163356680b760e01b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905290812080548492906140c0908490615e93565b909155506140da90506001600160a01b0385168484614fe5565b826001600160a01b0316816001600160a01b0316856001600160a01b0316600080516020615f9d83398151915285614110614eb4565b6040805192835260208301919091520160405180910390a450505050565b6017546001600160a01b03163314614159576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e79060200161124c565b6017546001600160a01b031633146141b9576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166141e05760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf9061124c908390615c89565b6017546001600160a01b03163314614256576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661428f57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e9061124c908390615c89565b3360009081526019602052604090205460ff1661430f57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16614348576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b0383166000908152600c6020526040902061436a908361480d565b61438757604051632eda7a1160e01b815260040160405180910390fd5b6001600160a01b038084166000908152600960209081526040808320938616835292905220548111156143cc5760405162919bed60e01b815260040160405180910390fd5b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb9261440092909116908590600401615cf9565b602060405180830381600087803b15801561441a57600080fd5b505af192505050801561444a575060408051601f3d908101601f1916820190925261444791810190615baf565b60015b61445357614455565b505b6001600160a01b0380841660009081526009602090815260408083209386168352929052908120805483929061448c908490615e93565b90915550506001600160a01b038084166000908152600960209081526040808320938616835292905220546144df576001600160a01b0383166000908152600c602052604090206144dd908361514e565b505b336001600160a01b0316836001600160a01b03167f20262b97130b5cb8f80624eed2733df2b05db4a0789b4a3d0157e1d31833310484846040516127c6929190615cf9565b336000908152601a602052604090205460ff1661455457604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff161561458e576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b60006145e6614eb4565b602e556145f460038761480d565b801561462557506001600160a01b038087166000908152600860209081526040808320938916835292905220548411155b801561464957506001600160a01b0386166000908152600560205260409020548311155b801561467857506001600160a01b03861660009081526006602052604090205482906146759042615e93565b10155b156146bc577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e546040516146b091815260200190565b60405180910390a15060015b95945050505050565b6017546001600160a01b031633146146f0576040516354348f0360e01b815260040160405180910390fd5b6146fb60158361480d565b61471857604051636211d34960e01b815260040160405180910390fd5b61472182615055565b6001600160a01b0382166000908152600a602052604081208054839290614749908490615df8565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d1926147a9928252602082015260400190565b60405180910390a25050565b6000602254826147c59190615ef1565b610e029083615e93565b600060225483101561267e576022546147e88385615e24565b6147f29190615e10565b9050610e02565b60606000614806836152cf565b9392505050565b6001600160a01b03811660009081526001830160205260408120541515614806565b6000610e028260225460235461532b565b600260005414156148635760405162461bcd60e51b815260040161180590615d92565b600260009081556001600160a01b0384168152600d60205260409020614889908361480d565b6148a5576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156148eb5760405163435b562560e01b815260040160405180910390fd5b6148f4836153d9565b6000614903610df28385614a4e565b6001600160a01b0385166000908152600b6020526040902054909150156149b9576001600160a01b0384166000908152600b6020908152604080832054600a90925290912054614954908390615e24565b61495e9190615e10565b6001600160a01b0385166000908152600a602052604081208054909190614986908490615e93565b90915550506001600160a01b0384166000908152600b6020526040812080548392906149b3908490615e93565b90915550505b6001600160a01b038085166000908152602860209081526040808320938716835292905290812080548492906149f0908490615e93565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054614a43576001600160a01b0384166000908152600d60205260409020614a41908461514e565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610e02576001600160a01b0382166000908152600f602052604081205460ff16614ac0576001600160a01b0383166000908152602b6020526040902054614abb90600160381b900460060b615f05565b614ae4565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d2710791614b1c9188918691600401615dc9565b60206040518083038186803b158015614b3457600080fd5b505afa158015614b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce99190615c26565b6000614b77426147b5565b6001600160a01b038316600090815260296020526040902054101561161857614ba760225442610c0d9190615e93565b6001600160a01b03831660009081526029602052604090205411614c1d57614bce826153d9565b6001600160a01b0382166000908152600b6020908152604080832054600a90925290912055614bfc426147b5565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b038316600090815260296020526040902054614c439042615e93565b10614c9f57614c51826153d9565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460299092528220805491929091614c90908490615df8565b90915550600191506116189050565b614ca8426147b5565b6001600160a01b0383166000908152602a60205260409020541015611618576001600160a01b0382166000908152600b6020526040902054614ce9836153d9565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291614d1991615e24565b614d239190615e10565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260296020526040902054614d8790614d699042615e93565b6001600160a01b0383166000908152600b60205260409020546147cf565b6001600160a01b0382166000908152600a602052604081208054909190614daf908490615df8565b90915550506001600160a01b03166000908152602960205260409020429055565b6001600160a01b0383166000908152600a6020526040902054811115614e095760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0383166000908152602a60209081526040808320429055600a90915281208054839290614e3e908490615e93565b90915550506001600160a01b038083166000908152600860209081526040808320601b5490941683529290529081208054839290614e7d908490615df8565b90915550506001600160a01b03821660009081526005602052604081208054839290614eaa908490615df8565b9091555050505050565b6000603f5a614ec4906040615e24565b610cfd9190615e10565b6001600160a01b038216600090815260066020526040812054614f07576001600160a01b03831660009081526006602052604090204290555b614f12600384615040565b50506001600160a01b03808316600081815260106020908152604080832094861680845294825280832080549084905593835260088252808320948352939052918220805491928392614f66908490615df8565b9091555050601b546001600160a01b0383811691161415610e0257601b54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b158015614fc757600080fd5b505af1158015614fdb573d6000803e3d6000fd5b5050505092915050565b61503b8363a9059cbb60e01b8484604051602401615004929190615cf9565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526153fe565b505050565b6000614806836001600160a01b0384166154d0565b61505e81614b6c565b5061506881614d42565b6001600160a01b0381166000908152600a6020908152604080832054600b90925290912054615097919061551f565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b03808516602483015283166044820152606481018290526150eb9085906323b872dd60e01b90608401615004565b50505050565b6000808486602e546151039190615e93565b61510d9190615df8565b9050670de0b6b3a7640000846127106151268685615e24565b6151309190615e10565b61513a9190615e24565b6151449190615e10565b9695505050505050565b6000614806836001600160a01b038416615535565b6000610e02825490565b60006148068383615628565b601b546001600160a01b03848116911614615251576017546001600160a01b038085169163a9059cbb91166151ae8486615df8565b6040518363ffffffff1660e01b81526004016151cb929190615cf9565b602060405180830381600087803b1580156151e557600080fd5b505af1925050508015615215575060408051601f3d908101601f1916820190925261521291810190615baf565b60015b61524f573d808015615243576040519150601f19603f3d011682016040523d82523d6000602084013e615248565b606091505b5050615251565b505b6001600160a01b03808516600090815260086020908152604080832093871683529290529081208054849290615288908490615e93565b90915550506001600160a01b038085166000908152601360209081526040808320938716835292905290812080548392906152c4908490615e93565b909155505050505050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561531f57602002820191906000526020600020905b81548152602001906001019080831161530b575b50505050509050919050565b600080806000198587098587029250828110838203039150508060001415615365576000841161535a57600080fd5b508290049050614806565b80841161537157600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6153e281615652565b6001600160a01b039091166000908152600b6020526040902055565b6000615453826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166158369092919063ffffffff16565b80519091501561503b57808060200190518101906154719190615baf565b61503b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611805565b600081815260018301602052604081205461551757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e02565b506000610e02565b600081831061552e5781614806565b5090919050565b6000818152600183016020526040812054801561561e576000615559600183615e93565b855490915060009061556d90600190615e93565b90508181146155d257600086600001828154811061558d5761558d615f6e565b90600052602060002001549050808760000184815481106155b0576155b0615f6e565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806155e3576155e3615f58565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610e02565b6000915050610e02565b600082600001828154811061563f5761563f615f6e565b9060005260206000200154905092915050565b600061565d426147b5565b601e546001600160a01b03166000908152602b6020526040902060010154146156f457601e54615695906001600160a01b0316611257565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d6020526040902061571890615163565b81101561267e576001600160a01b0383166000908152600d60205260408120615741908361516d565b905061574e60268261480d565b156158235761575c426147b5565b6001600160a01b0382166000908152602b6020526040902060010154146157e25761578681611257565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b0380851660009081526028602090815260408083209385168352929052205461581690610df29083614a4e565b6158209084615df8565b92505b508061582e81615ed6565b9150506156f7565b6060610ce9848460008585843b61588f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611805565b600080866001600160a01b031685876040516158ab9190615c6d565b60006040518083038185875af1925050503d80600081146158e8576040519150601f19603f3d011682016040523d82523d6000602084013e6158ed565b606091505b50915091506158fd828286615908565b979650505050505050565b60608315615917575081614806565b8251156159275782518084602001fd5b8160405162461bcd60e51b81526004016118059190615d5f565b8051801515811461161857600080fd5b8051600681900b811461161857600080fd5b60006020828403121561597557600080fd5b813561480681615f84565b60006020828403121561599257600080fd5b815161480681615f84565b600080604083850312156159b057600080fd5b82356159bb81615f84565b915060208301356159cb81615f84565b809150509250929050565b6000806000606084860312156159eb57600080fd5b83356159f681615f84565b92506020840135615a0681615f84565b91506040840135615a1681615f84565b809150509250925092565b600080600060608486031215615a3657600080fd5b8335615a4181615f84565b92506020840135615a5181615f84565b929592945050506040919091013590565b60008060008060808587031215615a7857600080fd5b8435615a8381615f84565b93506020850135615a9381615f84565b9250604085013591506060850135615aaa81615f84565b939692955090935050565b60008060008060808587031215615acb57600080fd5b8435615ad681615f84565b93506020850135615ae681615f84565b93969395505050506040820135916060013590565b600080600080600060a08688031215615b1357600080fd5b8535615b1e81615f84565b94506020860135615b2e81615f84565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215615b5f57600080fd5b8235615b6a81615f84565b946020939093013593505050565b600080600060608486031215615b8d57600080fd5b8335615b9881615f84565b9250602084013591506040840135615a1681615f84565b600060208284031215615bc157600080fd5b61480682615941565b600080600060608486031215615bdf57600080fd5b615be884615951565b9250615bf660208501615951565b9150615c0460408501615941565b90509250925092565b600060208284031215615c1f57600080fd5b5035919050565b600060208284031215615c3857600080fd5b5051919050565b600080600060608486031215615c5457600080fd5b8351925060208401519150604084015190509250925092565b60008251615c7f818460208701615eaa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015615cec57845163ffffffff1683529383019391830191600101615cca565b5090979650505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015615d535783516001600160a01b031683529284019291840191600101615d2e565b50909695505050505050565b6020815260008251806020840152615d7e816040850160208701615eaa565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b9283526020830191909152604082015260600190565b60008219821115615e0b57615e0b615f2c565b500190565b600082615e1f57615e1f615f42565b500490565b6000816000190483118215151615615e3e57615e3e615f2c565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615615e6e57615e6e615f2c565b81667fffffffffffff018313811615615e8957615e89615f2c565b5090039392505050565b600082821015615ea557615ea5615f2c565b500390565b60005b83811015615ec5578181015183820152602001615ead565b838111156150eb5750506000910152565b6000600019821415615eea57615eea615f2c565b5060010190565b600082615f0057615f00615f42565b500690565b60008160060b667fffffffffffff19811415615f2357615f23615f2c565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114615f9957600080fd5b5056fe46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfaee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c3820a2646970667358221220c3d0538d6a43aafc625ae68fb6d81b9f20ab2c3b40e7c00a11a5eeaea069909564736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x407 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8FE204DD GT PUSH2 0x228 JUMPI DUP1 PUSH4 0xC20297F0 GT PUSH2 0x13C JUMPI DUP1 PUSH4 0xEC00CDFC GT PUSH2 0xBE JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0xB01 JUMPI DUP1 PUSH4 0xEC8CA643 EQ PUSH2 0xB14 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0xB3D JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0xB50 JUMPI DUP1 PUSH4 0xF136A09D EQ PUSH2 0xB63 JUMPI DUP1 PUSH4 0xF25E311B EQ PUSH2 0xB83 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0xB96 JUMPI DUP1 PUSH4 0xF75F9F7B EQ PUSH2 0xBA9 JUMPI DUP1 PUSH4 0xF9D46CF2 EQ PUSH2 0xBBC JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0xBCF JUMPI DUP1 PUSH4 0xFE75BC46 EQ PUSH2 0xBD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC20297F0 EQ PUSH2 0xA15 JUMPI DUP1 PUSH4 0xC5198ABC EQ PUSH2 0xA28 JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0xA3B JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0xA4E JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0xA61 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0xA74 JUMPI DUP1 PUSH4 0xD55995FE EQ PUSH2 0xA9F JUMPI DUP1 PUSH4 0xDD2080D6 EQ PUSH2 0xAB2 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0xAC5 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0xACE JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0xAEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x828 JUMPI DUP1 PUSH4 0x90A4684E EQ PUSH2 0x83B JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x84E JUMPI DUP1 PUSH4 0x966ABD00 EQ PUSH2 0x856 JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x869 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x892 JUMPI DUP1 PUSH4 0xA2145809 EQ PUSH2 0x8A5 JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x8B8 JUMPI DUP1 PUSH4 0xA515366A EQ PUSH2 0x8E3 JUMPI DUP1 PUSH4 0xA5D059CA EQ PUSH2 0x8F6 JUMPI DUP1 PUSH4 0xA676F9FF EQ PUSH2 0x909 JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x929 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x932 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x945 JUMPI DUP1 PUSH4 0xAF320E81 EQ PUSH2 0x958 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x96B JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x98E JUMPI DUP1 PUSH4 0xB440027F EQ PUSH2 0x9A1 JUMPI DUP1 PUSH4 0xB600702A EQ PUSH2 0x9CC JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x9DF JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x9F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x594A3A93 GT PUSH2 0x31F JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x684 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x697 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x6AA JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x6BD JUMPI DUP1 PUSH4 0x5FEEB794 EQ PUSH2 0x6C6 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x6D9 JUMPI DUP1 PUSH4 0x64BB43EE EQ PUSH2 0x6E2 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x6F5 JUMPI DUP1 PUSH4 0x694798E6 EQ PUSH2 0x708 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x733 JUMPI DUP1 PUSH4 0x6BA42AAA EQ PUSH2 0x746 JUMPI DUP1 PUSH4 0x6CF262BC EQ PUSH2 0x759 JUMPI DUP1 PUSH4 0x6E2A9CA6 EQ PUSH2 0x76C JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x77F JUMPI DUP1 PUSH4 0x74A8F103 EQ PUSH2 0x792 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x7A5 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x7AE JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x7C1 JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x7C9 JUMPI DUP1 PUSH4 0x8BB6DFA8 EQ PUSH2 0x7F2 JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34D4C61 EQ PUSH2 0x40C JUMPI DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x432 JUMPI DUP1 PUSH4 0xC620BCE EQ PUSH2 0x45D JUMPI DUP1 PUSH4 0xD6A1F87 EQ PUSH2 0x472 JUMPI DUP1 PUSH4 0x1101EB41 EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0x11466D72 EQ PUSH2 0x49A JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x4D8 JUMPI DUP1 PUSH4 0x165E62E7 EQ PUSH2 0x4EB JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x528 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x553 JUMPI DUP1 PUSH4 0x1C5A9D9C EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x586 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x5A6 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x5D1 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x5D9 JUMPI DUP1 PUSH4 0x454C5031 EQ PUSH2 0x60C JUMPI DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x638 JUMPI DUP1 PUSH4 0x52A4DE29 EQ PUSH2 0x64B JUMPI DUP1 PUSH4 0x55EA6C47 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x575288BF EQ PUSH2 0x671 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41F PUSH2 0x41A CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0xBEB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x41F PUSH2 0x440 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x465 PUSH2 0xCF1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x429 SWAP2 SWAP1 PUSH2 0x5D12 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x480 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B4C JUMP JUMPDEST PUSH2 0xD02 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x493 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A21 JUMP JUMPDEST PUSH2 0xE08 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x498 PUSH2 0x4A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B4C JUMP JUMPDEST PUSH2 0xF62 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x4BB CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x4E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x10F1 JUMP JUMPDEST PUSH2 0x4FE PUSH2 0x4F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x1257 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND DUP3 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 SIGNEXTEND SWAP1 DUP3 ADD MSTORE SWAP2 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x429 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x536 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x561 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x581 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x161D JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x599 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x429 SWAP2 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x5B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x1756 JUMP JUMPDEST PUSH2 0x5FC PUSH2 0x5E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x429 JUMP JUMPDEST PUSH2 0x5FC PUSH2 0x61A CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x646 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x17E2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x659 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A21 JUMP JUMPDEST PUSH2 0x19EB JUMP JUMPDEST PUSH2 0x498 PUSH2 0x66C CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x1C1C JUMP JUMPDEST PUSH2 0x498 PUSH2 0x67F CALLDATASIZE PUSH1 0x4 PUSH2 0x5A21 JUMP JUMPDEST PUSH2 0x1CD0 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x692 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH2 0x1F93 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x6A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x2038 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x599 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x41F PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x6D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x20EA JUMP JUMPDEST PUSH2 0x41F PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x6F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x2354 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x703 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x23D6 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x716 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x741 CALLDATASIZE PUSH1 0x4 PUSH2 0x5C0D JUMP JUMPDEST PUSH2 0x248E JUMP JUMPDEST PUSH2 0x5FC PUSH2 0x754 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x24EE JUMP JUMPDEST PUSH2 0x41F PUSH2 0x767 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x254E JUMP JUMPDEST PUSH2 0x498 PUSH2 0x77A CALLDATASIZE PUSH1 0x4 PUSH2 0x5A21 JUMP JUMPDEST PUSH2 0x2684 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x78D CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x27D3 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x7A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x2870 JUMP JUMPDEST PUSH2 0x41F PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x599 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x465 PUSH2 0x296B JUMP JUMPDEST PUSH2 0x599 PUSH2 0x7D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x800 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x2977 JUMP JUMPDEST PUSH2 0x5FC PUSH2 0x813 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x836 CALLDATASIZE PUSH1 0x4 PUSH2 0x5C0D JUMP JUMPDEST PUSH2 0x2A1A JUMP JUMPDEST PUSH2 0x498 PUSH2 0x849 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH2 0x2A78 JUMP JUMPDEST PUSH2 0x465 PUSH2 0x2B66 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x864 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B78 JUMP JUMPDEST PUSH2 0x2B72 JUMP JUMPDEST PUSH2 0x599 PUSH2 0x877 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x8A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x2C88 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x8B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x59D6 JUMP JUMPDEST PUSH2 0x2D40 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x8C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x8F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B4C JUMP JUMPDEST PUSH2 0x2F10 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x904 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B4C JUMP JUMPDEST PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x41F PUSH2 0x917 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x41F PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x940 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x3244 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x953 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x32F8 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x966 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH2 0x336E JUMP JUMPDEST PUSH2 0x5FC PUSH2 0x979 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x99C CALLDATASIZE PUSH1 0x4 PUSH2 0x5C0D JUMP JUMPDEST PUSH2 0x37ED JUMP JUMPDEST PUSH2 0x41F PUSH2 0x9AF CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x9DA CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x384D JUMP JUMPDEST PUSH2 0x498 PUSH2 0x9ED CALLDATASIZE PUSH1 0x4 PUSH2 0x5C0D JUMP JUMPDEST PUSH2 0x3A72 JUMP JUMPDEST PUSH2 0x5FC PUSH2 0xA00 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xA23 CALLDATASIZE PUSH1 0x4 PUSH2 0x5AB5 JUMP JUMPDEST PUSH2 0x3AD2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xA36 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x3B94 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x599 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xA5C CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x3C59 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xA6F CALLDATASIZE PUSH1 0x4 PUSH2 0x5C0D JUMP JUMPDEST PUSH2 0x3CF6 JUMP JUMPDEST PUSH2 0x41F PUSH2 0xA82 CALLDATASIZE PUSH1 0x4 PUSH2 0x599D JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xAAD CALLDATASIZE PUSH1 0x4 PUSH2 0x5A62 JUMP JUMPDEST PUSH2 0x3D7A JUMP JUMPDEST PUSH2 0x498 PUSH2 0xAC0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A21 JUMP JUMPDEST PUSH2 0x3FB1 JUMP JUMPDEST PUSH2 0x41F PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x41F PUSH2 0xADC CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xAFC CALLDATASIZE PUSH1 0x4 PUSH2 0x5C0D JUMP JUMPDEST PUSH2 0x412E JUMP JUMPDEST PUSH2 0x498 PUSH2 0xB0F CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x418E JUMP JUMPDEST PUSH2 0x599 PUSH2 0xB22 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xB4B CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x422B JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x599 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x41F PUSH2 0xB71 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xB91 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A21 JUMP JUMPDEST PUSH2 0x42DF JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x599 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xBB7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5963 JUMP JUMPDEST PUSH2 0x4524 JUMP JUMPDEST PUSH2 0x5FC PUSH2 0xBCA CALLDATASIZE PUSH1 0x4 PUSH2 0x5AFB JUMP JUMPDEST PUSH2 0x45DC JUMP JUMPDEST PUSH2 0x41F PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0xBE6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B4C JUMP JUMPDEST PUSH2 0x46C5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xBF7 DUP4 PUSH2 0x254E JUMP JUMPDEST PUSH1 0x22 SLOAD SWAP1 SWAP2 POP TIMESTAMP SWAP1 PUSH2 0xC12 SWAP1 PUSH2 0xC0D SWAP1 DUP4 PUSH2 0x5E93 JUMP JUMPDEST PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO PUSH2 0xCB6 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC57 SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST LT PUSH2 0xC93 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC82 SWAP2 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST PUSH2 0xC8C SWAP1 DUP3 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 POP PUSH2 0xCCC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xC8C SWAP1 DUP3 PUSH2 0x5E93 JUMP JUMPDEST PUSH2 0xCBF TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH2 0xCC9 SWAP1 DUP3 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0xCD6 DUP2 DUP4 PUSH2 0x47CF JUMP JUMPDEST PUSH2 0xCDF DUP6 PUSH2 0x2977 JUMP JUMPDEST PUSH2 0xCE9 SWAP2 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCFD PUSH1 0x26 PUSH2 0x47F9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD0F PUSH1 0x26 DUP5 PUSH2 0x480D JUMP JUMPDEST ISZERO PUSH2 0xE02 JUMPI PUSH1 0x0 PUSH2 0xD1F DUP5 PUSH2 0x1257 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0xE00 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xD60 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xD5B SWAP1 PUSH2 0x5F05 JUMP JUMPDEST PUSH2 0xD66 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH2 0xDF7 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0xDA2 SWAP2 DUP10 SWAP2 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x5DC9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDCE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDF2 SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST PUSH2 0x482F JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xE02 JUMP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0xE44 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 SLOAD PUSH2 0xE51 SWAP1 TIMESTAMP PUSH2 0x5DF8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0xEA0 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0xEB1 SWAP1 POP DUP5 DUP5 DUP5 PUSH2 0x4840 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xEF0 JUMPI POP PUSH1 0x21 SLOAD PUSH2 0xEEE DUP3 DUP7 PUSH2 0x4A4E JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0xF0E JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE DUP6 PUSH1 0x40 MLOAD PUSH2 0xF53 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xF93 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF9E PUSH1 0x15 DUP3 PUSH2 0x480D JUMP JUMPDEST PUSH2 0xFBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFC3 DUP2 PUSH2 0x4B6C JUMP JUMPDEST ISZERO PUSH2 0x101E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5FBD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1015 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x109D JUMPI PUSH2 0x1047 DUP2 PUSH2 0x4D42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5FBD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1094 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH2 0x10A8 DUP2 DUP5 DUP5 PUSH2 0x4DD0 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 DUP4 DUP3 AND SWAP2 AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH2 0x10D4 PUSH2 0x4EB4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x111C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1143 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x11A4 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11F4 SWAP2 SWAP1 PUSH2 0x5BAF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x127D TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ ISZERO PUSH2 0x12F3 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1307 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xC0D SWAP2 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 SWAP2 POP DUP2 EQ ISZERO PUSH2 0x146B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x6 SIGNEXTEND PUSH2 0x1374 TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH2 0x137E SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1391 JUMPI PUSH2 0x1391 PUSH2 0x5F6E JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD SWAP3 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP2 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x13ED SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C9D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1419 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x143D SWAP2 SWAP1 PUSH2 0x5BCA JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP PUSH2 0x1457 SWAP2 DUP4 SWAP2 POP PUSH2 0x5E43 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP PUSH2 0x15F4 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 GT ISZERO PUSH2 0x15F4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x14B8 TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH2 0x14C2 SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x14D5 JUMPI PUSH2 0x14D5 PUSH2 0x5F6E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x22 SLOAD PUSH2 0x14FB TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH2 0x1505 SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST PUSH2 0x150F SWAP2 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x1522 JUMPI PUSH2 0x1522 PUSH2 0x5F6E JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP3 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x157A SWAP3 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C9D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15CA SWAP2 SWAP1 PUSH2 0x5BCA JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP SWAP2 POP PUSH2 0x15E5 SWAP1 DUP3 SWAP1 PUSH2 0x5E43 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x160D JUMPI PUSH2 0x1603 TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1615 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP5 ADD MSTORE JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x164E JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x168F JUMPI PUSH1 0x40 MLOAD PUSH4 0x6258F481 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x16D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFD0EEEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP2 SWAP1 SSTORE SWAP1 PUSH2 0x1703 SWAP1 DUP4 PUSH2 0x4ECE JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3673530133B6DA67E9854F605B0CFA7BB9798CD33C18036DFC10D8DA7C4D4A75 DUP4 PUSH1 0x40 MLOAD PUSH2 0x174A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1781 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x17D8 SWAP2 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x180E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP1 PUSH2 0x5D92 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x1853 JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x1896 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x18C7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP1 DUP7 MSTORE SWAP2 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SLOAD PUSH1 0x1B SLOAD SWAP1 SWAP3 SWAP2 AND EQ ISZERO PUSH2 0x195A JUMPI PUSH1 0x1C SLOAD PUSH1 0x40 MLOAD PUSH4 0x140E25AD PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xA0712D68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1941 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1955 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x12 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP2 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x19A2 SWAP2 DUP4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x2717EAD6B9200DD235AAD468C9809EA400FE33AC69B5BFAA6D3E90FC922B6398 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x1A0E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP1 PUSH2 0x5D92 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1A1E PUSH1 0x26 DUP4 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x1A3B JUMPI PUSH1 0x40 MLOAD PUSH4 0xE0B6AEAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1A46 PUSH1 0x15 DUP5 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x1A63 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1A85 SWAP1 DUP4 PUSH2 0x5040 JUMP JUMPDEST POP PUSH2 0x1A8F DUP4 PUSH2 0x5055 JUMP JUMPDEST PUSH1 0x21 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1ACD SWAP1 PUSH2 0x1AC7 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST DUP5 PUSH2 0x4A4E JUMP JUMPDEST LT ISZERO PUSH2 0x1AEC JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5FBD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1B39 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x1B56 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x50B3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1B8D SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1BA0 SWAP1 POP PUSH2 0xDF2 DUP3 DUP5 PUSH2 0x4A4E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1BC8 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 SWAP1 DUP7 AND SWAP1 PUSH32 0x4E186BC75A2220191B826BAFF3EE63C3E970E94E58A9007FF94C9A7B8E6EBB3F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1C4C JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1C85 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0xE02B2375D8FB4AEF3E5BC5D53BFFCF70B6F185C5C93E69DCBE8B6CFC58E837E2 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x1CF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP1 PUSH2 0x5D92 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1D03 PUSH1 0x15 DUP5 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x1D20 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1D4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x822D97 PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1D7D SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DA9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DCD SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST SWAP1 POP PUSH2 0x1DE4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x50B3 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E13 SWAP2 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E3F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E63 SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST PUSH2 0x1E6D SWAP2 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2710 PUSH1 0x24 SLOAD DUP4 PUSH2 0x1E82 SWAP2 SWAP1 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x1E8C SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E98 DUP2 DUP4 PUSH2 0x5E93 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1ECF SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x17 SLOAD PUSH2 0x1F0C SWAP3 AND DUP4 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1F2E SWAP1 DUP7 PUSH2 0x5040 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEC1A37D4A331A5059081E0FB5DA1735E7890900CD215A4FB1E9F2779FD7B83EB DUP6 PUSH1 0x40 MLOAD PUSH2 0x1F7E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x1FCF JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x2074 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x211B JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2126 PUSH1 0x15 DUP3 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x2142 JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x214B DUP2 PUSH2 0x4B6C JUMP JUMPDEST ISZERO PUSH2 0x21A6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5FBD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x219D SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1B SLOAD DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0x435B21C1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP3 DUP4 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x435B21C1 SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2225 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2249 SWAP2 SWAP1 PUSH2 0x5C3F JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x2259 PUSH2 0x4EB4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2269 DUP3 DUP5 DUP7 DUP9 PUSH2 0x50F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 GT ISZERO PUSH2 0x2303 JUMPI PUSH2 0x2295 DUP7 PUSH2 0x4D42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5FBD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x22E2 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5DE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x22F2 PUSH2 0x4EB4 JUMP JUMPDEST SWAP2 POP PUSH2 0x2300 DUP3 DUP5 DUP7 DUP9 PUSH2 0x50F1 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x230E DUP7 DUP9 DUP4 PUSH2 0x4DD0 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP4 DUP11 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x237F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x238A PUSH1 0x26 DUP3 PUSH2 0x514E JUMP JUMPDEST PUSH2 0x23A7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8D08B1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x51199D699BDFD516FA88DD0D2F8487C40C147B4867ACAA23ADC8D4DF6B098E56 DUP2 PUSH1 0x40 MLOAD PUSH2 0x124C SWAP2 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2401 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x243B JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x24B9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x124C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x24F8 PUSH2 0x4EB4 JUMP JUMPDEST PUSH1 0x2E SSTORE PUSH2 0x2506 PUSH1 0x3 DUP4 PUSH2 0x480D JUMP JUMPDEST ISZERO PUSH2 0x1618 JUMPI PUSH32 0x4851CAD52E624C8F7A1D44C28A80DB05988BA2451FC0DB6B0EC338D8ECA95AFB PUSH1 0x2E SLOAD PUSH1 0x40 MLOAD PUSH2 0x253E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2573 SWAP1 PUSH2 0x5163 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x267E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x259C SWAP1 DUP4 PUSH2 0x516D JUMP JUMPDEST SWAP1 POP PUSH2 0x25A9 PUSH1 0x26 DUP3 PUSH2 0x480D JUMP JUMPDEST ISZERO PUSH2 0x266B JUMPI PUSH1 0x0 PUSH2 0x25B9 DUP3 PUSH2 0x1257 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x2669 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x25FA JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x25F5 SWAP1 PUSH2 0x5F05 JUMP JUMPDEST PUSH2 0x2600 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SLOAD PUSH1 0x22 SLOAD SWAP2 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH2 0x265B SWAP5 SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0xA0D27107 SWAP3 PUSH2 0xDA2 SWAP3 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x5DC9 JUMP JUMPDEST PUSH2 0x2665 SWAP1 DUP7 PUSH2 0x5DF8 JUMP JUMPDEST SWAP5 POP POP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x2676 DUP2 PUSH2 0x5ED6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2552 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x26B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x26ED JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x26F8 DUP4 DUP4 DUP4 PUSH2 0x4840 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH2 0x272C SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CF9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2746 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x2776 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x2773 SWAP2 DUP2 ADD SWAP1 PUSH2 0x5BAF JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x277F JUMPI PUSH2 0x2781 JUMP JUMPDEST POP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6E10247C3C094D220EE99436C164B7F38D63B335A20ED817CBEFAEE4BB02D20E DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x27C6 SWAP3 SWAP2 SWAP1 PUSH2 0x5CF9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x27FE JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2825 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x28A0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x28D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x28E4 PUSH1 0x3 DUP3 PUSH2 0x514E JUMP JUMPDEST POP PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP6 AND DUP1 DUP4 MSTORE SWAP4 DUP2 MSTORE DUP5 DUP3 KECCAK256 SLOAD SWAP3 DUP3 MSTORE PUSH1 0x13 DUP2 MSTORE DUP5 DUP3 KECCAK256 DUP5 DUP4 MSTORE SWAP1 MSTORE SWAP3 SWAP1 SWAP3 KECCAK256 SLOAD PUSH2 0x2932 SWAP3 DUP5 SWAP3 SWAP2 PUSH2 0x5179 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x38A17B9B553C0C3FC2ED14B957A5D8420A1666FD2EFE5C1B3FE5F23EEA61BB3 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCFD PUSH1 0x15 PUSH2 0x47F9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2983 DUP4 PUSH2 0x254E JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x29AD SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST LT ISZERO PUSH2 0xE02 JUMPI PUSH1 0x0 DUP2 GT PUSH2 0x29D9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2A13 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x2A09 SWAP1 DUP4 SWAP1 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x2A13 SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST SWAP2 POP PUSH2 0x267E JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2A45 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0x124C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x2AB4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2AE7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAFE7AD49 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP6 DUP9 AND SWAP6 DUP7 OR SWAP1 SSTORE PUSH1 0x2D DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE SWAP1 MLOAD PUSH32 0xFF0456758201108DE53C0FF04C69988D4678FF455B2CE6F733328CF85722C04C SWAP1 PUSH2 0x2B59 SWAP1 DUP6 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCFD PUSH1 0x3 PUSH2 0x47F9 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2B9D JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2BC4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x2C25 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 DUP4 ISZERO PUSH2 0x8FC MUL SWAP1 DUP5 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x2C1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x2C39 JUMP JUMPDEST PUSH2 0x2C39 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP3 DUP5 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP6 SWAP1 MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH32 0x9A3055DED8C8B5F21BBF4946C5AFAB6E1FA8B3F057922658E5E1ADE125FB0B1E SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2CB3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2CED JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x2D7C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2DA3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2DE6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x2E2B JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2E65 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x12 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE SWAP1 PUSH2 0x2EB2 SWAP1 DUP5 DUP4 PUSH2 0x4FE5 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFDB7893BF11F50C621E59CC7F1CF540E94295CB27CA869EC7ED7618CA7928862 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2F01 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x2F33 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP1 PUSH2 0x5D92 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2F68 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2F73 PUSH1 0x15 CALLER PUSH2 0x480D JUMP JUMPDEST ISZERO PUSH2 0x2F91 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD7229C43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F SLOAD PUSH2 0x2F9E SWAP1 TIMESTAMP PUSH2 0x5DF8 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x2FE9 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3001 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3015 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3039 SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST SWAP1 POP PUSH2 0x3050 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x50B3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x307E SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3096 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30CE SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST PUSH2 0x30D8 SWAP2 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x10 DUP3 MSTORE DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP3 SWAP5 POP DUP5 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x3122 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 CALLER SWAP1 PUSH32 0xA7E66869262026842E8D81F5E6806CDC8D846E27C824E2E22F4FE51442771B34 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x20 SLOAD PUSH2 0x317E SWAP1 TIMESTAMP PUSH2 0x5DF8 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x8 DUP2 MSTORE DUP3 DUP3 KECCAK256 SWAP4 DUP3 MSTORE SWAP3 SWAP1 SWAP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x31CA SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x3202 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE SWAP1 PUSH1 0x20 ADD PUSH2 0x174A JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x326F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x32A8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3323 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x33AA JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x33E9 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x3407 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 AND SWAP1 DUP4 AND EQ PUSH2 0x3444 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCED616B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3476 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x3496 JUMPI PUSH1 0x40 MLOAD PUSH4 0x56248E97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x349F DUP4 PUSH2 0x5055 JUMP JUMPDEST PUSH2 0x34A8 DUP3 PUSH2 0x5055 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x34C9 SWAP1 PUSH2 0x5163 JUMP JUMPDEST GT ISZERO PUSH2 0x35AB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x34F1 SWAP1 DUP3 PUSH2 0x516D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x353F SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP3 SWAP1 SSTORE SWAP2 DUP2 MSTORE PUSH1 0xC SWAP1 SWAP2 MSTORE KECCAK256 PUSH2 0x3581 SWAP1 DUP3 PUSH2 0x514E JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x35A4 SWAP1 DUP3 PUSH2 0x5040 JUMP JUMPDEST POP POP PUSH2 0x34A8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x35CC SWAP1 PUSH2 0x5163 JUMP JUMPDEST GT ISZERO PUSH2 0x36AE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x35F4 SWAP1 DUP3 PUSH2 0x516D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x3642 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE SWAP3 DUP7 AND DUP3 MSTORE PUSH1 0xD SWAP1 MSTORE KECCAK256 PUSH2 0x3684 SWAP1 DUP3 PUSH2 0x5040 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x36A7 SWAP1 DUP3 PUSH2 0x514E JUMP JUMPDEST POP POP PUSH2 0x35AB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x36E0 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x3724 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0x29 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x375A PUSH1 0x15 DUP5 PUSH2 0x514E JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x2D DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 DUP9 AND DUP1 DUP6 MSTORE SWAP6 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x2C SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9B712B63E3FB1325FA042D3C238CE8144937875065900528EA1E4F3B00F379F2 SWAP1 PUSH2 0x2B59 SWAP1 DUP7 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3818 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x124C JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3878 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3883 PUSH1 0x26 DUP3 PUSH2 0x5040 JUMP JUMPDEST PUSH2 0x38A0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF25E6B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3911 SWAP2 SWAP1 PUSH2 0x5980 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 DUP4 AND SWAP4 DUP5 OR SWAP1 SSTORE PUSH1 0x1D SLOAD SWAP1 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0x696A437B SWAP2 PUSH2 0x3965 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x397D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3991 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39B5 SWAP2 SWAP1 PUSH2 0x5BAF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x39E5 DUP2 PUSH2 0x1257 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 DUP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xABFA8DB4D238FA78BF4E15FCC91328DD35F3978F200E2857A56BB719732B7B0B SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3A9D JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x124C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3B02 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3B3B JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3B47 DUP5 DUP5 DUP5 DUP5 PUSH2 0x5179 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH32 0x10A73DE7AB6E9023AA6E2BC23F7ABF4DCEF591487E7E55F44C00E34FE60D56DB PUSH2 0x3B7D DUP5 DUP7 PUSH2 0x5DF8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH2 0x3B9F PUSH1 0x15 DUP3 PUSH2 0x480D JUMP JUMPDEST ISZERO PUSH2 0x3BBD JUMPI PUSH1 0x40 MLOAD PUSH4 0x809740D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3BF7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F3D3205 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3C02 PUSH1 0x15 DUP3 PUSH2 0x5040 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP2 PUSH32 0xED3FAEF50715743626CD57DE74281A2B17CDBFC11C0486FEDA541FB911E0293D SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3C84 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x3CAB JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3D21 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x3D45 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0x124C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x3D9D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP1 PUSH2 0x5D92 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 AND CALLER EQ PUSH2 0x3DDE JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3E10 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x3E2F JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E0B4075 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP4 GT ISZERO PUSH2 0x3E75 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24AE82D PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3EAF JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x3EE6 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x3F00 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP4 DUP6 PUSH2 0x4FE5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3F4E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3F4C SWAP1 DUP6 PUSH2 0x514E JUMP JUMPDEST POP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x53E982DD9EC088D634C74C98FBBC161F808B4B6469A26C657120B9A31CB34BFE DUP7 PUSH1 0x40 MLOAD PUSH2 0x3F9D SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3FE2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x401C JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4027 PUSH1 0x15 DUP3 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x4043 JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4089 JUMPI PUSH1 0x40 MLOAD PUSH4 0x356680B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x40C0 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x40DA SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 DUP5 PUSH2 0x4FE5 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x5F9D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH2 0x4110 PUSH2 0x4EB4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4159 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x124C JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x41B9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x41E0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4256 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x428F JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x124C SWAP1 DUP4 SWAP1 PUSH2 0x5C89 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x430F JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4348 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x436A SWAP1 DUP4 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x4387 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EDA7A11 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x43CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x919BED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH2 0x4400 SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5CF9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x441A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x444A JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x4447 SWAP2 DUP2 ADD SWAP1 PUSH2 0x5BAF JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x4453 JUMPI PUSH2 0x4455 JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x448C SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x44DF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x44DD SWAP1 DUP4 PUSH2 0x514E JUMP JUMPDEST POP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x20262B97130B5CB8F80624EED2733DF2B05DB4A0789B4A3D0157E1D318333104 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x27C6 SWAP3 SWAP2 SWAP1 PUSH2 0x5CF9 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4554 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x458E JUMPI PUSH1 0x40 MLOAD PUSH4 0x4EE891B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x70125A1C0F5202217AAE14EC399ABFAAA13C2FD98A91D43BD3A897DD4751E80 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45E6 PUSH2 0x4EB4 JUMP JUMPDEST PUSH1 0x2E SSTORE PUSH2 0x45F4 PUSH1 0x3 DUP8 PUSH2 0x480D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4625 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP10 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP5 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x4649 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x4678 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH2 0x4675 SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST LT ISZERO JUMPDEST ISZERO PUSH2 0x46BC JUMPI PUSH32 0x4851CAD52E624C8F7A1D44C28A80DB05988BA2451FC0DB6B0EC338D8ECA95AFB PUSH1 0x2E SLOAD PUSH1 0x40 MLOAD PUSH2 0x46B0 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x46F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x46FB PUSH1 0x15 DUP4 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x4718 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4721 DUP3 PUSH2 0x5055 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4749 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x5ABCF5031FDBD3BADB9D1E09094208DE329AEE72730E87650F346584205D23D1 SWAP3 PUSH2 0x47A9 SWAP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP3 PUSH2 0x47C5 SWAP2 SWAP1 PUSH2 0x5EF1 JUMP JUMPDEST PUSH2 0xE02 SWAP1 DUP4 PUSH2 0x5E93 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP4 LT ISZERO PUSH2 0x267E JUMPI PUSH1 0x22 SLOAD PUSH2 0x47E8 DUP4 DUP6 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x47F2 SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST SWAP1 POP PUSH2 0xE02 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x4806 DUP4 PUSH2 0x52CF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x4806 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE02 DUP3 PUSH1 0x22 SLOAD PUSH1 0x23 SLOAD PUSH2 0x532B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x4863 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP1 PUSH2 0x5D92 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x4889 SWAP1 DUP4 PUSH2 0x480D JUMP JUMPDEST PUSH2 0x48A5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x41CFA5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x48EB JUMPI PUSH1 0x40 MLOAD PUSH4 0x435B5625 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x48F4 DUP4 PUSH2 0x53D9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4903 PUSH2 0xDF2 DUP4 DUP6 PUSH2 0x4A4E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x49B9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x4954 SWAP1 DUP4 SWAP1 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x495E SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x4986 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x49B3 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x49F0 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x4A43 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x4A41 SWAP1 DUP5 PUSH2 0x514E JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0xE02 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4AC0 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4ABB SWAP1 PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND PUSH2 0x5F05 JUMP JUMPDEST PUSH2 0x4AE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x4B1C SWAP2 DUP9 SWAP2 DUP7 SWAP2 PUSH1 0x4 ADD PUSH2 0x5DC9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4B34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4B48 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCE9 SWAP2 SWAP1 PUSH2 0x5C26 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B77 TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1618 JUMPI PUSH2 0x4BA7 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xC0D SWAP2 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT PUSH2 0x4C1D JUMPI PUSH2 0x4BCE DUP3 PUSH2 0x53D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x4BFC TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4C43 SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST LT PUSH2 0x4C9F JUMPI PUSH2 0x4C51 DUP3 PUSH2 0x53D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SSTORE PUSH1 0x22 SLOAD PUSH1 0x29 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x4C90 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x1 SWAP2 POP PUSH2 0x1618 SWAP1 POP JUMP JUMPDEST PUSH2 0x4CA8 TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1618 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4CE9 DUP4 PUSH2 0x53D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP3 SWAP2 PUSH2 0x4D19 SWAP2 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x4D23 SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4D87 SWAP1 PUSH2 0x4D69 SWAP1 TIMESTAMP PUSH2 0x5E93 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x47CF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x4DAF SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x4E09 JUMPI PUSH1 0x40 MLOAD PUSH4 0x356680B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4E3E SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1B SLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4E7D SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x4EAA SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3F GAS PUSH2 0x4EC4 SWAP1 PUSH1 0x40 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0xCFD SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x4F07 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMPDEST PUSH2 0x4F12 PUSH1 0x3 DUP5 PUSH2 0x5040 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x8 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE SWAP2 DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 DUP4 SWAP3 PUSH2 0x4F66 SWAP1 DUP5 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xE02 JUMPI PUSH1 0x1B SLOAD PUSH1 0x40 MLOAD PUSH4 0x852CD8D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x42966C68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4FC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4FDB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x503B DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x5004 SWAP3 SWAP2 SWAP1 PUSH2 0x5CF9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x53FE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4806 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x54D0 JUMP JUMPDEST PUSH2 0x505E DUP2 PUSH2 0x4B6C JUMP JUMPDEST POP PUSH2 0x5068 DUP2 PUSH2 0x4D42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x5097 SWAP2 SWAP1 PUSH2 0x551F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x50EB SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x5004 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 DUP7 PUSH1 0x2E SLOAD PUSH2 0x5103 SWAP2 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST PUSH2 0x510D SWAP2 SWAP1 PUSH2 0x5DF8 JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP5 PUSH2 0x2710 PUSH2 0x5126 DUP7 DUP6 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x5130 SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST PUSH2 0x513A SWAP2 SWAP1 PUSH2 0x5E24 JUMP JUMPDEST PUSH2 0x5144 SWAP2 SWAP1 PUSH2 0x5E10 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4806 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x5535 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE02 DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4806 DUP4 DUP4 PUSH2 0x5628 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x5251 JUMPI PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 PUSH4 0xA9059CBB SWAP2 AND PUSH2 0x51AE DUP5 DUP7 PUSH2 0x5DF8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51CB SWAP3 SWAP2 SWAP1 PUSH2 0x5CF9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x51E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x5215 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x5212 SWAP2 DUP2 ADD SWAP1 PUSH2 0x5BAF JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x524F JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x5243 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5248 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP PUSH2 0x5251 JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x5288 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x52C4 SWAP1 DUP5 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x531F JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x530B JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x5365 JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x535A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x4806 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x5371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x53E2 DUP2 PUSH2 0x5652 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5453 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5836 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x503B JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x5471 SWAP2 SWAP1 PUSH2 0x5BAF JUMP JUMPDEST PUSH2 0x503B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1805 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x5517 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xE02 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xE02 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x552E JUMPI DUP2 PUSH2 0x4806 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x561E JUMPI PUSH1 0x0 PUSH2 0x5559 PUSH1 0x1 DUP4 PUSH2 0x5E93 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x556D SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x5E93 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x55D2 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x558D JUMPI PUSH2 0x558D PUSH2 0x5F6E JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x55B0 JUMPI PUSH2 0x55B0 PUSH2 0x5F6E JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x55E3 JUMPI PUSH2 0x55E3 PUSH2 0x5F58 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xE02 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0xE02 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x563F JUMPI PUSH2 0x563F PUSH2 0x5F6E JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x565D TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x56F4 JUMPI PUSH1 0x1E SLOAD PUSH2 0x5695 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1257 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x5718 SWAP1 PUSH2 0x5163 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x267E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x5741 SWAP1 DUP4 PUSH2 0x516D JUMP JUMPDEST SWAP1 POP PUSH2 0x574E PUSH1 0x26 DUP3 PUSH2 0x480D JUMP JUMPDEST ISZERO PUSH2 0x5823 JUMPI PUSH2 0x575C TIMESTAMP PUSH2 0x47B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x57E2 JUMPI PUSH2 0x5786 DUP2 PUSH2 0x1257 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x5816 SWAP1 PUSH2 0xDF2 SWAP1 DUP4 PUSH2 0x4A4E JUMP JUMPDEST PUSH2 0x5820 SWAP1 DUP5 PUSH2 0x5DF8 JUMP JUMPDEST SWAP3 POP JUMPDEST POP DUP1 PUSH2 0x582E DUP2 PUSH2 0x5ED6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x56F7 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xCE9 DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 DUP5 EXTCODESIZE PUSH2 0x588F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1805 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x58AB SWAP2 SWAP1 PUSH2 0x5C6D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x58E8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x58ED JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x58FD DUP3 DUP3 DUP7 PUSH2 0x5908 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x5917 JUMPI POP DUP2 PUSH2 0x4806 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x5927 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1805 SWAP2 SWAP1 PUSH2 0x5D5F JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x6 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x1618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5975 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4806 DUP2 PUSH2 0x5F84 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5992 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4806 DUP2 PUSH2 0x5F84 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x59B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x59BB DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x59CB DUP2 PUSH2 0x5F84 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x59EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x59F6 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x5A06 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x5A16 DUP2 PUSH2 0x5F84 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5A36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5A41 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x5A51 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5A78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5A83 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x5A93 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x5AAA DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5ACB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5AD6 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x5AE6 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x5B13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x5B1E DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x5B2E DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5B5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5B6A DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5B8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x5B98 DUP2 PUSH2 0x5F84 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x5A16 DUP2 PUSH2 0x5F84 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5BC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4806 DUP3 PUSH2 0x5941 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5BDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5BE8 DUP5 PUSH2 0x5951 JUMP JUMPDEST SWAP3 POP PUSH2 0x5BF6 PUSH1 0x20 DUP6 ADD PUSH2 0x5951 JUMP JUMPDEST SWAP2 POP PUSH2 0x5C04 PUSH1 0x40 DUP6 ADD PUSH2 0x5941 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5C1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5C38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5C54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x5C7F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x5EAA JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 DUP3 ADD SWAP2 SWAP1 PUSH1 0x60 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5CEC JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5CCA JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5D53 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5D2E JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x5D7E DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x5EAA JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x6 SWAP2 SWAP1 SWAP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x5E0B JUMPI PUSH2 0x5E0B PUSH2 0x5F2C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5E1F JUMPI PUSH2 0x5E1F PUSH2 0x5F42 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5E3E JUMPI PUSH2 0x5E3E PUSH2 0x5F2C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x5E6E JUMPI PUSH2 0x5E6E PUSH2 0x5F2C JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x5E89 JUMPI PUSH2 0x5E89 PUSH2 0x5F2C JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x5EA5 JUMPI PUSH2 0x5EA5 PUSH2 0x5F2C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5EC5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5EAD JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x50EB JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x5EEA JUMPI PUSH2 0x5EEA PUSH2 0x5F2C JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5F00 JUMPI PUSH2 0x5F00 PUSH2 0x5F42 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x5F23 JUMPI PUSH2 0x5F23 PUSH2 0x5F2C JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5F99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID CHAINID CALLCODE XOR ADDMOD PUSH26 0xA7123A197CC3828C28955D70D661C70ACBDC02450DAF5F9A9C1C STATICCALL 0xEE EXTCODEHASH 0xD 0xAB 0xA9 DUP4 PUSH30 0x1AB0597ACF34328550E4832D02E24E467825E7C2DD318C3820A264697066 PUSH20 0x58221220C3D0538D6A43AAFC625AE68FB6D81B9F KECCAK256 0xAB 0x2C EXTCODESIZE BLOCKHASH 0xE7 0xC0 EXP GT 0xA5 0xEE 0xAE LOG0 PUSH10 0x909564736F6C63430008 SMOD STOP CALLER ",
              "sourceMap": "100:383:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3206:848:35;;;;;;:::i;:::-;;:::i;:::-;;;11623:25:84;;;11611:2;11596:18;3206:848:35;;;;;;;;1968:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1402:135:35;;;:::i;:::-;;;;;;;:::i;4104:514::-;;;;;;:::i;:::-;;:::i;8401:573::-;;;;;;:::i;:::-;;:::i;:::-;;2423:690:39;;;;;;:::i;:::-;;:::i;1728:76:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2556:364:31;;;;;;:::i;:::-;;:::i;4668:1632:35:-;;;;;;:::i;:::-;;:::i;:::-;;;;11310:13:84;;11307:1;11296:28;;;11278:47;;11395:4;11383:17;;;11377:24;11363:39;;;11341:20;;;11334:69;11447:17;;;11441:24;11419:20;;;11412:54;11266:2;11251:18;4668:1632:35;11076:396:84;880:79:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;:::i;:::-;;;;;;;;;;;;;;1374:436:42;;;;;;:::i;:::-;;:::i;362:32:31:-;;;;;-1:-1:-1;;;;;362:32:31;;;;;;;;;;:::i;2090:78:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;384:50:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9125:14:84;;9118:22;9100:41;;9088:2;9073:18;384:50:32;8960:187:84;366:115:48;;;;;;:::i;:::-;-1:-1:-1;;;;;451:25:48;432:4;451:25;;;:13;:25;;;;;;;;;366:115;2196:653:42;;;;;;:::i;:::-;;:::i;7478:873:35:-;;;;;;:::i;:::-;;:::i;568:210:30:-;;;;;;:::i;:::-;;:::i;973:834:34:-;;;;;;:::i;:::-;;:::i;423:204:38:-;;;;;;:::i;:::-;;:::i;669:279::-;;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;-1:-1:-1;;;;;199:34:28;;;667:41:31;;;;;;1340:1042:39;;;;;;:::i;:::-;;:::i;834:50:31:-;;;;;;7219:209:35;;;;;;:::i;:::-;;:::i;533:194:32:-;;;;;;:::i;:::-;;:::i;945:79:35:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4195:110:31;;;;;;:::i;:::-;;:::i;566:221:39:-;;;;;;:::i;:::-;;:::i;1587:691:35:-;;;;;;:::i;:::-;;:::i;1075:373:33:-;;;;;;:::i;:::-;;:::i;1788:223:31:-;;;;;;:::i;:::-;;:::i;860:284:41:-;;;;;;:::i;:::-;;:::i;925:49:31:-;;;;;;590:36;;;;;-1:-1:-1;;;;;590:36:31;;;2385:105:29;;;:::i;226:52:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;226:52:38;;;2328:828:35;;;;;;:::i;:::-;;:::i;2210:50:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3140:152:31;;;;;;:::i;:::-;;:::i;666:319:37:-;;;;;;:::i;:::-;;:::i;2531:111:29:-;;;:::i;486:348:27:-;;;;;;:::i;:::-;;:::i;321:59:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;321:59:38;;;999:203:32;;;;;;:::i;:::-;;:::i;9024:681:35:-;;;;;;:::i;:::-;;:::i;769:69:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;721:609:42;;;;;;:::i;:::-;;:::i;1854:298::-;;;;;;:::i;:::-;;:::i;1075:54:35:-;;;;;;:::i;:::-;;;;;;;;;;;;;;749:44:31;;;;;;762:202:32;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;1027:1856:37:-;;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3973:182:31;;;;;;:::i;:::-;;:::i;838:86:34:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6736:433:35;;;;;;:::i;:::-;;:::i;2960:140:31:-;;;;;;:::i;:::-;;:::i;299:49:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;488:326:41;;;;;;:::i;:::-;;:::i;422:253:36:-;;;;;;:::i;:::-;;:::i;435:37:31:-;;;;;-1:-1:-1;;;;;435:37:31;;;2286:230;;;;;;:::i;:::-;;:::i;3666:267::-;;;;;;:::i;:::-;;:::i;1846:80:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1855:695:34;;;;;;:::i;:::-;;:::i;3154:538:39:-;;;;;;:::i;:::-;;:::i;1105:32:31:-;;;;;;534:53:29;;;;;;:::i;:::-;;;;;;;;;;;;;;3332:188:31;;;;;;:::i;:::-;;:::i;2051:195::-;;;;;;:::i;:::-;;:::i;479:64:37:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;479:64:37;;;1237:211:32;;;;;;:::i;:::-;;:::i;513:36:31:-;;;;;-1:-1:-1;;;;;513:36:31;;;1180:52:35;;;;;;:::i;:::-;;;;;;;;;;;;;;444:588:33;;;;;;:::i;:::-;;:::i;268:41:28:-;;;;;-1:-1:-1;;;;;268:41:28;;;316:212:30;;;;;;:::i;:::-;;:::i;828:471:39:-;;;;;;:::i;:::-;;:::i;1015:49:31:-;;;;;;6364:322:35;;;;;;:::i;:::-;;:::i;3206:848::-;3277:16;3301:22;3326;3343:4;3326:16;:22::i;:::-;3446:16;;3301:47;;-1:-1:-1;3374:15:35;;3420:43;;3428:34;;3374:15;3428:34;:::i;:::-;3420:7;:43::i;:::-;-1:-1:-1;;;;;3401:16:35;;;;;;:10;:16;;;;;;:62;3396:576;;;3566:16;;-1:-1:-1;;;;;3545:16:35;;;;;;:10;:16;;;;;;3527:34;;:15;:34;:::i;:::-;3526:56;3522:324;;3704:16;;-1:-1:-1;;;;;3685:16:35;;;;;;:10;:16;;;;;;:35;;3704:16;3685:35;:::i;:::-;3671:50;;;;:::i;:::-;;;3396:576;;3522:324;-1:-1:-1;;;;;3821:16:35;;;;;;:10;:16;;;;;;3808:29;;;;:::i;3396:576::-;3941:24;3949:15;3941:7;:24::i;:::-;3928:37;;;;:::i;:::-;;;3396:576;4016:33;4023:9;4034:14;4016:6;:33::i;:::-;3988:25;4008:4;3988:19;:25::i;:::-;:61;;;;:::i;:::-;3977:72;3206:848;-1:-1:-1;;;;3206:848:35:o;1402:135::-;1465:22;1503:29;:20;:27;:29::i;:::-;1495:37;;1402:135;:::o;4104:514::-;4197:22;4231:41;:20;4261:10;4231:29;:41::i;:::-;4227:387;;;4282:27;4312:28;4329:10;4312:16;:28::i;:::-;4282:58;;4352:10;:17;;;4373:1;4352:22;4348:260;;-1:-1:-1;;;;;4410:25:35;;4386:21;4410:25;;;:13;:25;;;;;;;;:74;;4463:10;:21;;;4462:22;;;:::i;:::-;4410:74;;;4438:10;:21;;;4410:74;4526:12;;4581:16;;4512:86;;-1:-1:-1;;;4512:86:35;;4386:98;;-1:-1:-1;4501:98:35;;-1:-1:-1;;;;;4526:12:35;;;;4512:42;;:86;;4555:7;;4386:98;;4512:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:10;:98::i;:::-;4494:105;;;;;;4348:260;4274:340;4227:387;4104:514;;;;:::o;8401:573::-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;8598:10:35::1;::::0;8580:28:::1;::::0;:15:::1;:28;:::i;:::-;-1:-1:-1::0;;;;;8543:22:35;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;:34;;::::1;::::0;;;;;;;;;:65;;;;8614:20;;;:14:::1;:20:::0;;;;;:32;;;;;;;;;:43;;8650:7;;8543:22;8614:43:::1;::::0;8650:7;;8614:43:::1;:::i;:::-;::::0;;;-1:-1:-1;8663:50:35::1;::::0;-1:-1:-1;8687:4:35;8693:10;8705:7;8663:23:::1;:50::i;:::-;-1:-1:-1::0;;;;;8750:21:35;;::::1;8720:27;8750:21:::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;8793:23;;;;;:94:::1;;;8871:16;;8820:48;8836:19;8857:10;8820:15;:48::i;:::-;:67;8793:94;8789:132;;;8896:25;;-1:-1:-1::0;;;8896:25:35::1;;;;;;;;;;;8789:132;8949:10;-1:-1:-1::0;;;;;8933:36:35::1;8943:4;-1:-1:-1::0;;;;;8933:36:35::1;;8961:7;8933:36;;;;11623:25:84::0;;11611:2;11596:18;;11477:177;8933:36:35::1;;;;;;;;8537:437;8401:573:::0;;;;:::o;2423:690:39:-;2518:10;2503:12;2539:14;;;:8;:14;;;;;;;;2535:40;;;2562:13;;-1:-1:-1;;;2562:13:39;;;;;;;;;;;2535:40;2586:20;:5;2601:4;2586:14;:20::i;:::-;2581:49;;2615:15;;-1:-1:-1;;;2615:15:39;;;;;;;;;;;2581:49;2641:31;2667:4;2641:25;:31::i;:::-;2637:156;;;-1:-1:-1;;;;;2687:99:39;;2716:16;;;;:10;:16;;;;;;;;;2734:20;:26;;;;;;2762:17;:23;;;;;;;;2687:99;;-1:-1:-1;;;;;;;;;;;2687:99:39;;;2716:16;;2734:26;;2687:99;:::i;:::-;;;;;;;;2637:156;-1:-1:-1;;;;;2814:26:39;;;;;;:20;:26;;;;;;2803:37;;2799:193;;;2850:23;2868:4;2850:17;:23::i;:::-;-1:-1:-1;;;;;2886:99:39;;2915:16;;;;:10;:16;;;;;;;;;2933:20;:26;;;;;;2961:17;:23;;;;;;;;2886:99;;-1:-1:-1;;;;;;;;;;;2886:99:39;;;2915:16;;2933:26;;2886:99;:::i;:::-;;;;;;;;2799:193;2998:39;3013:4;3019:7;3028:8;2998:14;:39::i;:::-;3059:8;;-1:-1:-1;;;;;3048:60:39;;;;;;;;3059:8;-1:-1:-1;;;;;;;;;;;3084:8:39;3094:13;:11;:13::i;:::-;3048:60;;;12168:25:84;;;12224:2;12209:18;;12202:34;;;;12141:18;3048:60:39;;;;;;;2497:616;2423:690;;:::o;2556:364:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2647:27:31;::::1;2643:53;;2683:13;;-1:-1:-1::0;;;2683:13:31::1;;;;;;;;;;;2643:53;2702:12;:28:::0;;-1:-1:-1;;;;;2702:28:31;;::::1;-1:-1:-1::0;;;;;;2702:28:31;;::::1;::::0;::::1;::::0;;;:12:::1;2736:28:::0;;;:14:::1;:28;::::0;;;;;;:43;;;;::::1;::::0;;::::1;::::0;;;2830:12:::1;::::0;2816:55;;-1:-1:-1;;;2816:55:31;;2830:12;::::1;::::0;2816:40:::1;::::0;:55:::1;::::0;2717:13;;2816:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2785:28:31;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;:86;;-1:-1:-1;;2785:86:31::1;::::0;::::1;;::::0;;;::::1;::::0;;;2882:33;::::1;::::0;::::1;::::0;2785:28;;2882:33:::1;:::i;:::-;;;;;;;;2556:364:::0;:::o;4668:1632:35:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;4819:24:35;4827:15;4819:7;:24::i;:::-;-1:-1:-1;;;;;4791:17:35;;;;;;:5;:17;;;;;:24;;;:52;4787:1509;;;-1:-1:-1;;;;;;4924:17:35;;;;;:5;:17;;;;;;;;;4911:30;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4911:30:35;;;;;;;;;;;;;;;;;;;;;;;;;;;4668:1632::o;4787:1509::-;4962:12;4982:18;5003:43;5029:16;;5011:15;:34;;;;:::i;5003:43::-;-1:-1:-1;;;;;5059:17:35;;;;;;:5;:17;;;;;:24;;;4982:64;;-1:-1:-1;5059:38:35;;5055:1103;;;5220:15;;;5233:1;5220:15;;;;;;;;;5190:27;;5220:15;;;;;;;;;-1:-1:-1;;;;;;;;5266:17:35;;5245:18;5266:17;;;:5;:17;;;;;:25;5190:45;;-1:-1:-1;5266:25:35;;5344:24;5352:15;5344:7;:24::i;:::-;5326:42;;:15;:42;:::i;:::-;5302:11;5314:1;5302:14;;;;;;;;:::i;:::-;:67;;;;:14;;;;;;;;;;:67;5428:12;;-1:-1:-1;;;;;5450:26:35;;;5428:12;5450:26;;;:14;:26;;;;;;;;;5414:76;;-1:-1:-1;;;5414:76:35;;5428:12;;;;5414:35;;:76;;5450:26;;;;;5478:11;;5414:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5380:110;;;;;;;;;;;;-1:-1:-1;5525:33:35;;5546:12;;-1:-1:-1;5525:33:35;:::i;:::-;5501:57;;;;;;:21;;;:57;-1:-1:-1;5055:1103:35;;-1:-1:-1;5055:1103:35;;-1:-1:-1;;;;;5577:17:35;;;;;;:5;:17;;;;;:24;;;:37;-1:-1:-1;5573:585:35;;;5719:15;;;5732:1;5719:15;;;;;;;;5689:27;;5719:15;;;;;;;;;;-1:-1:-1;5719:15:35;5689:45;;5787:24;5795:15;5787:7;:24::i;:::-;5769:42;;:15;:42;:::i;:::-;5745:11;5757:1;5745:14;;;;;;;;:::i;:::-;;;;;;:67;;;;;;;;;;;5891:16;;5864:24;5872:15;5864:7;:24::i;:::-;5846:42;;:15;:42;:::i;:::-;:61;;;;:::i;:::-;5822:11;5834:1;5822:14;;;;;;;;:::i;:::-;:86;;;;:14;;;;;;;;;;:86;6015:12;;-1:-1:-1;;;;;6037:26:35;;;5919:22;6037:26;;;:14;:26;;;;;;;;6001:76;;-1:-1:-1;;;6001:76:35;;6015:12;;;;6001:35;;:76;;6037:26;;6065:11;;6001:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5951:126;;;;;;;;;;;;-1:-1:-1;5951:126:35;-1:-1:-1;6112:37:35;;5951:126;;6112:37;:::i;:::-;6088:61;;;;;;:21;;;:61;-1:-1:-1;;5573:585:35;6169:7;6165:125;;;6208:24;6216:15;6208:7;:24::i;:::-;6188:17;;;:44;6165:125;;;6257:24;6264:17;;;6257:24;6165:125;4954:1342;;4787:1509;4668:1632;;;:::o;1374:436:42:-;1447:10;1438:20;;;;:8;:20;;;;;;;;1434:43;;;1467:10;;-1:-1:-1;;;1467:10:42;;;;;;;;;;;1434:43;1504:10;1487:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1487:38:42;;;;;;;;;;1483:73;;1539:17;;-1:-1:-1;;;1539:17:42;;;;;;;;;;;1483:73;1583:10;1566:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1566:38:42;;;;;;;;;;1608:15;-1:-1:-1;1562:83:42;;1632:13;;-1:-1:-1;;;1632:13:42;;;;;;;;;;;1562:83;1676:10;1659:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1659:38:42;;;;;;;;;1652:45;;;1659:28;1722:31;;1688:8;1722:9;:31::i;:::-;1704:49;;1787:8;-1:-1:-1;;;;;1764:41:42;1775:10;-1:-1:-1;;;;;1764:41:42;;1797:7;1764:41;;;;11623:25:84;;11611:2;11596:18;;11477:177;1764:41:42;;;;;;;;1428:382;1374:436;:::o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;754:10:::1;:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;2196:653:42:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;;;;;;;;;1680:1;2389:7;:18;;;2288:10:42::1;2273:26:::0;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;2273:36:42;::::1;::::0;;;;;;;;2269:73:::1;;2323:19;;-1:-1:-1::0;;;2323:19:42::1;;;;;;;;;;;2269:73;2369:10;2352:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;2352:38:42;::::1;::::0;;;;;;;;2394:15:::1;-1:-1:-1::0;2348:85:42::1;;2418:15;;-1:-1:-1::0;;;2418:15:42::1;;;;;;;;;;;2348:85;2452:10;2443:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;2439:43;;;2472:10;;-1:-1:-1::0;;;2472:10:42::1;;;;;;;;;;;2439:43;2522:10;2489:15;2507:26:::0;;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;2507:36:42;;::::1;::::0;;;;;;;;;;2566:8:::1;::::0;2507:36;;2566:8;::::1;2554:20;2550:84;;;2599:13;::::0;2584:43:::1;::::0;-1:-1:-1;;;2584:43:42;;::::1;::::0;::::1;11623:25:84::0;;;-1:-1:-1;;;;;2599:13:42;;::::1;::::0;2584:34:::1;::::0;11596:18:84;;2584:43:42::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2550:84;2662:10;2647:26;::::0;;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;2647:36:42;::::1;::::0;;;;;;;;;2640:43;;;2696:28;;;:16:::1;:28:::0;;;;;:38;;;;;;;;2689:45;;;;2741:50:::1;::::0;2783:7;2741:29:::1;:50::i;:::-;2803:41;::::0;11623:25:84;;;-1:-1:-1;;;;;2803:41:42;::::1;::::0;2814:10:::1;::::0;2803:41:::1;::::0;11611:2:84;11596:18;2803:41:42::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;2196:653:42:o;7478:873:35:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;7614:41:35::1;:20;7644:10:::0;7614:29:::1;:41::i;:::-;7609:80;;7664:25;;-1:-1:-1::0;;;7664:25:35::1;;;;;;;;;;;7609:80;7700:20;:5;7715:4:::0;7700:14:::1;:20::i;:::-;7695:50;;7729:16;;-1:-1:-1::0;;;7729:16:35::1;;;;;;;;;;;7695:50;-1:-1:-1::0;;;;;7752:21:35;::::1;;::::0;;;:15:::1;:21;::::0;;;;:37:::1;::::0;7778:10;7752:25:::1;:37::i;:::-;;7796:27;7818:4;7796:21;:27::i;:::-;7909:16;::::0;-1:-1:-1;;;;;7850:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;7834:72:::1;::::0;7850:43:::1;::::0;7886:7;;7850:43:::1;:::i;:::-;7895:10;7834:15;:72::i;:::-;:91;7830:129;;;7934:25;;-1:-1:-1::0;;;7934:25:35::1;;;;;;;;;;;7830:129;-1:-1:-1::0;;;;;7971:99:35;::::1;8000:16;::::0;;;:10:::1;:16;::::0;;;;;;;;8018:20:::1;:26:::0;;;;;;8046:17:::1;:23:::0;;;;;;;;7971:99;;-1:-1:-1;;;;;;;;;;;7971:99:35;::::1;::::0;8000:16;;8018:26;;7971:99:::1;:::i;:::-;;;;;;;;8077:71;-1:-1:-1::0;;;;;8077:35:35;::::1;8113:10;8133:4;8140:7:::0;8077:35:::1;:71::i;:::-;-1:-1:-1::0;;;;;8154:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:44;;8191:7;;8154:21;:44:::1;::::0;8191:7;;8154:44:::1;:::i;:::-;::::0;;;-1:-1:-1;8231:48:35::1;::::0;-1:-1:-1;8242:36:35::1;8258:7:::0;8267:10;8242:15:::1;:36::i;8231:48::-;-1:-1:-1::0;;;;;8204:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;:75;;:23;;;:75:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;8290:56:35::1;::::0;11623:25:84;;;8326:10:35::1;::::0;-1:-1:-1;;;;;8290:56:35;;::::1;::::0;;;::::1;::::0;::::1;::::0;11611:2:84;11596:18;8290:56:35::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;7478:873:35:o;568:210:30:-;1778:10:32;1768:21;;;;:9;:21;;;;;;;;1763:49;;1798:14;;-1:-1:-1;;;1798:14:32;;;;;;;;;;;1763:49;-1:-1:-1;;;;;649:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;::::1;;644:49;;680:13;;-1:-1:-1::0;;;680:13:30::1;;;;;;;;;;;644:49;-1:-1:-1::0;;;;;699:22:30;::::1;724:5;699:22:::0;;;:8:::1;:22;::::0;;;;;:30;;-1:-1:-1;;699:30:30::1;::::0;;740:33;762:10:::1;::::0;699:22;740:33:::1;::::0;::::1;568:210:::0;:::o;973:834:34:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;1108:20:34::1;:5;1123:4:::0;1108:14:::1;:20::i;:::-;1103:50;;1137:16;;-1:-1:-1::0;;;1137:16:34::1;;;;;;;;;;;1103:50;1229:8;::::0;-1:-1:-1;;;;;1219:18:34;;::::1;1229:8:::0;::::1;1219:18;1215:47;;;1246:16;;-1:-1:-1::0;;;1246:16:34::1;;;;;;;;;;;1215:47;1286:39;::::0;-1:-1:-1;;;1286:39:34;;1268:15:::1;::::0;-1:-1:-1;;;;;1286:24:34;::::1;::::0;::::1;::::0;:39:::1;::::0;1319:4:::1;::::0;1286:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1268:57:::0;-1:-1:-1;1331:67:34::1;-1:-1:-1::0;;;;;1331:31:34;::::1;1363:10;1383:4;1390:7:::0;1331:31:::1;:67::i;:::-;1404:17;1466:7;1431:6;-1:-1:-1::0;;;;;1424:24:34::1;;1457:4;1424:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;;:::i;:::-;1404:69;;1479:17;1238:6:31;1512:3:34;;1500:9;:15;;;;:::i;:::-;1499:25;;;;:::i;:::-;1479:45:::0;-1:-1:-1;1563:21:34::1;1479:45:::0;1563:9;:21:::1;:::i;:::-;-1:-1:-1::0;;;;;1530:21:34;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;;:54;;:29;;:21;:54:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;1590:28:34;;::::1;;::::0;;;:22:::1;:28;::::0;;;;;;;:36;;::::1;::::0;;;;;;;;1629:15:::1;1590:54:::0;;1678:10:::1;::::0;1650:50:::1;::::0;1678:10:::1;1690:9:::0;1650:27:::1;:50::i;:::-;-1:-1:-1::0;;;;;1706:16:34;::::1;;::::0;;;:10:::1;:16;::::0;;;;:28:::1;::::0;1727:6;1706:20:::1;:28::i;:::-;;1780:10;-1:-1:-1::0;;;;;1746:56:34::1;1772:6;-1:-1:-1::0;;;;;1746:56:34::1;1766:4;-1:-1:-1::0;;;;;1746:56:34::1;;1792:9;1746:56;;;;11623:25:84::0;;11611:2;11596:18;;11477:177;1746:56:34::1;;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;;;973:834:34:o;423:204:38:-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;527:21:38;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;-1:-1:-1;;;;;;527:33:38::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;596:14:38;;;;;;;571:51;;527:33;;596:14:::1;::::0;527:21;571:51:::1;::::0;::::1;423:204:::0;;;:::o;669:279::-;-1:-1:-1;;;;;1132:21:38;;;;;;;:15;:21;;;;;;;;;1118:10;:35;1114:69;;1162:21;;-1:-1:-1;;;1162:21:38;;;;;;;;;;;1114:69;-1:-1:-1;;;;;786:14:38;;::::1;761:22;786:14:::0;;;:8:::1;:14;::::0;;;;;;;;;824:15:::1;:21:::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;;807:38:38;;::::1;::::0;;;::::1;::::0;;;851:28;;;;::::1;::::0;;891:52;786:14;::::1;::::0;;;;910:10:::1;::::0;891:52:::1;::::0;761:22;891:52:::1;755:193;669:279:::0;;:::o;1340:1042:39:-;1420:10;1405:12;1440:14;;;:8;:14;;;;;;;;1436:40;;;1463:13;;-1:-1:-1;;;1463:13:39;;;;;;;;;;;1436:40;1487:20;:5;1502:4;1487:14;:20::i;:::-;1482:49;;1516:15;;-1:-1:-1;;;1516:15:39;;;;;;;;;;;1482:49;1542:31;1568:4;1542:25;:31::i;:::-;1538:156;;;-1:-1:-1;;;;;1588:99:39;;1617:16;;;;:10;:16;;;;;;;;;1635:20;:26;;;;;;1663:17;:23;;;;;;;;1588:99;;-1:-1:-1;;;;;;;;;;;1588:99:39;;;1617:16;;1635:26;;1588:99;:::i;:::-;;;;;;;;1538:156;1774:12;;-1:-1:-1;;;;;1805:14:39;;;1701;1805;;;:5;:14;;;;;;;;1820:8;;;;1805:24;;;;;;;;;1760:70;;-1:-1:-1;;;1760:70:39;;;;;11623:25:84;;;;1701:14:39;;;;;;1774:12;;;1760:44;;11596:18:84;;1760:70:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1700:130;;;;;;1837:16;1856:13;:11;:13::i;:::-;1837:32;;1875:16;1894:60;1912:8;1922:9;1933:12;1947:6;1894:17;:60::i;:::-;-1:-1:-1;;;;;1976:26:39;;;;;;:20;:26;;;;;;1875:79;;-1:-1:-1;1965:37:39;;1961:305;;;2012:23;2030:4;2012:17;:23::i;:::-;-1:-1:-1;;;;;2048:99:39;;2077:16;;;;:10;:16;;;;;;;;;2095:20;:26;;;;;;2123:17;:23;;;;;;;;2048:99;;-1:-1:-1;;;;;;;;;;;2048:99:39;;;2077:16;;2095:26;;2048:99;:::i;:::-;;;;;;;;2167:13;:11;:13::i;:::-;2156:24;;2199:60;2217:8;2227:9;2238:12;2252:6;2199:17;:60::i;:::-;2188:71;;1961:305;2272:39;2287:4;2293:7;2302:8;2272:14;:39::i;:::-;2333:8;;2322:55;;;12168:25:84;;;12224:2;12209:18;;12202:34;;;-1:-1:-1;;;;;2322:55:39;;;;;;;;2333:8;;;-1:-1:-1;;;;;;;;;;;2322:55:39;12141:18:84;2322:55:39;;;;;;;1399:983;;;;;;1340:1042;:::o;7219:209:35:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;7308:39:35::1;:20;7336:10:::0;7308:27:::1;:39::i;:::-;7303:78;;7356:25;;-1:-1:-1::0;;;7356:25:35::1;;;;;;;;;;;7303:78;7392:31;7412:10;7392:31;;;;;;:::i;533:194:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;4195:110:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4264:3:31::1;:10:::0;;;4285:15:::1;::::0;11623:25:84;;;4285:15:31::1;::::0;11611:2:84;11596:18;4285:15:31::1;11477:177:84::0;566:221:39;628:14;664:13;:11;:13::i;:::-;650:11;:27;687:26;:8;705:7;687:17;:26::i;:::-;683:100;;;728:29;745:11;;728:29;;;;11623:25:84;;11611:2;11596:18;;11477:177;728:29:39;;;;;;;;-1:-1:-1;772:4:39;;566:221;-1:-1:-1;566:221:39:o;1587:691:35:-;1657:22;1692:9;1687:587;-1:-1:-1;;;;;1707:21:35;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;1703:1;:34;1687:587;;;-1:-1:-1;;;;;1773:21:35;;1752:18;1773:21;;;:15;:21;;;;;:27;;1798:1;1773:24;:27::i;:::-;1752:48;-1:-1:-1;1812:41:35;:20;1752:48;1812:29;:41::i;:::-;1808:460;;;1865:27;1895:28;1912:10;1895:16;:28::i;:::-;1865:58;;1937:10;:17;;;1958:1;1937:22;1933:327;;-1:-1:-1;;;;;1997:25:35;;1973:21;1997:25;;;:13;:25;;;;;;;;:74;;2050:10;:21;;;2049:22;;;:::i;:::-;1997:74;;;2025:10;:21;;;1997:74;2139:12;;-1:-1:-1;;;;;2168:21:35;;;2139:12;2168:21;;;:15;:21;;;;;;;;:33;;;;;;;;;;;;;2220:16;;2125:112;;-1:-1:-1;;;2125:112:35;;1973:98;;-1:-1:-1;2101:148:35;;2139:12;;;;;2125:42;;:112;;1973:98;;2125:112;;;:::i;2101:148::-;2083:166;;;;:::i;:::-;;;1961:299;1933:327;1855:413;1808:460;-1:-1:-1;1739:3:35;;;;:::i;:::-;;;;1687:587;;;;1587:691;;;:::o;1075:373:33:-;1589:10:32;1580:20;;;;:8;:20;;;;;;;;1575:47;;1609:13;;-1:-1:-1;;;1609:13:32;;;;;;;;;;;1575:47;-1:-1:-1;;;;;1214:14:33;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;1209:41;;1237:13;;-1:-1:-1::0;;;1237:13:33::1;;;;;;;;;;;1209:41;1257:50;1281:4;1287:10;1299:7;1257:23;:50::i;:::-;1345:10;::::0;1317:48:::1;::::0;-1:-1:-1;;;1317:48:33;;-1:-1:-1;;;;;1317:27:33;;::::1;::::0;::::1;::::0;:48:::1;::::0;1345:10;;::::1;::::0;1357:7;;1317:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;1317:48:33::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;1317:48:33::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;1313:64;;;;;;;1423:10;-1:-1:-1::0;;;;;1387:56:33::1;1405:4;-1:-1:-1::0;;;;;1387:56:33::1;;1411:10;1435:7;1387:56;;;;;;;:::i;:::-;;;;;;;;1075:373:::0;;;:::o;1788:223:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1879:27:31;::::1;1875:53;;1915:13;;-1:-1:-1::0;;;1915:13:31::1;;;;;;;;;;;1875:53;1934:12;:28:::0;;-1:-1:-1;;;;;;1934:28:31::1;-1:-1:-1::0;;;;;1934:28:31;::::1;;::::0;;1973:33:::1;::::0;::::1;::::0;::::1;::::0;1934:28;;1973:33:::1;:::i;860:284:41:-:0;1589:10:32;1580:20;;;;:8;:20;;;;;;;;1575:47;;1609:13;;-1:-1:-1;;;1609:13:32;;;;;;;;;;;1575:47;-1:-1:-1;;;;;934:17:41;::::1;;::::0;;;:8:::1;:17;::::0;;;;;::::1;;929:44;;960:13;;-1:-1:-1::0;;;960:13:41::1;;;;;;;;;;;929:44;979:24;:8;995:7:::0;979:15:::1;:24::i;:::-;-1:-1:-1::0;1025:8:41::1;::::0;-1:-1:-1;;;;;1035:14:41;;::::1;1025:8;1035:14:::0;;;:5:::1;:14;::::0;;;;;;;1025:8;;;::::1;1035:24:::0;;;;;;;;;;1061:23;;;:14:::1;:23:::0;;;;;:33;;;;;;;;;;1009:86:::1;::::0;1016:7;;1025:8;1009:6:::1;:86::i;:::-;1106:33;::::0;1128:10:::1;::::0;-1:-1:-1;;;;;1106:33:41;::::1;::::0;::::1;::::0;;;::::1;860:284:::0;:::o;2385:105:29:-;2433:22;2471:14;:5;:12;:14::i;2328:828:35:-;2401:25;2434:22;2459;2476:4;2459:16;:22::i;:::-;2588:16;;-1:-1:-1;;;;;2568:16:35;;;;;;:10;:16;;;;;;2434:47;;-1:-1:-1;2588:16:35;2550:34;;:15;:34;:::i;:::-;2549:55;2545:607;;;2729:1;2712:14;:18;:220;;-1:-1:-1;;;;;2906:26:35;;;;;;:20;:26;;;;;;2712:220;;;-1:-1:-1;;;;;2789:23:35;;;;;;:17;:23;;;;;;;;;2742:20;:26;;;;;;;:43;;2771:14;;2742:43;:::i;:::-;2741:71;;;;:::i;:::-;2692:240;;2545:607;;3140:152:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3223:10:31::1;:24:::0;;;3258:29:::1;::::0;11623:25:84;;;3258:29:31::1;::::0;11596:18:84;3258:29:31::1;11477:177:84::0;666:319:37;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;783:6:37::1;-1:-1:-1::0;;;;;771:18:37::1;:8;-1:-1:-1::0;;;;;771:18:37::1;;767:55;;;798:24;;-1:-1:-1::0;;;798:24:37::1;;;;;;;;;;;767:55;-1:-1:-1::0;;;;;829:30:37;;::::1;;::::0;;;:20:::1;:30;::::0;;;;;;;:39;;-1:-1:-1;;;;;;829:39:37::1;::::0;;::::1;::::0;;::::1;::::0;;874:19:::1;:29:::0;;;;;:37;;;;;;;;;914:15:::1;874:55:::0;;941:39;;::::1;::::0;::::1;::::0;829;;941::::1;:::i;:::-;;;;;;;;666:319:::0;;;:::o;2531:111:29:-;2582:22;2620:17;:8;:15;:17::i;486:348:27:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;609:17:27;::::1;605:43;;635:13;;-1:-1:-1::0;;;635:13:27::1;;;;;;;;;;;605:43;-1:-1:-1::0;;;;;658:22:27;::::1;439:42;658:22;654:135;;;690:30;::::0;-1:-1:-1;;;;;690:21:27;::::1;::::0;:30;::::1;;;::::0;712:7;;690:30:::1;::::0;;;712:7;690:21;:30;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;654:135;;;741:41;-1:-1:-1::0;;;;;741:27:27;::::1;769:3:::0;774:7;741:27:::1;:41::i;:::-;799:30;::::0;;-1:-1:-1;;;;;8175:15:84;;;8157:34;;8222:2;8207:18;;8200:34;;;8270:15;;8250:18;;;8243:43;799:30:27;;::::1;::::0;;;;8107:2:84;799:30:27;;::::1;486:348:::0;;;:::o;999:203:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;9024:681:35:-:0;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;9174:23:35;::::1;9170:49;;9206:13;;-1:-1:-1::0;;;9206:13:35::1;;;;;;;;;;;9170:49;-1:-1:-1::0;;;;;9229:20:35;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;;;;;;9225:69:::1;;9275:19;;-1:-1:-1::0;;;9275:19:35::1;;;;;;;;;;;9225:69;-1:-1:-1::0;;;;;9304:22:35;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;:34;;::::1;::::0;;;;;;;9342:15:::1;-1:-1:-1::0;9300:81:35::1;;9366:15;;-1:-1:-1::0;;;9366:15:35::1;;;;;;;;;;;9300:81;-1:-1:-1::0;;;;;9391:14:35;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;9387:37;;;9414:10;;-1:-1:-1::0;;;9414:10:35::1;;;;;;;;;;;9387:37;-1:-1:-1::0;;;;;9449:20:35;;::::1;9431:15;9449:20:::0;;;:14:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;;;;;;;;;;9488:39;;;;9540:22;;;:16:::1;:22:::0;;;;;:34;;;;;;;;9533:41;9449:32;9581:51:::1;::::0;9613:9;9449:32;9581:31:::1;:51::i;:::-;9681:9;-1:-1:-1::0;;;;;9643:57:35::1;9669:10;-1:-1:-1::0;;;;;9643:57:35::1;9663:4;-1:-1:-1::0;;;;;9643:57:35::1;;9692:7;9643:57;;;;11623:25:84::0;;11611:2;11596:18;;11477:177;9643:57:35::1;;;;;;;;9164:541;9024:681:::0;;;;:::o;721:609:42:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;820:10:42::1;811:20:::0;;:8:::1;:20;::::0;;;;;::::1;;807:43;;;840:10;;-1:-1:-1::0;;;840:10:42::1;;;;;;;;;;;807:43;860:26;:5;875:10;860:14;:26::i;:::-;856:52;;;895:13;;-1:-1:-1::0;;;895:13:42::1;;;;;;;;;;;856:52;973:8;::::0;955:26:::1;::::0;:15:::1;:26;:::i;:::-;931:10;914:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;914:38:42;::::1;::::0;;;;;;;;:67;;;;1006:41;;-1:-1:-1;;;1006:41:42;;914:28;;:38;1006:26:::1;::::0;:41:::1;::::0;1041:4:::1;::::0;1006:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;988:59:::0;-1:-1:-1;1053:69:42::1;-1:-1:-1::0;;;;;1053:33:42;::::1;1087:10;1107:4;1114:7:::0;1053:33:::1;:69::i;:::-;1138:41;::::0;-1:-1:-1;;;1138:41:42;;1182:7;;-1:-1:-1;;;;;1138:26:42;::::1;::::0;::::1;::::0;:41:::1;::::0;1173:4:::1;::::0;1138:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;1206:10;1196:21;::::0;;;:9:::1;:21;::::0;;;;;;;:28;;-1:-1:-1;;1196:28:42::1;1220:4;1196:28;::::0;;1230:12:::1;:24:::0;;;;;-1:-1:-1;;;;;1230:34:42;::::1;::::0;;;;;;;:45;;1128:61;;-1:-1:-1;1128:61:42;;1230:34;;1196:21;1230:45:::1;::::0;1128:61;;1230:45:::1;:::i;:::-;::::0;;;-1:-1:-1;;1287:38:42::1;::::0;11623:25:84;;;-1:-1:-1;;;;;1287:38:42;::::1;::::0;1295:10:::1;::::0;1287:38:::1;::::0;11611:2:84;11596:18;1287:38:42::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;721:609:42:o;1854:298::-;1988:10;;1970:28;;:15;:28;:::i;:::-;1946:10;1929:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1929:38:42;;;;;;;;;;;:69;;;;2004:17;;;:5;:17;;;;;:27;;;;;;;;;:38;;2035:7;;1929:28;2004:38;;2035:7;;2004:38;:::i;:::-;;;;-1:-1:-1;;2063:10:42;2048:26;;;;:14;:26;;;;;;;;-1:-1:-1;;;;;2048:36:42;;;;;;;;;:47;;2088:7;;2048:26;:47;;2088:7;;2048:47;:::i;:::-;;;;-1:-1:-1;;2107:40:42;;11623:25:84;;;-1:-1:-1;;;;;2107:40:42;;;2117:10;;2107:40;;11611:2:84;11596:18;2107:40:42;11477:177:84;762:202:32;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;1027:1856:37:-:0;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;1138:18:37;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;::::0;:38:::1;;-1:-1:-1::0;;;;;;1160:16:37;::::1;;::::0;;;:8:::1;:16;::::0;;;;;::::1;;1138:38;1134:64;;;1185:13;;-1:-1:-1::0;;;1185:13:37::1;;;;;;;;;;;1134:64;-1:-1:-1::0;;;;;1208:30:37;;::::1;;::::0;;;:20:::1;:30;::::0;;;;;;::::1;:40:::0;;::::1;;1204:78;;1257:25;;-1:-1:-1::0;;;1257:25:37::1;;;;;;;;;;;1204:78;-1:-1:-1::0;;;;;1310:29:37;;::::1;;::::0;;;:19:::1;:29;::::0;;;;;;;:37;;::::1;::::0;;;;;;;:59:::1;::::0;427:9:::1;::::0;1310:59:::1;:::i;:::-;1292:15;:77;1288:110;;;1378:20;;-1:-1:-1::0;;;1378:20:37::1;;;;;;;;;;;1288:110;1451:31;1473:8;1451:21;:31::i;:::-;1488:29;1510:6;1488:21;:29::i;:::-;-1:-1:-1::0;;;;;1553:20:37;::::1;1585:1;1553:20:::0;;;:10:::1;:20;::::0;;;;:29:::1;::::0;:27:::1;:29::i;:::-;:33;1546:359;;;-1:-1:-1::0;;;;;1622:20:37;::::1;1596:23;1622:20:::0;;;:10:::1;:20;::::0;;;;:26:::1;::::0;1596:23;1622::::1;:26::i;:::-;-1:-1:-1::0;;;;;1700:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:42;;::::1;::::0;;;;;;;;;;1656:23;;::::1;::::0;;;;;;;;:40;;;;;;;;:86;;1596:52;;-1:-1:-1;1700:42:37;;1656:86:::1;::::0;1700:42;;1656:86:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;1757:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:42;;::::1;::::0;;;;;;;;1750:49;;;1807:20;;;:10:::1;:20:::0;;;;:44:::1;::::0;1783:15;1807:27:::1;:44::i;:::-;-1:-1:-1::0;;;;;;1859:18:37;::::1;;::::0;;;:10:::1;:18;::::0;;;;:39:::1;::::0;1882:15;1859:22:::1;:39::i;:::-;;1588:317;1546:359;;;-1:-1:-1::0;;;;;1945:25:37;::::1;1982:1;1945:25:::0;;;:15:::1;:25;::::0;;;;:34:::1;::::0;:32:::1;:34::i;:::-;:38;1938:351;;;-1:-1:-1::0;;;;;2014:25:37;::::1;1993:18;2014:25:::0;;;:15:::1;:25;::::0;;;;:31:::1;::::0;1993:18;2014:28:::1;:31::i;:::-;-1:-1:-1::0;;;;;2093:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:37;;::::1;::::0;;;;;;;;;;2054:23;;::::1;::::0;;;;;;;;:35;;;;;;;;:76;;1993:52;;-1:-1:-1;2093:37:37;;2054:76:::1;::::0;2093:37;;2054:76:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2145:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:37;;::::1;::::0;;;;;;;2138:44;;;2191:23;;::::1;::::0;;:15:::1;:23:::0;;;:39:::1;::::0;2171:10;2191:27:::1;:39::i;:::-;-1:-1:-1::0;;;;;;2238:25:37;::::1;;::::0;;;:15:::1;:25;::::0;;;;:44:::1;::::0;2271:10;2238:32:::1;:44::i;:::-;;1985:304;1938:351;;;-1:-1:-1::0;;;;;2352:27:37;;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;2323:25;;::::1;::::0;;;;:56;;:25;;2352:27;2323:56:::1;::::0;2352:27;;2323:56:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2392:27:37;;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;;2385:34;;;2458:20:::1;:30:::0;;;;;;;2426:28;;::::1;::::0;;;;:62;;:28;;2392:27;2426:62:::1;::::0;2458:30;;2426:62:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2501:30:37;::::1;;::::0;;;:20:::1;:30;::::0;;;;;;;2494:37;;;2583:10:::1;:20:::0;;;;;2576:27;2609:22:::1;:5;2522:8:::0;2609:12:::1;:22::i;:::-;-1:-1:-1::0;;;;;;2677:18:37;;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;;2670:25;;-1:-1:-1;;;;;;2670:25:37;;::::1;::::0;;;2708:15:::1;:25:::0;;;;;2701:32;;;::::1;::::0;;2746:19:::1;:29:::0;;;;;:37;;::::1;::::0;;;;;;;;;2739:44;;;2796:30;;;:20:::1;:30:::0;;;;;;;2789:37;;;;::::1;::::0;;;2838:40;::::1;::::0;::::1;::::0;2686:8;;2838:40:::1;:::i;3973:182:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4066:15:31::1;:34:::0;;;4111:39:::1;::::0;11623:25:84;;;4111:39:31::1;::::0;11611:2:84;11596:18;4111:39:31::1;11477:177:84::0;6736:433:35;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;6834:36:35::1;:20;6859:10:::0;6834:24:::1;:36::i;:::-;6829:73;;6879:23;;-1:-1:-1::0;;;6879:23:35::1;;;;;;;;;;;6829:73;6950:10;-1:-1:-1::0;;;;;6937:29:35::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6908:26:35;;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;:60;;-1:-1:-1;;;;;;6908:60:35::1;::::0;;::::1;::::0;;::::1;::::0;;7016:12:::1;::::0;7002:68;;-1:-1:-1;;;7002:68:35;;7016:12;::::1;::::0;7002:40:::1;::::0;:68:::1;::::0;6908:60;7002:68:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6974:25:35;::::1;;::::0;;;:13:::1;:25;::::0;;;;:96;;-1:-1:-1;;6974:96:35::1;::::0;::::1;;::::0;;;::::1;::::0;;7096:28:::1;6974:25:::0;7096:16:::1;:28::i;:::-;-1:-1:-1::0;;;;;7076:17:35;::::1;;::::0;;;:5:::1;:17;::::0;;;;;;;;:48;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;;7076:48:35::1;-1:-1:-1::0;;;;;;7076:48:35;;;;;;::::1;;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;7135:29;::::1;::::0;::::1;::::0;7082:10;;7135:29:::1;:::i;2960:140:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3039:8:31::1;:20:::0;;;3070:25:::1;::::0;11623::84;;;3070::31::1;::::0;11611:2:84;11596:18;3070:25:31::1;11477:177:84::0;488:326:41;1589:10:32;1580:20;;;;:8;:20;;;;;;;;1575:47;;1609:13;;-1:-1:-1;;;1609:13:32;;;;;;;;;;;1575:47;-1:-1:-1;;;;;640:17:41;::::1;;::::0;;;:8:::1;:17;::::0;;;;;::::1;;635:44;;666:13;;-1:-1:-1::0;;;666:13:41::1;;;;;;;;;;;635:44;685:52;692:7;701;710:11;723:13;685:6;:52::i;:::-;769:10;-1:-1:-1::0;;;;;748:61:41;::::1;;781:27;795:13:::0;781:11;:27:::1;:::i;:::-;748:61;::::0;11623:25:84;;;11611:2;11596:18;748:61:41::1;;;;;;;488:326:::0;;;;:::o;422:253:36:-;480:20;:5;495:4;480:14;:20::i;:::-;476:50;;;509:17;;-1:-1:-1;;;509:17:36;;;;;;;;;;;476:50;-1:-1:-1;;;;;536:15:36;;;;;;:9;:15;;;;;;;;532:44;;;560:16;;-1:-1:-1;;;560:16:36;;;;;;;;;;;532:44;582:15;:5;592:4;582:9;:15::i;:::-;-1:-1:-1;;;;;;603:14:36;;;;;;:8;:14;;;;;;:27;;-1:-1:-1;;;;;;603:27:36;620:10;603:27;;;;;;641:29;;620:10;;641:29;;;422:253;:::o;2286:230:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2379:28:31;::::1;2375:54;;2416:13;;-1:-1:-1::0;;;2416:13:31::1;;;;;;;;;;;2375:54;2435:13;:30:::0;;-1:-1:-1;;;;;;2435:30:31::1;-1:-1:-1::0;;;;;2435:30:31;::::1;;::::0;;2476:35:::1;::::0;::::1;::::0;::::1;::::0;2435:30;;2476:35:::1;:::i;3666:267::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1341:6:31::1;3765:17;:43;3761:73;;;3817:17;;-1:-1:-1::0;;;3817:17:31::1;;;;;;;;;;;3761:73;3840:16;:36:::0;;;3887:41:::1;::::0;11623:25:84;;;3887:41:31::1;::::0;11611:2:84;11596:18;3887:41:31::1;11477:177:84::0;1855:695:34;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;-1:-1:-1;;;;;1012:14:38;;::::1;::::0;;:8:::1;:14;::::0;;;;;;;;::::1;998:10;:28;994:55;;1035:14;;-1:-1:-1::0;;;1035:14:38::1;;;;;;;;;;;994:55;-1:-1:-1::0;;;;;2057:28:34;;::::2;;::::0;;;:22:::2;:28;::::0;;;;;;;:36;;::::2;::::0;;;;;;;:64:::2;::::0;780:9:::2;::::0;2057:64:::2;:::i;:::-;2038:15;:83;2034:119;;2130:23;;-1:-1:-1::0;;;2130:23:34::2;;;;;;;;;;;2034:119;-1:-1:-1::0;;;;;2163:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;:39;-1:-1:-1;2159:81:34::2;;;2211:29;;-1:-1:-1::0;;;2211:29:34::2;;;;;;;;;;;2159:81;-1:-1:-1::0;;;;;2250:14:34;::::2;;::::0;;;:8:::2;:14;::::0;;;;;::::2;;2246:40;;;2273:13;;-1:-1:-1::0;;;2273:13:34::2;;;;;;;;;;;2246:40;-1:-1:-1::0;;;;;2293:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;;:40;;2326:7;;2293:21;:40:::2;::::0;2326:7;;2293:40:::2;:::i;:::-;::::0;;;-1:-1:-1;2339:47:34::2;::::0;-1:-1:-1;;;;;;2339:27:34;::::2;2367:9:::0;2378:7;2339:27:::2;:47::i;:::-;-1:-1:-1::0;;;;;2397:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;2393:86:::2;;-1:-1:-1::0;;;;;2441:16:34;::::2;;::::0;;;:10:::2;:16;::::0;;;;:31:::2;::::0;2465:6;2441:23:::2;:31::i;:::-;;2393:86;2526:9;-1:-1:-1::0;;;;;2490:55:34::2;2518:6;-1:-1:-1::0;;;;;2490:55:34::2;2512:4;-1:-1:-1::0;;;;;2490:55:34::2;;2537:7;2490:55;;;;11623:25:84::0;;11611:2;11596:18;;11477:177;2490:55:34::2;;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;;1855:695:34:o;3154:538:39:-;3287:10;3272:12;3308:14;;;:8;:14;;;;;;;;3304:40;;;3331:13;;-1:-1:-1;;;3331:13:39;;;;;;;;;;;3304:40;-1:-1:-1;;;;;3354:17:39;;;;;;:8;:17;;;;;;;;3350:40;;;3380:10;;-1:-1:-1;;;3380:10:39;;;;;;;;;;;3350:40;3401:20;:5;3416:4;3401:14;:20::i;:::-;3396:49;;3430:15;;-1:-1:-1;;;3430:15:39;;;;;;;;;;;3396:49;-1:-1:-1;;;;;3455:21:39;;;;;;;:15;:21;;;;;;;;:29;;;;;;;;;;:39;-1:-1:-1;3451:71:39;;;3503:19;;-1:-1:-1;;;3503:19:39;;;;;;;;;;;3451:71;-1:-1:-1;;;;;3528:21:39;;;;;;;:15;:21;;;;;;;;:29;;;;;;;;;;;:40;;3561:7;;3528:21;:40;;3561:7;;3528:40;:::i;:::-;;;;-1:-1:-1;3574:45:39;;-1:-1:-1;;;;;;3574:27:39;;3602:7;3611;3574:27;:45::i;:::-;3655:7;-1:-1:-1;;;;;3630:57:39;3649:4;-1:-1:-1;;;;;3630:57:39;3641:6;-1:-1:-1;;;;;3630:57:39;-1:-1:-1;;;;;;;;;;;3664:7:39;3673:13;:11;:13::i;:::-;3630:57;;;12168:25:84;;;12224:2;12209:18;;12202:34;;;;12141:18;3630:57:39;;;;;;;3266:426;3154:538;;;:::o;3332:188:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3427:16:31::1;:36:::0;;;3474:41:::1;::::0;11623:25:84;;;3474:41:31::1;::::0;11611:2:84;11596:18;3474:41:31::1;11477:177:84::0;2051:195:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2134:23:31;::::1;2130:49;;2166:13;;-1:-1:-1::0;;;2166:13:31::1;;;;;;;;;;;2130:49;2185:8;:20:::0;;-1:-1:-1;;;;;;2185:20:31::1;-1:-1:-1::0;;;;;2185:20:31;::::1;;::::0;;2216:25:::1;::::0;::::1;::::0;::::1;::::0;2185:20;;2216:25:::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;444:588:33:-:0;1589:10:32;1580:20;;;;:8;:20;;;;;;;;1575:47;;1609:13;;-1:-1:-1;;;1609:13:32;;;;;;;;;;;1575:47;-1:-1:-1;;;;;575:14:33;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;570:41;;598:13;;-1:-1:-1::0;;;598:13:33::1;;;;;;;;;;;570:41;-1:-1:-1::0;;;;;622:16:33;::::1;;::::0;;;:10:::1;:16;::::0;;;;:33:::1;::::0;648:6;622:25:::1;:33::i;:::-;617:67;;664:20;;-1:-1:-1::0;;;664:20:33::1;;;;;;;;;;;617:67;-1:-1:-1::0;;;;;694:21:33;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:39;-1:-1:-1;690:74:33::1;;;742:22;;-1:-1:-1::0;;;742:22:33::1;;;;;;;;;;;690:74;799:10;::::0;775:44:::1;::::0;-1:-1:-1;;;775:44:33;;-1:-1:-1;;;;;775:23:33;;::::1;::::0;::::1;::::0;:44:::1;::::0;799:10;;::::1;::::0;811:7;;775:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;775:44:33::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;775:44:33::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;771:60;;;;;;;-1:-1:-1::0;;;;;836:21:33;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;;:40;;869:7;;836:21;:40:::1;::::0;869:7;;836:40:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;886:21:33;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;882:86:::1;;-1:-1:-1::0;;;;;930:16:33;::::1;;::::0;;;:10:::1;:16;::::0;;;;:31:::1;::::0;954:6;930:23:::1;:31::i;:::-;;882:86;1007:10;-1:-1:-1::0;;;;;979:48:33::1;993:4;-1:-1:-1::0;;;;;979:48:33::1;;999:6;1019:7;979:48;;;;;;;:::i;316:212:30:-:0;1778:10:32;1768:21;;;;:9;:21;;;;;;;;1763:49;;1798:14;;-1:-1:-1;;;1798:14:32;;;;;;;;;;;1763:49;-1:-1:-1;;;;;396:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;::::1;;392:52;;;427:17;;-1:-1:-1::0;;;427:17:30::1;;;;;;;;;;;392:52;-1:-1:-1::0;;;;;450:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;:29;;-1:-1:-1;;450:29:30::1;475:4;450:29;::::0;;490:33;512:10:::1;::::0;450:22;490:33:::1;::::0;::::1;316:212:::0;:::o;828:471:39:-;982:20;1024:13;:11;:13::i;:::-;1010:11;:27;1054:26;:8;1072:7;1054:17;:26::i;:::-;:69;;;;-1:-1:-1;;;;;;1090:14:39;;;;;;;:5;:14;;;;;;;;:21;;;;;;;;;;:33;-1:-1:-1;1090:33:39;1054:69;:112;;;;-1:-1:-1;;;;;;1133:22:39;;;;;;:13;:22;;;;;;:33;-1:-1:-1;1133:33:39;1054:112;:166;;;;-1:-1:-1;;;;;;1194:18:39;;;;;;:9;:18;;;;;;1216:4;;1176:36;;:15;:36;:::i;:::-;:44;;1054:166;1043:252;;;1240:29;1257:11;;1240:29;;;;11623:25:84;;11611:2;11596:18;;11477:177;1240:29:39;;;;;;;;-1:-1:-1;1284:4:39;1043:252;828:471;;;;;;;:::o;6364:322:35:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;6475:20:35::1;:5;6490:4:::0;6475:14:::1;:20::i;:::-;6470:50;;6504:16;;-1:-1:-1::0;;;6504:16:35::1;;;;;;;;;;;6470:50;6526:27;6548:4;6526:21;:27::i;:::-;-1:-1:-1::0;;;;;6559:26:35;::::1;;::::0;;;:20:::1;:26;::::0;;;;:37;;6589:7;;6559:26;:37:::1;::::0;6589:7;;6559:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;6607:74:35;::::1;6636:16;::::0;;;:10:::1;:16;::::0;;;;;;;;6654:20:::1;:26:::0;;;;;;;;6607:74;;::::1;::::0;::::1;::::0;12168:25:84;;12224:2;12209:18;;12202:34;12156:2;12141:18;;11994:248;6607:74:35::1;;;;;;;;6364:322:::0;;:::o;14272:148::-;14332:24;14398:16;;14385:10;:29;;;;:::i;:::-;14371:44;;:10;:44;:::i;13953:243::-;14034:15;14075:16;;14061:11;:30;14057:134;;;14141:16;;14112:25;14126:11;14112;:25;:::i;:::-;14111:46;;;;:::i;:::-;14101:56;;14057:134;;9499:257:8;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;:::-;9590:44;9499:257;-1:-1:-1;;;9499:257:8:o;8100:165::-;-1:-1:-1;;;;;8233:23:8;;8180:4;3767:19;;;:12;;;:19;;;;;;:24;;8203:55;3671:127;14499:163:35;14563:16;14594:63;14610:11;14623:16;;14641:15;;14594;:63::i;12794:1028::-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;-1:-1:-1;;;;;12927:21:35;::::1;::::0;;:15:::1;:21;::::0;;;;:42:::1;::::0;12958:10;12927:30:::1;:42::i;:::-;12922:80;;12978:24;;-1:-1:-1::0;;;12978:24:35::1;;;;;;;;;;;12922:80;-1:-1:-1::0;;;;;13012:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;:43;-1:-1:-1;13008:82:35::1;;;13064:26;;-1:-1:-1::0;;;13064:26:35::1;;;;;;;;;;;13008:82;13145:22;13162:4;13145:16;:22::i;:::-;13173:30;13206:48;13217:36;13233:7;13242:10;13217:15;:36::i;13206:48::-;-1:-1:-1::0;;;;;13337:23:35;::::1;13363:1;13337:23:::0;;;:17:::1;:23;::::0;;;;;13173:81;;-1:-1:-1;13337:27:35;13333:330:::1;;-1:-1:-1::0;;;;;13576:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;;13521:20:::1;:26:::0;;;;;;;:51:::1;::::0;13550:22;;13521:51:::1;:::i;:::-;13520:79;;;;:::i;:::-;-1:-1:-1::0;;;;;13490:26:35;::::1;;::::0;;;:20:::1;:26;::::0;;;;:109;;:26;;;:109:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;13607:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;:49;;13634:22;;13607:23;:49:::1;::::0;13634:22;;13607:49:::1;:::i;:::-;::::0;;;-1:-1:-1;;13333:330:35::1;-1:-1:-1::0;;;;;13669:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:44;;13706:7;;13669:21;:44:::1;::::0;13706:7;;13669:44:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;13723:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;13719:99:::1;;-1:-1:-1::0;;;;;13771:21:35;::::1;;::::0;;;:15:::1;:21;::::0;;;;:40:::1;::::0;13800:10;13771:28:::1;:40::i;:::-;;13719:99;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;12794:1028:35:o;14740:384::-;-1:-1:-1;;;;;14859:17:35;;14833:14;14859:17;;;:5;:17;;;;;:24;;;:29;14855:265;;-1:-1:-1;;;;;14922:25:35;;14898:21;14922:25;;;:13;:25;;;;;;;;:88;;-1:-1:-1;;;;;14982:17:35;;;;;;:5;:17;;;;;:28;14981:29;;-1:-1:-1;;;14982:28:35;;;;14981:29;:::i;:::-;14922:88;;;-1:-1:-1;;;;;14950:17:35;;;;;;:5;:17;;;;;:28;-1:-1:-1;;;14950:28:35;;;;14922:88;15041:12;;15096:16;;15027:86;;-1:-1:-1;;;15027:86:35;;14898:112;;-1:-1:-1;;;;;;15041:12:35;;;;15027:42;;:86;;15070:7;;14898:112;;15027:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9829:1303::-;9896:14;9941:24;9949:15;9941:7;:24::i;:::-;-1:-1:-1;;;;;9922:16:35;;;;;;:10;:16;;;;;;:43;9918:1210;;;10070:43;10096:16;;10078:15;:34;;;;:::i;10070:43::-;-1:-1:-1;;;;;10050:16:35;;;;;;:10;:16;;;;;;:63;10046:1076;;10214:22;10231:4;10214:16;:22::i;:::-;-1:-1:-1;;;;;10275:23:35;;;;;;:17;:23;;;;;;;;;10246:20;:26;;;;;;:52;10327:24;10335:15;10327:7;:24::i;:::-;-1:-1:-1;;;;;10308:16:35;;;;;;:10;:16;;;;;:43;-1:-1:-1;10373:4:35;4668:1632;;;:::o;10046:1076::-;10436:16;;-1:-1:-1;;;;;10415:16:35;;;;;;:10;:16;;;;;;10397:34;;:15;:34;:::i;:::-;10396:56;10392:730;;10544:22;10561:4;10544:16;:22::i;:::-;-1:-1:-1;;;;;10605:23:35;;;;;;:17;:23;;;;;;;;;10576:20;:26;;;;;:52;10658:16;;10638:10;:16;;;;;:36;;10658:16;;10638;;:36;;10658:16;;10638:36;:::i;:::-;;;;-1:-1:-1;10696:4:35;;-1:-1:-1;10392:730:35;;-1:-1:-1;10392:730:35;;10736:24;10744:15;10736:7;:24::i;:::-;-1:-1:-1;;;;;10719:14:35;;;;;;:8;:14;;;;;;:41;10715:407;;;-1:-1:-1;;;;;10885:23:35;;10853:29;10885:23;;;:17;:23;;;;;;10918:22;10903:4;10918:16;:22::i;:::-;-1:-1:-1;;;;;11009:23:35;;;;;;:17;:23;;;;;;;;;10980:20;:26;;;;;;;11036:21;;10980:52;;;:::i;:::-;10979:78;;;;:::i;:::-;-1:-1:-1;;;;;10950:26:35;;;;;;:20;:26;;;;;:107;-1:-1:-1;9829:1303:35;;;:::o;11196:400::-;-1:-1:-1;;;;;11509:16:35;;;;;;:10;:16;;;;;;11484:67;;11491:34;;:15;:34;:::i;:::-;-1:-1:-1;;;;;11527:23:35;;;;;;:17;:23;;;;;;11484:6;:67::i;:::-;-1:-1:-1;;;;;11454:26:35;;;;;;:20;:26;;;;;:97;;:26;;;:97;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11557:16:35;;;;;:10;:16;;;;;11576:15;11557:34;;11196:400::o;3696:343:39:-;-1:-1:-1;;;;;3815:26:39;;;;;;:20;:26;;;;;;3804:37;;3800:69;;;3850:19;;-1:-1:-1;;;3850:19:39;;;;;;;;;;;3800:69;-1:-1:-1;;;;;3876:14:39;;;;;;:8;:14;;;;;;;;3893:15;3876:32;;3914:20;:26;;;;;:38;;3944:8;;3876:14;3914:38;;3944:8;;3914:38;:::i;:::-;;;;-1:-1:-1;;;;;;;3958:14:39;;;;;;;:5;:14;;;;;;;;3973:8;;;;;3958:24;;;;;;;;:36;;3986:8;;3958:14;:36;;3986:8;;3958:36;:::i;:::-;;;;-1:-1:-1;;;;;;;4000:22:39;;;;;;:13;:22;;;;;:34;;4026:8;;4000:22;:34;;4026:8;;4000:34;:::i;:::-;;;;-1:-1:-1;;;;;3696:343:39:o;4958:107::-;5004:16;5058:2;5040:9;:14;;5052:2;5040:14;:::i;:::-;5039:21;;;;:::i;2853:454:42:-;-1:-1:-1;;;;;2960:18:42;;2933:15;2960:18;;;:9;:18;;;;;;2956:80;;-1:-1:-1;;;;;2993:18:42;;;;;;:9;:18;;;;;3014:15;2993:36;;2956:80;3041:21;:8;3054:7;3041:12;:21::i;:::-;-1:-1:-1;;;;;;;3078:21:42;;;;;;;:12;:21;;;;;;;;:31;;;;;;;;;;;;;;3115:38;;;;3188:14;;;:5;:14;;;;;:24;;;;;;;;;:35;;3078:31;;;;3188:35;;3078:31;;3188:35;:::i;:::-;;;;-1:-1:-1;;3245:8:42;;-1:-1:-1;;;;;3233:20:42;;;3245:8;;3233:20;3229:74;;;3273:8;;3263:33;;-1:-1:-1;;;3263:33:42;;;;;11623:25:84;;;-1:-1:-1;;;;;3273:8:42;;;;3263:24;;11596:18:84;;3263:33:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2853:454;;;;:::o;634:205:4:-;746:86;766:5;796:23;;;821:2;825:5;773:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;773:58:4;;;;;;;;;;;;;;-1:-1:-1;;;;;773:58:4;-1:-1:-1;;;;;;773:58:4;;;;;;;;;;746:19;:86::i;:::-;634:205;;;:::o;7545:150:8:-;7615:4;7638:50;7643:3;-1:-1:-1;;;;;7663:23:8;;7638:4;:50::i;15273:229:35:-;15341:31;15367:4;15341:25;:31::i;:::-;;15378:23;15396:4;15378:17;:23::i;:::-;-1:-1:-1;;;;;15445:26:35;;;;;;:20;:26;;;;;;;;;15473:17;:23;;;;;;;15436:61;;15445:26;15436:8;:61::i;:::-;-1:-1:-1;;;;;15407:26:35;;;;;;;:20;:26;;;;;:90;15273:229::o;845:241:4:-;1010:68;;-1:-1:-1;;;;;6767:15:84;;;1010:68:4;;;6749:34:84;6819:15;;6799:18;;;6792:43;6851:18;;;6844:34;;;983:96:4;;1003:5;;-1:-1:-1;;;1033:27:4;6684:18:84;;1010:68:4;6509:375:84;983:96:4;845:241;;;;:::o;4451:310:39:-;4596:16;4620:21;4669:9;4658:8;4644:11;;:22;;;;:::i;:::-;:34;;;;:::i;:::-;4620:58;-1:-1:-1;4749:7:39;4733:12;1238:6:31;4698:22:39;4714:6;4620:58;4698:22;:::i;:::-;4697:32;;;;:::i;:::-;4696:49;;;;:::i;:::-;4695:61;;;;:::i;:::-;4684:72;4451:310;-1:-1:-1;;;;;;4451:310:39:o;7863:156:8:-;7936:4;7959:53;7967:3;-1:-1:-1;;;;;7987:23:8;;7959:7;:53::i;8346:115::-;8409:7;8435:19;8443:3;3961:18;;3879:107;8803:156;8877:7;8927:22;8931:3;8943:5;8927:3;:22::i;1148:382:41:-;1292:8;;-1:-1:-1;;;;;1281:19:41;;;1292:8;;1281:19;1277:150;;1339:10;;-1:-1:-1;;;;;1314:24:41;;;;;;1339:10;1351:27;1365:13;1351:11;:27;:::i;:::-;1314:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1314:65:41;;;;;;;;-1:-1:-1;;1314:65:41;;;;;;;;;;;;:::i;:::-;;;1310:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1398:23;1310:111;;;1380:17;1310:111;-1:-1:-1;;;;;1432:14:41;;;;;;;:5;:14;;;;;;;;:23;;;;;;;;;;;:38;;1459:11;;1432:14;:38;;1459:11;;1432:38;:::i;:::-;;;;-1:-1:-1;;;;;;;1476:23:41;;;;;;;:14;:23;;;;;;;;:32;;;;;;;;;;;:49;;1512:13;;1476:23;:49;;1512:13;;1476:49;:::i;:::-;;;;-1:-1:-1;;;;;;1148:382:41:o;4986:109:8:-;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;735:3600:23:-;833:14;;;-1:-1:-1;;1336:1:23;1333;1326:20;1371:1;1368;1364:9;1355:18;;1418:5;1414:2;1411:13;1403:5;1399:2;1395:14;1391:34;1382:43;;;1501:5;1510:1;1501:10;1497:155;;;1545:1;1531:11;:15;1523:24;;;;;;-1:-1:-1;1588:23:23;;;;-1:-1:-1;1630:13:23;;1497:155;1773:5;1759:11;:19;1751:28;;;;;;2044:17;2114:11;2111:1;2108;2101:25;3338:1;3319;2473;2458:12;;:16;;2457:32;;2575:22;;;;3319:15;;;3318:21;;3557:17;;;3553:21;;3546:28;3613:17;;;3609:21;;3602:28;3670:17;;;3666:21;;3659:28;3727:17;;;3723:21;;3716:28;3784:17;;;3780:21;;3773:28;3842:17;;;3838:21;;;3831:28;2442:12;2923;;;2919:23;;;2915:31;;;2233:20;;;2222:32;;;2970:12;;;;2272:21;;2693:16;;;;2961:21;;;;4292:11;;735:3600;-1:-1:-1;;;;735:3600:23:o;11656:118:35:-;11737:32;11764:4;11737:26;:32::i;:::-;-1:-1:-1;;;;;11711:23:35;;;;;;;:17;:23;;;;;:58;11656:118::o;3140:706:4:-;3559:23;3585:69;3613:4;3585:69;;;;;;;;;;;;;;;;;3593:5;-1:-1:-1;;;;;3585:27:4;;;:69;;;;;:::i;:::-;3668:17;;3559:95;;-1:-1:-1;3668:21:4;3664:176;;3763:10;3752:30;;;;;;;;;;;;:::i;:::-;3744:85;;;;-1:-1:-1;;;3744:85:4;;10507:2:84;3744:85:4;;;10489:21:84;10546:2;10526:18;;;10519:30;10585:34;10565:18;;;10558:62;-1:-1:-1;;;10636:18:84;;;10629:40;10686:19;;3744:85:4;10305:406:84;1630:404:8;1693:4;3767:19;;;:12;;;:19;;;;;;1709:319;;-1:-1:-1;1751:23:8;;;;;;;;:11;:23;;;;;;;;;;;;;1931:18;;1909:19;;;:12;;;:19;;;;;;:40;;;;1963:11;;1709:319;-1:-1:-1;2012:5:8;2005:12;;391:104:7;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:7;;391:104;-1:-1:-1;391:104:7:o;2202:1388:8:-;2268:4;2405:19;;;:12;;;:19;;;;;;2439:15;;2435:1149;;2808:21;2832:14;2845:1;2832:10;:14;:::i;:::-;2880:18;;2808:38;;-1:-1:-1;2860:17:8;;2880:22;;2901:1;;2880:22;:::i;:::-;2860:42;;2934:13;2921:9;:26;2917:398;;2967:17;2987:3;:11;;2999:9;2987:22;;;;;;;;:::i;:::-;;;;;;;;;2967:42;;3138:9;3109:3;:11;;3121:13;3109:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3221:23;;;:12;;;:23;;;;;:36;;;2917:398;3393:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3485:3;:12;;:19;3498:5;3485:19;;;;;;;;;;;3478:26;;;3526:4;3519:11;;;;;;;2435:1149;3568:5;3561:12;;;;;4328:118;4395:7;4421:3;:11;;4433:5;4421:18;;;;;;;;:::i;:::-;;;;;;;;;4414:25;;4328:118;;;;:::o;11943:753:35:-;12011:22;12075:24;12083:15;12075:7;:24::i;:::-;12051:12;;-1:-1:-1;;;;;12051:12:35;12045:19;;;;:5;:19;;;;;12051:12;12045:26;;:54;12041:170;;12191:12;;12174:30;;-1:-1:-1;;;;;12191:12:35;12174:16;:30::i;:::-;12158:12;;-1:-1:-1;;;;;12158:12:35;12152:19;;;;:5;:19;;;;;;;;;:52;;;;;;;;;;;;;;;;-1:-1:-1;;;12152:52:35;-1:-1:-1;;;;;;12152:52:35;;;;;;;;;;;;;;;;;;12158:12;12152:52;;;;;12041:170;12222:9;12217:475;-1:-1:-1;;;;;12237:21:35;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;12233:1;:34;12217:475;;;-1:-1:-1;;;;;12303:21:35;;12282:18;12303:21;;;:15;:21;;;;;:27;;12328:1;12303:24;:27::i;:::-;12282:48;-1:-1:-1;12342:41:35;:20;12282:48;12342:29;:41::i;:::-;12338:348;;;12427:24;12435:15;12427:7;:24::i;:::-;-1:-1:-1;;;;;12399:17:35;;;;;;:5;:17;;;;;:24;;;:52;12395:181;;12537:28;12554:10;12537:16;:28::i;:::-;-1:-1:-1;;;;;12517:17:35;;;;;;:5;:17;;;;;;;;;:48;;;;;;;;;;;;;;;;-1:-1:-1;;;12517:48:35;-1:-1:-1;;;;;;12517:48:35;;;;;;;;;;;;;;;;;;;;;;;12395:181;-1:-1:-1;;;;;12630:21:35;;;;;;;:15;:21;;;;;;;;:33;;;;;;;;;;12603:74;;12614:62;;12652:10;12614:15;:62::i;12603:74::-;12585:92;;;;:::i;:::-;;;12338:348;-1:-1:-1;12269:3:35;;;;:::i;:::-;;;;12217:475;;3461:223:5;3594:12;3625:52;3647:6;3655:4;3661:1;3664:12;3594;1034:20;;4828:60;;;;-1:-1:-1;;;4828:60:5;;10149:2:84;4828:60:5;;;10131:21:84;10188:2;10168:18;;;10161:30;10227:31;10207:18;;;10200:59;10276:18;;4828:60:5;9947:353:84;4828:60:5;4900:12;4914:23;4941:6;-1:-1:-1;;;;;4941:11:5;4960:5;4967:4;4941:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4899:73;;;;4989:51;5006:7;5015:10;5027:12;4989:16;:51::i;:::-;4982:58;4548:499;-1:-1:-1;;;;;;;4548:499:5:o;7161:692::-;7307:12;7335:7;7331:516;;;-1:-1:-1;7365:10:5;7358:17;;7331:516;7476:17;;:21;7472:365;;7670:10;7664:17;7730:15;7717:10;7713:2;7709:19;7702:44;7472:365;7809:12;7802:20;;-1:-1:-1;;;7802:20:5;;;;;;;;:::i;14:164:84:-;90:13;;139;;132:21;122:32;;112:60;;168:1;165;158:12;183:164;260:13;;313:1;302:20;;;292:31;;282:59;;337:1;334;327:12;352:247;411:6;464:2;452:9;443:7;439:23;435:32;432:52;;;480:1;477;470:12;432:52;519:9;506:23;538:31;563:5;538:31;:::i;604:251::-;674:6;727:2;715:9;706:7;702:23;698:32;695:52;;;743:1;740;733:12;695:52;775:9;769:16;794:31;819:5;794:31;:::i;860:388::-;928:6;936;989:2;977:9;968:7;964:23;960:32;957:52;;;1005:1;1002;995:12;957:52;1044:9;1031:23;1063:31;1088:5;1063:31;:::i;:::-;1113:5;-1:-1:-1;1170:2:84;1155:18;;1142:32;1183:33;1142:32;1183:33;:::i;:::-;1235:7;1225:17;;;860:388;;;;;:::o;1253:529::-;1330:6;1338;1346;1399:2;1387:9;1378:7;1374:23;1370:32;1367:52;;;1415:1;1412;1405:12;1367:52;1454:9;1441:23;1473:31;1498:5;1473:31;:::i;:::-;1523:5;-1:-1:-1;1580:2:84;1565:18;;1552:32;1593:33;1552:32;1593:33;:::i;:::-;1645:7;-1:-1:-1;1704:2:84;1689:18;;1676:32;1717:33;1676:32;1717:33;:::i;:::-;1769:7;1759:17;;;1253:529;;;;;:::o;1787:456::-;1864:6;1872;1880;1933:2;1921:9;1912:7;1908:23;1904:32;1901:52;;;1949:1;1946;1939:12;1901:52;1988:9;1975:23;2007:31;2032:5;2007:31;:::i;:::-;2057:5;-1:-1:-1;2114:2:84;2099:18;;2086:32;2127:33;2086:32;2127:33;:::i;:::-;1787:456;;2179:7;;-1:-1:-1;;;2233:2:84;2218:18;;;;2205:32;;1787:456::o;2248:598::-;2334:6;2342;2350;2358;2411:3;2399:9;2390:7;2386:23;2382:33;2379:53;;;2428:1;2425;2418:12;2379:53;2467:9;2454:23;2486:31;2511:5;2486:31;:::i;:::-;2536:5;-1:-1:-1;2593:2:84;2578:18;;2565:32;2606:33;2565:32;2606:33;:::i;:::-;2658:7;-1:-1:-1;2712:2:84;2697:18;;2684:32;;-1:-1:-1;2768:2:84;2753:18;;2740:32;2781:33;2740:32;2781:33;:::i;:::-;2248:598;;;;-1:-1:-1;2248:598:84;;-1:-1:-1;;2248:598:84:o;2851:525::-;2937:6;2945;2953;2961;3014:3;3002:9;2993:7;2989:23;2985:33;2982:53;;;3031:1;3028;3021:12;2982:53;3070:9;3057:23;3089:31;3114:5;3089:31;:::i;:::-;3139:5;-1:-1:-1;3196:2:84;3181:18;;3168:32;3209:33;3168:32;3209:33;:::i;:::-;2851:525;;3261:7;;-1:-1:-1;;;;3315:2:84;3300:18;;3287:32;;3366:2;3351:18;3338:32;;2851:525::o;3381:594::-;3476:6;3484;3492;3500;3508;3561:3;3549:9;3540:7;3536:23;3532:33;3529:53;;;3578:1;3575;3568:12;3529:53;3617:9;3604:23;3636:31;3661:5;3636:31;:::i;:::-;3686:5;-1:-1:-1;3743:2:84;3728:18;;3715:32;3756:33;3715:32;3756:33;:::i;:::-;3381:594;;3808:7;;-1:-1:-1;;;;3862:2:84;3847:18;;3834:32;;3913:2;3898:18;;3885:32;;3964:3;3949:19;;;3936:33;;-1:-1:-1;3381:594:84:o;3980:315::-;4048:6;4056;4109:2;4097:9;4088:7;4084:23;4080:32;4077:52;;;4125:1;4122;4115:12;4077:52;4164:9;4151:23;4183:31;4208:5;4183:31;:::i;:::-;4233:5;4285:2;4270:18;;;;4257:32;;-1:-1:-1;;;3980:315:84:o;4300:456::-;4377:6;4385;4393;4446:2;4434:9;4425:7;4421:23;4417:32;4414:52;;;4462:1;4459;4452:12;4414:52;4501:9;4488:23;4520:31;4545:5;4520:31;:::i;:::-;4570:5;-1:-1:-1;4622:2:84;4607:18;;4594:32;;-1:-1:-1;4678:2:84;4663:18;;4650:32;4691:33;4650:32;4691:33;:::i;4761:202::-;4828:6;4881:2;4869:9;4860:7;4856:23;4852:32;4849:52;;;4897:1;4894;4887:12;4849:52;4920:37;4947:9;4920:37;:::i;4968:364::-;5049:6;5057;5065;5118:2;5106:9;5097:7;5093:23;5089:32;5086:52;;;5134:1;5131;5124:12;5086:52;5157:38;5185:9;5157:38;:::i;:::-;5147:48;;5214:47;5257:2;5246:9;5242:18;5214:47;:::i;:::-;5204:57;;5280:46;5322:2;5311:9;5307:18;5280:46;:::i;:::-;5270:56;;4968:364;;;;;:::o;5337:180::-;5396:6;5449:2;5437:9;5428:7;5424:23;5420:32;5417:52;;;5465:1;5462;5455:12;5417:52;-1:-1:-1;5488:23:84;;5337:180;-1:-1:-1;5337:180:84:o;5522:184::-;5592:6;5645:2;5633:9;5624:7;5620:23;5616:32;5613:52;;;5661:1;5658;5651:12;5613:52;-1:-1:-1;5684:16:84;;5522:184;-1:-1:-1;5522:184:84:o;5711:306::-;5799:6;5807;5815;5868:2;5856:9;5847:7;5843:23;5839:32;5836:52;;;5884:1;5881;5874:12;5836:52;5913:9;5907:16;5897:26;;5963:2;5952:9;5948:18;5942:25;5932:35;;6007:2;5996:9;5992:18;5986:25;5976:35;;5711:306;;;;;:::o;6022:274::-;6151:3;6189:6;6183:13;6205:53;6251:6;6246:3;6239:4;6231:6;6227:17;6205:53;:::i;:::-;6274:16;;;;;6022:274;-1:-1:-1;;6022:274:84:o;6301:203::-;-1:-1:-1;;;;;6465:32:84;;;;6447:51;;6435:2;6420:18;;6301:203::o;6889:744::-;-1:-1:-1;;;;;7135:32:84;;7117:51;;7105:2;7187;7205:18;;;7198:30;;;7277:13;;7090:18;;;7299:22;;;7057:4;;7378:15;;;;7187:2;7352;7337:18;;;7057:4;7421:186;7435:6;7432:1;7429:13;7421:186;;;7500:13;;7515:10;7496:30;7484:43;;7582:15;;;;7547:12;;;;7457:1;7450:9;7421:186;;;-1:-1:-1;7624:3:84;;6889:744;-1:-1:-1;;;;;;;6889:744:84:o;7638:274::-;-1:-1:-1;;;;;7830:32:84;;;;7812:51;;7894:2;7879:18;;7872:34;7800:2;7785:18;;7638:274::o;8297:658::-;8468:2;8520:21;;;8590:13;;8493:18;;;8612:22;;;8439:4;;8468:2;8691:15;;;;8665:2;8650:18;;;8439:4;8734:195;8748:6;8745:1;8742:13;8734:195;;;8813:13;;-1:-1:-1;;;;;8809:39:84;8797:52;;8904:15;;;;8869:12;;;;8845:1;8763:9;8734:195;;;-1:-1:-1;8946:3:84;;8297:658;-1:-1:-1;;;;;;8297:658:84:o;9152:383::-;9301:2;9290:9;9283:21;9264:4;9333:6;9327:13;9376:6;9371:2;9360:9;9356:18;9349:34;9392:66;9451:6;9446:2;9435:9;9431:18;9426:2;9418:6;9414:15;9392:66;:::i;:::-;9519:2;9498:15;-1:-1:-1;;9494:29:84;9479:45;;;;9526:2;9475:54;;9152:383;-1:-1:-1;;9152:383:84:o;10716:355::-;10918:2;10900:21;;;10957:2;10937:18;;;10930:30;10996:33;10991:2;10976:18;;10969:61;11062:2;11047:18;;10716:355::o;11659:330::-;11857:25;;;11929:1;11918:21;;;;11913:2;11898:18;;11891:49;11971:2;11956:18;;11949:34;11845:2;11830:18;;11659:330::o;12247:319::-;12449:25;;;12505:2;12490:18;;12483:34;;;;12548:2;12533:18;;12526:34;12437:2;12422:18;;12247:319::o;12571:128::-;12611:3;12642:1;12638:6;12635:1;12632:13;12629:39;;;12648:18;;:::i;:::-;-1:-1:-1;12684:9:84;;12571:128::o;12704:120::-;12744:1;12770;12760:35;;12775:18;;:::i;:::-;-1:-1:-1;12809:9:84;;12704:120::o;12829:168::-;12869:7;12935:1;12931;12927:6;12923:14;12920:1;12917:21;12912:1;12905:9;12898:17;12894:45;12891:71;;;12942:18;;:::i;:::-;-1:-1:-1;12982:9:84;;12829:168::o;13002:359::-;13040:4;13084:1;13081;13070:16;13120:1;13117;13106:16;13150:1;13145:3;13141:11;13216:3;13197:16;13193:21;13189:31;13184:3;13180:41;13175:2;13168:10;13164:58;13161:84;;;13225:18;;:::i;:::-;13296:3;13278:16;13274:26;13269:3;13265:36;13261:2;13257:45;13254:71;;;13305:18;;:::i;:::-;-1:-1:-1;13342:13:84;;;13002:359;-1:-1:-1;;;13002:359:84:o;13366:125::-;13406:4;13434:1;13431;13428:8;13425:34;;;13439:18;;:::i;:::-;-1:-1:-1;13476:9:84;;13366:125::o;13496:258::-;13568:1;13578:113;13592:6;13589:1;13586:13;13578:113;;;13668:11;;;13662:18;13649:11;;;13642:39;13614:2;13607:10;13578:113;;;13709:6;13706:1;13703:13;13700:48;;;-1:-1:-1;;13744:1:84;13726:16;;13719:27;13496:258::o;13759:135::-;13798:3;-1:-1:-1;;13819:17:84;;13816:43;;;13839:18;;:::i;:::-;-1:-1:-1;13886:1:84;13875:13;;13759:135::o;13899:112::-;13931:1;13957;13947:35;;13962:18;;:::i;:::-;-1:-1:-1;13996:9:84;;13899:112::o;14016:193::-;14050:3;14097:5;14094:1;14083:20;14131:16;14127:21;14118:7;14115:34;14112:60;;;14152:18;;:::i;:::-;14192:1;14188:15;;14016:193;-1:-1:-1;;14016:193:84:o;14214:127::-;14275:10;14270:3;14266:20;14263:1;14256:31;14306:4;14303:1;14296:15;14330:4;14327:1;14320:15;14346:127;14407:10;14402:3;14398:20;14395:1;14388:31;14438:4;14435:1;14428:15;14462:4;14459:1;14452:15;14478:127;14539:10;14534:3;14530:20;14527:1;14520:31;14570:4;14567:1;14560:15;14594:4;14591:1;14584:15;14610:127;14671:10;14666:3;14662:20;14659:1;14652:31;14702:4;14699:1;14692:15;14726:4;14723:1;14716:15;14874:131;-1:-1:-1;;;;;14949:31:84;;14939:42;;14929:70;;14995:1;14992;14985:12;14929:70;14874:131;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "4918800",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "52214",
                "acceptJobMigration(address,address)": "infinite",
                "acceptJobOwnership(address)": "55212",
                "activate(address)": "infinite",
                "addDisputer(address)": "30215",
                "addJob(address)": "infinite",
                "addLiquidityToJob(address,address,uint256)": "infinite",
                "addSlasher(address)": "30259",
                "addTokenCreditsToJob(address,address,uint256)": "infinite",
                "approveLiquidity(address)": "infinite",
                "approvedLiquidities()": "infinite",
                "bond(address,uint256)": "infinite",
                "bondTime()": "2373",
                "bondedPayment(address,uint256)": "infinite",
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "changeJobOwnership(address,address)": "infinite",
                "directTokenPayment(address,address,uint256)": "infinite",
                "dispute(address)": "30731",
                "disputers(address)": "2879",
                "disputes(address)": "2878",
                "fee()": "2505",
                "firstSeen(address)": "2745",
                "forceLiquidityCreditsToJob(address,uint256)": "infinite",
                "governance()": "2428",
                "hasBonded(address)": "2988",
                "inflationPeriod()": "2526",
                "isBondedKeeper(address,address,uint256,uint256,uint256)": "infinite",
                "isKeeper(address)": "infinite",
                "jobLiquidityCredits(address)": "infinite",
                "jobOwner(address)": "2995",
                "jobPendingOwner(address)": "2687",
                "jobPeriodCredits(address)": "infinite",
                "jobTokenCredits(address,address)": "infinite",
                "jobTokenCreditsAddedAt(address,address)": "infinite",
                "jobs()": "infinite",
                "keep3rHelper()": "2471",
                "keep3rV1()": "2649",
                "keep3rV1Proxy()": "2450",
                "keepers()": "infinite",
                "kp3rWethPool()": "2736",
                "liquidityAmount(address,address)": "infinite",
                "liquidityMinimum()": "2417",
                "migrateJob(address,address)": "infinite",
                "observeLiquidity(address)": "infinite",
                "pendingBonds(address,address)": "infinite",
                "pendingGovernance()": "2537",
                "pendingJobMigrations(address)": "2642",
                "pendingUnbonds(address,address)": "infinite",
                "quoteLiquidity(address,uint256)": "infinite",
                "removeDisputer(address)": "30161",
                "removeSlasher(address)": "30360",
                "resolve(address)": "30966",
                "revoke(address)": "infinite",
                "revokeLiquidity(address)": "infinite",
                "rewardPeriodTime()": "2637",
                "rewardedAt(address)": "2745",
                "sendDust(address,uint256,address)": "infinite",
                "setBondTime(uint256)": "25982",
                "setFee(uint256)": "25762",
                "setGovernance(address)": "28118",
                "setInflationPeriod(uint256)": "25916",
                "setKeep3rHelper(address)": "28153",
                "setKeep3rV1(address)": "27888",
                "setKeep3rV1Proxy(address)": "27955",
                "setKp3rWethPool(address)": "infinite",
                "setLiquidityMinimum(uint256)": "25806",
                "setRewardPeriodTime(uint256)": "25700",
                "setUnbondTime(uint256)": "25561",
                "slash(address,address,uint256,uint256)": "infinite",
                "slashLiquidityFromJob(address,address,uint256)": "infinite",
                "slashTokenFromJob(address,address,uint256)": "infinite",
                "slashers(address)": "2988",
                "totalJobCredits(address)": "infinite",
                "unbond(address,uint256)": "infinite",
                "unbondLiquidityFromJob(address,address,uint256)": "infinite",
                "unbondTime()": "2549",
                "viewTickOrder(address)": "2919",
                "withdraw(address)": "infinite",
                "withdrawLiquidityFromJob(address,address,address)": "infinite",
                "withdrawTokenCreditsFromJob(address,address,uint256,address)": "infinite",
                "workCompleted(address)": "2746",
                "worked(address)": "infinite",
                "workedAt(address)": "2634"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobMigration(address,address)": "af320e81",
              "acceptJobOwnership(address)": "59a2255e",
              "activate(address)": "1c5a9d9c",
              "addDisputer(address)": "9d5c33d8",
              "addJob(address)": "c5198abc",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addSlasher(address)": "68a9f19c",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bond(address,uint256)": "a515366a",
              "bondTime()": "5ebe23f0",
              "bondedPayment(address,uint256)": "11466d72",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "directTokenPayment(address,address,uint256)": "dd2080d6",
              "dispute(address)": "f75f9f7b",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "isBondedKeeper(address,address,uint256,uint256,uint256)": "f9d46cf2",
              "isKeeper(address)": "6ba42aaa",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityAmount(address,address)": "694798e6",
              "liquidityMinimum()": "633fb68f",
              "migrateJob(address,address)": "90a4684e",
              "observeLiquidity(address)": "165e62e7",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingJobMigrations(address)": "ec8ca643",
              "pendingUnbonds(address,address)": "21040b01",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "resolve(address)": "55ea6c47",
              "revoke(address)": "74a8f103",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardPeriodTime()": "768b5d90",
              "rewardedAt(address)": "a676f9ff",
              "sendDust(address,uint256,address)": "966abd00",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slash(address,address,uint256,uint256)": "c20297f0",
              "slashLiquidityFromJob(address,address,uint256)": "6e2a9ca6",
              "slashTokenFromJob(address,address,uint256)": "f25e311b",
              "slashers(address)": "b87fcbff",
              "totalJobCredits(address)": "034d4c61",
              "unbond(address,uint256)": "a5d059ca",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "unbondTime()": "a7d2e784",
              "viewTickOrder(address)": "454c5031",
              "withdraw(address)": "51cff8d9",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workCompleted(address)": "1b44555e",
              "worked(address)": "5feeb794",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyAJob\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyAKeeper\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationImpossible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Activation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"Dispute\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"DustSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOwner\",\"type\":\"address\"}],\"name\":\"JobAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationSuccessful\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"KeeperRevoke\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"KeeperSlash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperValidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperWork\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"Resolve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"acceptJobMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"addJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"}],\"name\":\"bondedPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"directTokenPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_earned\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_age\",\"type\":\"uint256\"}],\"name\":\"isBondedKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isBondedKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"isKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"migrateJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingJobMigrations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"sendDust\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonded\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_bondAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unbondAmount\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashTokenFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"viewTickOrder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"worked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobMigration(address,address)\":{\"details\":\"Unbond/withdraw process doesn't get migrated\",\"params\":{\"_fromJob\":\"The address of the job that requested to migrate\",\"_toJob\":\"The address to which the job wants to migrate to\"}},\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"activate(address)\":{\"params\":{\"_bonding\":\"The asset being activated as bond collateral\"}},\"addJob(address)\":{\"params\":{\"_job\":\"Address of the contract for which work should be performed\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"bond(address,uint256)\":{\"params\":{\"_amount\":\"The amount of bonding asset being bonded\",\"_bonding\":\"The asset being bonded\"}},\"bondedPayment(address,uint256)\":{\"details\":\"Pays the keeper that performs the work with KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\",\"_payment\":\"The reward that should be allocated for the job\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"directTokenPayment(address,address,uint256)\":{\"details\":\"Pays the keeper that performs the work with a specific token\",\"params\":{\"_amount\":\"The reward that should be allocated\",\"_keeper\":\"Address of the keeper that performed the work\",\"_token\":\"The asset being awarded to the keeper\"}},\"dispute(address)\":{\"params\":{\"_jobOrKeeper\":\"The address in dispute\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"details\":\"Should be used for protected functions\",\"params\":{\"_age\":\"The minimum keeper age required\",\"_bond\":\"The bond token being evaluated\",\"_earned\":\"The minimum funds earned in the keepers lifetime\",\"_keeper\":\"The keeper to check\",\"_minBond\":\"The minimum amount of bonded tokens\"},\"returns\":{\"_isBondedKeeper\":\"Whether the `_keeper` meets the given requirements\"}},\"isKeeper(address)\":{\"details\":\"Can be used for general (non critical) functions\",\"params\":{\"_keeper\":\"The keeper being investigated\"},\"returns\":{\"_isKeeper\":\"Whether the address passed as a parameter is a keeper or not\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_liquidityCredits\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_periodCredits\":\"The credits the given job has at the current period\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"migrateJob(address,address)\":{\"params\":{\"_fromJob\":\"The address of the job that is requesting to migrate\",\"_toJob\":\"The address at which the job is requesting to migrate\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"resolve(address)\":{\"params\":{\"_jobOrKeeper\":\"The address cleared\"}},\"revoke(address)\":{\"params\":{\"_keeper\":\"The address being slashed\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"sendDust(address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of the token that will be transferred\",\"_to\":\"The address that will receive the idle funds\",\"_token\":\"The token that will be transferred\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"slash(address,address,uint256,uint256)\":{\"params\":{\"_bondAmount\":\"The bonded amount being slashed\",\"_bonded\":\"The asset being slashed\",\"_keeper\":\"The address being slashed\",\"_unbondAmount\":\"The pending unbond amount being slashed\"}},\"slashLiquidityFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity that will be slashed\",\"_job\":\"The address being slashed\",\"_liquidity\":\"The address of the liquidity that will be slashed\"}},\"slashTokenFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of the token that will be slashed\",\"_job\":\"The address of the job from which the token will be slashed\",\"_token\":\"The address of the token that will be slashed\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_credits\":\"The total credits of the given job\"}},\"unbond(address,uint256)\":{\"params\":{\"_amount\":\"Allows for partial unbonding\",\"_bonding\":\"The asset being unbonded\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdraw(address)\":{\"params\":{\"_bonding\":\"The asset to withdraw from the bonding pool\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}},\"worked(address)\":{\"details\":\"Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAJob()\":[{\"notice\":\"Throws when the address that is trying to register as a job is already a job\"}],\"AlreadyAKeeper()\":[{\"notice\":\"Throws when the address that is trying to register as a keeper is already a keeper\"}],\"AlreadyDisputed()\":[{\"notice\":\"Throws when a job or keeper is already disputed\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"InsufficientFunds()\":[{\"notice\":\"Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobAlreadyAdded()\":[{\"notice\":\"Throws when trying to add a job that has already been added\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobMigrationImpossible()\":[{\"notice\":\"Throws when the address of the job that requests to migrate wants to migrate to its same address\"}],\"JobMigrationLocked()\":[{\"notice\":\"Throws when cooldown between migrations has not yet passed\"}],\"JobMigrationUnavailable()\":[{\"notice\":\"Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobTokenInsufficient()\":[{\"notice\":\"Throws when someone tries to slash more tokens than the job has\"}],\"JobTokenUnexistent()\":[{\"notice\":\"Throws when the token trying to be slashed doesn't exist\"}],\"JobUnapproved()\":[{\"notice\":\"Throws if the address claiming to be a job is not in the list of approved jobs\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"NotDisputed()\":[{\"notice\":\"Throws when a job or keeper is not disputed and someone tries to resolve the dispute\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"Activation(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#activate is called\"},\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Dispute(address,address)\":{\"notice\":\"Emitted when a keeper or a job is disputed\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"DustSent(address,uint256,address)\":{\"notice\":\"Emitted when dust is sent\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobAddition(address,address)\":{\"notice\":\"Emitted when Keep3rJobManager#addJob is called\"},\"JobMigrationRequested(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#migrateJob function is called\"},\"JobMigrationSuccessful(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#acceptJobMigration function is called\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"JobSlashLiquidity(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\"},\"JobSlashToken(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashTokenFromJob is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"KeeperRevoke(address,address)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#revoke is called\"},\"KeeperSlash(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#slash is called\"},\"KeeperValidation(uint256)\":{\"notice\":\"Emitted when a keeper is validated before a job\"},\"KeeperWork(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a keeper works a job\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"Resolve(address,address)\":{\"notice\":\"Emitted when a dispute is resolved\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"},\"Withdrawal(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#withdraw is called\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobMigration(address,address)\":{\"notice\":\"Completes the migration process for a job\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"activate(address)\":{\"notice\":\"End of the bonding process after bonding time has passed\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addJob(address)\":{\"notice\":\"Allows any caller to add a new job\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bond(address,uint256)\":{\"notice\":\"Beginning of the bonding process\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bondedPayment(address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"directTokenPayment(address,address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"dispute(address)\":{\"notice\":\"Allows governance to create a dispute for a given keeper/job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"notice\":\"Confirms if the current keeper is registered and has a minimum bond of any asset.\"},\"isKeeper(address)\":{\"notice\":\"Confirms if the current keeper is registered\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"migrateJob(address,address)\":{\"notice\":\"Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingJobMigrations(address)\":{\"notice\":\"Maps the jobs that have requested a migration to the address they have requested to migrate to\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"resolve(address)\":{\"notice\":\"Allows governance to resolve a dispute on a keeper/job\"},\"revoke(address)\":{\"notice\":\"Blacklists a keeper from participating in the network\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"sendDust(address,uint256,address)\":{\"notice\":\"Allows an authorized user to transfer the tokens or eth that may have been left in a contract\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slash(address,address,uint256,uint256)\":{\"notice\":\"Allows governance to slash a keeper based on a dispute\"},\"slashLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or a slasher to slash liquidity from a job\"},\"slashTokenFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or slasher to slash a job specific token\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbond(address,uint256)\":{\"notice\":\"Beginning of the unbonding process\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdraw(address)\":{\"notice\":\"Withdraw funds after unbonding has finished\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"},\"worked(address)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/Keep3rForTest.sol\":\"Keep3rForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/Keep3r.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/*\\n\\nCoded for The Keep3r Network with \\u2665 by\\n\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2557\\u2003\\u2003\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\n\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u255a\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2554\\u2550\\u2588\\u2588\\u2588\\u2588\\u2551\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\n\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2003\\u2003\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\n\\nhttps://defi.sucks\\n\\n*/\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './peripherals/jobs/Keep3rJobs.sol';\\nimport './peripherals/keepers/Keep3rKeepers.sol';\\nimport './peripherals/Keep3rAccountance.sol';\\nimport './peripherals/Keep3rRoles.sol';\\nimport './peripherals/Keep3rParameters.sol';\\nimport './peripherals/DustCollector.sol';\\n\\ncontract Keep3r is DustCollector, Keep3rJobs, Keep3rKeepers {\\n  constructor(\\n    address _governance,\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) Keep3rParameters(_keep3rHelper, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(_governance) DustCollector() {}\\n}\\n\",\"keccak256\":\"0xd2a7417d7decff283aef255a21712d76b0f24dc1975f9953b62cd4453c8017ae\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/DustCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '../../contracts/peripherals/Governable.sol';\\nimport '../../interfaces/peripherals/IDustCollector.sol';\\n\\nabstract contract DustCollector is IDustCollector, Governable {\\n  using SafeERC20 for IERC20;\\n\\n  address internal constant _ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n  function sendDust(\\n    address _token,\\n    uint256 _amount,\\n    address _to\\n  ) external override onlyGovernance {\\n    if (_to == address(0)) revert ZeroAddress();\\n    if (_token == _ETH_ADDRESS) {\\n      payable(_to).transfer(_amount);\\n    } else {\\n      IERC20(_token).safeTransfer(_to, _amount);\\n    }\\n    emit DustSent(_token, _amount, _to);\\n  }\\n}\\n\",\"keccak256\":\"0x246ac2c4057520bb627ea8040367549786f4477a04fd79358927cd607952bc2f\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rParameters.sol';\\nimport './Keep3rRoles.sol';\\nimport '../../interfaces/peripherals/IKeep3rDisputable.sol';\\n\\nabstract contract Keep3rDisputable is IKeep3rDisputable, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rDisputable\\n  function dispute(address _jobOrKeeper) external override onlyDisputer {\\n    if (disputes[_jobOrKeeper]) revert AlreadyDisputed();\\n    disputes[_jobOrKeeper] = true;\\n    emit Dispute(_jobOrKeeper, msg.sender);\\n  }\\n\\n  /// @inheritdoc IKeep3rDisputable\\n  function resolve(address _jobOrKeeper) external override onlyDisputer {\\n    if (!disputes[_jobOrKeeper]) revert NotDisputed();\\n    disputes[_jobOrKeeper] = false;\\n    emit Resolve(_jobOrKeeper, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x941e9ba02b2ad3975edc444cd771ef1e5386051553632140f882258ea7e4d4bc\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobFundableCredits.sol';\\nimport './Keep3rJobFundableLiquidity.sol';\\nimport '../Keep3rDisputable.sol';\\n\\nabstract contract Keep3rJobDisputable is IKeep3rJobDisputable, Keep3rDisputable, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rJobDisputable\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override onlySlasher {\\n    if (!disputes[_job]) revert NotDisputed();\\n    if (!_jobTokens[_job].contains(_token)) revert JobTokenUnexistent();\\n    if (jobTokenCredits[_job][_token] < _amount) revert JobTokenInsufficient();\\n\\n    try IERC20(_token).transfer(governance, _amount) {} catch {}\\n    jobTokenCredits[_job][_token] -= _amount;\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit JobSlashToken(_job, _token, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobDisputable\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlySlasher {\\n    if (!disputes[_job]) revert NotDisputed();\\n\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n    try IERC20(_liquidity).transfer(governance, _amount) {} catch {}\\n    emit JobSlashLiquidity(_job, _liquidity, msg.sender, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0x86cdbf44dfa46c6b6e184e48e11cb8571e26cf50c793b6b07227c29e743da397\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableCredits is IKeep3rJobFundableCredits, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice Cooldown between withdrawals\\n  uint256 internal constant _WITHDRAW_TOKENS_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  mapping(address => mapping(address => uint256)) public override jobTokenCreditsAddedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    // KP3R shouldn't be used for direct token payments\\n    if (_token == keep3rV1) revert TokenUnallowed();\\n    uint256 _before = IERC20(_token).balanceOf(address(this));\\n    IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\\n    uint256 _received = IERC20(_token).balanceOf(address(this)) - _before;\\n    uint256 _tokenFee = (_received * fee) / _BASE;\\n    jobTokenCredits[_job][_token] += _received - _tokenFee;\\n    jobTokenCreditsAddedAt[_job][_token] = block.timestamp;\\n    IERC20(_token).safeTransfer(governance, _tokenFee);\\n    _jobTokens[_job].add(_token);\\n\\n    emit TokenCreditAddition(_job, _token, msg.sender, _received);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external override nonReentrant onlyJobOwner(_job) {\\n    if (block.timestamp <= jobTokenCreditsAddedAt[_job][_token] + _WITHDRAW_TOKENS_COOLDOWN) revert JobTokenCreditsLocked();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientJobTokenCredits();\\n    if (disputes[_job]) revert JobDisputed();\\n\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_receiver, _amount);\\n\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit TokenCreditWithdrawal(_job, _token, _receiver, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0xb600d18903a008a1ca03743de7cef8330c2d5e66db52c900822551a4be75f7a5\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/IPairManager.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '../../libraries/FullMath.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableLiquidity is IKeep3rJobFundableLiquidity, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice List of liquidities that are accepted in the system\\n  EnumerableSet.AddressSet internal _approvedLiquidities;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => mapping(address => uint256)) public override liquidityAmount;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override rewardedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override workedAt;\\n\\n  /// @notice Tracks an address and returns its TickCache\\n  mapping(address => TickCache) internal _tick;\\n\\n  // Views\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approvedLiquidities() external view override returns (address[] memory _list) {\\n    _list = _approvedLiquidities.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobPeriodCredits(address _job) public view override returns (uint256 _periodCredits) {\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        TickCache memory _tickCache = observeLiquidity(_liquidity);\\n        if (_tickCache.period != 0) {\\n          int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n          _periodCredits += _getReward(\\n            IKeep3rHelper(keep3rHelper).getKP3RsAtTick(liquidityAmount[_job][_liquidity], _tickDifference, rewardPeriodTime)\\n          );\\n        }\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobLiquidityCredits(address _job) public view override returns (uint256 _liquidityCredits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n\\n    // If the job was rewarded in the past 1 period time\\n    if ((block.timestamp - rewardedAt[_job]) < rewardPeriodTime) {\\n      // If the job has period credits, update minted job credits to new twap\\n      _liquidityCredits = _periodCredits > 0\\n        ? (_jobLiquidityCredits[_job] * _periodCredits) / _jobPeriodCredits[_job] // If the job has period credits, return remaining job credits updated to new twap\\n        : _jobLiquidityCredits[_job]; // If not, return remaining credits, forced credits should not be updated\\n    } else {\\n      // Else return a full period worth of credits if current credits have expired\\n      _liquidityCredits = _periodCredits;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function totalJobCredits(address _job) external view override returns (uint256 _credits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n    uint256 _cooldown = block.timestamp;\\n\\n    if ((rewardedAt[_job] > _period(block.timestamp - rewardPeriodTime))) {\\n      // Will calculate cooldown if it outdated\\n      if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will calculate cooldown from last reward reference in this period\\n        _cooldown -= (rewardedAt[_job] + rewardPeriodTime);\\n      } else {\\n        // Will calculate cooldown from last reward timestamp\\n        _cooldown -= rewardedAt[_job];\\n      }\\n    } else {\\n      // Will calculate cooldown from period start if expired\\n      _cooldown -= _period(block.timestamp);\\n    }\\n    _credits = jobLiquidityCredits(_job) + _phase(_cooldown, _periodCredits);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view override returns (uint256 _periodCredits) {\\n    if (_approvedLiquidities.contains(_liquidity)) {\\n      TickCache memory _tickCache = observeLiquidity(_liquidity);\\n      if (_tickCache.period != 0) {\\n        int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n        return _getReward(IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime));\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function observeLiquidity(address _liquidity) public view virtual override returns (TickCache memory _tickCache) {\\n    if (_tick[_liquidity].period == _period(block.timestamp)) {\\n      // Will return cached twaps if liquidity is updated\\n      _tickCache = _tick[_liquidity];\\n    } else {\\n      bool success;\\n      uint256 lastPeriod = _period(block.timestamp - rewardPeriodTime);\\n\\n      if (_tick[_liquidity].period == lastPeriod) {\\n        // Will only ask for current period accumulator if liquidity is outdated\\n        uint32[] memory _secondsAgo = new uint32[](1);\\n        int56 previousTick = _tick[_liquidity].current;\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n\\n        (_tickCache.current, , success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - previousTick;\\n      } else if (_tick[_liquidity].period < lastPeriod) {\\n        // Will ask for 2 accumulators if liquidity is expired\\n        uint32[] memory _secondsAgo = new uint32[](2);\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n        _secondsAgo[1] = uint32(block.timestamp - _period(block.timestamp) + rewardPeriodTime);\\n\\n        int56 _tickCumulative2;\\n        (_tickCache.current, _tickCumulative2, success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - _tickCumulative2;\\n      }\\n      if (success) {\\n        _tickCache.period = _period(block.timestamp);\\n      } else {\\n        delete _tickCache.period;\\n      }\\n    }\\n  }\\n\\n  // Methods\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external override onlyGovernance {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    _settleJobAccountance(_job);\\n    _jobLiquidityCredits[_job] += _amount;\\n    emit LiquidityCreditsForced(_job, rewardedAt[_job], _jobLiquidityCredits[_job]);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approveLiquidity(address _liquidity) external virtual override onlyGovernance {\\n    if (!_approvedLiquidities.add(_liquidity)) revert LiquidityPairApproved();\\n    _liquidityPool[_liquidity] = IPairManager(_liquidity).pool();\\n    _isKP3RToken0[_liquidity] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_liquidityPool[_liquidity]);\\n    _tick[_liquidity] = observeLiquidity(_liquidity);\\n    emit LiquidityApproval(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function revokeLiquidity(address _liquidity) external override onlyGovernance {\\n    if (!_approvedLiquidities.remove(_liquidity)) revert LiquidityPairUnexistent();\\n    emit LiquidityRevocation(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_approvedLiquidities.contains(_liquidity)) revert LiquidityPairUnapproved();\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n\\n    _jobLiquidities[_job].add(_liquidity);\\n\\n    _settleJobAccountance(_job);\\n\\n    if (_quoteLiquidity(liquidityAmount[_job][_liquidity] + _amount, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n    IERC20(_liquidity).safeTransferFrom(msg.sender, address(this), _amount);\\n    liquidityAmount[_job][_liquidity] += _amount;\\n    _jobPeriodCredits[_job] += _getReward(_quoteLiquidity(_amount, _liquidity));\\n    emit LiquidityAddition(_job, _liquidity, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlyJobOwner(_job) {\\n    canWithdrawAfter[_job][_liquidity] = block.timestamp + unbondTime;\\n    pendingUnbonds[_job][_liquidity] += _amount;\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n\\n    uint256 _remainingLiquidity = liquidityAmount[_job][_liquidity];\\n    if (_remainingLiquidity > 0 && _quoteLiquidity(_remainingLiquidity, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit Unbonding(_job, _liquidity, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external override onlyJobOwner(_job) {\\n    if (_receiver == address(0)) revert ZeroAddress();\\n    if (pendingUnbonds[_job][_liquidity] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[_job][_liquidity] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[_job]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[_job][_liquidity];\\n\\n    delete pendingUnbonds[_job][_liquidity];\\n    delete canWithdrawAfter[_job][_liquidity];\\n\\n    IERC20(_liquidity).safeTransfer(_receiver, _amount);\\n    emit LiquidityWithdrawal(_job, _liquidity, _receiver, _amount);\\n  }\\n\\n  // Internal functions\\n\\n  /// @notice Updates or rewards job liquidity credits depending on time since last job reward\\n  function _updateJobCreditsIfNeeded(address _job) internal returns (bool _rewarded) {\\n    if (rewardedAt[_job] < _period(block.timestamp)) {\\n      // Will exit function if job has been rewarded in current period\\n      if (rewardedAt[_job] <= _period(block.timestamp - rewardPeriodTime)) {\\n        // Will reset job to period syncronicity if a full period passed without rewards\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] = _period(block.timestamp);\\n        _rewarded = true;\\n      } else if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will reset job's syncronicity if last reward was more than epoch ago\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] += rewardPeriodTime;\\n        _rewarded = true;\\n      } else if (workedAt[_job] < _period(block.timestamp)) {\\n        // First keeper on period has to update job accountance to current twaps\\n        uint256 previousPeriodCredits = _jobPeriodCredits[_job];\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = (_jobLiquidityCredits[_job] * _jobPeriodCredits[_job]) / previousPeriodCredits;\\n        // Updating job accountance does not reward job\\n      }\\n    }\\n  }\\n\\n  /// @notice Only called if _jobLiquidityCredits < payment\\n  function _rewardJobCredits(address _job) internal {\\n    /// @notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)\\n    /* WARNING: this allows to top up _jobLiquidityCredits to a max of 1.99 but have to spend at least 1 */\\n    _jobLiquidityCredits[_job] += _phase(block.timestamp - rewardedAt[_job], _jobPeriodCredits[_job]);\\n    rewardedAt[_job] = block.timestamp;\\n  }\\n\\n  /// @notice Updates accountance for _jobPeriodCredits\\n  function _updateJobPeriod(address _job) internal {\\n    _jobPeriodCredits[_job] = _calculateJobPeriodCredits(_job);\\n  }\\n\\n  /// @notice Quotes the outdated job liquidities and calculates _periodCredits\\n  /// @dev This function is also responsible for keeping the KP3R/WETH quote updated\\n  function _calculateJobPeriodCredits(address _job) internal returns (uint256 _periodCredits) {\\n    if (_tick[kp3rWethPool].period != _period(block.timestamp)) {\\n      // Updates KP3R/WETH quote if needed\\n      _tick[kp3rWethPool] = observeLiquidity(kp3rWethPool);\\n    }\\n\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        if (_tick[_liquidity].period != _period(block.timestamp)) {\\n          // Updates liquidity cache only if needed\\n          _tick[_liquidity] = observeLiquidity(_liquidity);\\n        }\\n        _periodCredits += _getReward(_quoteLiquidity(liquidityAmount[_job][_liquidity], _liquidity));\\n      }\\n    }\\n  }\\n\\n  /// @notice Updates job accountance calculating the impact of the unbonded liquidity amount\\n  function _unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) internal nonReentrant {\\n    if (!_jobLiquidities[_job].contains(_liquidity)) revert JobLiquidityUnexistent();\\n    if (liquidityAmount[_job][_liquidity] < _amount) revert JobLiquidityInsufficient();\\n\\n    // Ensures current twaps in job liquidities\\n    _updateJobPeriod(_job);\\n    uint256 _periodCreditsToRemove = _getReward(_quoteLiquidity(_amount, _liquidity));\\n\\n    // A liquidity can be revoked causing a job to have 0 periodCredits\\n    if (_jobPeriodCredits[_job] > 0) {\\n      // Removes a % correspondant to a full rewardPeriodTime for the liquidity withdrawn vs all of the liquidities\\n      _jobLiquidityCredits[_job] -= (_jobLiquidityCredits[_job] * _periodCreditsToRemove) / _jobPeriodCredits[_job];\\n      _jobPeriodCredits[_job] -= _periodCreditsToRemove;\\n    }\\n\\n    liquidityAmount[_job][_liquidity] -= _amount;\\n    if (liquidityAmount[_job][_liquidity] == 0) {\\n      _jobLiquidities[_job].remove(_liquidity);\\n    }\\n  }\\n\\n  /// @notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed\\n  function _phase(uint256 _timePassed, uint256 _multiplier) internal view returns (uint256 _result) {\\n    if (_timePassed < rewardPeriodTime) {\\n      _result = (_timePassed * _multiplier) / rewardPeriodTime;\\n    } else _result = _multiplier;\\n  }\\n\\n  /// @notice Returns the start of the period of the provided timestamp\\n  function _period(uint256 _timestamp) internal view returns (uint256 _periodTimestamp) {\\n    return _timestamp - (_timestamp % rewardPeriodTime);\\n  }\\n\\n  /// @notice Calculates relation between rewardPeriod and inflationPeriod\\n  function _getReward(uint256 _baseAmount) internal view returns (uint256 _credits) {\\n    return FullMath.mulDiv(_baseAmount, rewardPeriodTime, inflationPeriod);\\n  }\\n\\n  /// @notice Returns underlying KP3R amount for a given liquidity amount\\n  function _quoteLiquidity(uint256 _amount, address _liquidity) internal view virtual returns (uint256 _quote) {\\n    if (_tick[_liquidity].period != 0) {\\n      int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tick[_liquidity].difference : -_tick[_liquidity].difference;\\n      _quote = IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime);\\n    }\\n  }\\n\\n  /// @notice Updates job credits to current quotes and rewards job's pending minted credits\\n  /// @dev Ensures a maximum of 1 period of credits\\n  function _settleJobAccountance(address _job) internal virtual {\\n    _updateJobCreditsIfNeeded(_job);\\n    _rewardJobCredits(_job);\\n    _jobLiquidityCredits[_job] = Math.min(_jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n  }\\n}\\n\",\"keccak256\":\"0x7747b2a0ee0c4e3322e92a3e1fc0f6f03be63942bc398009726b58f8c9f79cf0\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rRoles.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobManager is IKeep3rJobManager, Keep3rJobOwnership, Keep3rRoles, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @inheritdoc IKeep3rJobManager\\n  function addJob(address _job) external override {\\n    if (_jobs.contains(_job)) revert JobAlreadyAdded();\\n    if (hasBonded[_job]) revert AlreadyAKeeper();\\n    _jobs.add(_job);\\n    jobOwner[_job] = msg.sender;\\n    emit JobAddition(msg.sender, _job);\\n  }\\n}\\n\",\"keccak256\":\"0xa1fa3fde2b28e28476f0af438049043e695372ee24e1e780b67f00d14d5f660e\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\nimport './Keep3rJobFundableCredits.sol';\\nimport './Keep3rJobFundableLiquidity.sol';\\n\\nabstract contract Keep3rJobMigration is IKeep3rJobMigration, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  uint256 internal constant _MIGRATION_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  mapping(address => address) public override pendingJobMigrations;\\n  mapping(address => mapping(address => uint256)) internal _migrationCreatedAt;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function migrateJob(address _fromJob, address _toJob) external override onlyJobOwner(_fromJob) {\\n    if (_fromJob == _toJob) revert JobMigrationImpossible();\\n\\n    pendingJobMigrations[_fromJob] = _toJob;\\n    _migrationCreatedAt[_fromJob][_toJob] = block.timestamp;\\n\\n    emit JobMigrationRequested(_fromJob, _toJob);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function acceptJobMigration(address _fromJob, address _toJob) external override onlyJobOwner(_toJob) {\\n    if (disputes[_fromJob] || disputes[_toJob]) revert JobDisputed();\\n    if (pendingJobMigrations[_fromJob] != _toJob) revert JobMigrationUnavailable();\\n    if (block.timestamp < _migrationCreatedAt[_fromJob][_toJob] + _MIGRATION_COOLDOWN) revert JobMigrationLocked();\\n\\n    // force job credits update for both jobs\\n    _settleJobAccountance(_fromJob);\\n    _settleJobAccountance(_toJob);\\n\\n    // migrate tokens\\n    while (_jobTokens[_fromJob].length() > 0) {\\n      address _tokenToMigrate = _jobTokens[_fromJob].at(0);\\n      jobTokenCredits[_toJob][_tokenToMigrate] += jobTokenCredits[_fromJob][_tokenToMigrate];\\n      delete jobTokenCredits[_fromJob][_tokenToMigrate];\\n      _jobTokens[_fromJob].remove(_tokenToMigrate);\\n      _jobTokens[_toJob].add(_tokenToMigrate);\\n    }\\n\\n    // migrate liquidities\\n    while (_jobLiquidities[_fromJob].length() > 0) {\\n      address _liquidity = _jobLiquidities[_fromJob].at(0);\\n\\n      liquidityAmount[_toJob][_liquidity] += liquidityAmount[_fromJob][_liquidity];\\n      delete liquidityAmount[_fromJob][_liquidity];\\n\\n      _jobLiquidities[_toJob].add(_liquidity);\\n      _jobLiquidities[_fromJob].remove(_liquidity);\\n    }\\n\\n    // migrate job balances\\n    _jobPeriodCredits[_toJob] += _jobPeriodCredits[_fromJob];\\n    delete _jobPeriodCredits[_fromJob];\\n\\n    _jobLiquidityCredits[_toJob] += _jobLiquidityCredits[_fromJob];\\n    delete _jobLiquidityCredits[_fromJob];\\n\\n    // stop _fromJob from being a job\\n    delete rewardedAt[_fromJob];\\n    _jobs.remove(_fromJob);\\n\\n    // delete unused data slots\\n    delete jobOwner[_fromJob];\\n    delete jobPendingOwner[_fromJob];\\n    delete _migrationCreatedAt[_fromJob][_toJob];\\n    delete pendingJobMigrations[_fromJob];\\n\\n    emit JobMigrationSuccessful(_fromJob, _toJob);\\n  }\\n}\\n\",\"keccak256\":\"0xd46c3c9ce970098d8d75f11966894a341824aceb40583fcfbbc0ebda93d869f9\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobMigration.sol';\\nimport '../../../interfaces/IKeep3rHelper.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\n\\nabstract contract Keep3rJobWorkable is IKeep3rJobWorkable, Keep3rJobMigration {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  uint256 internal _initialGas;\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function isKeeper(address _keeper) external override returns (bool _isKeeper) {\\n    _initialGas = _getGasLeft();\\n    if (_keepers.contains(_keeper)) {\\n      emit KeeperValidation(_initialGas);\\n      return true;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) public override returns (bool _isBondedKeeper) {\\n    _initialGas = _getGasLeft();\\n    if (\\n      _keepers.contains(_keeper) &&\\n      bonds[_keeper][_bond] >= _minBond &&\\n      workCompleted[_keeper] >= _earned &&\\n      block.timestamp - firstSeen[_keeper] >= _age\\n    ) {\\n      emit KeeperValidation(_initialGas);\\n      return true;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function worked(address _keeper) external virtual override {\\n    address _job = msg.sender;\\n    if (disputes[_job]) revert JobDisputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n\\n    if (_updateJobCreditsIfNeeded(_job)) {\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    (uint256 _boost, uint256 _oneEthQuote, uint256 _extraGas) = IKeep3rHelper(keep3rHelper).getPaymentParams(bonds[_keeper][keep3rV1]);\\n\\n    uint256 _gasLeft = _getGasLeft();\\n    uint256 _payment = _calculatePayment(_gasLeft, _extraGas, _oneEthQuote, _boost);\\n\\n    if (_payment > _jobLiquidityCredits[_job]) {\\n      _rewardJobCredits(_job);\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n      _gasLeft = _getGasLeft();\\n      _payment = _calculatePayment(_gasLeft, _extraGas, _oneEthQuote, _boost);\\n    }\\n\\n    _bondedPayment(_job, _keeper, _payment);\\n    emit KeeperWork(keep3rV1, _job, _keeper, _payment, _gasLeft);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function bondedPayment(address _keeper, uint256 _payment) public override {\\n    address _job = msg.sender;\\n\\n    if (disputes[_job]) revert JobDisputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n\\n    if (_updateJobCreditsIfNeeded(_job)) {\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    if (_payment > _jobLiquidityCredits[_job]) {\\n      _rewardJobCredits(_job);\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    _bondedPayment(_job, _keeper, _payment);\\n    emit KeeperWork(keep3rV1, _job, _keeper, _payment, _getGasLeft());\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external override {\\n    address _job = msg.sender;\\n\\n    if (disputes[_job]) revert JobDisputed();\\n    if (disputes[_keeper]) revert Disputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientFunds();\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_keeper, _amount);\\n    emit KeeperWork(_token, _job, _keeper, _amount, _getGasLeft());\\n  }\\n\\n  function _bondedPayment(\\n    address _job,\\n    address _keeper,\\n    uint256 _payment\\n  ) internal {\\n    if (_payment > _jobLiquidityCredits[_job]) revert InsufficientFunds();\\n\\n    workedAt[_job] = block.timestamp;\\n    _jobLiquidityCredits[_job] -= _payment;\\n    bonds[_keeper][keep3rV1] += _payment;\\n    workCompleted[_keeper] += _payment;\\n  }\\n\\n  /// @notice Calculate amount to be payed in KP3R, taking into account multiple parameters\\n  /// @param _gasLeft Amount of gas left after working the job\\n  /// @param _extraGas Amount of expected unaccounted gas\\n  /// @param _oneEthQuote Amount of KP3R equivalent to 1 ETH\\n  /// @param _boost Reward given to the keeper for having bonded KP3R tokens\\n  /// @return _payment Amount to be payed in KP3R tokens\\n  function _calculatePayment(\\n    uint256 _gasLeft,\\n    uint256 _extraGas,\\n    uint256 _oneEthQuote,\\n    uint256 _boost\\n  ) internal view returns (uint256 _payment) {\\n    uint256 _accountedGas = _initialGas - _gasLeft + _extraGas;\\n    _payment = (((_accountedGas * _boost) / _BASE) * _oneEthQuote) / 1 ether;\\n  }\\n\\n  /// @notice Return the gas left and add 1/64 in order to match real gas left at first level of depth (EIP-150)\\n  /// @return _gasLeft Amount of gas left recording taking into account EIP-150\\n  function _getGasLeft() internal view returns (uint256 _gasLeft) {\\n    _gasLeft = (gasleft() * 64) / 63;\\n  }\\n}\\n\",\"keccak256\":\"0x8f67c23ec95bbce4501ccb0667109a00eaab9413514c58ad62c8e03ba1ea077a\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobDisputable.sol';\\nimport './Keep3rJobWorkable.sol';\\nimport './Keep3rJobManager.sol';\\n\\nabstract contract Keep3rJobs is Keep3rJobDisputable, Keep3rJobManager, Keep3rJobWorkable {}\\n\",\"keccak256\":\"0xc9939ffd28f6402b60ef4dd2b23cb5eb88099e4ce374248e1f2c80c5c7039df1\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rKeeperFundable.sol';\\nimport '../Keep3rDisputable.sol';\\nimport '../../../interfaces/external/IKeep3rV1.sol';\\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\\n\\nabstract contract Keep3rKeeperDisputable is IKeep3rKeeperDisputable, Keep3rDisputable, Keep3rKeeperFundable {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rKeeperDisputable\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) public override onlySlasher {\\n    if (!disputes[_keeper]) revert NotDisputed();\\n    _slash(_keeper, _bonded, _bondAmount, _unbondAmount);\\n    emit KeeperSlash(_keeper, msg.sender, _bondAmount + _unbondAmount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperDisputable\\n  function revoke(address _keeper) external override onlySlasher {\\n    if (!disputes[_keeper]) revert NotDisputed();\\n    _keepers.remove(_keeper);\\n    _slash(_keeper, keep3rV1, bonds[_keeper][keep3rV1], pendingUnbonds[_keeper][keep3rV1]);\\n    emit KeeperRevoke(_keeper, msg.sender);\\n  }\\n\\n  function _slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) internal {\\n    if (_bonded != keep3rV1) {\\n      try IERC20(_bonded).transfer(governance, _bondAmount + _unbondAmount) returns (bool) {} catch (bytes memory) {}\\n    }\\n    bonds[_keeper][_bonded] -= _bondAmount;\\n    pendingUnbonds[_keeper][_bonded] -= _unbondAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x1b983519e5367b29d8cd4698c56ed9c18013f757bf0a6a2656572547aaf20208\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\\n\\nimport '../../../interfaces/external/IKeep3rV1.sol';\\nimport '../../../interfaces/external/IKeep3rV1Proxy.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\n\\nabstract contract Keep3rKeeperFundable is IKeep3rKeeperFundable, ReentrancyGuard, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function bond(address _bonding, uint256 _amount) external override nonReentrant {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (_jobs.contains(msg.sender)) revert AlreadyAJob();\\n    canActivateAfter[msg.sender][_bonding] = block.timestamp + bondTime;\\n\\n    uint256 _before = IERC20(_bonding).balanceOf(address(this));\\n    IERC20(_bonding).safeTransferFrom(msg.sender, address(this), _amount);\\n    _amount = IERC20(_bonding).balanceOf(address(this)) - _before;\\n\\n    hasBonded[msg.sender] = true;\\n    pendingBonds[msg.sender][_bonding] += _amount;\\n\\n    emit Bonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function activate(address _bonding) external override {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (canActivateAfter[msg.sender][_bonding] == 0) revert BondsUnexistent();\\n    if (canActivateAfter[msg.sender][_bonding] >= block.timestamp) revert BondsLocked();\\n\\n    delete canActivateAfter[msg.sender][_bonding];\\n\\n    uint256 _amount = _activate(msg.sender, _bonding);\\n    emit Activation(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function unbond(address _bonding, uint256 _amount) external override {\\n    canWithdrawAfter[msg.sender][_bonding] = block.timestamp + unbondTime;\\n    bonds[msg.sender][_bonding] -= _amount;\\n    pendingUnbonds[msg.sender][_bonding] += _amount;\\n\\n    emit Unbonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function withdraw(address _bonding) external override nonReentrant {\\n    if (pendingUnbonds[msg.sender][_bonding] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[msg.sender][_bonding] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[msg.sender]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[msg.sender][_bonding];\\n\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1Proxy(keep3rV1Proxy).mint(_amount);\\n    }\\n\\n    delete pendingUnbonds[msg.sender][_bonding];\\n    delete canWithdrawAfter[msg.sender][_bonding];\\n\\n    IERC20(_bonding).safeTransfer(msg.sender, _amount);\\n\\n    emit Withdrawal(msg.sender, _bonding, _amount);\\n  }\\n\\n  function _activate(address _keeper, address _bonding) internal virtual returns (uint256 _amount) {\\n    if (firstSeen[_keeper] == 0) {\\n      firstSeen[_keeper] = block.timestamp;\\n    }\\n    _keepers.add(_keeper);\\n    _amount = pendingBonds[_keeper][_bonding];\\n    delete pendingBonds[_keeper][_bonding];\\n\\n    // bond provided tokens\\n    bonds[_keeper][_bonding] += _amount;\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1(keep3rV1).burn(_amount);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcd56d53eacaa3dbffc2cb573562482ba05b51246bf273f6bde9fb5de52c54eb2\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rKeeperDisputable.sol';\\n\\nabstract contract Keep3rKeepers is Keep3rKeeperDisputable {}\\n\",\"keccak256\":\"0xced9f9ec9610bb34b2e87fc1f05f036d37cee5a9df61d4fe527d92b1d9c1e244\",\"license\":\"MIT\"},\"solidity/for-test/Keep3rForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../contracts/Keep3r.sol';\\n\\ncontract Keep3rForTest is Keep3r {\\n  constructor(\\n    address _governance,\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) Keep3r(_governance, _keep3rHelper, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) {}\\n\\n  function viewTickOrder(address _liquidity) external view returns (bool) {\\n    return _isKP3RToken0[_liquidity];\\n  }\\n}\\n\",\"keccak256\":\"0x58569e7c64b0f7b29c01d5aedfce4abdf2a2fcddcd9fedee61d36a49553afd1a\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n// solhint-disable func-name-mixedcase\\ninterface IKeep3rV1 is IERC20, IERC20Metadata {\\n  // Structs\\n  struct Checkpoint {\\n    uint32 fromBlock;\\n    uint256 votes;\\n  }\\n\\n  // Events\\n  event DelegateChanged(address indexed _delegator, address indexed _fromDelegate, address indexed _toDelegate);\\n  event DelegateVotesChanged(address indexed _delegate, uint256 _previousBalance, uint256 _newBalance);\\n  event SubmitJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event ApplyCredit(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event RemoveJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event UnbondJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event JobAdded(address indexed _job, uint256 _block, address _governance);\\n  event JobRemoved(address indexed _job, uint256 _block, address _governance);\\n  event KeeperWorked(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _block, uint256 _amount);\\n  event KeeperBonding(address indexed _keeper, uint256 _block, uint256 _active, uint256 _bond);\\n  event KeeperBonded(address indexed _keeper, uint256 _block, uint256 _activated, uint256 _bond);\\n  event KeeperUnbonding(address indexed _keeper, uint256 _block, uint256 _deactive, uint256 _bond);\\n  event KeeperUnbound(address indexed _keeper, uint256 _block, uint256 _deactivated, uint256 _bond);\\n  event KeeperSlashed(address indexed _keeper, address indexed _slasher, uint256 _block, uint256 _slash);\\n  event KeeperDispute(address indexed _keeper, uint256 _block);\\n  event KeeperResolved(address indexed _keeper, uint256 _block);\\n  event TokenCreditAddition(address indexed _credit, address indexed _job, address indexed _creditor, uint256 _block, uint256 _amount);\\n\\n  // Variables\\n  function KPRH() external returns (address);\\n\\n  function delegates(address _delegator) external view returns (address);\\n\\n  function checkpoints(address _account, uint32 _checkpoint) external view returns (Checkpoint memory);\\n\\n  function numCheckpoints(address _account) external view returns (uint32);\\n\\n  function DOMAIN_TYPEHASH() external returns (bytes32);\\n\\n  function DOMAINSEPARATOR() external returns (bytes32);\\n\\n  function DELEGATION_TYPEHASH() external returns (bytes32);\\n\\n  function PERMIT_TYPEHASH() external returns (bytes32);\\n\\n  function nonces(address _user) external view returns (uint256);\\n\\n  function BOND() external returns (uint256);\\n\\n  function UNBOND() external returns (uint256);\\n\\n  function LIQUIDITYBOND() external returns (uint256);\\n\\n  function FEE() external returns (uint256);\\n\\n  function BASE() external returns (uint256);\\n\\n  function ETH() external returns (address);\\n\\n  function bondings(address _user, address _bonding) external view returns (uint256);\\n\\n  function canWithdrawAfter(address _user, address _bonding) external view returns (uint256);\\n\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function pendingbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function bonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function votes(address _delegator) external view returns (uint256);\\n\\n  function firstSeen(address _keeper) external view returns (uint256);\\n\\n  function disputes(address _keeper) external view returns (bool);\\n\\n  function lastJob(address _keeper) external view returns (uint256);\\n\\n  function workCompleted(address _keeper) external view returns (uint256);\\n\\n  function jobs(address _job) external view returns (bool);\\n\\n  function credits(address _job, address _credit) external view returns (uint256);\\n\\n  function liquidityProvided(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmountsUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function jobProposalDelay(address _job) external view returns (uint256);\\n\\n  function liquidityApplied(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmount(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function keepers(address _keeper) external view returns (bool);\\n\\n  function blacklist(address _keeper) external view returns (bool);\\n\\n  function keeperList(uint256 _index) external view returns (address);\\n\\n  function jobList(uint256 _index) external view returns (address);\\n\\n  function governance() external returns (address);\\n\\n  function pendingGovernance() external returns (address);\\n\\n  function liquidityAccepted(address _liquidity) external view returns (bool);\\n\\n  function liquidityPairs(uint256 _index) external view returns (address);\\n\\n  // Methods\\n  function getCurrentVotes(address _account) external view returns (uint256);\\n\\n  function addCreditETH(address _job) external payable;\\n\\n  function addCredit(\\n    address _credit,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function pairs() external view returns (address[] memory);\\n\\n  function addLiquidityToJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function applyCreditToJob(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external;\\n\\n  function unbondLiquidityFromJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function removeLiquidityFromJob(address _liquidity, address _job) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function burn(uint256 _amount) external;\\n\\n  function worked(address _keeper) external;\\n\\n  function receipt(\\n    address _credit,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function receiptETH(address _keeper, uint256 _amount) external;\\n\\n  function addJob(address _job) external;\\n\\n  function getJobs() external view returns (address[] memory);\\n\\n  function removeJob(address _job) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function setGovernance(address _governance) external;\\n\\n  function acceptGovernance() external;\\n\\n  function isKeeper(address _keeper) external returns (bool);\\n\\n  function isMinKeeper(\\n    address _keeper,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  function getKeepers() external view returns (address[] memory);\\n\\n  function activate(address _bonding) external;\\n\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function withdraw(address _bonding) external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xa9806cd6666ab1b7375ef72446964a72397fd4cefc7cc8c5b37caa7c50df0246\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../peripherals/IGovernable.sol';\\n\\ninterface IKeep3rV1Proxy is IGovernable {\\n  // Structs\\n  struct Recipient {\\n    address recipient;\\n    uint256 caps;\\n  }\\n\\n  // Variables\\n  function keep3rV1() external view returns (address);\\n\\n  function minter() external view returns (address);\\n\\n  function next(address) external view returns (uint256);\\n\\n  function caps(address) external view returns (uint256);\\n\\n  function recipients() external view returns (address[] memory);\\n\\n  function recipientsCaps() external view returns (Recipient[] memory);\\n\\n  // Errors\\n  error Cooldown();\\n  error NoDrawableAmount();\\n  error ZeroAddress();\\n  error OnlyMinter();\\n\\n  // Methods\\n  function addRecipient(address recipient, uint256 amount) external;\\n\\n  function removeRecipient(address recipient) external;\\n\\n  function draw() external returns (uint256 _amount);\\n\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  function setMinter(address _minter) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function mint(address _account, uint256 _amount) external;\\n\\n  function setKeep3rV1Governance(address _governance) external;\\n\\n  function acceptKeep3rV1Governance() external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function addJob(address _job) external;\\n\\n  function removeJob(address _job) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xfb2e81fe347b39aabce849ef2d42c6df846b7ef0ed5ae952c85bbb708da99408\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IDustCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\ninterface IDustCollector is IBaseErrors {\\n  /// @notice Emitted when dust is sent\\n  /// @param _token The token that will be transferred\\n  /// @param _amount The amount of the token that will be transferred\\n  /// @param _to The address which will receive the funds\\n  event DustSent(address _token, uint256 _amount, address _to);\\n\\n  /// @notice Allows an authorized user to transfer the tokens or eth that may have been left in a contract\\n  /// @param _token The token that will be transferred\\n  /// @param _amount The amount of the token that will be transferred\\n  /// @param _to The address that will receive the idle funds\\n  function sendDust(\\n    address _token,\\n    uint256 _amount,\\n    address _to\\n  ) external;\\n}\\n\",\"keccak256\":\"0x38dce228111f2a3c6b26ac09c5652c3f1f184c4cfe50d11ff0958ef6a50683bb\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Creates/resolves disputes for jobs or keepers\\n///         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\\n///         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\\ninterface IKeep3rDisputable {\\n  /// @notice Emitted when a keeper or a job is disputed\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _disputer The user that called the function and disputed the keeper\\n  event Dispute(address indexed _jobOrKeeper, address indexed _disputer);\\n\\n  /// @notice Emitted when a dispute is resolved\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _resolver The user that called the function and resolved the dispute\\n  event Resolve(address indexed _jobOrKeeper, address indexed _resolver);\\n\\n  /// @notice Throws when a job or keeper is already disputed\\n  error AlreadyDisputed();\\n\\n  /// @notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute\\n  error NotDisputed();\\n\\n  /// @notice Allows governance to create a dispute for a given keeper/job\\n  /// @param _jobOrKeeper The address in dispute\\n  function dispute(address _jobOrKeeper) external;\\n\\n  /// @notice Allows governance to resolve a dispute on a keeper/job\\n  /// @param _jobOrKeeper The address cleared\\n  function resolve(address _jobOrKeeper) external;\\n}\\n\",\"keccak256\":\"0x002b9b4c75e62d48d74b6447649d39eb5c1e128d2523bb11e08e9cd3e27b1f70\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6297,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "jobTokenCreditsAddedAt",
                "offset": 0,
                "slot": "37",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6540,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_approvedLiquidities",
                "offset": 0,
                "slot": "38",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 6548,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "liquidityAmount",
                "offset": 0,
                "slot": "40",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6554,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "rewardedAt",
                "offset": 0,
                "slot": "41",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6560,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "workedAt",
                "offset": 0,
                "slot": "42",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6566,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_tick",
                "offset": 0,
                "slot": "43",
                "type": "t_mapping(t_address,t_struct(TickCache)13178_storage)"
              },
              {
                "astId": 8024,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "pendingJobMigrations",
                "offset": 0,
                "slot": "44",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8030,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_migrationCreatedAt",
                "offset": 0,
                "slot": "45",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 8427,
                "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                "label": "_initialGas",
                "offset": 0,
                "slot": "46",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_int56": {
                "encoding": "inplace",
                "label": "int56",
                "numberOfBytes": "7"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_struct(TickCache)13178_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)",
                "numberOfBytes": "32",
                "value": "t_struct(TickCache)13178_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(TickCache)13178_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rJobFundableLiquidity.TickCache",
                "members": [
                  {
                    "astId": 13173,
                    "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                    "label": "current",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13175,
                    "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                    "label": "difference",
                    "offset": 7,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13177,
                    "contract": "solidity/for-test/Keep3rForTest.sol:Keep3rForTest",
                    "label": "period",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyAJob()": [
                {
                  "notice": "Throws when the address that is trying to register as a job is already a job"
                }
              ],
              "AlreadyAKeeper()": [
                {
                  "notice": "Throws when the address that is trying to register as a keeper is already a keeper"
                }
              ],
              "AlreadyDisputed()": [
                {
                  "notice": "Throws when a job or keeper is already disputed"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "InsufficientFunds()": [
                {
                  "notice": "Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobAlreadyAdded()": [
                {
                  "notice": "Throws when trying to add a job that has already been added"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobMigrationImpossible()": [
                {
                  "notice": "Throws when the address of the job that requests to migrate wants to migrate to its same address"
                }
              ],
              "JobMigrationLocked()": [
                {
                  "notice": "Throws when cooldown between migrations has not yet passed"
                }
              ],
              "JobMigrationUnavailable()": [
                {
                  "notice": "Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobTokenInsufficient()": [
                {
                  "notice": "Throws when someone tries to slash more tokens than the job has"
                }
              ],
              "JobTokenUnexistent()": [
                {
                  "notice": "Throws when the token trying to be slashed doesn't exist"
                }
              ],
              "JobUnapproved()": [
                {
                  "notice": "Throws if the address claiming to be a job is not in the list of approved jobs"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "NotDisputed()": [
                {
                  "notice": "Throws when a job or keeper is not disputed and someone tries to resolve the dispute"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "Activation(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#activate is called"
              },
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Dispute(address,address)": {
                "notice": "Emitted when a keeper or a job is disputed"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "DustSent(address,uint256,address)": {
                "notice": "Emitted when dust is sent"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobAddition(address,address)": {
                "notice": "Emitted when Keep3rJobManager#addJob is called"
              },
              "JobMigrationRequested(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#migrateJob function is called"
              },
              "JobMigrationSuccessful(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#acceptJobMigration function is called"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "JobSlashLiquidity(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called"
              },
              "JobSlashToken(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashTokenFromJob is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "KeeperRevoke(address,address)": {
                "notice": "Emitted when Keep3rKeeperDisputable#revoke is called"
              },
              "KeeperSlash(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperDisputable#slash is called"
              },
              "KeeperValidation(uint256)": {
                "notice": "Emitted when a keeper is validated before a job"
              },
              "KeeperWork(address,address,address,uint256,uint256)": {
                "notice": "Emitted when a keeper works a job"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "Resolve(address,address)": {
                "notice": "Emitted when a dispute is resolved"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              },
              "Withdrawal(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#withdraw is called"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobMigration(address,address)": {
                "notice": "Completes the migration process for a job"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "activate(address)": {
                "notice": "End of the bonding process after bonding time has passed"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addJob(address)": {
                "notice": "Allows any caller to add a new job"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bond(address,uint256)": {
                "notice": "Beginning of the bonding process"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bondedPayment(address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "directTokenPayment(address,address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "dispute(address)": {
                "notice": "Allows governance to create a dispute for a given keeper/job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "notice": "Confirms if the current keeper is registered and has a minimum bond of any asset."
              },
              "isKeeper(address)": {
                "notice": "Confirms if the current keeper is registered"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "migrateJob(address,address)": {
                "notice": "Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingJobMigrations(address)": {
                "notice": "Maps the jobs that have requested a migration to the address they have requested to migrate to"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "resolve(address)": {
                "notice": "Allows governance to resolve a dispute on a keeper/job"
              },
              "revoke(address)": {
                "notice": "Blacklists a keeper from participating in the network"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "sendDust(address,uint256,address)": {
                "notice": "Allows an authorized user to transfer the tokens or eth that may have been left in a contract"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slash(address,address,uint256,uint256)": {
                "notice": "Allows governance to slash a keeper based on a dispute"
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "notice": "Allows governance or a slasher to slash liquidity from a job"
              },
              "slashTokenFromJob(address,address,uint256)": {
                "notice": "Allows governance or slasher to slash a job specific token"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbond(address,uint256)": {
                "notice": "Beginning of the unbonding process"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdraw(address)": {
                "notice": "Withdraw funds after unbonding has finished"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              },
              "worked(address)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/Keep3rHelperForTest.sol": {
        "Keep3rHelperForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV2",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "InvalidKp3rPool",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairInvalid",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV2",
                  "type": "address"
                }
              ],
              "name": "Keep3rV2Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_address",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "_isKP3RToken0",
                  "type": "bool"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_maxBoost",
                  "type": "uint256"
                }
              ],
              "name": "MaxBoostChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_minBoost",
                  "type": "uint256"
                }
              ],
              "name": "MinBoostChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint32",
                  "name": "_quoteTwapTime",
                  "type": "uint32"
                }
              ],
              "name": "QuoteTwapTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_targetBond",
                  "type": "uint256"
                }
              ],
              "name": "TargetBondChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_workExtraGas",
                  "type": "uint256"
                }
              ],
              "name": "WorkExtraGasChange",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "BOOST_BASE",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "KP3R",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "basefee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amountBonded",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "int56",
                  "name": "_tickDifference",
                  "type": "int56"
                },
                {
                  "internalType": "uint256",
                  "name": "_timeInterval",
                  "type": "uint256"
                }
              ],
              "name": "getKP3RsAtTick",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_kp3rAmount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bonds",
                  "type": "uint256"
                }
              ],
              "name": "getPaymentParams",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_boost",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_oneEthQuote",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_extra",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "name": "getPoolTokens",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_token0",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token1",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint128",
                  "name": "_baseAmount",
                  "type": "uint128"
                },
                {
                  "internalType": "int56",
                  "name": "_tickDifference",
                  "type": "int56"
                },
                {
                  "internalType": "uint256",
                  "name": "_timeInterval",
                  "type": "uint256"
                }
              ],
              "name": "getQuoteAtTick",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_quoteAmount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_gasUsed",
                  "type": "uint256"
                }
              ],
              "name": "getRewardAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_gasUsed",
                  "type": "uint256"
                }
              ],
              "name": "getRewardAmountFor",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_kp3r",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bonds",
                  "type": "uint256"
                }
              ],
              "name": "getRewardBoostFor",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardBoost",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "name": "isKP3RToken0",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isKP3RToken0",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV2",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "poolAddress",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "isKP3RToken0",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "maxBoost",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "minBoost",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                },
                {
                  "internalType": "uint32[]",
                  "name": "_secondsAgo",
                  "type": "uint32[]"
                }
              ],
              "name": "observe",
              "outputs": [
                {
                  "internalType": "int56",
                  "name": "_tickCumulative1",
                  "type": "int56"
                },
                {
                  "internalType": "int56",
                  "name": "_tickCumulative2",
                  "type": "int56"
                },
                {
                  "internalType": "bool",
                  "name": "_success",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_eth",
                  "type": "uint256"
                }
              ],
              "name": "quote",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "quoteTwapTime",
              "outputs": [
                {
                  "internalType": "uint32",
                  "name": "",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_baseFee",
                  "type": "uint256"
                }
              ],
              "name": "setBaseFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV2",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV2",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_poolAddress",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_maxBoost",
                  "type": "uint256"
                }
              ],
              "name": "setMaxBoost",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_minBoost",
                  "type": "uint256"
                }
              ],
              "name": "setMinBoost",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint32",
                  "name": "_quoteTwapTime",
                  "type": "uint32"
                }
              ],
              "name": "setQuoteTwapTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_targetBond",
                  "type": "uint256"
                }
              ],
              "name": "setTargetBond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_workExtraGas",
                  "type": "uint256"
                }
              ],
              "name": "setWorkExtraGas",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "targetBond",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "workExtraGas",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "bonds(address)": {
                "params": {
                  "_keeper": "The address of the keeper to check"
                },
                "returns": {
                  "_amountBonded": "The amount of KP3R the keeper has bonded"
                }
              },
              "getKP3RsAtTick(uint256,int56,uint256)": {
                "params": {
                  "_liquidityAmount": "Amount of liquidity to be converted",
                  "_tickDifference": "Tick value used to calculate the quote",
                  "_timeInterval": "Time value used to calculate the quote"
                },
                "returns": {
                  "_kp3rAmount": "Amount of KP3R tokens underlying on the given liquidity"
                }
              },
              "getPaymentParams(uint256)": {
                "params": {
                  "_bonds": "Amount of bonded KP3R owned by the keeper"
                },
                "returns": {
                  "_boost": "Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R",
                  "_extra": "Amount of extra gas that should be added to the gas spent",
                  "_oneEthQuote": "Amount of KP3R tokens equivalent to 1 ETH"
                }
              },
              "getPoolTokens(address)": {
                "params": {
                  "_pool": "Address of the correspondant pool"
                },
                "returns": {
                  "_token0": "Address of the first token of the pair",
                  "_token1": "Address of the second token of the pair"
                }
              },
              "getQuoteAtTick(uint128,int56,uint256)": {
                "params": {
                  "_baseAmount": "Amount of token to be converted",
                  "_tickDifference": "Tick value used to calculate the quote",
                  "_timeInterval": "Time value used to calculate the quote"
                },
                "returns": {
                  "_quoteAmount": "Amount of credits deserved for the baseAmount at the tick value"
                }
              },
              "getRewardAmount(uint256)": {
                "params": {
                  "_gasUsed": "The amount of gas used that will be rewarded"
                },
                "returns": {
                  "_amount": "The amount of KP3R that should be awarded to tx.origin"
                }
              },
              "getRewardAmountFor(address,uint256)": {
                "params": {
                  "_gasUsed": "The amount of gas used that will be rewarded",
                  "_keeper": "The address of the keeper to check"
                },
                "returns": {
                  "_kp3r": "The amount of KP3R that should be awarded to the keeper"
                }
              },
              "getRewardBoostFor(uint256)": {
                "params": {
                  "_bonds": "The amount of KP3R tokens bonded by the keeper"
                },
                "returns": {
                  "_rewardBoost": "The reward boost that corresponds to the keeper"
                }
              },
              "isKP3RToken0(address)": {
                "params": {
                  "_pool": "Address of the correspondant pool"
                },
                "returns": {
                  "_isKP3RToken0": "Boolean indicating the order of the tokens in the pair"
                }
              },
              "observe(address,uint32[])": {
                "params": {
                  "_pool": "Address of the pool to observe",
                  "_secondsAgo": "Array with time references to observe"
                },
                "returns": {
                  "_success": "Boolean indicating if the observe call was succesfull",
                  "_tickCumulative1": "Cummulative sum of ticks until first time reference",
                  "_tickCumulative2": "Cummulative sum of ticks until second time reference"
                }
              },
              "quote(uint256)": {
                "details": "This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas",
                "params": {
                  "_eth": "The amount of ETH"
                },
                "returns": {
                  "_amountOut": "The amount of KP3R"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setKeep3rV2(address)": {
                "params": {
                  "_keep3rV2": "The address of Keep3r V2"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_poolAddress": "The address of the KP3R-WETH pool"
                }
              },
              "setMaxBoost(uint256)": {
                "params": {
                  "_maxBoost": "The maximum boost multiplier"
                }
              },
              "setMinBoost(uint256)": {
                "params": {
                  "_minBoost": "The minimum boost multiplier"
                }
              },
              "setQuoteTwapTime(uint32)": {
                "params": {
                  "_quoteTwapTime": "The twap time for quoting"
                }
              },
              "setTargetBond(uint256)": {
                "params": {
                  "_targetBond": "The target bond amount"
                }
              },
              "setWorkExtraGas(uint256)": {
                "params": {
                  "_workExtraGas": "The work extra gas"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_2497": {
                  "entryPoint": null,
                  "id": 2497,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_3034": {
                  "entryPoint": null,
                  "id": 3034,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_9851": {
                  "entryPoint": null,
                  "id": 9851,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_setKp3rWethPool_3206": {
                  "entryPoint": 251,
                  "id": 3206,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 687,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 716,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address_fromMemory": {
                  "entryPoint": 753,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:704:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "277:127:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "323:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "332:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "335:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "325:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "325:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "325:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "298:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "307:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "294:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "294:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "319:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "290:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "290:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "287:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "348:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "388:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "358:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "358:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "348:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "243:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "254:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "266:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:208:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "507:195:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "553:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "562:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "565:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "555:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "555:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "555:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "528:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "537:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "524:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "524:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "549:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "520:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "520:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "517:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "578:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "618:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "588:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "588:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "578:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "637:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "681:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "692:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "677:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "677:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "647:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "647:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "637:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "465:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "476:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "488:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "496:6:84",
                            "type": ""
                          }
                        ],
                        "src": "409:293:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "6080604052612af8600255612ee0600355680ad78ebc5ac620000060045561c3506005556006805463ffffffff19166102581790553480156200004157600080fd5b5060405162001ead38038062001ead8339810160408190526200006491620002f1565b81818181806001600160a01b038116620000905760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392831617905560068054600160201b600160c01b03191664010000000092851692909202919091179055620000ef7311b7a6bc0259ed6cf9db8f499988f9ecc7167bf5620000fb565b50505050505062000329565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200015557600080fd5b505afa1580156200016a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001909190620002cc565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620001f657600080fd5b505afa1580156200020b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002319190620002cc565b6001600160a01b0316149050811580156200024a575080155b156200026957604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b80516001600160a01b0381168114620002c757600080fd5b919050565b600060208284031215620002df57600080fd5b620002ea82620002af565b9392505050565b600080604083850312156200030557600080fd5b6200031083620002af565b91506200032060208401620002af565b90509250929050565b611b7480620003396000396000f3fe608060405234801561001057600080fd5b506004361061019b5760003560e01c80635cf24969116100ea5780635cf24969146102ed578063696a437b146102f65780637b40c913146103195780638561579c146103465780639aaad6791461034f578063a0d2710714610374578063ab033ea914610387578063ab5dce001461039a578063ab8cedc5146103ad578063b2e0df96146103c0578063b93f5af0146103d3578063c84993af146103e6578063ca4f2803146103f9578063dc686d911461041a578063ed1bd76c14610452578063f39c38a014610465578063fe10d7741461047857600080fd5b806305e0b9a0146101a05780630c525835146101d1578063117cfc1b146101e6578063160e1e31146102005780632248e82d14610213578063238efcbc1461023457806325f09e611461023c5780632742b9e714610245578063289adb441461024e57806337090c2f146102615780633cc7ab301461026a5780633facf2421461027d578063435b21c11461028657806346860698146102b4578063516c3323146102c75780635aa6e675146102da575b600080fd5b6101bb731ceb5cb57c4d4e2b2433641b95dd330a33185a4481565b6040516101c8919061188b565b60405180910390f35b6101e46101df366004611817565b61048b565b005b6006546101bb90600160201b90046001600160a01b031681565b6101e461020e3660046115e6565b6104f2565b6102266102213660046116d3565b61056d565b6040519081526020016101c8565b6101e46105a0565b61022661271081565b61022660045481565b6101e461025c366004611817565b61062c565b61022660035481565b6101e46102783660046115e6565b61068c565b61022660055481565b610299610294366004611817565b610717565b604080519384526020840192909252908201526060016101c8565b6101e46102c2366004611817565b600855565b6102266102d5366004611817565b610745565b6000546101bb906001600160a01b031681565b61022660085481565b6103096103043660046115e6565b6107b3565b60405190151581526020016101c8565b600754610338906001600160a01b03811690600160a01b900460ff1682565b6040516101c89291906118b9565b61022660025481565b60065461035f9063ffffffff1681565b60405163ffffffff90911681526020016101c8565b610226610382366004611849565b610839565b6101e46103953660046115e6565b610875565b6101e46103a8366004611817565b6108eb565b6102266103bb3660046117ca565b61094b565b6101e46103ce366004611817565b6109ef565b6101e46103e1366004611870565b610a4f565b6102266103f4366004611817565b610ac2565b61040c6104073660046115e6565b610ad4565b6040516101c892919061189f565b61042d610428366004611620565b610bc2565b60408051600694850b81529290930b60208301521515918101919091526060016101c8565b610226610460366004611817565b610ccd565b6001546101bb906001600160a01b031681565b6102266104863660046115e6565b610e28565b6000546001600160a01b031633146104b6576040516354348f0360e01b815260040160405180910390fd5b60028190556040518181527f0919fdaaac0f59c6bc7eeef4f975d6163475220f1e4820d0bce99c84c51cac1d906020015b60405180910390a150565b6000546001600160a01b0316331461051d576040516354348f0360e01b815260040160405180910390fd5b61052681610ec6565b6007546040517f554c636366d5fc882a9ab4b7b9d5181781d1a7076abe50ed410365620dcf4108916104e7916001600160a01b03821691600160a01b900460ff16906118b9565b60008061057c6102d585610e28565b905061059861271061058e83866119cb565b61046091906119b7565b949350505050565b6001546001600160a01b031633146105cb57604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916106229161188b565b60405180910390a1565b6000546001600160a01b03163314610657576040516354348f0360e01b815260040160405180910390fd5b60058190556040518181527fed847bdbab1a30becee18585f23c759bd06156561390d2e7fbffd18e74b56c9b906020016104e7565b6000546001600160a01b031633146106b7576040516354348f0360e01b815260040160405180910390fd5b60068054600160201b600160c01b031916600160201b6001600160a01b03848116820292909217928390556040517fcf744e4fc39d49b6d8103035078629b8a3be95adc007b0d663e96bdff777b10a936104e7939290049091169061188b565b600080600061072d670de0b6b3a7640000610ccd565b915061073884610745565b6005549095929450925050565b600061075382600454611070565b91506000610797600254600454856002546003546107719190611a3a565b61077b91906119cb565b61078591906119b7565b6002546107929190611971565b611086565b90506107a260085490565b6107ac90826119cb565b9392505050565b60008060006107c184610ad4565b90925090506001600160a01b038216731ceb5cb57c4d4e2b2433641b95dd330a33185a4414156107f5575060019392505050565b6001600160a01b038116731ceb5cb57c4d4e2b2433641b95dd330a33185a441461083257604051637d7c8f2760e11b815260040160405180910390fd5b5050919050565b60008061085261084d84600687900b611989565b611096565b905061086c600160601b86836001600160a01b03166114a4565b95945050505050565b6000546001600160a01b031633146108a0576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906104e790839061188b565b6000546001600160a01b03163314610916576040516354348f0360e01b815260040160405180910390fd5b60048190556040518181527feac367d684b6ac6c6ae7e3e852c06f17e6354e0f1e7122832c3e6d17e0a2b71e906020016104e7565b60008061095f61084d84600687900b611989565b90506001600160801b036001600160a01b038216116109af57600061098d6001600160a01b038316806119cb565b90506109a7600160c01b876001600160801b0316836114a4565b9250506109e7565b60006109c96001600160a01b03831680600160401b6114a4565b90506109e3600160801b876001600160801b0316836114a4565b9250505b509392505050565b6000546001600160a01b03163314610a1a576040516354348f0360e01b815260040160405180910390fd5b60038190556040518181527fa1292b4e7a0d916ccfd2bc83858b05f328e344d1f0f507d97ac66723ac7c2aaa906020016104e7565b6000546001600160a01b03163314610a7a576040516354348f0360e01b815260040160405180910390fd5b6006805463ffffffff191663ffffffff83169081179091556040519081527fc806e26fb64e3a95f4b70abf4d87280555696244d01068b5f45b0e515aceb1de906020016104e7565b6000610ace328361056d565b92915050565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1057600080fd5b505afa158015610b24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b489190611603565b836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611603565b91509150915091565b6000806000846001600160a01b031663883bdbfd856040518263ffffffff1660e01b8152600401610bf391906118d4565b60006040518083038186803b158015610c0b57600080fd5b505afa925050508015610c4057506040513d6000823e601f3d908101601f19168201604052610c3d91908101906116ff565b60015b610c7a573d808015610c6e576040519150601f19603f3d011682016040523d82523d6000602084013e610c73565b606091505b5050610cc6565b81600081518110610c8d57610c8d611aeb565b60200260200101519450600182511115610cbf5781600181518110610cb457610cb4611aeb565b602002602001015193505b6001925050505b9250925092565b604080516002808252606082018352600092839291906020830190803683375050600654825192935063ffffffff16918391506001908110610d1157610d11611aeb565b63ffffffff9092166020928302919091019091015260075460405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd90610d579085906004016118d4565b60006040518083038186803b158015610d6f57600080fd5b505afa158015610d83573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dab91908101906116ff565b509050600081600181518110610dc357610dc3611aeb565b602002602001015182600081518110610dde57610dde611aeb565b6020026020010151610df091906119ea565b60075490915061086c908690600160a01b900460ff16610e1857610e1383611aa5565b610e1a565b825b60065463ffffffff1661094b565b60065460405163a39744b560e01b8152600091600160201b90046001600160a01b03169063a39744b590610e76908590731ceb5cb57c4d4e2b2433641b95dd330a33185a449060040161189f565b60206040518083038186803b158015610e8e57600080fd5b505afa158015610ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ace9190611830565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1f57600080fd5b505afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190611603565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbc57600080fd5b505afa158015610fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff49190611603565b6001600160a01b03161490508115801561100c575080155b1561102a57604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b600081831061107f57816107ac565b5090919050565b60008183101561107f57816107ac565b60008060008360020b126110ad578260020b6110ba565b8260020b6110ba90611a88565b90506110c9620d89e719611a65565b60020b8111156111035760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b60006001821661111757600160801b611129565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561115e576080611159826ffff97272373d413259a46990580e213a6119cb565b901c90505b6004821615611188576080611183826ffff2e50f5f656932ef12357cf3c7fdcc6119cb565b901c90505b60088216156111b25760806111ad826fffe5caca7e10e4e61c3624eaa0941cd06119cb565b901c90505b60108216156111dc5760806111d7826fffcb9843d60f6159c9db58835c9266446119cb565b901c90505b6020821615611206576080611201826fff973b41fa98c081472e6896dfb254c06119cb565b901c90505b604082161561123057608061122b826fff2ea16466c96a3843ec78b326b528616119cb565b901c90505b608082161561125a576080611255826ffe5dee046a99a2a811c461f1969c30536119cb565b901c90505b610100821615611285576080611280826ffcbe86c7900a88aedcffc83b479aa3a46119cb565b901c90505b6102008216156112b05760806112ab826ff987a7253ac413176f2b074cf7815e546119cb565b901c90505b6104008216156112db5760806112d6826ff3392b0822b70005940c7a398e4b70f36119cb565b901c90505b610800821615611306576080611301826fe7159475a2c29b7443b29c7fa6e889d96119cb565b901c90505b61100082161561133157608061132c826fd097f3bdfd2022b8845ad8f792aa58256119cb565b901c90505b61200082161561135c576080611357826fa9f746462d870fdf8a65dc1f90e061e56119cb565b901c90505b614000821615611387576080611382826f70d869a156d2a1b890bb3df62baf32f76119cb565b901c90505b6180008216156113b25760806113ad826f31be135f97d08fd981231505542fcfa66119cb565b901c90505b620100008216156113de5760806113d9826f09aa508b5b7a84e1c677de54f3e99bc96119cb565b901c90505b62020000821615611409576080611404826e5d6af8dedb81196699c329225ee6046119cb565b901c90505b6204000082161561143357608061142e826d2216e584f5fa1ea926041bedfe986119cb565b901c90505b6208000082161561145b576080611456826b048a170391f7dc42444e8fa26119cb565b901c90505b60008460020b131561147657611473816000196119b7565b90505b611484600160201b82611a51565b15611490576001611493565b60005b6105989060ff16602083901c611971565b6000808060001985870985870292508281108382030391505080600014156114de57600084116114d357600080fd5b5082900490506107ac565b8084116114ea57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082601f83011261156357600080fd5b815160206115786115738361194e565b61191e565b80838252828201915082860187848660051b890101111561159857600080fd5b60005b858110156115c05781516115ae81611b17565b8452928401929084019060010161159b565b5090979650505050505050565b803563ffffffff811681146115e157600080fd5b919050565b6000602082840312156115f857600080fd5b81356107ac81611b17565b60006020828403121561161557600080fd5b81516107ac81611b17565b6000806040838503121561163357600080fd5b823561163e81611b17565b91506020838101356001600160401b0381111561165a57600080fd5b8401601f8101861361166b57600080fd5b80356116796115738261194e565b80828252848201915084840189868560051b870101111561169957600080fd5b600094505b838510156116c3576116af816115cd565b83526001949094019391850191850161169e565b5080955050505050509250929050565b600080604083850312156116e657600080fd5b82356116f181611b17565b946020939093013593505050565b6000806040838503121561171257600080fd5b82516001600160401b038082111561172957600080fd5b818501915085601f83011261173d57600080fd5b8151602061174d6115738361194e565b8083825282820191508286018a848660051b890101111561176d57600080fd5b600096505b8487101561179957805161178581611b2f565b835260019690960195918301918301611772565b50918801519196509093505050808211156117b357600080fd5b506117c085828601611552565b9150509250929050565b6000806000606084860312156117df57600080fd5b83356001600160801b03811681146117f657600080fd5b9250602084013561180681611b2f565b929592945050506040919091013590565b60006020828403121561182957600080fd5b5035919050565b60006020828403121561184257600080fd5b5051919050565b60008060006060848603121561185e57600080fd5b83359250602084013561180681611b2f565b60006020828403121561188257600080fd5b6107ac826115cd565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561191257835163ffffffff16835292840192918401916001016118f0565b50909695505050505050565b604051601f8201601f191681016001600160401b038111828210171561194657611946611b01565b604052919050565b60006001600160401b0382111561196757611967611b01565b5060051b60200190565b6000821982111561198457611984611abf565b500190565b60008261199857611998611ad5565b600160ff1b8214600019841416156119b2576119b2611abf565b500590565b6000826119c6576119c6611ad5565b500490565b60008160001904831182151516156119e5576119e5611abf565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615611a1557611a15611abf565b81667fffffffffffff018313811615611a3057611a30611abf565b5090039392505050565b600082821015611a4c57611a4c611abf565b500390565b600082611a6057611a60611ad5565b500690565b60008160020b627fffff19811415611a7f57611a7f611abf565b60000392915050565b6000600160ff1b821415611a9e57611a9e611abf565b5060000390565b60008160060b667fffffffffffff19811415611a7f57611a7f5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611b2c57600080fd5b50565b8060060b8114611b2c57600080fdfea264697066735822122004c0a010ceffd8e7db3c26c049c2c7972b37fcac1edac6ccf38a411c856f238464736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x2AF8 PUSH1 0x2 SSTORE PUSH2 0x2EE0 PUSH1 0x3 SSTORE PUSH9 0xAD78EBC5AC6200000 PUSH1 0x4 SSTORE PUSH2 0xC350 PUSH1 0x5 SSTORE PUSH1 0x6 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH2 0x258 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1EAD CODESIZE SUB DUP1 PUSH3 0x1EAD DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x64 SWAP2 PUSH3 0x2F1 JUMP JUMPDEST DUP2 DUP2 DUP2 DUP2 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x90 JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH5 0x100000000 SWAP3 DUP6 AND SWAP3 SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0xEF PUSH20 0x11B7A6BC0259ED6CF9DB8F499988F9ECC7167BF5 PUSH3 0xFB JUMP JUMPDEST POP POP POP POP POP POP PUSH3 0x329 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x16A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x190 SWAP2 SWAP1 PUSH3 0x2CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x20B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x231 SWAP2 SWAP1 PUSH3 0x2CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH3 0x24A JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH3 0x269 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7C395FED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP1 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x2C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x2DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x2EA DUP3 PUSH3 0x2AF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x305 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x310 DUP4 PUSH3 0x2AF JUMP JUMPDEST SWAP2 POP PUSH3 0x320 PUSH1 0x20 DUP5 ADD PUSH3 0x2AF JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x1B74 DUP1 PUSH3 0x339 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x19B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5CF24969 GT PUSH2 0xEA JUMPI DUP1 PUSH4 0x5CF24969 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x696A437B EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x319 JUMPI DUP1 PUSH4 0x8561579C EQ PUSH2 0x346 JUMPI DUP1 PUSH4 0x9AAAD679 EQ PUSH2 0x34F JUMPI DUP1 PUSH4 0xA0D27107 EQ PUSH2 0x374 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0xAB5DCE00 EQ PUSH2 0x39A JUMPI DUP1 PUSH4 0xAB8CEDC5 EQ PUSH2 0x3AD JUMPI DUP1 PUSH4 0xB2E0DF96 EQ PUSH2 0x3C0 JUMPI DUP1 PUSH4 0xB93F5AF0 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0xC84993AF EQ PUSH2 0x3E6 JUMPI DUP1 PUSH4 0xCA4F2803 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0xDC686D91 EQ PUSH2 0x41A JUMPI DUP1 PUSH4 0xED1BD76C EQ PUSH2 0x452 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x465 JUMPI DUP1 PUSH4 0xFE10D774 EQ PUSH2 0x478 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5E0B9A0 EQ PUSH2 0x1A0 JUMPI DUP1 PUSH4 0xC525835 EQ PUSH2 0x1D1 JUMPI DUP1 PUSH4 0x117CFC1B EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x200 JUMPI DUP1 PUSH4 0x2248E82D EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x25F09E61 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0x2742B9E7 EQ PUSH2 0x245 JUMPI DUP1 PUSH4 0x289ADB44 EQ PUSH2 0x24E JUMPI DUP1 PUSH4 0x37090C2F EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0x3CC7AB30 EQ PUSH2 0x26A JUMPI DUP1 PUSH4 0x3FACF242 EQ PUSH2 0x27D JUMPI DUP1 PUSH4 0x435B21C1 EQ PUSH2 0x286 JUMPI DUP1 PUSH4 0x46860698 EQ PUSH2 0x2B4 JUMPI DUP1 PUSH4 0x516C3323 EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x2DA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1BB PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C8 SWAP2 SWAP1 PUSH2 0x188B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1E4 PUSH2 0x1DF CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0x48B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x1BB SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x20E CALLDATASIZE PUSH1 0x4 PUSH2 0x15E6 JUMP JUMPDEST PUSH2 0x4F2 JUMP JUMPDEST PUSH2 0x226 PUSH2 0x221 CALLDATASIZE PUSH1 0x4 PUSH2 0x16D3 JUMP JUMPDEST PUSH2 0x56D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C8 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x5A0 JUMP JUMPDEST PUSH2 0x226 PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0x226 PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x25C CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0x62C JUMP JUMPDEST PUSH2 0x226 PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x278 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E6 JUMP JUMPDEST PUSH2 0x68C JUMP JUMPDEST PUSH2 0x226 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x299 PUSH2 0x294 CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0x717 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x1C8 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x2C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0x226 PUSH2 0x2D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0x745 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x1BB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x226 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x309 PUSH2 0x304 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E6 JUMP JUMPDEST PUSH2 0x7B3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C8 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0x338 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C8 SWAP3 SWAP2 SWAP1 PUSH2 0x18B9 JUMP JUMPDEST PUSH2 0x226 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x35F SWAP1 PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C8 JUMP JUMPDEST PUSH2 0x226 PUSH2 0x382 CALLDATASIZE PUSH1 0x4 PUSH2 0x1849 JUMP JUMPDEST PUSH2 0x839 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x395 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E6 JUMP JUMPDEST PUSH2 0x875 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x3A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0x8EB JUMP JUMPDEST PUSH2 0x226 PUSH2 0x3BB CALLDATASIZE PUSH1 0x4 PUSH2 0x17CA JUMP JUMPDEST PUSH2 0x94B JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x3CE CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0x9EF JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x3E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1870 JUMP JUMPDEST PUSH2 0xA4F JUMP JUMPDEST PUSH2 0x226 PUSH2 0x3F4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0xAC2 JUMP JUMPDEST PUSH2 0x40C PUSH2 0x407 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E6 JUMP JUMPDEST PUSH2 0xAD4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C8 SWAP3 SWAP2 SWAP1 PUSH2 0x189F JUMP JUMPDEST PUSH2 0x42D PUSH2 0x428 CALLDATASIZE PUSH1 0x4 PUSH2 0x1620 JUMP JUMPDEST PUSH2 0xBC2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x6 SWAP5 DUP6 SIGNEXTEND DUP2 MSTORE SWAP3 SWAP1 SWAP4 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD PUSH2 0x1C8 JUMP JUMPDEST PUSH2 0x226 PUSH2 0x460 CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0xCCD JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1BB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x226 PUSH2 0x486 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E6 JUMP JUMPDEST PUSH2 0xE28 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4B6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x919FDAAAC0F59C6BC7EEEF4F975D6163475220F1E4820D0BCE99C84C51CAC1D SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x51D JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x526 DUP2 PUSH2 0xEC6 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH32 0x554C636366D5FC882A9AB4B7B9D5181781D1A7076ABE50ED410365620DCF4108 SWAP2 PUSH2 0x4E7 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 PUSH2 0x18B9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x57C PUSH2 0x2D5 DUP6 PUSH2 0xE28 JUMP JUMPDEST SWAP1 POP PUSH2 0x598 PUSH2 0x2710 PUSH2 0x58E DUP4 DUP7 PUSH2 0x19CB JUMP JUMPDEST PUSH2 0x460 SWAP2 SWAP1 PUSH2 0x19B7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x622 SWAP2 PUSH2 0x188B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x657 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xED847BDBAB1A30BECEE18585F23C759BD06156561390D2E7FBFFD18E74B56C9B SWAP1 PUSH1 0x20 ADD PUSH2 0x4E7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6B7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND DUP3 MUL SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xCF744E4FC39D49B6D8103035078629B8A3BE95ADC007B0D663E96BDFF777B10A SWAP4 PUSH2 0x4E7 SWAP4 SWAP3 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 PUSH2 0x188B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x72D PUSH8 0xDE0B6B3A7640000 PUSH2 0xCCD JUMP JUMPDEST SWAP2 POP PUSH2 0x738 DUP5 PUSH2 0x745 JUMP JUMPDEST PUSH1 0x5 SLOAD SWAP1 SWAP6 SWAP3 SWAP5 POP SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x753 DUP3 PUSH1 0x4 SLOAD PUSH2 0x1070 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 PUSH2 0x797 PUSH1 0x2 SLOAD PUSH1 0x4 SLOAD DUP6 PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH2 0x771 SWAP2 SWAP1 PUSH2 0x1A3A JUMP JUMPDEST PUSH2 0x77B SWAP2 SWAP1 PUSH2 0x19CB JUMP JUMPDEST PUSH2 0x785 SWAP2 SWAP1 PUSH2 0x19B7 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x792 SWAP2 SWAP1 PUSH2 0x1971 JUMP JUMPDEST PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x7A2 PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x7AC SWAP1 DUP3 PUSH2 0x19CB JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x7C1 DUP5 PUSH2 0xAD4 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 EQ ISZERO PUSH2 0x7F5 JUMPI POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 EQ PUSH2 0x832 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7D7C8F27 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x852 PUSH2 0x84D DUP5 PUSH1 0x6 DUP8 SWAP1 SIGNEXTEND PUSH2 0x1989 JUMP JUMPDEST PUSH2 0x1096 JUMP JUMPDEST SWAP1 POP PUSH2 0x86C PUSH1 0x1 PUSH1 0x60 SHL DUP7 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x14A4 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8A0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x4E7 SWAP1 DUP4 SWAP1 PUSH2 0x188B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x916 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xEAC367D684B6AC6C6AE7E3E852C06F17E6354E0F1E7122832C3E6D17E0A2B71E SWAP1 PUSH1 0x20 ADD PUSH2 0x4E7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x95F PUSH2 0x84D DUP5 PUSH1 0x6 DUP8 SWAP1 SIGNEXTEND PUSH2 0x1989 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND GT PUSH2 0x9AF JUMPI PUSH1 0x0 PUSH2 0x98D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 PUSH2 0x19CB JUMP JUMPDEST SWAP1 POP PUSH2 0x9A7 PUSH1 0x1 PUSH1 0xC0 SHL DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP4 PUSH2 0x14A4 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x9E7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9C9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 PUSH1 0x1 PUSH1 0x40 SHL PUSH2 0x14A4 JUMP JUMPDEST SWAP1 POP PUSH2 0x9E3 PUSH1 0x1 PUSH1 0x80 SHL DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP4 PUSH2 0x14A4 JUMP JUMPDEST SWAP3 POP POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA1A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xA1292B4E7A0D916CCFD2BC83858B05F328E344D1F0F507D97AC66723AC7C2AAA SWAP1 PUSH1 0x20 ADD PUSH2 0x4E7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA7A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC806E26FB64E3A95F4B70ABF4D87280555696244D01068B5F45B0E515ACEB1DE SWAP1 PUSH1 0x20 ADD PUSH2 0x4E7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xACE ORIGIN DUP4 PUSH2 0x56D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB24 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB48 SWAP2 SWAP1 PUSH2 0x1603 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB95 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBB9 SWAP2 SWAP1 PUSH2 0x1603 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x883BDBFD DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBF3 SWAP2 SWAP1 PUSH2 0x18D4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0xC40 JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xC3D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x16FF JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0xC7A JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0xC6E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC73 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP PUSH2 0xCC6 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xC8D JUMPI PUSH2 0xC8D PUSH2 0x1AEB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP5 POP PUSH1 0x1 DUP3 MLOAD GT ISZERO PUSH2 0xCBF JUMPI DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xCB4 JUMPI PUSH2 0xCB4 PUSH2 0x1AEB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x6 SLOAD DUP3 MLOAD SWAP3 SWAP4 POP PUSH4 0xFFFFFFFF AND SWAP2 DUP4 SWAP2 POP PUSH1 0x1 SWAP1 DUP2 LT PUSH2 0xD11 JUMPI PUSH2 0xD11 PUSH2 0x1AEB JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x883BDBFD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x883BDBFD SWAP1 PUSH2 0xD57 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x18D4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD83 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xDAB SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x16FF JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xDC3 JUMPI PUSH2 0xDC3 PUSH2 0x1AEB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xDDE JUMPI PUSH2 0xDDE PUSH2 0x1AEB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xDF0 SWAP2 SWAP1 PUSH2 0x19EA JUMP JUMPDEST PUSH1 0x7 SLOAD SWAP1 SWAP2 POP PUSH2 0x86C SWAP1 DUP7 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xE18 JUMPI PUSH2 0xE13 DUP4 PUSH2 0x1AA5 JUMP JUMPDEST PUSH2 0xE1A JUMP JUMPDEST DUP3 JUMPDEST PUSH1 0x6 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x94B JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA39744B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA39744B5 SWAP1 PUSH2 0xE76 SWAP1 DUP6 SWAP1 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 SWAP1 PUSH1 0x4 ADD PUSH2 0x189F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xACE SWAP2 SWAP1 PUSH2 0x1830 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF33 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF57 SWAP2 SWAP1 PUSH2 0x1603 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFD0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFF4 SWAP2 SWAP1 PUSH2 0x1603 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0x100C JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0x102A JUMPI PUSH1 0x40 MLOAD PUSH4 0x7C395FED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP1 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x107F JUMPI DUP2 PUSH2 0x7AC JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT ISZERO PUSH2 0x107F JUMPI DUP2 PUSH2 0x7AC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH2 0x10AD JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0x10BA JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0x10BA SWAP1 PUSH2 0x1A88 JUMP JUMPDEST SWAP1 POP PUSH2 0x10C9 PUSH3 0xD89E7 NOT PUSH2 0x1A65 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH2 0x1103 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH2 0x1117 JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH2 0x1129 JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH2 0x115E JUMPI PUSH1 0x80 PUSH2 0x1159 DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH2 0x1188 JUMPI PUSH1 0x80 PUSH2 0x1183 DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH2 0x11B2 JUMPI PUSH1 0x80 PUSH2 0x11AD DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH2 0x11DC JUMPI PUSH1 0x80 PUSH2 0x11D7 DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH2 0x1206 JUMPI PUSH1 0x80 PUSH2 0x1201 DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH2 0x1230 JUMPI PUSH1 0x80 PUSH2 0x122B DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH2 0x125A JUMPI PUSH1 0x80 PUSH2 0x1255 DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH2 0x1285 JUMPI PUSH1 0x80 PUSH2 0x1280 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH2 0x12B0 JUMPI PUSH1 0x80 PUSH2 0x12AB DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH2 0x12DB JUMPI PUSH1 0x80 PUSH2 0x12D6 DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH2 0x1306 JUMPI PUSH1 0x80 PUSH2 0x1301 DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH2 0x1331 JUMPI PUSH1 0x80 PUSH2 0x132C DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH2 0x135C JUMPI PUSH1 0x80 PUSH2 0x1357 DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH2 0x1387 JUMPI PUSH1 0x80 PUSH2 0x1382 DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH2 0x13B2 JUMPI PUSH1 0x80 PUSH2 0x13AD DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH2 0x13DE JUMPI PUSH1 0x80 PUSH2 0x13D9 DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH2 0x1409 JUMPI PUSH1 0x80 PUSH2 0x1404 DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH2 0x1433 JUMPI PUSH1 0x80 PUSH2 0x142E DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH2 0x145B JUMPI PUSH1 0x80 PUSH2 0x1456 DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH2 0x1476 JUMPI PUSH2 0x1473 DUP2 PUSH1 0x0 NOT PUSH2 0x19B7 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x1484 PUSH1 0x1 PUSH1 0x20 SHL DUP3 PUSH2 0x1A51 JUMP JUMPDEST ISZERO PUSH2 0x1490 JUMPI PUSH1 0x1 PUSH2 0x1493 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x598 SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH2 0x1971 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x14DE JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x14D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x7AC JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x14EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 PUSH2 0x1578 PUSH2 0x1573 DUP4 PUSH2 0x194E JUMP JUMPDEST PUSH2 0x191E JUMP JUMPDEST DUP1 DUP4 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 POP DUP3 DUP7 ADD DUP8 DUP5 DUP7 PUSH1 0x5 SHL DUP10 ADD ADD GT ISZERO PUSH2 0x1598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x15C0 JUMPI DUP2 MLOAD PUSH2 0x15AE DUP2 PUSH2 0x1B17 JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x159B JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x15E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x15F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x7AC DUP2 PUSH2 0x1B17 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1615 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x7AC DUP2 PUSH2 0x1B17 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x163E DUP2 PUSH2 0x1B17 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x165A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 ADD PUSH1 0x1F DUP2 ADD DUP7 SGT PUSH2 0x166B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1679 PUSH2 0x1573 DUP3 PUSH2 0x194E JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE DUP5 DUP3 ADD SWAP2 POP DUP5 DUP5 ADD DUP10 DUP7 DUP6 PUSH1 0x5 SHL DUP8 ADD ADD GT ISZERO PUSH2 0x1699 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP5 POP JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x16C3 JUMPI PUSH2 0x16AF DUP2 PUSH2 0x15CD JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP6 ADD SWAP2 DUP6 ADD PUSH2 0x169E JUMP JUMPDEST POP DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x16E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x16F1 DUP2 PUSH2 0x1B17 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1712 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x1729 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x173D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 PUSH2 0x174D PUSH2 0x1573 DUP4 PUSH2 0x194E JUMP JUMPDEST DUP1 DUP4 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 POP DUP3 DUP7 ADD DUP11 DUP5 DUP7 PUSH1 0x5 SHL DUP10 ADD ADD GT ISZERO PUSH2 0x176D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP7 POP JUMPDEST DUP5 DUP8 LT ISZERO PUSH2 0x1799 JUMPI DUP1 MLOAD PUSH2 0x1785 DUP2 PUSH2 0x1B2F JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x1772 JUMP JUMPDEST POP SWAP2 DUP9 ADD MLOAD SWAP2 SWAP7 POP SWAP1 SWAP4 POP POP POP DUP1 DUP3 GT ISZERO PUSH2 0x17B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17C0 DUP6 DUP3 DUP7 ADD PUSH2 0x1552 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x17DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x17F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1806 DUP2 PUSH2 0x1B2F JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1829 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1842 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x185E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1806 DUP2 PUSH2 0x1B2F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1882 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7AC DUP3 PUSH2 0x15CD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1912 JUMPI DUP4 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x18F0 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1946 JUMPI PUSH2 0x1946 PUSH2 0x1B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x1967 JUMPI PUSH2 0x1967 PUSH2 0x1B01 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1984 JUMPI PUSH2 0x1984 PUSH2 0x1ABF JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1998 JUMPI PUSH2 0x1998 PUSH2 0x1AD5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ PUSH1 0x0 NOT DUP5 EQ AND ISZERO PUSH2 0x19B2 JUMPI PUSH2 0x19B2 PUSH2 0x1ABF JUMP JUMPDEST POP SDIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x19C6 JUMPI PUSH2 0x19C6 PUSH2 0x1AD5 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x19E5 JUMPI PUSH2 0x19E5 PUSH2 0x1ABF JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x1A15 JUMPI PUSH2 0x1A15 PUSH2 0x1ABF JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x1A30 JUMPI PUSH2 0x1A30 PUSH2 0x1ABF JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1A4C JUMPI PUSH2 0x1A4C PUSH2 0x1ABF JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1A60 JUMPI PUSH2 0x1A60 PUSH2 0x1AD5 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH2 0x1A7F JUMPI PUSH2 0x1A7F PUSH2 0x1ABF JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH2 0x1A9E JUMPI PUSH2 0x1A9E PUSH2 0x1ABF JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x1A7F JUMPI PUSH2 0x1A7F JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1B2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 PUSH1 0x6 SIGNEXTEND DUP2 EQ PUSH2 0x1B2C JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DIV 0xC0 LOG0 LT 0xCE SELFDESTRUCT 0xD8 0xE7 0xDB EXTCODECOPY 0x26 0xC0 0x49 0xC2 0xC7 SWAP8 0x2B CALLDATACOPY 0xFC 0xAC 0x1E 0xDA 0xC6 0xCC RETURN DUP11 COINBASE SHR DUP6 PUSH16 0x238464736F6C63430008070033000000 ",
              "sourceMap": "106:342:49:-:0;;;851:6:19;816:41;;939:6;904:41;;1029:9;992:46;;1124:6;1085:45;;1177:49;;;-1:-1:-1;;1177:49:19;1216:10;1177:49;;;182:91:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;247:9;258:11;247:9;258:11;;-1:-1:-1;;;;;357:25:28;;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;-1:-1:-1;;;;;422:24:28;;;;;;1504:8:19::1;:20:::0;;-1:-1:-1;;;;;;;;1504:20:19::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;1530:60:::1;1547:42;1530:16;:60::i;:::-;1422:173:::0;;2626:101:18;;182:91:49;;106:342;;3117:338:19;3180:18;628:42;-1:-1:-1;;;;;3201:45:19;3216:12;-1:-1:-1;;;;;3201:35:19;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3201:45:19;;3180:66;;3252:18;628:42;-1:-1:-1;;;;;3273:45:19;3288:12;-1:-1:-1;;;;;3273:35:19;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3273:45:19;;3252:66;;3330:13;3329:14;:32;;;;;3348:13;3347:14;3329:32;3325:62;;;3370:17;;-1:-1:-1;;;3370:17:19;;;;;;;;;;;3325:62;-1:-1:-1;3409:41:19;;;;;;;;;-1:-1:-1;;;;;3409:41:19;;;;;;;;;;;;;;;;;3394:12;:56;;-1:-1:-1;;;;;;3394:56:19;;;;-1:-1:-1;;;3394:56:19;;;;;;;;;3117:338::o;14:177:84:-;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:208::-;266:6;319:2;307:9;298:7;294:23;290:32;287:52;;;335:1;332;325:12;287:52;358:40;388:9;358:40;:::i;:::-;348:50;196:208;-1:-1:-1;;;196:208:84:o;409:293::-;488:6;496;549:2;537:9;528:7;524:23;520:32;517:52;;;565:1;562;555:12;517:52;588:40;618:9;588:40;:::i;:::-;578:50;;647:49;692:2;681:9;677:18;647:49;:::i;:::-;637:59;;409:293;;;;;:::o;:::-;106:342:49;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@BOOST_BASE_2981": {
                  "entryPoint": null,
                  "id": 2981,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@KP3R_2976": {
                  "entryPoint": null,
                  "id": 2976,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_getBasefee_9860": {
                  "entryPoint": null,
                  "id": 9860,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_setKp3rWethPool_3206": {
                  "entryPoint": 3782,
                  "id": 3206,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 1440,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@basefee_9839": {
                  "entryPoint": null,
                  "id": 9839,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bonds_2581": {
                  "entryPoint": 3624,
                  "id": 2581,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getKP3RsAtTick_2864": {
                  "entryPoint": 2105,
                  "id": 2864,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@getPaymentParams_2824": {
                  "entryPoint": 1815,
                  "id": 2824,
                  "parameterSlots": 1,
                  "returnSlots": 3
                },
                "@getPoolTokens_2695": {
                  "entryPoint": 2772,
                  "id": 2695,
                  "parameterSlots": 1,
                  "returnSlots": 2
                },
                "@getQuoteAtTick_2945": {
                  "entryPoint": 2379,
                  "id": 2945,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@getRewardAmountFor_2612": {
                  "entryPoint": 1389,
                  "id": 2612,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@getRewardAmount_2628": {
                  "entryPoint": 2754,
                  "id": 2628,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getRewardBoostFor_2671": {
                  "entryPoint": 1861,
                  "id": 2671,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@getSqrtRatioAtTick_5048": {
                  "entryPoint": 4246,
                  "id": 5048,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@isKP3RToken0_2734": {
                  "entryPoint": 1971,
                  "id": 2734,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@keep3rV2_3010": {
                  "entryPoint": null,
                  "id": 3010,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@kp3rWethPool_3015": {
                  "entryPoint": null,
                  "id": 3015,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@maxBoost_2991": {
                  "entryPoint": null,
                  "id": 2991,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@max_1252": {
                  "entryPoint": 4230,
                  "id": 1252,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@minBoost_2986": {
                  "entryPoint": null,
                  "id": 2986,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@min_1270": {
                  "entryPoint": 4208,
                  "id": 1270,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@mulDiv_4263": {
                  "entryPoint": 5284,
                  "id": 4263,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@observe_2794": {
                  "entryPoint": 3010,
                  "id": 2794,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@quoteTwapTime_3006": {
                  "entryPoint": null,
                  "id": 3006,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@quote_2563": {
                  "entryPoint": 3277,
                  "id": 2563,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@setBaseFee_9870": {
                  "entryPoint": null,
                  "id": 9870,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 2165,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV2_3127": {
                  "entryPoint": 1676,
                  "id": 3127,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_3055": {
                  "entryPoint": 1266,
                  "id": 3055,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setMaxBoost_3091": {
                  "entryPoint": 2543,
                  "id": 3091,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setMinBoost_3073": {
                  "entryPoint": 1163,
                  "id": 3073,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setQuoteTwapTime_3163": {
                  "entryPoint": 2639,
                  "id": 3163,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setTargetBond_3109": {
                  "entryPoint": 2283,
                  "id": 3109,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setWorkExtraGas_3145": {
                  "entryPoint": 1580,
                  "id": 3145,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@targetBond_2996": {
                  "entryPoint": null,
                  "id": 2996,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@workExtraGas_3001": {
                  "entryPoint": null,
                  "id": 3001,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_array_uint160_dyn_fromMemory": {
                  "entryPoint": 5458,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 5606,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 5635,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_array$_t_uint32_$dyn_memory_ptr": {
                  "entryPoint": 5664,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 5843,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_array$_t_int56_$dyn_memory_ptrt_array$_t_uint160_$dyn_memory_ptr_fromMemory": {
                  "entryPoint": 5887,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_uint128t_int56t_uint256": {
                  "entryPoint": 6090,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 6167,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256_fromMemory": {
                  "entryPoint": 6192,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256t_int56t_uint256": {
                  "entryPoint": 6217,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_uint32": {
                  "entryPoint": 6256,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_uint32": {
                  "entryPoint": 5581,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 6283,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": {
                  "entryPoint": 6303,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed": {
                  "entryPoint": 6329,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_uint32_$dyn_memory_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 6356,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_int56_t_int56_t_bool__to_t_int56_t_int56_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "allocate_memory": {
                  "entryPoint": 6430,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "array_allocation_size_array_int56_dyn": {
                  "entryPoint": 6478,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 6513,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_int256": {
                  "entryPoint": 6537,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 6583,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 6603,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_int56": {
                  "entryPoint": 6634,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 6714,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "mod_t_uint256": {
                  "entryPoint": 6737,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "negate_t_int24": {
                  "entryPoint": 6757,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "negate_t_int256": {
                  "entryPoint": 6792,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "negate_t_int56": {
                  "entryPoint": 6821,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 6847,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x12": {
                  "entryPoint": 6869,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x32": {
                  "entryPoint": 6891,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": 6913,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_address": {
                  "entryPoint": 6935,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "validator_revert_int56": {
                  "entryPoint": 6959,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:11520:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "89:668:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "138:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "147:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "150:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "140:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "140:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "140:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "117:6:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "125:4:84",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "113:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "113:17:84"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "132:3:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "109:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "109:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "102:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "102:35:84"
                              },
                              "nodeType": "YulIf",
                              "src": "99:55:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "163:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "179:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "173:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "173:13:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "167:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "195:14:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "205:4:84",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "199:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "218:69:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_array_int56_dyn",
                                      "nodeType": "YulIdentifier",
                                      "src": "245:37:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "245:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "229:15:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "229:58:84"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "222:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "296:16:84",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "309:3:84"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "300:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "328:3:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "333:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "321:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "321:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "321:15:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "345:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "356:3:84"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "361:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "352:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "352:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "345:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "373:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "388:6:84"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "396:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "384:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "384:15:84"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "377:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "453:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "462:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "465:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "455:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "455:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "455:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "422:6:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "434:1:84",
                                                "type": "",
                                                "value": "5"
                                              },
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "437:2:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "430:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "430:10:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "418:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "418:23:84"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "443:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "414:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "414:32:84"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "448:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "411:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "411:41:84"
                              },
                              "nodeType": "YulIf",
                              "src": "408:61:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "478:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "487:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "482:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "542:186:84",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "556:23:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "575:3:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "569:5:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "569:10:84"
                                    },
                                    "variables": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulTypedName",
                                        "src": "560:5:84",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "617:5:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "validator_revert_address",
                                        "nodeType": "YulIdentifier",
                                        "src": "592:24:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "592:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "592:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "643:3:84"
                                        },
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "648:5:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "636:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "636:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "636:18:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "667:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "678:3:84"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "683:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "674:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "674:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "667:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "699:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "710:3:84"
                                        },
                                        {
                                          "name": "_2",
                                          "nodeType": "YulIdentifier",
                                          "src": "715:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "706:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "706:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "699:3:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "508:1:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "511:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "505:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "505:9:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "515:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "517:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "526:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "529:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "522:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "522:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "517:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "501:3:84",
                                "statements": []
                              },
                              "src": "497:231:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "737:14:84",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "746:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "737:5:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_array_uint160_dyn_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "63:6:84",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "71:3:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "79:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:743:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "810:115:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "820:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "842:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "829:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "829:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "820:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "903:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "912:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "915:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "905:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "905:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "905:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "871:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "882:5:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "889:10:84",
                                            "type": "",
                                            "value": "0xffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "878:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "878:22:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "868:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "868:33:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "861:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "861:41:84"
                              },
                              "nodeType": "YulIf",
                              "src": "858:61:84"
                            }
                          ]
                        },
                        "name": "abi_decode_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "789:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "800:5:84",
                            "type": ""
                          }
                        ],
                        "src": "762:163:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1000:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1046:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1055:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1058:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1048:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1048:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1048:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1021:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1030:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1017:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1017:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1042:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1013:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1013:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1010:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1071:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1097:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1084:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1084:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1075:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1141:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1116:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1116:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1116:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1156:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1166:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1156:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "966:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "977:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "989:6:84",
                            "type": ""
                          }
                        ],
                        "src": "930:247:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1263:170:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1309:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1318:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1321:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1311:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1311:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1311:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1284:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1293:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1280:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1280:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1305:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1276:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1276:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1273:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1334:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1353:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1347:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1347:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1338:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1397:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1372:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1372:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1372:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1412:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1422:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1412:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1229:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1240:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1252:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1182:251:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1549:928:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1595:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1604:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1607:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1597:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1597:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1597:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1570:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1579:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1566:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1566:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1591:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1562:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1562:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1559:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1620:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1646:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1633:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1633:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1624:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1690:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1665:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1665:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1665:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1705:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1715:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1705:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1729:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1739:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1733:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1750:46:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1781:9:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1792:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1777:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1777:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1764:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1764:32:84"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1754:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1839:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1848:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1851:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1841:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1841:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1841:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1811:6:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1819:18:84",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1808:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1808:30:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1805:50:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1864:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1878:9:84"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1889:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1874:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1874:22:84"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1868:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1944:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1953:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1956:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1946:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1946:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1946:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1923:2:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1927:4:84",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1919:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1919:13:84"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1934:7:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1915:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1915:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1908:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1908:35:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1905:55:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1969:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1992:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1979:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1979:16:84"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1973:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2004:69:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "2069:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_array_int56_dyn",
                                      "nodeType": "YulIdentifier",
                                      "src": "2031:37:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2031:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2015:15:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2015:58:84"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "2008:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2082:16:84",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "2095:3:84"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2086:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "2114:3:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2119:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2107:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2107:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2107:15:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2131:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "2142:3:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2147:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2138:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2138:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "2131:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2159:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2174:2:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2178:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2170:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2170:11:84"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "2163:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2235:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2244:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2247:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2237:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2237:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2237:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2204:2:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2212:1:84",
                                                "type": "",
                                                "value": "5"
                                              },
                                              {
                                                "name": "_3",
                                                "nodeType": "YulIdentifier",
                                                "src": "2215:2:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "2208:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2208:10:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2200:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2200:19:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2221:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2196:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2196:28:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2226:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2193:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2193:41:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2190:61:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2260:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2269:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "2264:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2324:123:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "2345:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "name": "src",
                                              "nodeType": "YulIdentifier",
                                              "src": "2368:3:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "abi_decode_uint32",
                                            "nodeType": "YulIdentifier",
                                            "src": "2350:17:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2350:22:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2338:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2338:35:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2338:35:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "2386:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "2397:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2402:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2393:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2393:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "2386:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "2418:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "2429:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2434:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2425:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2425:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "2418:3:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "2290:1:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2293:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2287:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2287:9:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "2297:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "2299:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "2308:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2311:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2304:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2304:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "2299:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "2283:3:84",
                                "statements": []
                              },
                              "src": "2279:168:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2456:15:84",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "2466:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2456:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_array$_t_uint32_$dyn_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1507:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1518:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1530:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1538:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1438:1039:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2569:228:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2615:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2624:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2627:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2617:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2617:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2617:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2590:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2599:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2586:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2586:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2611:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2582:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2582:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2579:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2640:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2666:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2653:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2653:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2644:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2710:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2685:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2685:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2685:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2725:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2735:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2725:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2749:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2776:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2787:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2772:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2772:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2759:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2759:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2749:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2527:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2538:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2550:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2558:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2482:315:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2948:1068:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2994:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3003:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3006:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2996:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2996:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2996:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2969:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2978:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2965:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2965:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2990:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2961:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2961:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2958:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3019:30:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3039:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3033:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3033:16:84"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "3023:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3058:28:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3068:18:84",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3062:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3113:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3122:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3125:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3115:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3115:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3115:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "3101:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3109:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3098:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3098:14:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3095:34:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3138:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3152:9:84"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "3163:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3148:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3148:22:84"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "3142:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3218:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3227:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3230:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3220:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3220:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3220:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "3197:2:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3201:4:84",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3193:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3193:13:84"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3208:7:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "3189:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3189:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "3182:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3182:35:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3179:55:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3243:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "3259:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3253:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3253:9:84"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "3247:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3271:14:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3281:4:84",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "3275:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3294:69:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "3359:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_array_int56_dyn",
                                      "nodeType": "YulIdentifier",
                                      "src": "3321:37:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3321:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3305:15:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3305:58:84"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "3298:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3372:16:84",
                              "value": {
                                "name": "dst",
                                "nodeType": "YulIdentifier",
                                "src": "3385:3:84"
                              },
                              "variables": [
                                {
                                  "name": "dst_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3376:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "3404:3:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "3409:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3397:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3397:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3397:15:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3421:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "3432:3:84"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "3437:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3428:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3428:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "3421:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3449:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "3464:2:84"
                                  },
                                  {
                                    "name": "_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "3468:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3460:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3460:11:84"
                              },
                              "variables": [
                                {
                                  "name": "src",
                                  "nodeType": "YulTypedName",
                                  "src": "3453:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3525:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3534:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3537:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3527:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3527:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3527:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "3494:2:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3502:1:84",
                                                "type": "",
                                                "value": "5"
                                              },
                                              {
                                                "name": "_3",
                                                "nodeType": "YulIdentifier",
                                                "src": "3505:2:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "3498:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3498:10:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "3490:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3490:19:84"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "3511:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3486:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3486:28:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "3516:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3483:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3483:41:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3480:61:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3550:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3559:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "3554:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3614:184:84",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "3628:23:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "3647:3:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "3641:5:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3641:10:84"
                                    },
                                    "variables": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulTypedName",
                                        "src": "3632:5:84",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "3687:5:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "validator_revert_int56",
                                        "nodeType": "YulIdentifier",
                                        "src": "3664:22:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3664:29:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3664:29:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "3713:3:84"
                                        },
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "3718:5:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3706:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3706:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3706:18:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3737:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dst",
                                          "nodeType": "YulIdentifier",
                                          "src": "3748:3:84"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "3753:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3744:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3744:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "3737:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3769:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "src",
                                          "nodeType": "YulIdentifier",
                                          "src": "3780:3:84"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "3785:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3776:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3776:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "3769:3:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "3580:1:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "3583:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3577:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3577:9:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "3587:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3589:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "3598:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3601:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3594:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3594:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "3589:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "3573:3:84",
                                "statements": []
                              },
                              "src": "3569:229:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3807:15:84",
                              "value": {
                                "name": "dst_1",
                                "nodeType": "YulIdentifier",
                                "src": "3817:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3807:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3831:41:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3857:9:84"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "3868:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3853:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3853:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3847:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3847:25:84"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3835:8:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3901:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3910:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3913:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3903:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3903:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3903:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3887:8:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3897:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3884:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3884:16:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3881:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3926:84:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3980:9:84"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3991:8:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3976:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3976:24:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4002:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_array_uint160_dyn_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3936:39:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3936:74:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3926:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_array$_t_int56_$dyn_memory_ptrt_array$_t_uint160_$dyn_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2906:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2917:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2929:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2937:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2802:1214:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4123:389:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4144:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4153:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4140:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4140:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4165:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4136:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4136:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4133:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4194:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4220:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4207:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4207:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4198:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4293:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4302:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4305:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4295:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4295:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4295:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "4252:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "4263:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "4278:3:84",
                                                    "type": "",
                                                    "value": "128"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "4283:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4274:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4274:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4287:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "4270:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4270:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "4259:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4259:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "4249:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4249:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "4242:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4242:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4239:70:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4318:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4328:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4318:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4342:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4374:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4385:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4370:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4370:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4357:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4357:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4346:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4421:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_int56",
                                  "nodeType": "YulIdentifier",
                                  "src": "4398:22:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4398:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4398:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4438:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "4448:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4438:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4464:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4491:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4502:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4487:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4487:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4474:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4474:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4464:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint128t_int56t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4073:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4084:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4096:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4104:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4112:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4021:491:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4587:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4633:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4642:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4645:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4635:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4635:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4635:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4608:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4617:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4604:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4604:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4629:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4600:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4600:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4597:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4658:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4681:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4668:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4668:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4658:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4553:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4564:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4576:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4517:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4783:103:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4829:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4838:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4841:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4831:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4831:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4831:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4804:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4813:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4800:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4800:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4825:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4796:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4796:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4793:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4854:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4870:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4864:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4864:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4854:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4749:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4760:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4772:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4702:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4993:277:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5039:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5048:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5051:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5041:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5041:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5041:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5014:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5023:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5010:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5010:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5035:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5006:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5006:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5003:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5064:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5087:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5074:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5074:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5064:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5106:45:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5136:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5147:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5132:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5132:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5119:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5119:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5110:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5183:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_int56",
                                  "nodeType": "YulIdentifier",
                                  "src": "5160:22:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5160:29:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5160:29:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5198:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5208:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5198:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5222:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5249:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5260:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5245:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5245:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5232:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5232:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5222:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_int56t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4943:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4954:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4966:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4974:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4982:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4891:379:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5344:115:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5390:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5399:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5402:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5392:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5392:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5392:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5365:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5374:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5361:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5361:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5386:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5357:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5357:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5354:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5415:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5443:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint32",
                                  "nodeType": "YulIdentifier",
                                  "src": "5425:17:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5425:28:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5415:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5310:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5321:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5333:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5275:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5565:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5575:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5587:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5598:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5583:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5583:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5575:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5617:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5632:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5648:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5653:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "5644:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5644:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5657:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "5640:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5640:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5628:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5628:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5610:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5610:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5610:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5534:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5545:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5556:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5464:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5801:175:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5811:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5823:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5834:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5819:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5819:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5811:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5846:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5864:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5869:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "5860:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5860:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5873:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "5856:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5856:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5850:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5891:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5906:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5914:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5902:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5902:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5884:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5884:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5884:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5938:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5949:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5934:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5934:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5958:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5966:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5954:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5954:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5927:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5927:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5927:43:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5762:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5773:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5781:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5792:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5672:304:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6104:161:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6114:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6126:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6137:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6122:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6122:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6114:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6156:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6171:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6187:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6192:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "6183:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6183:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6196:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "6179:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6179:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6167:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6167:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6149:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6149:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6149:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6220:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6231:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6216:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6216:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "6250:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "6243:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6243:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "6236:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6236:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6209:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6209:50:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6209:50:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6065:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6076:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6084:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6095:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5981:284:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6419:498:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6429:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6439:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6433:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6450:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6468:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6479:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6464:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6464:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6454:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6498:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6509:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6491:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6491:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6491:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6521:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "6532:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "6525:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6547:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6567:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6561:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6561:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6551:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6590:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6598:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6583:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6583:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6583:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6614:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6625:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6636:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6621:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6621:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "6614:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6648:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6666:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6674:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6662:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6662:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "6652:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6686:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6695:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6690:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6754:137:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "6775:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6790:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "6784:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6784:13:84"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "6799:10:84",
                                              "type": "",
                                              "value": "0xffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "6780:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6780:30:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6768:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6768:43:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6768:43:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6824:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "6835:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "6840:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6831:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6831:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6824:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6856:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "6870:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "6878:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6866:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6866:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6856:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6716:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6719:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6713:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6713:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "6727:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6729:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "6738:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6741:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6734:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6734:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "6729:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6709:3:84",
                                "statements": []
                              },
                              "src": "6705:186:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6900:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "6908:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6900:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_uint32_$dyn_memory_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6388:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6399:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6410:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6270:647:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7017:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7027:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7039:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7050:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7035:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7035:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7027:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7069:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "7094:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "7087:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7087:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "7080:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7080:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7062:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7062:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7062:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6986:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6997:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7008:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6922:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7257:208:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7267:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7279:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7290:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7275:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7267:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7309:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7331:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7334:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "7320:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7320:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7302:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7302:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7302:40:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7362:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7373:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7358:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7358:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7389:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7392:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "7378:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7378:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7351:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7351:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7351:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7420:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7431:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7416:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7416:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value2",
                                            "nodeType": "YulIdentifier",
                                            "src": "7450:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "7443:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7443:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "7436:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7436:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7409:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7409:50:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7409:50:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_int56_t_int56_t_bool__to_t_int56_t_int56_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7210:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7221:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7229:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7237:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7248:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7114:351:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7644:150:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7661:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7672:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7654:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7654:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7654:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7695:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7706:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7691:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7691:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7711:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7684:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7684:29:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7684:29:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7733:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7744:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7729:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7729:18:84"
                                  },
                                  {
                                    "hexValue": "54",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7749:3:84",
                                    "type": "",
                                    "value": "T"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7722:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7722:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7722:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7762:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7774:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7785:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7770:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7770:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7762:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7621:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7635:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7470:324:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7900:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7910:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7922:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7933:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7918:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7918:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7910:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7952:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7963:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7945:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7945:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7945:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7869:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7880:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7891:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7799:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8138:162:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8148:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8160:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8171:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8156:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8156:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8148:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8190:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8201:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8183:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8183:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8183:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8228:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8239:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8224:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8224:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "8244:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8217:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8217:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8217:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8271:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8282:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8267:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8267:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "8287:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8260:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8260:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8260:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8091:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8102:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8110:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8118:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8129:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7981:319:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8404:93:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8414:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8426:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8437:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8422:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8422:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8414:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8456:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8471:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8479:10:84",
                                        "type": "",
                                        "value": "0xffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8467:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8467:23:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8449:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8449:42:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8449:42:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8373:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8384:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8395:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8305:192:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8547:230:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8557:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8573:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8567:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8567:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "8557:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8585:58:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "8607:6:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "size",
                                            "nodeType": "YulIdentifier",
                                            "src": "8623:4:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "8629:2:84",
                                            "type": "",
                                            "value": "31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "8619:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8619:13:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "8638:2:84",
                                            "type": "",
                                            "value": "31"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "8634:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8634:7:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8615:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8615:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8603:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8603:40:84"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "8589:10:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8718:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "8720:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8720:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8720:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "8661:10:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8673:18:84",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "8658:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8658:34:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "8697:10:84"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "8709:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "8694:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8694:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "8655:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8655:62:84"
                              },
                              "nodeType": "YulIf",
                              "src": "8652:88:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8756:2:84",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "8760:10:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8749:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8749:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8749:22:84"
                            }
                          ]
                        },
                        "name": "allocate_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "8527:4:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "8536:6:84",
                            "type": ""
                          }
                        ],
                        "src": "8502:275:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8849:114:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "8893:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "8895:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "8895:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "8895:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8865:6:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8873:18:84",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "8862:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8862:30:84"
                              },
                              "nodeType": "YulIf",
                              "src": "8859:56:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8924:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8940:1:84",
                                        "type": "",
                                        "value": "5"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "8943:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8936:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8936:14:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8952:4:84",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8932:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8932:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "8924:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_allocation_size_array_int56_dyn",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "8829:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "8840:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8782:181:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9016:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9043:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "9045:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9045:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9045:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9032:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "9039:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "9035:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9035:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9029:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9029:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9026:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9074:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9085:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9088:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9081:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9081:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "9074:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "8999:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9002:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "9008:3:84",
                            "type": ""
                          }
                        ],
                        "src": "8968:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9146:148:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9169:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "9171:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9171:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9171:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9166:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "9159:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9159:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9156:35:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9242:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "9244:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9244:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9244:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "x",
                                        "nodeType": "YulIdentifier",
                                        "src": "9210:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9217:3:84",
                                            "type": "",
                                            "value": "255"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9222:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "9213:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9213:11:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "9207:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9207:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "9230:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9237:1:84",
                                            "type": "",
                                            "value": "0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "9233:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9233:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "9227:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9227:13:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "9203:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9203:38:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9200:64:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9273:15:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9283:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9286:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sdiv",
                                  "nodeType": "YulIdentifier",
                                  "src": "9278:4:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9278:10:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "9273:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_int256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9131:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9134:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "9140:1:84",
                            "type": ""
                          }
                        ],
                        "src": "9101:193:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9345:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9368:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "9370:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9370:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9370:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9365:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "9358:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9358:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9355:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9399:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9408:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9411:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "9404:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9404:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "9399:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9330:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9333:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "9339:1:84",
                            "type": ""
                          }
                        ],
                        "src": "9299:120:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9476:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9535:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "9537:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9537:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9537:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "9507:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "9500:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9500:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "9493:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9493:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "9515:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9526:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "9522:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9522:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "9530:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "9518:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9518:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "9512:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9512:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "9489:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9489:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9486:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9566:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9581:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9584:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "9577:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9577:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "9566:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9455:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9458:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "9464:7:84",
                            "type": ""
                          }
                        ],
                        "src": "9424:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9644:312:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9654:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9676:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9679:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "9665:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9665:16:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9658:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9690:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9712:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9715:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "9701:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9701:16:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9694:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9726:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9740:3:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9745:1:84",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9736:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9736:11:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9730:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9818:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "9820:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9820:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9820:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9770:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "9763:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9763:10:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9779:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9792:16:84",
                                                "type": "",
                                                "value": "0x7fffffffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "9788:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9788:21:84"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "9811:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "9784:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9784:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "9775:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9775:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "9759:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9759:58:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9756:84:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9898:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "9900:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9900:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9900:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9856:2:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9864:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9873:16:84",
                                            "type": "",
                                            "value": "0x7fffffffffffff"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "9891:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "9869:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9869:26:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sgt",
                                      "nodeType": "YulIdentifier",
                                      "src": "9860:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9860:36:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "9852:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9852:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9849:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9929:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9941:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9946:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "9937:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9937:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "9929:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9626:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9629:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "9635:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9597:359:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10010:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10032:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10034:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10034:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10034:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10026:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10029:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10023:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10023:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10020:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10063:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10075:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10078:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "10071:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10071:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "10063:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9992:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9995:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "10001:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9961:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10129:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10152:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "10154:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10154:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10154:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10149:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10142:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10142:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10139:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10183:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10192:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10195:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "10188:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10188:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "10183:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10114:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10117:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "10123:1:84",
                            "type": ""
                          }
                        ],
                        "src": "10091:112:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10250:142:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10260:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10286:1:84",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "10289:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "10275:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10275:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10264:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10333:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10335:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10335:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10335:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10310:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10323:7:84",
                                        "type": "",
                                        "value": "8388607"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "10319:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10319:12:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "10307:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10307:25:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10304:51:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10364:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10375:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10378:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "10371:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10371:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "10364:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "10232:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "10242:3:84",
                            "type": ""
                          }
                        ],
                        "src": "10208:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10440:93:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10476:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10478:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10478:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10478:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "10456:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10467:3:84",
                                        "type": "",
                                        "value": "255"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10472:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "10463:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10463:11:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "10453:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10453:22:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10450:48:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10507:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10518:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "10521:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "10514:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10514:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "10507:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "10422:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "10432:3:84",
                            "type": ""
                          }
                        ],
                        "src": "10397:136:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10580:151:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10590:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10616:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "10619:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "10605:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10605:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10594:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10672:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10674:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10674:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10674:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10640:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10653:16:84",
                                        "type": "",
                                        "value": "0x7fffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "10649:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10649:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "10637:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10637:34:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10634:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10703:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10714:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10717:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "10710:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10710:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "10703:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "10562:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "10572:3:84",
                            "type": ""
                          }
                        ],
                        "src": "10538:193:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10768:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10785:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10792:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10797:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "10788:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10788:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10778:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10778:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10778:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10825:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10828:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10818:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10818:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10818:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10849:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10852:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "10842:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10842:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10842:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "10736:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10900:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10917:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10924:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10929:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "10920:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10920:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10910:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10910:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10910:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10957:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10960:4:84",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10950:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10950:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10950:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10981:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10984:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "10974:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10974:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10974:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "10868:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11032:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11049:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11056:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11061:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11052:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11052:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11042:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11042:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11042:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11089:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11092:4:84",
                                    "type": "",
                                    "value": "0x32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11082:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11082:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11082:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11113:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11116:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "11106:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11106:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11106:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x32",
                        "nodeType": "YulFunctionDefinition",
                        "src": "11000:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11164:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11181:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11188:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11193:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11184:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11184:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11174:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11174:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11174:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11221:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11224:4:84",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11214:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11214:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11214:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11245:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11248:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "11238:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11238:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11238:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "11132:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11309:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11373:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11382:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11385:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11375:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11375:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11375:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "11332:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "11343:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "11358:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "11363:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11354:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "11354:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11367:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "11350:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11350:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "11339:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11339:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "11329:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11329:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "11322:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11322:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11319:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "11298:5:84",
                            "type": ""
                          }
                        ],
                        "src": "11264:131:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11443:75:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11496:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11505:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11508:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11498:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11498:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11498:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "11466:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "11484:1:84",
                                            "type": "",
                                            "value": "6"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "11487:5:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "11473:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11473:20:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "11463:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11463:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "11456:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11456:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11453:59:84"
                            }
                          ]
                        },
                        "name": "validator_revert_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "11432:5:84",
                            "type": ""
                          }
                        ],
                        "src": "11400:118:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_array_uint160_dyn_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_int56_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let src := add(offset, _2)\n        if gt(add(add(offset, shl(5, _1)), _2), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, 1) }\n        {\n            let value := mload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, _2)\n            src := add(src, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_array$_t_uint32_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        let dst := allocate_memory(array_allocation_size_array_int56_dyn(_3))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, _1)\n        let src := add(_2, _1)\n        if gt(add(add(_2, shl(5, _3)), _1), dataEnd) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _3) { i := add(i, 1) }\n        {\n            mstore(dst, abi_decode_uint32(src))\n            dst := add(dst, _1)\n            src := add(src, _1)\n        }\n        value1 := dst_1\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_array$_t_int56_$dyn_memory_ptrt_array$_t_uint160_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        let _4 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_int56_dyn(_3))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, _4)\n        let src := add(_2, _4)\n        if gt(add(add(_2, shl(5, _3)), _4), dataEnd) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _3) { i := add(i, 1) }\n        {\n            let value := mload(src)\n            validator_revert_int56(value)\n            mstore(dst, value)\n            dst := add(dst, _4)\n            src := add(src, _4)\n        }\n        value0 := dst_1\n        let offset_1 := mload(add(headStart, _4))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_array_uint160_dyn_fromMemory(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_uint128t_int56t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(128, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_int56(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_int56t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_int56(value)\n        value1 := value\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n    }\n    function abi_encode_tuple_t_array$_t_uint32_$dyn_memory_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_int56_t_int56_t_bool__to_t_int56_t_int56_t_bool__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, signextend(6, value0))\n        mstore(add(headStart, 32), signextend(6, value1))\n        mstore(add(headStart, 64), iszero(iszero(value2)))\n    }\n    function abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 1)\n        mstore(add(headStart, 64), \"T\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_array_int56_dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_int256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        if and(eq(x, shl(255, 1)), eq(y, not(0))) { panic_error_0x11() }\n        r := sdiv(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_int56(x, y) -> diff\n    {\n        let x_1 := signextend(6, x)\n        let y_1 := signextend(6, y)\n        let _1 := slt(y_1, 0)\n        if and(iszero(_1), slt(x_1, add(not(0x7fffffffffffff), y_1))) { panic_error_0x11() }\n        if and(_1, sgt(x_1, add(0x7fffffffffffff, y_1))) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function negate_t_int24(value) -> ret\n    {\n        let value_1 := signextend(2, value)\n        if eq(value_1, not(8388607)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function negate_t_int256(value) -> ret\n    {\n        if eq(value, shl(255, 1)) { panic_error_0x11() }\n        ret := sub(0, value)\n    }\n    function negate_t_int56(value) -> ret\n    {\n        let value_1 := signextend(6, value)\n        if eq(value_1, not(0x7fffffffffffff)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function validator_revert_int56(value)\n    {\n        if iszero(eq(value, signextend(6, value))) { revert(0, 0) }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061019b5760003560e01c80635cf24969116100ea5780635cf24969146102ed578063696a437b146102f65780637b40c913146103195780638561579c146103465780639aaad6791461034f578063a0d2710714610374578063ab033ea914610387578063ab5dce001461039a578063ab8cedc5146103ad578063b2e0df96146103c0578063b93f5af0146103d3578063c84993af146103e6578063ca4f2803146103f9578063dc686d911461041a578063ed1bd76c14610452578063f39c38a014610465578063fe10d7741461047857600080fd5b806305e0b9a0146101a05780630c525835146101d1578063117cfc1b146101e6578063160e1e31146102005780632248e82d14610213578063238efcbc1461023457806325f09e611461023c5780632742b9e714610245578063289adb441461024e57806337090c2f146102615780633cc7ab301461026a5780633facf2421461027d578063435b21c11461028657806346860698146102b4578063516c3323146102c75780635aa6e675146102da575b600080fd5b6101bb731ceb5cb57c4d4e2b2433641b95dd330a33185a4481565b6040516101c8919061188b565b60405180910390f35b6101e46101df366004611817565b61048b565b005b6006546101bb90600160201b90046001600160a01b031681565b6101e461020e3660046115e6565b6104f2565b6102266102213660046116d3565b61056d565b6040519081526020016101c8565b6101e46105a0565b61022661271081565b61022660045481565b6101e461025c366004611817565b61062c565b61022660035481565b6101e46102783660046115e6565b61068c565b61022660055481565b610299610294366004611817565b610717565b604080519384526020840192909252908201526060016101c8565b6101e46102c2366004611817565b600855565b6102266102d5366004611817565b610745565b6000546101bb906001600160a01b031681565b61022660085481565b6103096103043660046115e6565b6107b3565b60405190151581526020016101c8565b600754610338906001600160a01b03811690600160a01b900460ff1682565b6040516101c89291906118b9565b61022660025481565b60065461035f9063ffffffff1681565b60405163ffffffff90911681526020016101c8565b610226610382366004611849565b610839565b6101e46103953660046115e6565b610875565b6101e46103a8366004611817565b6108eb565b6102266103bb3660046117ca565b61094b565b6101e46103ce366004611817565b6109ef565b6101e46103e1366004611870565b610a4f565b6102266103f4366004611817565b610ac2565b61040c6104073660046115e6565b610ad4565b6040516101c892919061189f565b61042d610428366004611620565b610bc2565b60408051600694850b81529290930b60208301521515918101919091526060016101c8565b610226610460366004611817565b610ccd565b6001546101bb906001600160a01b031681565b6102266104863660046115e6565b610e28565b6000546001600160a01b031633146104b6576040516354348f0360e01b815260040160405180910390fd5b60028190556040518181527f0919fdaaac0f59c6bc7eeef4f975d6163475220f1e4820d0bce99c84c51cac1d906020015b60405180910390a150565b6000546001600160a01b0316331461051d576040516354348f0360e01b815260040160405180910390fd5b61052681610ec6565b6007546040517f554c636366d5fc882a9ab4b7b9d5181781d1a7076abe50ed410365620dcf4108916104e7916001600160a01b03821691600160a01b900460ff16906118b9565b60008061057c6102d585610e28565b905061059861271061058e83866119cb565b61046091906119b7565b949350505050565b6001546001600160a01b031633146105cb57604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916106229161188b565b60405180910390a1565b6000546001600160a01b03163314610657576040516354348f0360e01b815260040160405180910390fd5b60058190556040518181527fed847bdbab1a30becee18585f23c759bd06156561390d2e7fbffd18e74b56c9b906020016104e7565b6000546001600160a01b031633146106b7576040516354348f0360e01b815260040160405180910390fd5b60068054600160201b600160c01b031916600160201b6001600160a01b03848116820292909217928390556040517fcf744e4fc39d49b6d8103035078629b8a3be95adc007b0d663e96bdff777b10a936104e7939290049091169061188b565b600080600061072d670de0b6b3a7640000610ccd565b915061073884610745565b6005549095929450925050565b600061075382600454611070565b91506000610797600254600454856002546003546107719190611a3a565b61077b91906119cb565b61078591906119b7565b6002546107929190611971565b611086565b90506107a260085490565b6107ac90826119cb565b9392505050565b60008060006107c184610ad4565b90925090506001600160a01b038216731ceb5cb57c4d4e2b2433641b95dd330a33185a4414156107f5575060019392505050565b6001600160a01b038116731ceb5cb57c4d4e2b2433641b95dd330a33185a441461083257604051637d7c8f2760e11b815260040160405180910390fd5b5050919050565b60008061085261084d84600687900b611989565b611096565b905061086c600160601b86836001600160a01b03166114a4565b95945050505050565b6000546001600160a01b031633146108a0576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906104e790839061188b565b6000546001600160a01b03163314610916576040516354348f0360e01b815260040160405180910390fd5b60048190556040518181527feac367d684b6ac6c6ae7e3e852c06f17e6354e0f1e7122832c3e6d17e0a2b71e906020016104e7565b60008061095f61084d84600687900b611989565b90506001600160801b036001600160a01b038216116109af57600061098d6001600160a01b038316806119cb565b90506109a7600160c01b876001600160801b0316836114a4565b9250506109e7565b60006109c96001600160a01b03831680600160401b6114a4565b90506109e3600160801b876001600160801b0316836114a4565b9250505b509392505050565b6000546001600160a01b03163314610a1a576040516354348f0360e01b815260040160405180910390fd5b60038190556040518181527fa1292b4e7a0d916ccfd2bc83858b05f328e344d1f0f507d97ac66723ac7c2aaa906020016104e7565b6000546001600160a01b03163314610a7a576040516354348f0360e01b815260040160405180910390fd5b6006805463ffffffff191663ffffffff83169081179091556040519081527fc806e26fb64e3a95f4b70abf4d87280555696244d01068b5f45b0e515aceb1de906020016104e7565b6000610ace328361056d565b92915050565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1057600080fd5b505afa158015610b24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b489190611603565b836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611603565b91509150915091565b6000806000846001600160a01b031663883bdbfd856040518263ffffffff1660e01b8152600401610bf391906118d4565b60006040518083038186803b158015610c0b57600080fd5b505afa925050508015610c4057506040513d6000823e601f3d908101601f19168201604052610c3d91908101906116ff565b60015b610c7a573d808015610c6e576040519150601f19603f3d011682016040523d82523d6000602084013e610c73565b606091505b5050610cc6565b81600081518110610c8d57610c8d611aeb565b60200260200101519450600182511115610cbf5781600181518110610cb457610cb4611aeb565b602002602001015193505b6001925050505b9250925092565b604080516002808252606082018352600092839291906020830190803683375050600654825192935063ffffffff16918391506001908110610d1157610d11611aeb565b63ffffffff9092166020928302919091019091015260075460405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd90610d579085906004016118d4565b60006040518083038186803b158015610d6f57600080fd5b505afa158015610d83573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dab91908101906116ff565b509050600081600181518110610dc357610dc3611aeb565b602002602001015182600081518110610dde57610dde611aeb565b6020026020010151610df091906119ea565b60075490915061086c908690600160a01b900460ff16610e1857610e1383611aa5565b610e1a565b825b60065463ffffffff1661094b565b60065460405163a39744b560e01b8152600091600160201b90046001600160a01b03169063a39744b590610e76908590731ceb5cb57c4d4e2b2433641b95dd330a33185a449060040161189f565b60206040518083038186803b158015610e8e57600080fd5b505afa158015610ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ace9190611830565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1f57600080fd5b505afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190611603565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbc57600080fd5b505afa158015610fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff49190611603565b6001600160a01b03161490508115801561100c575080155b1561102a57604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b600081831061107f57816107ac565b5090919050565b60008183101561107f57816107ac565b60008060008360020b126110ad578260020b6110ba565b8260020b6110ba90611a88565b90506110c9620d89e719611a65565b60020b8111156111035760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b60006001821661111757600160801b611129565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561115e576080611159826ffff97272373d413259a46990580e213a6119cb565b901c90505b6004821615611188576080611183826ffff2e50f5f656932ef12357cf3c7fdcc6119cb565b901c90505b60088216156111b25760806111ad826fffe5caca7e10e4e61c3624eaa0941cd06119cb565b901c90505b60108216156111dc5760806111d7826fffcb9843d60f6159c9db58835c9266446119cb565b901c90505b6020821615611206576080611201826fff973b41fa98c081472e6896dfb254c06119cb565b901c90505b604082161561123057608061122b826fff2ea16466c96a3843ec78b326b528616119cb565b901c90505b608082161561125a576080611255826ffe5dee046a99a2a811c461f1969c30536119cb565b901c90505b610100821615611285576080611280826ffcbe86c7900a88aedcffc83b479aa3a46119cb565b901c90505b6102008216156112b05760806112ab826ff987a7253ac413176f2b074cf7815e546119cb565b901c90505b6104008216156112db5760806112d6826ff3392b0822b70005940c7a398e4b70f36119cb565b901c90505b610800821615611306576080611301826fe7159475a2c29b7443b29c7fa6e889d96119cb565b901c90505b61100082161561133157608061132c826fd097f3bdfd2022b8845ad8f792aa58256119cb565b901c90505b61200082161561135c576080611357826fa9f746462d870fdf8a65dc1f90e061e56119cb565b901c90505b614000821615611387576080611382826f70d869a156d2a1b890bb3df62baf32f76119cb565b901c90505b6180008216156113b25760806113ad826f31be135f97d08fd981231505542fcfa66119cb565b901c90505b620100008216156113de5760806113d9826f09aa508b5b7a84e1c677de54f3e99bc96119cb565b901c90505b62020000821615611409576080611404826e5d6af8dedb81196699c329225ee6046119cb565b901c90505b6204000082161561143357608061142e826d2216e584f5fa1ea926041bedfe986119cb565b901c90505b6208000082161561145b576080611456826b048a170391f7dc42444e8fa26119cb565b901c90505b60008460020b131561147657611473816000196119b7565b90505b611484600160201b82611a51565b15611490576001611493565b60005b6105989060ff16602083901c611971565b6000808060001985870985870292508281108382030391505080600014156114de57600084116114d357600080fd5b5082900490506107ac565b8084116114ea57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082601f83011261156357600080fd5b815160206115786115738361194e565b61191e565b80838252828201915082860187848660051b890101111561159857600080fd5b60005b858110156115c05781516115ae81611b17565b8452928401929084019060010161159b565b5090979650505050505050565b803563ffffffff811681146115e157600080fd5b919050565b6000602082840312156115f857600080fd5b81356107ac81611b17565b60006020828403121561161557600080fd5b81516107ac81611b17565b6000806040838503121561163357600080fd5b823561163e81611b17565b91506020838101356001600160401b0381111561165a57600080fd5b8401601f8101861361166b57600080fd5b80356116796115738261194e565b80828252848201915084840189868560051b870101111561169957600080fd5b600094505b838510156116c3576116af816115cd565b83526001949094019391850191850161169e565b5080955050505050509250929050565b600080604083850312156116e657600080fd5b82356116f181611b17565b946020939093013593505050565b6000806040838503121561171257600080fd5b82516001600160401b038082111561172957600080fd5b818501915085601f83011261173d57600080fd5b8151602061174d6115738361194e565b8083825282820191508286018a848660051b890101111561176d57600080fd5b600096505b8487101561179957805161178581611b2f565b835260019690960195918301918301611772565b50918801519196509093505050808211156117b357600080fd5b506117c085828601611552565b9150509250929050565b6000806000606084860312156117df57600080fd5b83356001600160801b03811681146117f657600080fd5b9250602084013561180681611b2f565b929592945050506040919091013590565b60006020828403121561182957600080fd5b5035919050565b60006020828403121561184257600080fd5b5051919050565b60008060006060848603121561185e57600080fd5b83359250602084013561180681611b2f565b60006020828403121561188257600080fd5b6107ac826115cd565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561191257835163ffffffff16835292840192918401916001016118f0565b50909695505050505050565b604051601f8201601f191681016001600160401b038111828210171561194657611946611b01565b604052919050565b60006001600160401b0382111561196757611967611b01565b5060051b60200190565b6000821982111561198457611984611abf565b500190565b60008261199857611998611ad5565b600160ff1b8214600019841416156119b2576119b2611abf565b500590565b6000826119c6576119c6611ad5565b500490565b60008160001904831182151516156119e5576119e5611abf565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615611a1557611a15611abf565b81667fffffffffffff018313811615611a3057611a30611abf565b5090039392505050565b600082821015611a4c57611a4c611abf565b500390565b600082611a6057611a60611ad5565b500690565b60008160020b627fffff19811415611a7f57611a7f611abf565b60000392915050565b6000600160ff1b821415611a9e57611a9e611abf565b5060000390565b60008160060b667fffffffffffff19811415611a7f57611a7f5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611b2c57600080fd5b50565b8060060b8114611b2c57600080fdfea264697066735822122004c0a010ceffd8e7db3c26c049c2c7972b37fcac1edac6ccf38a411c856f238464736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x19B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5CF24969 GT PUSH2 0xEA JUMPI DUP1 PUSH4 0x5CF24969 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x696A437B EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x319 JUMPI DUP1 PUSH4 0x8561579C EQ PUSH2 0x346 JUMPI DUP1 PUSH4 0x9AAAD679 EQ PUSH2 0x34F JUMPI DUP1 PUSH4 0xA0D27107 EQ PUSH2 0x374 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0xAB5DCE00 EQ PUSH2 0x39A JUMPI DUP1 PUSH4 0xAB8CEDC5 EQ PUSH2 0x3AD JUMPI DUP1 PUSH4 0xB2E0DF96 EQ PUSH2 0x3C0 JUMPI DUP1 PUSH4 0xB93F5AF0 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0xC84993AF EQ PUSH2 0x3E6 JUMPI DUP1 PUSH4 0xCA4F2803 EQ PUSH2 0x3F9 JUMPI DUP1 PUSH4 0xDC686D91 EQ PUSH2 0x41A JUMPI DUP1 PUSH4 0xED1BD76C EQ PUSH2 0x452 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x465 JUMPI DUP1 PUSH4 0xFE10D774 EQ PUSH2 0x478 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5E0B9A0 EQ PUSH2 0x1A0 JUMPI DUP1 PUSH4 0xC525835 EQ PUSH2 0x1D1 JUMPI DUP1 PUSH4 0x117CFC1B EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x200 JUMPI DUP1 PUSH4 0x2248E82D EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x25F09E61 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0x2742B9E7 EQ PUSH2 0x245 JUMPI DUP1 PUSH4 0x289ADB44 EQ PUSH2 0x24E JUMPI DUP1 PUSH4 0x37090C2F EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0x3CC7AB30 EQ PUSH2 0x26A JUMPI DUP1 PUSH4 0x3FACF242 EQ PUSH2 0x27D JUMPI DUP1 PUSH4 0x435B21C1 EQ PUSH2 0x286 JUMPI DUP1 PUSH4 0x46860698 EQ PUSH2 0x2B4 JUMPI DUP1 PUSH4 0x516C3323 EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x2DA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1BB PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C8 SWAP2 SWAP1 PUSH2 0x188B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1E4 PUSH2 0x1DF CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0x48B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x1BB SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x20E CALLDATASIZE PUSH1 0x4 PUSH2 0x15E6 JUMP JUMPDEST PUSH2 0x4F2 JUMP JUMPDEST PUSH2 0x226 PUSH2 0x221 CALLDATASIZE PUSH1 0x4 PUSH2 0x16D3 JUMP JUMPDEST PUSH2 0x56D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C8 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x5A0 JUMP JUMPDEST PUSH2 0x226 PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0x226 PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x25C CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0x62C JUMP JUMPDEST PUSH2 0x226 PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x278 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E6 JUMP JUMPDEST PUSH2 0x68C JUMP JUMPDEST PUSH2 0x226 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x299 PUSH2 0x294 CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0x717 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x1C8 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x2C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0x226 PUSH2 0x2D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0x745 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x1BB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x226 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x309 PUSH2 0x304 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E6 JUMP JUMPDEST PUSH2 0x7B3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C8 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0x338 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C8 SWAP3 SWAP2 SWAP1 PUSH2 0x18B9 JUMP JUMPDEST PUSH2 0x226 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x35F SWAP1 PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C8 JUMP JUMPDEST PUSH2 0x226 PUSH2 0x382 CALLDATASIZE PUSH1 0x4 PUSH2 0x1849 JUMP JUMPDEST PUSH2 0x839 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x395 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E6 JUMP JUMPDEST PUSH2 0x875 JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x3A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0x8EB JUMP JUMPDEST PUSH2 0x226 PUSH2 0x3BB CALLDATASIZE PUSH1 0x4 PUSH2 0x17CA JUMP JUMPDEST PUSH2 0x94B JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x3CE CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0x9EF JUMP JUMPDEST PUSH2 0x1E4 PUSH2 0x3E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1870 JUMP JUMPDEST PUSH2 0xA4F JUMP JUMPDEST PUSH2 0x226 PUSH2 0x3F4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0xAC2 JUMP JUMPDEST PUSH2 0x40C PUSH2 0x407 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E6 JUMP JUMPDEST PUSH2 0xAD4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C8 SWAP3 SWAP2 SWAP1 PUSH2 0x189F JUMP JUMPDEST PUSH2 0x42D PUSH2 0x428 CALLDATASIZE PUSH1 0x4 PUSH2 0x1620 JUMP JUMPDEST PUSH2 0xBC2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x6 SWAP5 DUP6 SIGNEXTEND DUP2 MSTORE SWAP3 SWAP1 SWAP4 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE ISZERO ISZERO SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD PUSH2 0x1C8 JUMP JUMPDEST PUSH2 0x226 PUSH2 0x460 CALLDATASIZE PUSH1 0x4 PUSH2 0x1817 JUMP JUMPDEST PUSH2 0xCCD JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1BB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x226 PUSH2 0x486 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E6 JUMP JUMPDEST PUSH2 0xE28 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4B6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x919FDAAAC0F59C6BC7EEEF4F975D6163475220F1E4820D0BCE99C84C51CAC1D SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x51D JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x526 DUP2 PUSH2 0xEC6 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH32 0x554C636366D5FC882A9AB4B7B9D5181781D1A7076ABE50ED410365620DCF4108 SWAP2 PUSH2 0x4E7 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 PUSH2 0x18B9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x57C PUSH2 0x2D5 DUP6 PUSH2 0xE28 JUMP JUMPDEST SWAP1 POP PUSH2 0x598 PUSH2 0x2710 PUSH2 0x58E DUP4 DUP7 PUSH2 0x19CB JUMP JUMPDEST PUSH2 0x460 SWAP2 SWAP1 PUSH2 0x19B7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x622 SWAP2 PUSH2 0x188B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x657 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xED847BDBAB1A30BECEE18585F23C759BD06156561390D2E7FBFFD18E74B56C9B SWAP1 PUSH1 0x20 ADD PUSH2 0x4E7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6B7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x20 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND DUP3 MUL SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xCF744E4FC39D49B6D8103035078629B8A3BE95ADC007B0D663E96BDFF777B10A SWAP4 PUSH2 0x4E7 SWAP4 SWAP3 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 PUSH2 0x188B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x72D PUSH8 0xDE0B6B3A7640000 PUSH2 0xCCD JUMP JUMPDEST SWAP2 POP PUSH2 0x738 DUP5 PUSH2 0x745 JUMP JUMPDEST PUSH1 0x5 SLOAD SWAP1 SWAP6 SWAP3 SWAP5 POP SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x753 DUP3 PUSH1 0x4 SLOAD PUSH2 0x1070 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 PUSH2 0x797 PUSH1 0x2 SLOAD PUSH1 0x4 SLOAD DUP6 PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH2 0x771 SWAP2 SWAP1 PUSH2 0x1A3A JUMP JUMPDEST PUSH2 0x77B SWAP2 SWAP1 PUSH2 0x19CB JUMP JUMPDEST PUSH2 0x785 SWAP2 SWAP1 PUSH2 0x19B7 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x792 SWAP2 SWAP1 PUSH2 0x1971 JUMP JUMPDEST PUSH2 0x1086 JUMP JUMPDEST SWAP1 POP PUSH2 0x7A2 PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x7AC SWAP1 DUP3 PUSH2 0x19CB JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x7C1 DUP5 PUSH2 0xAD4 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 EQ ISZERO PUSH2 0x7F5 JUMPI POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 EQ PUSH2 0x832 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7D7C8F27 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x852 PUSH2 0x84D DUP5 PUSH1 0x6 DUP8 SWAP1 SIGNEXTEND PUSH2 0x1989 JUMP JUMPDEST PUSH2 0x1096 JUMP JUMPDEST SWAP1 POP PUSH2 0x86C PUSH1 0x1 PUSH1 0x60 SHL DUP7 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x14A4 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8A0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x4E7 SWAP1 DUP4 SWAP1 PUSH2 0x188B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x916 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xEAC367D684B6AC6C6AE7E3E852C06F17E6354E0F1E7122832C3E6D17E0A2B71E SWAP1 PUSH1 0x20 ADD PUSH2 0x4E7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x95F PUSH2 0x84D DUP5 PUSH1 0x6 DUP8 SWAP1 SIGNEXTEND PUSH2 0x1989 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND GT PUSH2 0x9AF JUMPI PUSH1 0x0 PUSH2 0x98D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 PUSH2 0x19CB JUMP JUMPDEST SWAP1 POP PUSH2 0x9A7 PUSH1 0x1 PUSH1 0xC0 SHL DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP4 PUSH2 0x14A4 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x9E7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9C9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 PUSH1 0x1 PUSH1 0x40 SHL PUSH2 0x14A4 JUMP JUMPDEST SWAP1 POP PUSH2 0x9E3 PUSH1 0x1 PUSH1 0x80 SHL DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP4 PUSH2 0x14A4 JUMP JUMPDEST SWAP3 POP POP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA1A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xA1292B4E7A0D916CCFD2BC83858B05F328E344D1F0F507D97AC66723AC7C2AAA SWAP1 PUSH1 0x20 ADD PUSH2 0x4E7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA7A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC806E26FB64E3A95F4B70ABF4D87280555696244D01068B5F45B0E515ACEB1DE SWAP1 PUSH1 0x20 ADD PUSH2 0x4E7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xACE ORIGIN DUP4 PUSH2 0x56D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB24 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB48 SWAP2 SWAP1 PUSH2 0x1603 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB95 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBB9 SWAP2 SWAP1 PUSH2 0x1603 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x883BDBFD DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBF3 SWAP2 SWAP1 PUSH2 0x18D4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0xC40 JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xC3D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x16FF JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0xC7A JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0xC6E JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC73 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP PUSH2 0xCC6 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xC8D JUMPI PUSH2 0xC8D PUSH2 0x1AEB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP5 POP PUSH1 0x1 DUP3 MLOAD GT ISZERO PUSH2 0xCBF JUMPI DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xCB4 JUMPI PUSH2 0xCB4 PUSH2 0x1AEB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP4 POP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP PUSH1 0x6 SLOAD DUP3 MLOAD SWAP3 SWAP4 POP PUSH4 0xFFFFFFFF AND SWAP2 DUP4 SWAP2 POP PUSH1 0x1 SWAP1 DUP2 LT PUSH2 0xD11 JUMPI PUSH2 0xD11 PUSH2 0x1AEB JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x883BDBFD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x883BDBFD SWAP1 PUSH2 0xD57 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x18D4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD83 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xDAB SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x16FF JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xDC3 JUMPI PUSH2 0xDC3 PUSH2 0x1AEB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xDDE JUMPI PUSH2 0xDDE PUSH2 0x1AEB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xDF0 SWAP2 SWAP1 PUSH2 0x19EA JUMP JUMPDEST PUSH1 0x7 SLOAD SWAP1 SWAP2 POP PUSH2 0x86C SWAP1 DUP7 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xE18 JUMPI PUSH2 0xE13 DUP4 PUSH2 0x1AA5 JUMP JUMPDEST PUSH2 0xE1A JUMP JUMPDEST DUP3 JUMPDEST PUSH1 0x6 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x94B JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA39744B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xA39744B5 SWAP1 PUSH2 0xE76 SWAP1 DUP6 SWAP1 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 SWAP1 PUSH1 0x4 ADD PUSH2 0x189F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xACE SWAP2 SWAP1 PUSH2 0x1830 JUMP JUMPDEST PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF33 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF57 SWAP2 SWAP1 PUSH2 0x1603 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH1 0x0 PUSH20 0x1CEB5CB57C4D4E2B2433641B95DD330A33185A44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFD0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFF4 SWAP2 SWAP1 PUSH2 0x1603 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP DUP2 ISZERO DUP1 ISZERO PUSH2 0x100C JUMPI POP DUP1 ISZERO JUMPDEST ISZERO PUSH2 0x102A JUMPI PUSH1 0x40 MLOAD PUSH4 0x7C395FED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP1 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND SWAP1 SWAP2 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x107F JUMPI DUP2 PUSH2 0x7AC JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT ISZERO PUSH2 0x107F JUMPI DUP2 PUSH2 0x7AC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH2 0x10AD JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0x10BA JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0x10BA SWAP1 PUSH2 0x1A88 JUMP JUMPDEST SWAP1 POP PUSH2 0x10C9 PUSH3 0xD89E7 NOT PUSH2 0x1A65 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH2 0x1103 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH2 0x1117 JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH2 0x1129 JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH2 0x115E JUMPI PUSH1 0x80 PUSH2 0x1159 DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH2 0x1188 JUMPI PUSH1 0x80 PUSH2 0x1183 DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH2 0x11B2 JUMPI PUSH1 0x80 PUSH2 0x11AD DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH2 0x11DC JUMPI PUSH1 0x80 PUSH2 0x11D7 DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH2 0x1206 JUMPI PUSH1 0x80 PUSH2 0x1201 DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH2 0x1230 JUMPI PUSH1 0x80 PUSH2 0x122B DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH2 0x125A JUMPI PUSH1 0x80 PUSH2 0x1255 DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH2 0x1285 JUMPI PUSH1 0x80 PUSH2 0x1280 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH2 0x12B0 JUMPI PUSH1 0x80 PUSH2 0x12AB DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH2 0x12DB JUMPI PUSH1 0x80 PUSH2 0x12D6 DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH2 0x1306 JUMPI PUSH1 0x80 PUSH2 0x1301 DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH2 0x1331 JUMPI PUSH1 0x80 PUSH2 0x132C DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH2 0x135C JUMPI PUSH1 0x80 PUSH2 0x1357 DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH2 0x1387 JUMPI PUSH1 0x80 PUSH2 0x1382 DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH2 0x13B2 JUMPI PUSH1 0x80 PUSH2 0x13AD DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH2 0x13DE JUMPI PUSH1 0x80 PUSH2 0x13D9 DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH2 0x1409 JUMPI PUSH1 0x80 PUSH2 0x1404 DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH2 0x1433 JUMPI PUSH1 0x80 PUSH2 0x142E DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH2 0x145B JUMPI PUSH1 0x80 PUSH2 0x1456 DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH2 0x19CB JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH2 0x1476 JUMPI PUSH2 0x1473 DUP2 PUSH1 0x0 NOT PUSH2 0x19B7 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x1484 PUSH1 0x1 PUSH1 0x20 SHL DUP3 PUSH2 0x1A51 JUMP JUMPDEST ISZERO PUSH2 0x1490 JUMPI PUSH1 0x1 PUSH2 0x1493 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x598 SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH2 0x1971 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x14DE JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x14D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x7AC JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x14EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 PUSH2 0x1578 PUSH2 0x1573 DUP4 PUSH2 0x194E JUMP JUMPDEST PUSH2 0x191E JUMP JUMPDEST DUP1 DUP4 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 POP DUP3 DUP7 ADD DUP8 DUP5 DUP7 PUSH1 0x5 SHL DUP10 ADD ADD GT ISZERO PUSH2 0x1598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x15C0 JUMPI DUP2 MLOAD PUSH2 0x15AE DUP2 PUSH2 0x1B17 JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x159B JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x15E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x15F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x7AC DUP2 PUSH2 0x1B17 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1615 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x7AC DUP2 PUSH2 0x1B17 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x163E DUP2 PUSH2 0x1B17 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 DUP2 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x165A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 ADD PUSH1 0x1F DUP2 ADD DUP7 SGT PUSH2 0x166B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1679 PUSH2 0x1573 DUP3 PUSH2 0x194E JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE DUP5 DUP3 ADD SWAP2 POP DUP5 DUP5 ADD DUP10 DUP7 DUP6 PUSH1 0x5 SHL DUP8 ADD ADD GT ISZERO PUSH2 0x1699 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP5 POP JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x16C3 JUMPI PUSH2 0x16AF DUP2 PUSH2 0x15CD JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 SWAP2 DUP6 ADD SWAP2 DUP6 ADD PUSH2 0x169E JUMP JUMPDEST POP DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x16E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x16F1 DUP2 PUSH2 0x1B17 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1712 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x1729 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x173D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 PUSH2 0x174D PUSH2 0x1573 DUP4 PUSH2 0x194E JUMP JUMPDEST DUP1 DUP4 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 POP DUP3 DUP7 ADD DUP11 DUP5 DUP7 PUSH1 0x5 SHL DUP10 ADD ADD GT ISZERO PUSH2 0x176D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP7 POP JUMPDEST DUP5 DUP8 LT ISZERO PUSH2 0x1799 JUMPI DUP1 MLOAD PUSH2 0x1785 DUP2 PUSH2 0x1B2F JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x1772 JUMP JUMPDEST POP SWAP2 DUP9 ADD MLOAD SWAP2 SWAP7 POP SWAP1 SWAP4 POP POP POP DUP1 DUP3 GT ISZERO PUSH2 0x17B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x17C0 DUP6 DUP3 DUP7 ADD PUSH2 0x1552 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x17DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x17F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1806 DUP2 PUSH2 0x1B2F JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1829 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1842 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x185E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1806 DUP2 PUSH2 0x1B2F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1882 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7AC DUP3 PUSH2 0x15CD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1912 JUMPI DUP4 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x18F0 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1946 JUMPI PUSH2 0x1946 PUSH2 0x1B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x1967 JUMPI PUSH2 0x1967 PUSH2 0x1B01 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1984 JUMPI PUSH2 0x1984 PUSH2 0x1ABF JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1998 JUMPI PUSH2 0x1998 PUSH2 0x1AD5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ PUSH1 0x0 NOT DUP5 EQ AND ISZERO PUSH2 0x19B2 JUMPI PUSH2 0x19B2 PUSH2 0x1ABF JUMP JUMPDEST POP SDIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x19C6 JUMPI PUSH2 0x19C6 PUSH2 0x1AD5 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x19E5 JUMPI PUSH2 0x19E5 PUSH2 0x1ABF JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x1A15 JUMPI PUSH2 0x1A15 PUSH2 0x1ABF JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x1A30 JUMPI PUSH2 0x1A30 PUSH2 0x1ABF JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1A4C JUMPI PUSH2 0x1A4C PUSH2 0x1ABF JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1A60 JUMPI PUSH2 0x1A60 PUSH2 0x1AD5 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH2 0x1A7F JUMPI PUSH2 0x1A7F PUSH2 0x1ABF JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH2 0x1A9E JUMPI PUSH2 0x1A9E PUSH2 0x1ABF JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x1A7F JUMPI PUSH2 0x1A7F JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1B2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 PUSH1 0x6 SIGNEXTEND DUP2 EQ PUSH2 0x1B2C JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DIV 0xC0 LOG0 LT 0xCE SELFDESTRUCT 0xD8 0xE7 0xDB EXTCODECOPY 0x26 0xC0 0x49 0xC2 0xC7 SWAP8 0x2B CALLDATACOPY 0xFC 0xAC 0x1E 0xDA 0xC6 0xCC RETURN DUP11 COINBASE SHR DUP6 PUSH16 0x238464736F6C63430008070033000000 ",
              "sourceMap": "106:342:49:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;588:82:19;;628:42;588:82;;;;;;;;;:::i;:::-;;;;;;;;1890:139;;;;;;:::i;:::-;;:::i;:::-;;1273:32;;;;;-1:-1:-1;;;1273:32:19;;-1:-1:-1;;;;;1273:32:19;;;1641:203;;;;;;:::i;:::-;;:::i;3442:222:18:-;;;;;;:::i;:::-;;:::i;:::-;;;7945:25:84;;;7933:2;7918:18;3442:222:18;7799:177:84;680:175:28;;;:::i;717:52:19:-;;763:6;717:52;;992:46;;;;;;2642:163;;;;;;:::i;:::-;;:::i;904:41::-;;;;;;2457:139;;;;;;:::i;:::-;;:::i;1085:45::-;;;;;;5357:277:18;;;;;;:::i;:::-;;:::i;:::-;;;;8183:25:84;;;8239:2;8224:18;;8217:34;;;;8267:18;;;8260:34;8171:2;8156:18;5357:277:18;7981:319:84;370:76:49;;;;;;:::i;:::-;423:7;:18;370:76;3934:281:18;;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;-1:-1:-1;;;;;199:34:28;;;155:22:49;;;;;;4471:304:18;;;;;;:::i;:::-;;:::i;:::-;;;7087:14:84;;7080:22;7062:41;;7050:2;7035:18;4471:304:18;6922:187:84;1352:65:19;;;;;-1:-1:-1;;;;;1352:65:19;;;-1:-1:-1;;;1352:65:19;;;;;;;;;;;;;;:::i;816:41::-;;;;;;1177:49;;;;;;;;;;;;8479:10:84;8467:23;;;8449:42;;8437:2;8422:18;1177:49:19;8305:192:84;5670:348:18;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;2260:151:19:-;;;;;;:::i;:::-;;:::i;6054:621:18:-;;;;;;:::i;:::-;;:::i;2075:139:19:-;;;;;;:::i;:::-;;:::i;2851:168::-;;;;;;:::i;:::-;;:::i;3700:198:18:-;;;;;;:::i;:::-;;:::i;4251:184::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4811:510::-;;;;;;:::i;:::-;;:::i;:::-;;;;7331:1:84;7320:21;;;7302:40;;7378:21;;;;7373:2;7358:18;;7351:49;7443:14;7436:22;7416:18;;;7409:50;;;;7290:2;7275:18;4811:510:18;7114:351:84;2763:466:18;;;;;;:::i;:::-;;:::i;268:41:28:-;;;;;-1:-1:-1;;;;;268:41:28;;;3265:141:18;;;;;;:::i;:::-;;:::i;1890:139:19:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1969:8:19::1;:20:::0;;;2000:24:::1;::::0;7945:25:84;;;2000:24:19::1;::::0;7933:2:84;7918:18;2000:24:19::1;;;;;;;;1890:139:::0;:::o;1641:203::-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1727:30:19::1;1744:12;1727:16;:30::i;:::-;1787:12;:24:::0;1768:71:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;1787:24:19;::::1;::::0;-1:-1:-1;;;1813:25:19;::::1;;;::::0;1768:71:::1;:::i;3442:222:18:-:0;3535:13;3556:14;3573:33;3591:14;3597:7;3591:5;:14::i;3573:33::-;3556:50;-1:-1:-1;3620:39:18;763:6:19;3627:17:18;3556:50;3627:8;:17;:::i;:::-;3626:32;;;;:::i;3620:39::-;3612:47;3442:222;-1:-1:-1;;;;3442:222:18:o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;::::1;754:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;2642:163:19:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2729:12:19::1;:28:::0;;;2768:32:::1;::::0;7945:25:84;;;2768:32:19::1;::::0;7933:2:84;7918:18;2768:32:19::1;7799:177:84::0;2457:139:19;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2536:8:19::1;:20:::0;;-1:-1:-1;;;;;;;;2536:20:19::1;-1:-1:-1::0;;;;;;;;2536:20:19;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;2567:24:::1;::::0;::::1;::::0;::::1;::::0;2582:8;;::::1;::::0;;::::1;::::0;2567:24:::1;:::i;5357:277:18:-:0;5454:14;5476:20;5504:14;5548;5554:7;5548:5;:14::i;:::-;5533:29;;5577:25;5595:6;5577:17;:25::i;:::-;5617:12;;5568:34;;5357:277;;-1:-1:-1;5617:12:18;-1:-1:-1;;5357:277:18:o;3934:281::-;4007:20;4044:28;4053:6;4061:10;;4044:8;:28::i;:::-;4035:37;;4078:12;4093:76;4102:8;;4158:10;;4148:6;4136:8;;4125;;:19;;;;:::i;:::-;4124:30;;;;:::i;:::-;4123:45;;;;:::i;:::-;4112:8;;:56;;;;:::i;:::-;4093:8;:76::i;:::-;4078:91;;4197:13;354:7:49;;;277:89;4197:13:18;4190:20;;:4;:20;:::i;:::-;4175:35;3934:281;-1:-1:-1;;;3934:281:18:o;4471:304::-;4538:18;4564:15;4585;4627:20;4641:5;4627:13;:20::i;:::-;4606:41;;-1:-1:-1;4606:41:18;-1:-1:-1;;;;;;4657:15:18;;628:42:19;4657:15:18;4653:118;;;-1:-1:-1;4689:4:18;;4471:304;-1:-1:-1;;;4471:304:18:o;4653:118::-;-1:-1:-1;;;;;4710:15:18;;628:42:19;4710:15:18;4706:65;;4742:22;;-1:-1:-1;;;4742:22:18;;;;;;;;;;;4706:65;4558:217;;4471:304;;;:::o;5670:348::-;5812:19;;5862:75;5896:39;5921:13;5896:39;;;;;:::i;:::-;5862:27;:75::i;:::-;5839:98;;5957:56;-1:-1:-1;;;5982:16:18;6000:12;-1:-1:-1;;;;;5957:56:18;:15;:56::i;:::-;5943:70;5670:348;-1:-1:-1;;;;;5670:348:18:o;485:161:28:-;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;2260:151:19:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2343:10:19::1;:24:::0;;;2378:28:::1;::::0;7945:25:84;;;2378:28:19::1;::::0;7933:2:84;7918:18;2378:28:19::1;7799:177:84::0;6054:621:18;6191:20;;6242:75;6276:39;6301:13;6276:39;;;;;:::i;6242:75::-;6219:98;-1:-1:-1;;;;;;;;;;;6328:33:18;;;6324:347;;6371:17;6391:36;-1:-1:-1;;;;;6391:36:18;;;;:::i;:::-;6371:56;;6450:49;-1:-1:-1;;;6476:11:18;-1:-1:-1;;;;;6450:49:18;6489:9;6450:15;:49::i;:::-;6435:64;;6363:143;6324:347;;;6520:17;6540:52;-1:-1:-1;;;;;6540:52:18;;;-1:-1:-1;;;6540:15:18;:52::i;:::-;6520:72;;6615:49;-1:-1:-1;;;6641:11:18;-1:-1:-1;;;;;6615:49:18;6654:9;6615:15;:49::i;:::-;6600:64;;6512:159;6324:347;6213:462;6054:621;;;;;:::o;2075:139:19:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2154:8:19::1;:20:::0;;;2185:24:::1;::::0;7945:25:84;;;2185:24:19::1;::::0;7933:2:84;7918:18;2185:24:19::1;7799:177:84::0;2851:168:19;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;2939:13:19::1;:30:::0;;-1:-1:-1;;2939:30:19::1;;::::0;::::1;::::0;;::::1;::::0;;;2980:34:::1;::::0;8449:42:84;;;2980:34:19::1;::::0;8437:2:84;8422:18;2980:34:19::1;8305:192:84::0;3700:198:18;3775:15;3854:39;3873:9;3884:8;3854:18;:39::i;:::-;3847:46;3700:198;-1:-1:-1;;3700:198:18:o;4251:184::-;4319:15;4336;4382:5;-1:-1:-1;;;;;4367:28:18;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4414:5;-1:-1:-1;;;;;4399:28:18;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4359:71;;;;4251:184;;;:::o;4811:510::-;4925:22;4955;4985:13;5032:5;-1:-1:-1;;;;;5017:29:18;;5047:11;5017:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5017:42:18;;;;;;;;;;;;:::i;:::-;;;5013:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5294:23;5013:304;;;5147:16;5164:1;5147:19;;;;;;;;:::i;:::-;;;;;;;5128:38;;5204:1;5178:16;:23;:27;5174:90;;;5236:16;5253:1;5236:19;;;;;;;;:::i;:::-;;;;;;;5217:38;;5174:90;5282:4;5271:15;;5060:233;;5013:304;4811:510;;;;;:::o;2763:466::-;2879:15;;;2892:1;2879:15;;;;;;;;2822:18;;;;2879:15;2892:1;2879:15;;;;;;;;-1:-1:-1;;2918:13:18;;2900:15;;;;-1:-1:-1;2918:13:18;;;2900:15;;-1:-1:-1;2918:13:18;;2900:15;;;;;;:::i;:::-;:31;;;;:15;;;;;;;;;;;:31;2991:12;:24;2976:62;;-1:-1:-1;;;2976:62:18;;2939:31;;-1:-1:-1;;;;;2991:24:18;;2976:48;;:62;;3025:12;;2976:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2976:62:18;;;;;;;;;;;;:::i;:::-;2938:100;;;3044:17;3086:16;3103:1;3086:19;;;;;;;;:::i;:::-;;;;;;;3064:16;3081:1;3064:19;;;;;;;;:::i;:::-;;;;;;;:41;;;;:::i;:::-;3154:12;:25;3044:61;;-1:-1:-1;3124:100:18;;3147:4;;-1:-1:-1;;;3154:25:18;;;;:54;;3196:12;3197:11;3196:12;:::i;:::-;3154:54;;;3182:11;3154:54;3210:13;;;;3124:14;:100::i;3265:141::-;3371:8;;3363:38;;-1:-1:-1;;;3363:38:18;;3327:21;;-1:-1:-1;;;3371:8:18;;-1:-1:-1;;;;;3371:8:18;;3363:23;;:38;;3387:7;;628:42:19;;3371:8:18;3363:38;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3117:338:19:-;3180:18;628:42;-1:-1:-1;;;;;3201:45:19;3216:12;-1:-1:-1;;;;;3201:35:19;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3201:45:19;;3180:66;;3252:18;628:42;-1:-1:-1;;;;;3273:45:19;3288:12;-1:-1:-1;;;;;3273:35:19;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3273:45:19;;3252:66;;3330:13;3329:14;:32;;;;;3348:13;3347:14;3329:32;3325:62;;;3370:17;;-1:-1:-1;;;3370:17:19;;;;;;;;;;;3325:62;-1:-1:-1;3409:41:19;;;;;;;;;-1:-1:-1;;;;;3409:41:19;;;;;;;;;;;;;;;;;3394:12;:56;;-1:-1:-1;;;;;;3394:56:19;;;;-1:-1:-1;;;3394:56:19;;;;;;;;;3117:338::o;391:104:7:-;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:7;;468:20;-1:-1:-1;391:104:7:o;215:105::-;273:7;304:1;299;:6;;:14;;312:1;299:14;;1363:2473:26;1426:20;1454:15;1479:1;1472:4;:8;;;:57;;1523:4;1516:12;;1472:57;;;1499:4;1492:12;;1491:13;;;:::i;:::-;1454:75;-1:-1:-1;657:9:26;-1:-1:-1;;657:9:26;:::i;:::-;1562:16;;1543:7;:36;;1535:50;;;;-1:-1:-1;;;1535:50:26;;7672:2:84;1535:50:26;;;7654:21:84;7711:1;7691:18;;;7684:29;-1:-1:-1;;;7729:18:84;;;7722:31;7770:18;;1535:50:26;;;;;;;;1592:13;1618:3;1608:13;;:93;;-1:-1:-1;;;1608:93:26;;;1629:34;1608:93;-1:-1:-1;;;;;1592:109:26;;-1:-1:-1;1721:3:26;1711:13;;:18;1707:83;;1787:3;1740:42;:5;1748:34;1740:42;:::i;:::-;1739:51;;1731:59;;1707:83;1810:3;1800:13;;:18;1796:83;;1876:3;1829:42;:5;1837:34;1829:42;:::i;:::-;1828:51;;1820:59;;1796:83;1899:3;1889:13;;:18;1885:83;;1965:3;1918:42;:5;1926:34;1918:42;:::i;:::-;1917:51;;1909:59;;1885:83;1988:4;1978:14;;:19;1974:84;;2055:3;2008:42;:5;2016:34;2008:42;:::i;:::-;2007:51;;1999:59;;1974:84;2078:4;2068:14;;:19;2064:84;;2145:3;2098:42;:5;2106:34;2098:42;:::i;:::-;2097:51;;2089:59;;2064:84;2168:4;2158:14;;:19;2154:84;;2235:3;2188:42;:5;2196:34;2188:42;:::i;:::-;2187:51;;2179:59;;2154:84;2258:4;2248:14;;:19;2244:84;;2325:3;2278:42;:5;2286:34;2278:42;:::i;:::-;2277:51;;2269:59;;2244:84;2348:5;2338:15;;:20;2334:85;;2416:3;2369:42;:5;2377:34;2369:42;:::i;:::-;2368:51;;2360:59;;2334:85;2439:5;2429:15;;:20;2425:85;;2507:3;2460:42;:5;2468:34;2460:42;:::i;:::-;2459:51;;2451:59;;2425:85;2530:5;2520:15;;:20;2516:85;;2598:3;2551:42;:5;2559:34;2551:42;:::i;:::-;2550:51;;2542:59;;2516:85;2621:5;2611:15;;:20;2607:85;;2689:3;2642:42;:5;2650:34;2642:42;:::i;:::-;2641:51;;2633:59;;2607:85;2712:6;2702:16;;:21;2698:86;;2781:3;2734:42;:5;2742:34;2734:42;:::i;:::-;2733:51;;2725:59;;2698:86;2804:6;2794:16;;:21;2790:86;;2873:3;2826:42;:5;2834:34;2826:42;:::i;:::-;2825:51;;2817:59;;2790:86;2896:6;2886:16;;:21;2882:86;;2965:3;2918:42;:5;2926:34;2918:42;:::i;:::-;2917:51;;2909:59;;2882:86;2988:6;2978:16;;:21;2974:86;;3057:3;3010:42;:5;3018:34;3010:42;:::i;:::-;3009:51;;3001:59;;2974:86;3080:7;3070:17;;:22;3066:86;;3149:3;3103:41;:5;3111:33;3103:41;:::i;:::-;3102:50;;3094:58;;3066:86;3172:7;3162:17;;:22;3158:85;;3240:3;3195:40;:5;3203:32;3195:40;:::i;:::-;3194:49;;3186:57;;3158:85;3263:7;3253:17;;:22;3249:83;;3329:3;3286:38;:5;3294:30;3286:38;:::i;:::-;3285:47;;3277:55;;3249:83;3352:7;3342:17;;:22;3338:78;;3413:3;3375:33;:5;3383:25;3375:33;:::i;:::-;3374:42;;3366:50;;3338:78;3434:1;3427:4;:8;;;3423:47;;;3445:25;3465:5;-1:-1:-1;;3445:25:26;:::i;:::-;3437:33;;3423:47;3799:17;-1:-1:-1;;;3799:5:26;:17;:::i;:::-;:22;:30;;3828:1;3799:30;;;3824:1;3799:30;3782:48;;;;3792:2;3783:11;;;3782:48;:::i;735:3600:23:-;833:14;;;-1:-1:-1;;1336:1:23;1333;1326:20;1371:1;1368;1364:9;1355:18;;1418:5;1414:2;1411:13;1403:5;1399:2;1395:14;1391:34;1382:43;;;1501:5;1510:1;1501:10;1497:155;;;1545:1;1531:11;:15;1523:24;;;;;;-1:-1:-1;1588:23:23;;;;-1:-1:-1;1630:13:23;;1497:155;1773:5;1759:11;:19;1751:28;;;;;;2044:17;2114:11;2111:1;2108;2101:25;3338:1;3319;2473;2458:12;;:16;;2457:32;;2575:22;;;;3319:15;;;3318:21;;3557:17;;;3553:21;;3546:28;3613:17;;;3609:21;;3602:28;3670:17;;;3666:21;;3659:28;3727:17;;;3723:21;;3716:28;3784:17;;;3780:21;;3773:28;3842:17;;;3838:21;;;3831:28;2442:12;2923;;;2919:23;;;2915:31;;;2233:20;;;2222:32;;;2970:12;;;;2272:21;;2693:16;;;;2961:21;;;;4292:11;;735:3600;-1:-1:-1;;;;735:3600:23:o;14:743:84:-;79:5;132:3;125:4;117:6;113:17;109:27;99:55;;150:1;147;140:12;99:55;179:6;173:13;205:4;229:58;245:41;283:2;245:41;:::i;:::-;229:58;:::i;:::-;309:3;333:2;328:3;321:15;361:2;356:3;352:12;345:19;;396:2;388:6;384:15;448:3;443:2;437;434:1;430:10;422:6;418:23;414:32;411:41;408:61;;;465:1;462;455:12;408:61;487:1;497:231;511:2;508:1;505:9;497:231;;;575:3;569:10;592:31;617:5;592:31;:::i;:::-;636:18;;674:12;;;;706;;;;529:1;522:9;497:231;;;-1:-1:-1;746:5:84;;14:743;-1:-1:-1;;;;;;;14:743:84:o;762:163::-;829:20;;889:10;878:22;;868:33;;858:61;;915:1;912;905:12;858:61;762:163;;;:::o;930:247::-;989:6;1042:2;1030:9;1021:7;1017:23;1013:32;1010:52;;;1058:1;1055;1048:12;1010:52;1097:9;1084:23;1116:31;1141:5;1116:31;:::i;1182:251::-;1252:6;1305:2;1293:9;1284:7;1280:23;1276:32;1273:52;;;1321:1;1318;1311:12;1273:52;1353:9;1347:16;1372:31;1397:5;1372:31;:::i;1438:1039::-;1530:6;1538;1591:2;1579:9;1570:7;1566:23;1562:32;1559:52;;;1607:1;1604;1597:12;1559:52;1646:9;1633:23;1665:31;1690:5;1665:31;:::i;:::-;1715:5;-1:-1:-1;1739:2:84;1777:18;;;1764:32;-1:-1:-1;;;;;1808:30:84;;1805:50;;;1851:1;1848;1841:12;1805:50;1874:22;;1927:4;1919:13;;1915:27;-1:-1:-1;1905:55:84;;1956:1;1953;1946:12;1905:55;1992:2;1979:16;2015:58;2031:41;2069:2;2031:41;:::i;2015:58::-;2095:3;2119:2;2114:3;2107:15;2147:2;2142:3;2138:12;2131:19;;2178:2;2174;2170:11;2226:7;2221:2;2215;2212:1;2208:10;2204:2;2200:19;2196:28;2193:41;2190:61;;;2247:1;2244;2237:12;2190:61;2269:1;2260:10;;2279:168;2293:2;2290:1;2287:9;2279:168;;;2350:22;2368:3;2350:22;:::i;:::-;2338:35;;2311:1;2304:9;;;;;2393:12;;;;2425;;2279:168;;;2283:3;2466:5;2456:15;;;;;;;1438:1039;;;;;:::o;2482:315::-;2550:6;2558;2611:2;2599:9;2590:7;2586:23;2582:32;2579:52;;;2627:1;2624;2617:12;2579:52;2666:9;2653:23;2685:31;2710:5;2685:31;:::i;:::-;2735:5;2787:2;2772:18;;;;2759:32;;-1:-1:-1;;;2482:315:84:o;2802:1214::-;2929:6;2937;2990:2;2978:9;2969:7;2965:23;2961:32;2958:52;;;3006:1;3003;2996:12;2958:52;3039:9;3033:16;-1:-1:-1;;;;;3109:2:84;3101:6;3098:14;3095:34;;;3125:1;3122;3115:12;3095:34;3163:6;3152:9;3148:22;3138:32;;3208:7;3201:4;3197:2;3193:13;3189:27;3179:55;;3230:1;3227;3220:12;3179:55;3259:2;3253:9;3281:4;3305:58;3321:41;3359:2;3321:41;:::i;3305:58::-;3385:3;3409:2;3404:3;3397:15;3437:2;3432:3;3428:12;3421:19;;3468:2;3464;3460:11;3516:7;3511:2;3505;3502:1;3498:10;3494:2;3490:19;3486:28;3483:41;3480:61;;;3537:1;3534;3527:12;3480:61;3559:1;3550:10;;3569:229;3583:2;3580:1;3577:9;3569:229;;;3647:3;3641:10;3664:29;3687:5;3664:29;:::i;:::-;3706:18;;3601:1;3594:9;;;;;3744:12;;;;3776;;3569:229;;;-1:-1:-1;3853:18:84;;;3847:25;3817:5;;-1:-1:-1;3847:25:84;;-1:-1:-1;;;3884:16:84;;;3881:36;;;3913:1;3910;3903:12;3881:36;;3936:74;4002:7;3991:8;3980:9;3976:24;3936:74;:::i;:::-;3926:84;;;2802:1214;;;;;:::o;4021:491::-;4096:6;4104;4112;4165:2;4153:9;4144:7;4140:23;4136:32;4133:52;;;4181:1;4178;4171:12;4133:52;4207:23;;-1:-1:-1;;;;;4259:31:84;;4249:42;;4239:70;;4305:1;4302;4295:12;4239:70;4328:5;-1:-1:-1;4385:2:84;4370:18;;4357:32;4398:31;4357:32;4398:31;:::i;:::-;4021:491;;4448:7;;-1:-1:-1;;;4502:2:84;4487:18;;;;4474:32;;4021:491::o;4517:180::-;4576:6;4629:2;4617:9;4608:7;4604:23;4600:32;4597:52;;;4645:1;4642;4635:12;4597:52;-1:-1:-1;4668:23:84;;4517:180;-1:-1:-1;4517:180:84:o;4702:184::-;4772:6;4825:2;4813:9;4804:7;4800:23;4796:32;4793:52;;;4841:1;4838;4831:12;4793:52;-1:-1:-1;4864:16:84;;4702:184;-1:-1:-1;4702:184:84:o;4891:379::-;4966:6;4974;4982;5035:2;5023:9;5014:7;5010:23;5006:32;5003:52;;;5051:1;5048;5041:12;5003:52;5087:9;5074:23;5064:33;;5147:2;5136:9;5132:18;5119:32;5160:29;5183:5;5160:29;:::i;5275:184::-;5333:6;5386:2;5374:9;5365:7;5361:23;5357:32;5354:52;;;5402:1;5399;5392:12;5354:52;5425:28;5443:9;5425:28;:::i;5464:203::-;-1:-1:-1;;;;;5628:32:84;;;;5610:51;;5598:2;5583:18;;5464:203::o;5672:304::-;-1:-1:-1;;;;;5902:15:84;;;5884:34;;5954:15;;5949:2;5934:18;;5927:43;5834:2;5819:18;;5672:304::o;5981:284::-;-1:-1:-1;;;;;6167:32:84;;;;6149:51;;6243:14;6236:22;6231:2;6216:18;;6209:50;6137:2;6122:18;;5981:284::o;6270:647::-;6439:2;6491:21;;;6561:13;;6464:18;;;6583:22;;;6410:4;;6439:2;6662:15;;;;6636:2;6621:18;;;6410:4;6705:186;6719:6;6716:1;6713:13;6705:186;;;6784:13;;6799:10;6780:30;6768:43;;6866:15;;;;6831:12;;;;6741:1;6734:9;6705:186;;;-1:-1:-1;6908:3:84;;6270:647;-1:-1:-1;;;;;;6270:647:84:o;8502:275::-;8573:2;8567:9;8638:2;8619:13;;-1:-1:-1;;8615:27:84;8603:40;;-1:-1:-1;;;;;8658:34:84;;8694:22;;;8655:62;8652:88;;;8720:18;;:::i;:::-;8756:2;8749:22;8502:275;;-1:-1:-1;8502:275:84:o;8782:181::-;8840:4;-1:-1:-1;;;;;8865:6:84;8862:30;8859:56;;;8895:18;;:::i;:::-;-1:-1:-1;8940:1:84;8936:14;8952:4;8932:25;;8782:181::o;8968:128::-;9008:3;9039:1;9035:6;9032:1;9029:13;9026:39;;;9045:18;;:::i;:::-;-1:-1:-1;9081:9:84;;8968:128::o;9101:193::-;9140:1;9166;9156:35;;9171:18;;:::i;:::-;-1:-1:-1;;;9207:18:84;;-1:-1:-1;;9227:13:84;;9203:38;9200:64;;;9244:18;;:::i;:::-;-1:-1:-1;9278:10:84;;9101:193::o;9299:120::-;9339:1;9365;9355:35;;9370:18;;:::i;:::-;-1:-1:-1;9404:9:84;;9299:120::o;9424:168::-;9464:7;9530:1;9526;9522:6;9518:14;9515:1;9512:21;9507:1;9500:9;9493:17;9489:45;9486:71;;;9537:18;;:::i;:::-;-1:-1:-1;9577:9:84;;9424:168::o;9597:359::-;9635:4;9679:1;9676;9665:16;9715:1;9712;9701:16;9745:1;9740:3;9736:11;9811:3;9792:16;9788:21;9784:31;9779:3;9775:41;9770:2;9763:10;9759:58;9756:84;;;9820:18;;:::i;:::-;9891:3;9873:16;9869:26;9864:3;9860:36;9856:2;9852:45;9849:71;;;9900:18;;:::i;:::-;-1:-1:-1;9937:13:84;;;9597:359;-1:-1:-1;;;9597:359:84:o;9961:125::-;10001:4;10029:1;10026;10023:8;10020:34;;;10034:18;;:::i;:::-;-1:-1:-1;10071:9:84;;9961:125::o;10091:112::-;10123:1;10149;10139:35;;10154:18;;:::i;:::-;-1:-1:-1;10188:9:84;;10091:112::o;10208:184::-;10242:3;10289:5;10286:1;10275:20;10323:7;10319:12;10310:7;10307:25;10304:51;;;10335:18;;:::i;:::-;10375:1;10371:15;;10208:184;-1:-1:-1;;10208:184:84:o;10397:136::-;10432:3;-1:-1:-1;;;10453:22:84;;10450:48;;;10478:18;;:::i;:::-;-1:-1:-1;10518:1:84;10514:13;;10397:136::o;10538:193::-;10572:3;10619:5;10616:1;10605:20;10653:16;10649:21;10640:7;10637:34;10634:60;;;10674:18;10736:127;10797:10;10792:3;10788:20;10785:1;10778:31;10828:4;10825:1;10818:15;10852:4;10849:1;10842:15;10868:127;10929:10;10924:3;10920:20;10917:1;10910:31;10960:4;10957:1;10950:15;10984:4;10981:1;10974:15;11000:127;11061:10;11056:3;11052:20;11049:1;11042:31;11092:4;11089:1;11082:15;11116:4;11113:1;11106:15;11132:127;11193:10;11188:3;11184:20;11181:1;11174:31;11224:4;11221:1;11214:15;11248:4;11245:1;11238:15;11264:131;-1:-1:-1;;;;;11339:31:84;;11329:42;;11319:70;;11385:1;11382;11375:12;11319:70;11264:131;:::o;11400:118::-;11487:5;11484:1;11473:20;11466:5;11463:31;11453:59;;11508:1;11505;11498:12"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1405600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "BOOST_BASE()": "328",
                "KP3R()": "241",
                "acceptGovernance()": "51993",
                "basefee()": "2295",
                "bonds(address)": "infinite",
                "getKP3RsAtTick(uint256,int56,uint256)": "infinite",
                "getPaymentParams(uint256)": "infinite",
                "getPoolTokens(address)": "infinite",
                "getQuoteAtTick(uint128,int56,uint256)": "infinite",
                "getRewardAmount(uint256)": "infinite",
                "getRewardAmountFor(address,uint256)": "infinite",
                "getRewardBoostFor(uint256)": "infinite",
                "governance()": "2692",
                "isKP3RToken0(address)": "infinite",
                "keep3rV2()": "2423",
                "kp3rWethPool()": "2458",
                "maxBoost()": "2494",
                "minBoost()": "2361",
                "observe(address,uint32[])": "infinite",
                "pendingGovernance()": "2691",
                "quote(uint256)": "infinite",
                "quoteTwapTime()": "2401",
                "setBaseFee(uint256)": "22599",
                "setGovernance(address)": "27941",
                "setKeep3rV2(address)": "28088",
                "setKp3rWethPool(address)": "infinite",
                "setMaxBoost(uint256)": "25739",
                "setMinBoost(uint256)": "25553",
                "setQuoteTwapTime(uint32)": "27960",
                "setTargetBond(uint256)": "25695",
                "setWorkExtraGas(uint256)": "25718",
                "targetBond()": "2450",
                "workExtraGas()": "2538"
              },
              "internal": {
                "_getBasefee()": "infinite"
              }
            },
            "methodIdentifiers": {
              "BOOST_BASE()": "25f09e61",
              "KP3R()": "05e0b9a0",
              "acceptGovernance()": "238efcbc",
              "basefee()": "5cf24969",
              "bonds(address)": "fe10d774",
              "getKP3RsAtTick(uint256,int56,uint256)": "a0d27107",
              "getPaymentParams(uint256)": "435b21c1",
              "getPoolTokens(address)": "ca4f2803",
              "getQuoteAtTick(uint128,int56,uint256)": "ab8cedc5",
              "getRewardAmount(uint256)": "c84993af",
              "getRewardAmountFor(address,uint256)": "2248e82d",
              "getRewardBoostFor(uint256)": "516c3323",
              "governance()": "5aa6e675",
              "isKP3RToken0(address)": "696a437b",
              "keep3rV2()": "117cfc1b",
              "kp3rWethPool()": "7b40c913",
              "maxBoost()": "37090c2f",
              "minBoost()": "8561579c",
              "observe(address,uint32[])": "dc686d91",
              "pendingGovernance()": "f39c38a0",
              "quote(uint256)": "ed1bd76c",
              "quoteTwapTime()": "9aaad679",
              "setBaseFee(uint256)": "46860698",
              "setGovernance(address)": "ab033ea9",
              "setKeep3rV2(address)": "3cc7ab30",
              "setKp3rWethPool(address)": "160e1e31",
              "setMaxBoost(uint256)": "b2e0df96",
              "setMinBoost(uint256)": "0c525835",
              "setQuoteTwapTime(uint32)": "b93f5af0",
              "setTargetBond(uint256)": "ab5dce00",
              "setWorkExtraGas(uint256)": "289adb44",
              "targetBond()": "2742b9e7",
              "workExtraGas()": "3facf242"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidKp3rPool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV2\",\"type\":\"address\"}],\"name\":\"Keep3rV2Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_isKP3RToken0\",\"type\":\"bool\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_maxBoost\",\"type\":\"uint256\"}],\"name\":\"MaxBoostChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minBoost\",\"type\":\"uint256\"}],\"name\":\"MinBoostChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_quoteTwapTime\",\"type\":\"uint32\"}],\"name\":\"QuoteTwapTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_targetBond\",\"type\":\"uint256\"}],\"name\":\"TargetBondChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_workExtraGas\",\"type\":\"uint256\"}],\"name\":\"WorkExtraGasChange\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BOOST_BASE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KP3R\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"basefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountBonded\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityAmount\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"_tickDifference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"_timeInterval\",\"type\":\"uint256\"}],\"name\":\"getKP3RsAtTick\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_kp3rAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bonds\",\"type\":\"uint256\"}],\"name\":\"getPaymentParams\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_boost\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_oneEthQuote\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_extra\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_baseAmount\",\"type\":\"uint128\"},{\"internalType\":\"int56\",\"name\":\"_tickDifference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"_timeInterval\",\"type\":\"uint256\"}],\"name\":\"getQuoteAtTick\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_quoteAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasUsed\",\"type\":\"uint256\"}],\"name\":\"getRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasUsed\",\"type\":\"uint256\"}],\"name\":\"getRewardAmountFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_kp3r\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bonds\",\"type\":\"uint256\"}],\"name\":\"getRewardBoostFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardBoost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"isKP3RToken0\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isKP3RToken0\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isKP3RToken0\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxBoost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minBoost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"},{\"internalType\":\"uint32[]\",\"name\":\"_secondsAgo\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"_tickCumulative1\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"_tickCumulative2\",\"type\":\"int56\"},{\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_eth\",\"type\":\"uint256\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"quoteTwapTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_baseFee\",\"type\":\"uint256\"}],\"name\":\"setBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV2\",\"type\":\"address\"}],\"name\":\"setKeep3rV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolAddress\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxBoost\",\"type\":\"uint256\"}],\"name\":\"setMaxBoost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minBoost\",\"type\":\"uint256\"}],\"name\":\"setMinBoost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_quoteTwapTime\",\"type\":\"uint32\"}],\"name\":\"setQuoteTwapTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_targetBond\",\"type\":\"uint256\"}],\"name\":\"setTargetBond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_workExtraGas\",\"type\":\"uint256\"}],\"name\":\"setWorkExtraGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetBond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"workExtraGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"bonds(address)\":{\"params\":{\"_keeper\":\"The address of the keeper to check\"},\"returns\":{\"_amountBonded\":\"The amount of KP3R the keeper has bonded\"}},\"getKP3RsAtTick(uint256,int56,uint256)\":{\"params\":{\"_liquidityAmount\":\"Amount of liquidity to be converted\",\"_tickDifference\":\"Tick value used to calculate the quote\",\"_timeInterval\":\"Time value used to calculate the quote\"},\"returns\":{\"_kp3rAmount\":\"Amount of KP3R tokens underlying on the given liquidity\"}},\"getPaymentParams(uint256)\":{\"params\":{\"_bonds\":\"Amount of bonded KP3R owned by the keeper\"},\"returns\":{\"_boost\":\"Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\",\"_extra\":\"Amount of extra gas that should be added to the gas spent\",\"_oneEthQuote\":\"Amount of KP3R tokens equivalent to 1 ETH\"}},\"getPoolTokens(address)\":{\"params\":{\"_pool\":\"Address of the correspondant pool\"},\"returns\":{\"_token0\":\"Address of the first token of the pair\",\"_token1\":\"Address of the second token of the pair\"}},\"getQuoteAtTick(uint128,int56,uint256)\":{\"params\":{\"_baseAmount\":\"Amount of token to be converted\",\"_tickDifference\":\"Tick value used to calculate the quote\",\"_timeInterval\":\"Time value used to calculate the quote\"},\"returns\":{\"_quoteAmount\":\"Amount of credits deserved for the baseAmount at the tick value\"}},\"getRewardAmount(uint256)\":{\"params\":{\"_gasUsed\":\"The amount of gas used that will be rewarded\"},\"returns\":{\"_amount\":\"The amount of KP3R that should be awarded to tx.origin\"}},\"getRewardAmountFor(address,uint256)\":{\"params\":{\"_gasUsed\":\"The amount of gas used that will be rewarded\",\"_keeper\":\"The address of the keeper to check\"},\"returns\":{\"_kp3r\":\"The amount of KP3R that should be awarded to the keeper\"}},\"getRewardBoostFor(uint256)\":{\"params\":{\"_bonds\":\"The amount of KP3R tokens bonded by the keeper\"},\"returns\":{\"_rewardBoost\":\"The reward boost that corresponds to the keeper\"}},\"isKP3RToken0(address)\":{\"params\":{\"_pool\":\"Address of the correspondant pool\"},\"returns\":{\"_isKP3RToken0\":\"Boolean indicating the order of the tokens in the pair\"}},\"observe(address,uint32[])\":{\"params\":{\"_pool\":\"Address of the pool to observe\",\"_secondsAgo\":\"Array with time references to observe\"},\"returns\":{\"_success\":\"Boolean indicating if the observe call was succesfull\",\"_tickCumulative1\":\"Cummulative sum of ticks until first time reference\",\"_tickCumulative2\":\"Cummulative sum of ticks until second time reference\"}},\"quote(uint256)\":{\"details\":\"This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\",\"params\":{\"_eth\":\"The amount of ETH\"},\"returns\":{\"_amountOut\":\"The amount of KP3R\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setKeep3rV2(address)\":{\"params\":{\"_keep3rV2\":\"The address of Keep3r V2\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_poolAddress\":\"The address of the KP3R-WETH pool\"}},\"setMaxBoost(uint256)\":{\"params\":{\"_maxBoost\":\"The maximum boost multiplier\"}},\"setMinBoost(uint256)\":{\"params\":{\"_minBoost\":\"The minimum boost multiplier\"}},\"setQuoteTwapTime(uint32)\":{\"params\":{\"_quoteTwapTime\":\"The twap time for quoting\"}},\"setTargetBond(uint256)\":{\"params\":{\"_targetBond\":\"The target bond amount\"}},\"setWorkExtraGas(uint256)\":{\"params\":{\"_workExtraGas\":\"The work extra gas\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKp3rPool()\":[{\"notice\":\"Throws when pool does not have KP3R as token0 nor token1\"}],\"LiquidityPairInvalid()\":[{\"notice\":\"Throws when none of the tokens in the liquidity pair is KP3R\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}]},\"events\":{\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"Keep3rV2Change(address)\":{\"notice\":\"Emitted when the Keep3r V2 address is changed\"},\"Kp3rWethPoolChange(address,bool)\":{\"notice\":\"Emitted when the kp3r weth pool is changed\"},\"MaxBoostChange(uint256)\":{\"notice\":\"Emitted when the maximum boost multiplier is changed\"},\"MinBoostChange(uint256)\":{\"notice\":\"Emitted when the minimum boost multiplier is changed\"},\"QuoteTwapTimeChange(uint32)\":{\"notice\":\"Emitted when the quote twap time is changed\"},\"TargetBondChange(uint256)\":{\"notice\":\"Emitted when the target bond amount is changed\"},\"WorkExtraGasChange(uint256)\":{\"notice\":\"Emitted when the work extra gas amount is changed\"}},\"kind\":\"user\",\"methods\":{\"BOOST_BASE()\":{\"notice\":\"The boost base used to calculate the boost rewards for the keeper\"},\"KP3R()\":{\"notice\":\"Address of KP3R token\"},\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"bonds(address)\":{\"notice\":\"Returns the amount of KP3R the keeper has bonded\"},\"getKP3RsAtTick(uint256,int56,uint256)\":{\"notice\":\"Given a tick and a liquidity amount, calculates the underlying KP3R tokens\"},\"getPaymentParams(uint256)\":{\"notice\":\"Get multiplier, quote, and extra, in order to calculate keeper payment\"},\"getPoolTokens(address)\":{\"notice\":\"Given a pool address, returns the underlying tokens of the pair\"},\"getQuoteAtTick(uint128,int56,uint256)\":{\"notice\":\"Given a tick and a token amount, calculates the output in correspondant token\"},\"getRewardAmount(uint256)\":{\"notice\":\"Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\"},\"getRewardAmountFor(address,uint256)\":{\"notice\":\"Calculates the reward (in KP3R) that corresponds to a keeper for using gas\"},\"getRewardBoostFor(uint256)\":{\"notice\":\"Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"isKP3RToken0(address)\":{\"notice\":\"Defines the order of the tokens in the pair for twap calculations\"},\"keep3rV2()\":{\"notice\":\"Address of Keep3r V2\"},\"kp3rWethPool()\":{\"notice\":\"KP3R-WETH pool that is being used as oracle\"},\"maxBoost()\":{\"notice\":\"The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE\"},\"minBoost()\":{\"notice\":\"The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE\"},\"observe(address,uint32[])\":{\"notice\":\"Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"quote(uint256)\":{\"notice\":\"Calculates the amount of KP3R that corresponds to the ETH passed into the function\"},\"quoteTwapTime()\":{\"notice\":\"The twap time for quoting\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setKeep3rV2(address)\":{\"notice\":\"Sets the Keep3r V2 address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets KP3R-WETH pool\"},\"setMaxBoost(uint256)\":{\"notice\":\"Sets the maximum boost multiplier\"},\"setMinBoost(uint256)\":{\"notice\":\"Sets the minimum boost multiplier\"},\"setQuoteTwapTime(uint32)\":{\"notice\":\"Sets the quote twap time\"},\"setTargetBond(uint256)\":{\"notice\":\"Sets the target bond amount\"},\"setWorkExtraGas(uint256)\":{\"notice\":\"Sets the work extra gas amount\"},\"targetBond()\":{\"notice\":\"The targeted amount of bonded KP3Rs to max-up reward multiplier         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional\"},\"workExtraGas()\":{\"notice\":\"The amount of unaccounted gas that is going to be added to keeper payments\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/Keep3rHelperForTest.sol\":\"Keep3rHelperForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\nimport './pool/IUniswapV3PoolImmutables.sol';\\nimport './pool/IUniswapV3PoolState.sol';\\nimport './pool/IUniswapV3PoolDerivedState.sol';\\nimport './pool/IUniswapV3PoolActions.sol';\\nimport './pool/IUniswapV3PoolOwnerActions.sol';\\nimport './pool/IUniswapV3PoolEvents.sol';\\n\\n/// @title The interface for a Uniswap V3 Pool\\n/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform\\n/// to the ERC20 specification\\n/// @dev The pool interface is broken up into many smaller pieces\\ninterface IUniswapV3Pool is\\n    IUniswapV3PoolImmutables,\\n    IUniswapV3PoolState,\\n    IUniswapV3PoolDerivedState,\\n    IUniswapV3PoolActions,\\n    IUniswapV3PoolOwnerActions,\\n    IUniswapV3PoolEvents\\n{\\n\\n}\\n\",\"keccak256\":\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissionless pool actions\\n/// @notice Contains pool methods that can be called by anyone\\ninterface IUniswapV3PoolActions {\\n    /// @notice Sets the initial price for the pool\\n    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\\n    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96\\n    function initialize(uint160 sqrtPriceX96) external;\\n\\n    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback\\n    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\\n    /// on tickLower, tickUpper, the amount of liquidity, and the current price.\\n    /// @param recipient The address for which the liquidity will be created\\n    /// @param tickLower The lower tick of the position in which to add liquidity\\n    /// @param tickUpper The upper tick of the position in which to add liquidity\\n    /// @param amount The amount of liquidity to mint\\n    /// @param data Any data that should be passed through to the callback\\n    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    function mint(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount,\\n        bytes calldata data\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Collects tokens owed to a position\\n    /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\\n    /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\\n    /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\\n    /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\\n    /// @param recipient The address which should receive the fees collected\\n    /// @param tickLower The lower tick of the position for which to collect fees\\n    /// @param tickUpper The upper tick of the position for which to collect fees\\n    /// @param amount0Requested How much token0 should be withdrawn from the fees owed\\n    /// @param amount1Requested How much token1 should be withdrawn from the fees owed\\n    /// @return amount0 The amount of fees collected in token0\\n    /// @return amount1 The amount of fees collected in token1\\n    function collect(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n\\n    /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\\n    /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\\n    /// @dev Fees must be collected separately via a call to #collect\\n    /// @param tickLower The lower tick of the position for which to burn liquidity\\n    /// @param tickUpper The upper tick of the position for which to burn liquidity\\n    /// @param amount How much liquidity to burn\\n    /// @return amount0 The amount of token0 sent to the recipient\\n    /// @return amount1 The amount of token1 sent to the recipient\\n    function burn(\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Swap token0 for token1, or token1 for token0\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\\n    /// @param recipient The address to receive the output of the swap\\n    /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\\n    /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\\n    /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\\n    /// value after the swap. If one for zero, the price cannot be greater than this value after the swap\\n    /// @param data Any data to be passed through to the callback\\n    /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\\n    /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive\\n    function swap(\\n        address recipient,\\n        bool zeroForOne,\\n        int256 amountSpecified,\\n        uint160 sqrtPriceLimitX96,\\n        bytes calldata data\\n    ) external returns (int256 amount0, int256 amount1);\\n\\n    /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback\\n    /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\\n    /// with 0 amount{0,1} and sending the donation amount(s) from the callback\\n    /// @param recipient The address which will receive the token0 and token1 amounts\\n    /// @param amount0 The amount of token0 to send\\n    /// @param amount1 The amount of token1 to send\\n    /// @param data Any data to be passed through to the callback\\n    function flash(\\n        address recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        bytes calldata data\\n    ) external;\\n\\n    /// @notice Increase the maximum number of price and liquidity observations that this pool will store\\n    /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\\n    /// the input observationCardinalityNext.\\n    /// @param observationCardinalityNext The desired minimum number of observations for the pool to store\\n    function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;\\n}\\n\",\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that is not stored\\n/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the\\n/// blockchain. The functions here may have variable gas costs.\\ninterface IUniswapV3PoolDerivedState {\\n    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\\n    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\\n    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\\n    /// you must call it with secondsAgos = [3600, 0].\\n    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\\n    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\\n    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\\n    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\\n    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\\n    /// timestamp\\n    function observe(uint32[] calldata secondsAgos)\\n        external\\n        view\\n        returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\\n\\n    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\\n    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\\n    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\\n    /// snapshot is taken and the second snapshot is taken.\\n    /// @param tickLower The lower tick of the range\\n    /// @param tickUpper The upper tick of the range\\n    /// @return tickCumulativeInside The snapshot of the tick accumulator for the range\\n    /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\\n    /// @return secondsInside The snapshot of seconds per liquidity for the range\\n    function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)\\n        external\\n        view\\n        returns (\\n            int56 tickCumulativeInside,\\n            uint160 secondsPerLiquidityInsideX128,\\n            uint32 secondsInside\\n        );\\n}\\n\",\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Events emitted by a pool\\n/// @notice Contains all events emitted by the pool\\ninterface IUniswapV3PoolEvents {\\n    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool\\n    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\\n    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\\n    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\\n    event Initialize(uint160 sqrtPriceX96, int24 tick);\\n\\n    /// @notice Emitted when liquidity is minted for a given position\\n    /// @param sender The address that minted the liquidity\\n    /// @param owner The owner of the position and recipient of any minted liquidity\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity minted to the position range\\n    /// @param amount0 How much token0 was required for the minted liquidity\\n    /// @param amount1 How much token1 was required for the minted liquidity\\n    event Mint(\\n        address sender,\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted when fees are collected by the owner of a position\\n    /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\\n    /// @param owner The owner of the position for which fees are collected\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount0 The amount of token0 fees collected\\n    /// @param amount1 The amount of token1 fees collected\\n    event Collect(\\n        address indexed owner,\\n        address recipient,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount0,\\n        uint128 amount1\\n    );\\n\\n    /// @notice Emitted when a position's liquidity is removed\\n    /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\\n    /// @param owner The owner of the position for which liquidity is removed\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity to remove\\n    /// @param amount0 The amount of token0 withdrawn\\n    /// @param amount1 The amount of token1 withdrawn\\n    event Burn(\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted by the pool for any swaps between token0 and token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the output of the swap\\n    /// @param amount0 The delta of the token0 balance of the pool\\n    /// @param amount1 The delta of the token1 balance of the pool\\n    /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\\n    /// @param liquidity The liquidity of the pool after the swap\\n    /// @param tick The log base 1.0001 of price of the pool after the swap\\n    event Swap(\\n        address indexed sender,\\n        address indexed recipient,\\n        int256 amount0,\\n        int256 amount1,\\n        uint160 sqrtPriceX96,\\n        uint128 liquidity,\\n        int24 tick\\n    );\\n\\n    /// @notice Emitted by the pool for any flashes of token0/token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the tokens from flash\\n    /// @param amount0 The amount of token0 that was flashed\\n    /// @param amount1 The amount of token1 that was flashed\\n    /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\\n    /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\\n    event Flash(\\n        address indexed sender,\\n        address indexed recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        uint256 paid0,\\n        uint256 paid1\\n    );\\n\\n    /// @notice Emitted by the pool for increases to the number of observations that can be stored\\n    /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\\n    /// just before a mint/swap/burn.\\n    /// @param observationCardinalityNextOld The previous value of the next observation cardinality\\n    /// @param observationCardinalityNextNew The updated value of the next observation cardinality\\n    event IncreaseObservationCardinalityNext(\\n        uint16 observationCardinalityNextOld,\\n        uint16 observationCardinalityNextNew\\n    );\\n\\n    /// @notice Emitted when the protocol fee is changed by the pool\\n    /// @param feeProtocol0Old The previous value of the token0 protocol fee\\n    /// @param feeProtocol1Old The previous value of the token1 protocol fee\\n    /// @param feeProtocol0New The updated value of the token0 protocol fee\\n    /// @param feeProtocol1New The updated value of the token1 protocol fee\\n    event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);\\n\\n    /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner\\n    /// @param sender The address that collects the protocol fees\\n    /// @param recipient The address that receives the collected protocol fees\\n    /// @param amount0 The amount of token0 protocol fees that is withdrawn\\n    /// @param amount0 The amount of token1 protocol fees that is withdrawn\\n    event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that never changes\\n/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values\\ninterface IUniswapV3PoolImmutables {\\n    /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\\n    /// @return The contract address\\n    function factory() external view returns (address);\\n\\n    /// @notice The first of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token0() external view returns (address);\\n\\n    /// @notice The second of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token1() external view returns (address);\\n\\n    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6\\n    /// @return The fee\\n    function fee() external view returns (uint24);\\n\\n    /// @notice The pool tick spacing\\n    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\\n    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\\n    /// This value is an int24 to avoid casting even though it is always positive.\\n    /// @return The tick spacing\\n    function tickSpacing() external view returns (int24);\\n\\n    /// @notice The maximum amount of position liquidity that can use any tick in the range\\n    /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\\n    /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\\n    /// @return The max amount of liquidity per tick\\n    function maxLiquidityPerTick() external view returns (uint128);\\n}\\n\",\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissioned pool actions\\n/// @notice Contains pool methods that may only be called by the factory owner\\ninterface IUniswapV3PoolOwnerActions {\\n    /// @notice Set the denominator of the protocol's % share of the fees\\n    /// @param feeProtocol0 new protocol fee for token0 of the pool\\n    /// @param feeProtocol1 new protocol fee for token1 of the pool\\n    function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;\\n\\n    /// @notice Collect the protocol fee accrued to the pool\\n    /// @param recipient The address to which collected protocol fees should be sent\\n    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\\n    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\\n    /// @return amount0 The protocol fee collected in token0\\n    /// @return amount1 The protocol fee collected in token1\\n    function collectProtocol(\\n        address recipient,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that can change\\n/// @notice These methods compose the pool's state, and can change with any frequency including multiple times\\n/// per transaction\\ninterface IUniswapV3PoolState {\\n    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\\n    /// when accessed externally.\\n    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\\n    /// tick The current tick of the pool, i.e. according to the last tick transition that was run.\\n    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\\n    /// boundary.\\n    /// observationIndex The index of the last oracle observation that was written,\\n    /// observationCardinality The current maximum number of observations stored in the pool,\\n    /// observationCardinalityNext The next maximum number of observations, to be updated when the observation.\\n    /// feeProtocol The protocol fee for both tokens of the pool.\\n    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\\n    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\\n    /// unlocked Whether the pool is currently locked to reentrancy\\n    function slot0()\\n        external\\n        view\\n        returns (\\n            uint160 sqrtPriceX96,\\n            int24 tick,\\n            uint16 observationIndex,\\n            uint16 observationCardinality,\\n            uint16 observationCardinalityNext,\\n            uint8 feeProtocol,\\n            bool unlocked\\n        );\\n\\n    /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal0X128() external view returns (uint256);\\n\\n    /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal1X128() external view returns (uint256);\\n\\n    /// @notice The amounts of token0 and token1 that are owed to the protocol\\n    /// @dev Protocol fees will never exceed uint128 max in either token\\n    function protocolFees() external view returns (uint128 token0, uint128 token1);\\n\\n    /// @notice The currently in range liquidity available to the pool\\n    /// @dev This value has no relationship to the total liquidity across all ticks\\n    function liquidity() external view returns (uint128);\\n\\n    /// @notice Look up information about a specific tick in the pool\\n    /// @param tick The tick to look up\\n    /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\\n    /// tick upper,\\n    /// liquidityNet how much liquidity changes when the pool price crosses the tick,\\n    /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\\n    /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\\n    /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\\n    /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\\n    /// secondsOutside the seconds spent on the other side of the tick from the current tick,\\n    /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\\n    /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\\n    /// In addition, these values are only relative and must be used only in comparison to previous snapshots for\\n    /// a specific position.\\n    function ticks(int24 tick)\\n        external\\n        view\\n        returns (\\n            uint128 liquidityGross,\\n            int128 liquidityNet,\\n            uint256 feeGrowthOutside0X128,\\n            uint256 feeGrowthOutside1X128,\\n            int56 tickCumulativeOutside,\\n            uint160 secondsPerLiquidityOutsideX128,\\n            uint32 secondsOutside,\\n            bool initialized\\n        );\\n\\n    /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information\\n    function tickBitmap(int16 wordPosition) external view returns (uint256);\\n\\n    /// @notice Returns the information about a position by the position's key\\n    /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\\n    /// @return _liquidity The amount of liquidity in the position,\\n    /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\\n    /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\\n    /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\\n    /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\\n    function positions(bytes32 key)\\n        external\\n        view\\n        returns (\\n            uint128 _liquidity,\\n            uint256 feeGrowthInside0LastX128,\\n            uint256 feeGrowthInside1LastX128,\\n            uint128 tokensOwed0,\\n            uint128 tokensOwed1\\n        );\\n\\n    /// @notice Returns data about a specific observation index\\n    /// @param index The element of the observations array to fetch\\n    /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\\n    /// ago, rather than at a specific index in the array.\\n    /// @return blockTimestamp The timestamp of the observation,\\n    /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\\n    /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\\n    /// Returns initialized whether the observation has been initialized and the values are safe to use\\n    function observations(uint256 index)\\n        external\\n        view\\n        returns (\\n            uint32 blockTimestamp,\\n            int56 tickCumulative,\\n            uint160 secondsPerLiquidityCumulativeX128,\\n            bool initialized\\n        );\\n}\\n\",\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/Keep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/*\\n\\nCoded for The Keep3r Network with \\u2665 by\\n\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2557\\u2003\\u2003\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\n\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u255a\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2554\\u2550\\u2588\\u2588\\u2588\\u2588\\u2551\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\n\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2003\\u2003\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\n\\nhttps://defi.sucks\\n\\n*/\\n\\npragma solidity >=0.8.7 <0.9.0;\\n\\nimport './libraries/FullMath.sol';\\nimport './libraries/TickMath.sol';\\nimport '../interfaces/IKeep3r.sol';\\nimport '../interfaces/IKeep3rHelper.sol';\\nimport './Keep3rHelperParameters.sol';\\n\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\\n\\ncontract Keep3rHelper is IKeep3rHelper, Keep3rHelperParameters {\\n  constructor(address _keep3rV2, address _governance) Keep3rHelperParameters(_keep3rV2, _governance) {}\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function quote(uint256 _eth) public view override returns (uint256 _amountOut) {\\n    uint32[] memory _secondsAgos = new uint32[](2);\\n    _secondsAgos[1] = quoteTwapTime;\\n\\n    (int56[] memory _tickCumulatives, ) = IUniswapV3Pool(kp3rWethPool.poolAddress).observe(_secondsAgos);\\n    int56 _difference = _tickCumulatives[0] - _tickCumulatives[1];\\n    _amountOut = getQuoteAtTick(uint128(_eth), kp3rWethPool.isKP3RToken0 ? _difference : -_difference, quoteTwapTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function bonds(address _keeper) public view override returns (uint256 _amountBonded) {\\n    return IKeep3r(keep3rV2).bonds(_keeper, KP3R);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) public view override returns (uint256 _kp3r) {\\n    uint256 _boost = getRewardBoostFor(bonds(_keeper));\\n    _kp3r = quote((_gasUsed * _boost) / BOOST_BASE);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getRewardAmount(uint256 _gasUsed) external view override returns (uint256 _amount) {\\n    // solhint-disable-next-line avoid-tx-origin\\n    return getRewardAmountFor(tx.origin, _gasUsed);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getRewardBoostFor(uint256 _bonds) public view override returns (uint256 _rewardBoost) {\\n    _bonds = Math.min(_bonds, targetBond);\\n    uint256 _cap = Math.max(minBoost, minBoost + ((maxBoost - minBoost) * _bonds) / targetBond);\\n    _rewardBoost = _cap * _getBasefee();\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getPoolTokens(address _pool) public view override returns (address _token0, address _token1) {\\n    return (IUniswapV3Pool(_pool).token0(), IUniswapV3Pool(_pool).token1());\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function isKP3RToken0(address _pool) public view override returns (bool _isKP3RToken0) {\\n    address _token0;\\n    address _token1;\\n    (_token0, _token1) = getPoolTokens(_pool);\\n    if (_token0 == KP3R) {\\n      return true;\\n    } else if (_token1 != KP3R) {\\n      revert LiquidityPairInvalid();\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    public\\n    view\\n    override\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    )\\n  {\\n    try IUniswapV3Pool(_pool).observe(_secondsAgo) returns (int56[] memory _uniswapResponse, uint160[] memory) {\\n      _tickCumulative1 = _uniswapResponse[0];\\n      if (_uniswapResponse.length > 1) {\\n        _tickCumulative2 = _uniswapResponse[1];\\n      }\\n      _success = true;\\n    } catch (bytes memory) {}\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    override\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    )\\n  {\\n    _oneEthQuote = quote(1 ether);\\n    _boost = getRewardBoostFor(_bonds);\\n    _extra = workExtraGas;\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) public pure override returns (uint256 _kp3rAmount) {\\n    uint160 sqrtRatioX96 = TickMath.getSqrtRatioAtTick(int24(_tickDifference / int256(_timeInterval)));\\n    _kp3rAmount = FullMath.mulDiv(1 << 96, _liquidityAmount, sqrtRatioX96);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelper\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) public pure override returns (uint256 _quoteAmount) {\\n    uint160 sqrtRatioX96 = TickMath.getSqrtRatioAtTick(int24(_tickDifference / int256(_timeInterval)));\\n\\n    if (sqrtRatioX96 <= type(uint128).max) {\\n      uint256 ratioX192 = uint256(sqrtRatioX96) * sqrtRatioX96;\\n      _quoteAmount = FullMath.mulDiv(1 << 192, _baseAmount, ratioX192);\\n    } else {\\n      uint256 ratioX128 = FullMath.mulDiv(sqrtRatioX96, sqrtRatioX96, 1 << 64);\\n      _quoteAmount = FullMath.mulDiv(1 << 128, _baseAmount, ratioX128);\\n    }\\n  }\\n\\n  /// @notice Gets the block's base fee\\n  /// @return _baseFee The block's basefee\\n  function _getBasefee() internal view virtual returns (uint256 _baseFee) {\\n    return block.basefee;\\n  }\\n}\\n\",\"keccak256\":\"0x3808fda0edb99cbafee5c96f29e36fec06dda9a459e8448e8d1b502d25b04c7f\",\"license\":\"MIT\"},\"solidity/contracts/Keep3rHelperParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.7 <0.9.0;\\n\\nimport './libraries/FullMath.sol';\\nimport './libraries/TickMath.sol';\\nimport '../interfaces/IKeep3r.sol';\\nimport '../interfaces/external/IKeep3rV1.sol';\\nimport '../interfaces/IKeep3rHelperParameters.sol';\\nimport './peripherals/Governable.sol';\\nimport './Keep3rHelperParameters.sol';\\n\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\\n\\ncontract Keep3rHelperParameters is IKeep3rHelperParameters, Governable {\\n  /// @inheritdoc IKeep3rHelperParameters\\n  address public constant override KP3R = 0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public constant override BOOST_BASE = 10_000;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public override minBoost = 11_000;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public override maxBoost = 12_000;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public override targetBond = 200 ether;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint256 public override workExtraGas = 50_000;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  uint32 public override quoteTwapTime = 10 minutes;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  address public override keep3rV2;\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  IKeep3rHelperParameters.Kp3rWethPool public override kp3rWethPool;\\n\\n  constructor(address _keep3rV2, address _governance) Governable(_governance) {\\n    keep3rV2 = _keep3rV2;\\n    _setKp3rWethPool(0x11B7a6bc0259ed6Cf9DB8F499988F9eCc7167bf5);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setKp3rWethPool(address _poolAddress) external override onlyGovernance {\\n    _setKp3rWethPool(_poolAddress);\\n    emit Kp3rWethPoolChange(kp3rWethPool.poolAddress, kp3rWethPool.isKP3RToken0);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setMinBoost(uint256 _minBoost) external override onlyGovernance {\\n    minBoost = _minBoost;\\n    emit MinBoostChange(minBoost);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setMaxBoost(uint256 _maxBoost) external override onlyGovernance {\\n    maxBoost = _maxBoost;\\n    emit MaxBoostChange(maxBoost);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setTargetBond(uint256 _targetBond) external override onlyGovernance {\\n    targetBond = _targetBond;\\n    emit TargetBondChange(targetBond);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setKeep3rV2(address _keep3rV2) external override onlyGovernance {\\n    keep3rV2 = _keep3rV2;\\n    emit Keep3rV2Change(keep3rV2);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setWorkExtraGas(uint256 _workExtraGas) external override onlyGovernance {\\n    workExtraGas = _workExtraGas;\\n    emit WorkExtraGasChange(workExtraGas);\\n  }\\n\\n  /// @inheritdoc IKeep3rHelperParameters\\n  function setQuoteTwapTime(uint32 _quoteTwapTime) external override onlyGovernance {\\n    quoteTwapTime = _quoteTwapTime;\\n    emit QuoteTwapTimeChange(quoteTwapTime);\\n  }\\n\\n  /// @notice Sets KP3R-WETH pool\\n  /// @param _poolAddress The address of the KP3R-WETH pool\\n  function _setKp3rWethPool(address _poolAddress) internal {\\n    bool _isKP3RToken0 = IUniswapV3Pool(_poolAddress).token0() == KP3R;\\n    bool _isKP3RToken1 = IUniswapV3Pool(_poolAddress).token1() == KP3R;\\n\\n    if (!_isKP3RToken0 && !_isKP3RToken1) revert InvalidKp3rPool();\\n\\n    kp3rWethPool = Kp3rWethPool(_poolAddress, _isKP3RToken0);\\n  }\\n}\\n\",\"keccak256\":\"0xb5c365c428fc8a3157225799f6b581e450b74f6ae05b0f30dba286ff1e470e88\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/libraries/TickMath.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n// solhint-disable\\n\\n/// @title Math library for computing sqrt prices from ticks and vice versa\\n/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\\n///         prices between 2**-128 and 2**128\\nlibrary TickMath {\\n  /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\\n  int24 internal constant MIN_TICK = -887272;\\n  /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\\n  int24 internal constant MAX_TICK = -MIN_TICK;\\n\\n  /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\\n  uint160 internal constant MIN_SQRT_RATIO = 4295128739;\\n  /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\\n  uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;\\n\\n  /// @notice Calculates sqrt(1.0001^tick) * 2^96\\n  /// @dev Throws if |tick| > max tick\\n  /// @param tick The input tick for the above formula\\n  /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the given tick\\n  function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {\\n    uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));\\n    require(absTick <= uint256(int256(MAX_TICK)), 'T');\\n\\n    uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;\\n    if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;\\n    if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;\\n    if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;\\n    if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;\\n    if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;\\n    if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;\\n    if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;\\n    if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;\\n    if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;\\n    if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;\\n    if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;\\n    if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;\\n    if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;\\n    if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;\\n    if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;\\n    if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;\\n    if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;\\n    if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;\\n    if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;\\n\\n    if (tick > 0) ratio = type(uint256).max / ratio;\\n\\n    // Divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.\\n    // we then downcast because we know the result always fits within 160 bits due to our tick input constraint\\n    // we round up in the division so getTickAtSqrtRatio of the output price is always consistent\\n    sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));\\n  }\\n\\n  /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\\n  /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may ever return.\\n  /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\\n  /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio\\n  function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {\\n    // Second inequality must be < because the price can never reach the price at the max tick\\n    require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');\\n    uint256 ratio = uint256(sqrtPriceX96) << 32;\\n\\n    uint256 r = ratio;\\n    uint256 msb = 0;\\n\\n    assembly {\\n      let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(5, gt(r, 0xFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(4, gt(r, 0xFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(3, gt(r, 0xFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(2, gt(r, 0xF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(1, gt(r, 0x3))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := gt(r, 0x1)\\n      msb := or(msb, f)\\n    }\\n\\n    if (msb >= 128) r = ratio >> (msb - 127);\\n    else r = ratio << (127 - msb);\\n\\n    int256 log_2 = (int256(msb) - 128) << 64;\\n\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(63, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(62, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(61, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(60, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(59, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(58, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(57, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(56, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(55, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(54, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(53, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(52, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(51, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(50, f))\\n    }\\n\\n    int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number\\n\\n    int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);\\n    int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);\\n\\n    tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;\\n  }\\n}\\n\",\"keccak256\":\"0x11b965ba576ff91b4a6e9533c0f334f2b7b6024ee1c54e36d21799de5580899d\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/for-test/Keep3rHelperForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../contracts/Keep3rHelper.sol';\\n\\ncontract Keep3rHelperForTest is Keep3rHelper {\\n  uint256 public basefee;\\n\\n  constructor(address _keep3rV2, address _governance) Keep3rHelper(_keep3rV2, _governance) {}\\n\\n  function _getBasefee() internal view override returns (uint256) {\\n    return basefee;\\n  }\\n\\n  function setBaseFee(uint256 _baseFee) external {\\n    basefee = _baseFee;\\n  }\\n}\\n\",\"keccak256\":\"0x4cb18c09af87210a400f74250e2dbae0627d8b73e175ec081c9903c097aa3382\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3r.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './peripherals/IKeep3rJobs.sol';\\nimport './peripherals/IKeep3rKeepers.sol';\\nimport './peripherals/IKeep3rAccountance.sol';\\nimport './peripherals/IKeep3rRoles.sol';\\nimport './peripherals/IKeep3rParameters.sol';\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rV2 contract\\n/// @notice This contract inherits all the functionality of Keep3rV2\\ninterface IKeep3r is IKeep3rJobs, IKeep3rKeepers, IKeep3rAccountance, IKeep3rRoles, IKeep3rParameters {\\n\\n}\\n\",\"keccak256\":\"0x57e234140074d771239eeb6f08b6fc049c838c2a34aefadbbd542672e63bc686\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelperParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelperParameters contract\\n/// @notice Contains all the helper functions used throughout the different files.\\ninterface IKeep3rHelperParameters {\\n  // Structs\\n\\n  /// @dev KP3R-WETH Pool address and isKP3RToken0\\n  /// @dev Created in order to save gas by avoiding calls to pool's token0 method\\n  struct Kp3rWethPool {\\n    address poolAddress;\\n    bool isKP3RToken0;\\n  }\\n\\n  // Errors\\n\\n  /// @notice Throws when pool does not have KP3R as token0 nor token1\\n  error InvalidKp3rPool();\\n\\n  // Events\\n\\n  /// @notice Emitted when the kp3r weth pool is changed\\n  /// @param _address Address of the new kp3r weth pool\\n  /// @param _isKP3RToken0 True if calling the token0 method of the pool returns the KP3R token address\\n  event Kp3rWethPoolChange(address _address, bool _isKP3RToken0);\\n\\n  /// @notice Emitted when the minimum boost multiplier is changed\\n  /// @param _minBoost The minimum boost multiplier\\n  event MinBoostChange(uint256 _minBoost);\\n\\n  /// @notice Emitted when the maximum boost multiplier is changed\\n  /// @param _maxBoost The maximum boost multiplier\\n  event MaxBoostChange(uint256 _maxBoost);\\n\\n  /// @notice Emitted when the target bond amount is changed\\n  /// @param _targetBond The target bond amount\\n  event TargetBondChange(uint256 _targetBond);\\n\\n  /// @notice Emitted when the Keep3r V2 address is changed\\n  /// @param _keep3rV2 The address of Keep3r V2\\n  event Keep3rV2Change(address _keep3rV2);\\n\\n  /// @notice Emitted when the work extra gas amount is changed\\n  /// @param _workExtraGas The work extra gas\\n  event WorkExtraGasChange(uint256 _workExtraGas);\\n\\n  /// @notice Emitted when the quote twap time is changed\\n  /// @param _quoteTwapTime The twap time for quoting\\n  event QuoteTwapTimeChange(uint32 _quoteTwapTime);\\n\\n  // Variables\\n\\n  /// @notice Address of KP3R token\\n  /// @return _kp3r Address of KP3R token\\n  // solhint-disable func-name-mixedcase\\n  function KP3R() external view returns (address _kp3r);\\n\\n  /// @notice The boost base used to calculate the boost rewards for the keeper\\n  /// @return _base The boost base number\\n  function BOOST_BASE() external view returns (uint256 _base);\\n\\n  /// @notice KP3R-WETH pool that is being used as oracle\\n  /// @return poolAddress Address of the pool\\n  /// @return isKP3RToken0 True if calling the token0 method of the pool returns the KP3R token address\\n  function kp3rWethPool() external view returns (address poolAddress, bool isKP3RToken0);\\n\\n  /// @notice The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job\\n  ///         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE\\n  /// @return _multiplier The minimum boost multiplier\\n  function minBoost() external view returns (uint256 _multiplier);\\n\\n  /// @notice The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job\\n  ///         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE\\n  /// @return _multiplier The maximum boost multiplier\\n  function maxBoost() external view returns (uint256 _multiplier);\\n\\n  /// @notice The targeted amount of bonded KP3Rs to max-up reward multiplier\\n  ///         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get\\n  ///                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional\\n  /// @return _target The amount of KP3R that comforms the targetBond\\n  function targetBond() external view returns (uint256 _target);\\n\\n  /// @notice The amount of unaccounted gas that is going to be added to keeper payments\\n  /// @return _workExtraGas The work unaccounted gas amount\\n  function workExtraGas() external view returns (uint256 _workExtraGas);\\n\\n  /// @notice The twap time for quoting\\n  /// @return _quoteTwapTime The twap time\\n  function quoteTwapTime() external view returns (uint32 _quoteTwapTime);\\n\\n  /// @notice Address of Keep3r V2\\n  /// @return _keep3rV2 Address of Keep3r V2\\n  function keep3rV2() external view returns (address _keep3rV2);\\n\\n  // Methods\\n\\n  /// @notice Sets KP3R-WETH pool\\n  /// @param _poolAddress The address of the KP3R-WETH pool\\n  function setKp3rWethPool(address _poolAddress) external;\\n\\n  /// @notice Sets the minimum boost multiplier\\n  /// @param _minBoost The minimum boost multiplier\\n  function setMinBoost(uint256 _minBoost) external;\\n\\n  /// @notice Sets the maximum boost multiplier\\n  /// @param _maxBoost The maximum boost multiplier\\n  function setMaxBoost(uint256 _maxBoost) external;\\n\\n  /// @notice Sets the target bond amount\\n  /// @param _targetBond The target bond amount\\n  function setTargetBond(uint256 _targetBond) external;\\n\\n  /// @notice Sets the Keep3r V2 address\\n  /// @param _keep3rV2 The address of Keep3r V2\\n  function setKeep3rV2(address _keep3rV2) external;\\n\\n  /// @notice Sets the work extra gas amount\\n  /// @param _workExtraGas The work extra gas\\n  function setWorkExtraGas(uint256 _workExtraGas) external;\\n\\n  /// @notice Sets the quote twap time\\n  /// @param _quoteTwapTime The twap time for quoting\\n  function setQuoteTwapTime(uint32 _quoteTwapTime) external;\\n}\\n\",\"keccak256\":\"0x187ab1606deb0ffaa49342c2964ddc93022651a2936a19642475a3ec6bce29b9\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n// solhint-disable func-name-mixedcase\\ninterface IKeep3rV1 is IERC20, IERC20Metadata {\\n  // Structs\\n  struct Checkpoint {\\n    uint32 fromBlock;\\n    uint256 votes;\\n  }\\n\\n  // Events\\n  event DelegateChanged(address indexed _delegator, address indexed _fromDelegate, address indexed _toDelegate);\\n  event DelegateVotesChanged(address indexed _delegate, uint256 _previousBalance, uint256 _newBalance);\\n  event SubmitJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event ApplyCredit(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event RemoveJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event UnbondJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event JobAdded(address indexed _job, uint256 _block, address _governance);\\n  event JobRemoved(address indexed _job, uint256 _block, address _governance);\\n  event KeeperWorked(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _block, uint256 _amount);\\n  event KeeperBonding(address indexed _keeper, uint256 _block, uint256 _active, uint256 _bond);\\n  event KeeperBonded(address indexed _keeper, uint256 _block, uint256 _activated, uint256 _bond);\\n  event KeeperUnbonding(address indexed _keeper, uint256 _block, uint256 _deactive, uint256 _bond);\\n  event KeeperUnbound(address indexed _keeper, uint256 _block, uint256 _deactivated, uint256 _bond);\\n  event KeeperSlashed(address indexed _keeper, address indexed _slasher, uint256 _block, uint256 _slash);\\n  event KeeperDispute(address indexed _keeper, uint256 _block);\\n  event KeeperResolved(address indexed _keeper, uint256 _block);\\n  event TokenCreditAddition(address indexed _credit, address indexed _job, address indexed _creditor, uint256 _block, uint256 _amount);\\n\\n  // Variables\\n  function KPRH() external returns (address);\\n\\n  function delegates(address _delegator) external view returns (address);\\n\\n  function checkpoints(address _account, uint32 _checkpoint) external view returns (Checkpoint memory);\\n\\n  function numCheckpoints(address _account) external view returns (uint32);\\n\\n  function DOMAIN_TYPEHASH() external returns (bytes32);\\n\\n  function DOMAINSEPARATOR() external returns (bytes32);\\n\\n  function DELEGATION_TYPEHASH() external returns (bytes32);\\n\\n  function PERMIT_TYPEHASH() external returns (bytes32);\\n\\n  function nonces(address _user) external view returns (uint256);\\n\\n  function BOND() external returns (uint256);\\n\\n  function UNBOND() external returns (uint256);\\n\\n  function LIQUIDITYBOND() external returns (uint256);\\n\\n  function FEE() external returns (uint256);\\n\\n  function BASE() external returns (uint256);\\n\\n  function ETH() external returns (address);\\n\\n  function bondings(address _user, address _bonding) external view returns (uint256);\\n\\n  function canWithdrawAfter(address _user, address _bonding) external view returns (uint256);\\n\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function pendingbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function bonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function votes(address _delegator) external view returns (uint256);\\n\\n  function firstSeen(address _keeper) external view returns (uint256);\\n\\n  function disputes(address _keeper) external view returns (bool);\\n\\n  function lastJob(address _keeper) external view returns (uint256);\\n\\n  function workCompleted(address _keeper) external view returns (uint256);\\n\\n  function jobs(address _job) external view returns (bool);\\n\\n  function credits(address _job, address _credit) external view returns (uint256);\\n\\n  function liquidityProvided(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmountsUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function jobProposalDelay(address _job) external view returns (uint256);\\n\\n  function liquidityApplied(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmount(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function keepers(address _keeper) external view returns (bool);\\n\\n  function blacklist(address _keeper) external view returns (bool);\\n\\n  function keeperList(uint256 _index) external view returns (address);\\n\\n  function jobList(uint256 _index) external view returns (address);\\n\\n  function governance() external returns (address);\\n\\n  function pendingGovernance() external returns (address);\\n\\n  function liquidityAccepted(address _liquidity) external view returns (bool);\\n\\n  function liquidityPairs(uint256 _index) external view returns (address);\\n\\n  // Methods\\n  function getCurrentVotes(address _account) external view returns (uint256);\\n\\n  function addCreditETH(address _job) external payable;\\n\\n  function addCredit(\\n    address _credit,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function pairs() external view returns (address[] memory);\\n\\n  function addLiquidityToJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function applyCreditToJob(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external;\\n\\n  function unbondLiquidityFromJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function removeLiquidityFromJob(address _liquidity, address _job) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function burn(uint256 _amount) external;\\n\\n  function worked(address _keeper) external;\\n\\n  function receipt(\\n    address _credit,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function receiptETH(address _keeper, uint256 _amount) external;\\n\\n  function addJob(address _job) external;\\n\\n  function getJobs() external view returns (address[] memory);\\n\\n  function removeJob(address _job) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function setGovernance(address _governance) external;\\n\\n  function acceptGovernance() external;\\n\\n  function isKeeper(address _keeper) external returns (bool);\\n\\n  function isMinKeeper(\\n    address _keeper,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  function getKeepers() external view returns (address[] memory);\\n\\n  function activate(address _bonding) external;\\n\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function withdraw(address _bonding) external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xa9806cd6666ab1b7375ef72446964a72397fd4cefc7cc8c5b37caa7c50df0246\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5266,
                "contract": "solidity/for-test/Keep3rHelperForTest.sol:Keep3rHelperForTest",
                "label": "governance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/Keep3rHelperForTest.sol:Keep3rHelperForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 2986,
                "contract": "solidity/for-test/Keep3rHelperForTest.sol:Keep3rHelperForTest",
                "label": "minBoost",
                "offset": 0,
                "slot": "2",
                "type": "t_uint256"
              },
              {
                "astId": 2991,
                "contract": "solidity/for-test/Keep3rHelperForTest.sol:Keep3rHelperForTest",
                "label": "maxBoost",
                "offset": 0,
                "slot": "3",
                "type": "t_uint256"
              },
              {
                "astId": 2996,
                "contract": "solidity/for-test/Keep3rHelperForTest.sol:Keep3rHelperForTest",
                "label": "targetBond",
                "offset": 0,
                "slot": "4",
                "type": "t_uint256"
              },
              {
                "astId": 3001,
                "contract": "solidity/for-test/Keep3rHelperForTest.sol:Keep3rHelperForTest",
                "label": "workExtraGas",
                "offset": 0,
                "slot": "5",
                "type": "t_uint256"
              },
              {
                "astId": 3006,
                "contract": "solidity/for-test/Keep3rHelperForTest.sol:Keep3rHelperForTest",
                "label": "quoteTwapTime",
                "offset": 0,
                "slot": "6",
                "type": "t_uint32"
              },
              {
                "astId": 3010,
                "contract": "solidity/for-test/Keep3rHelperForTest.sol:Keep3rHelperForTest",
                "label": "keep3rV2",
                "offset": 4,
                "slot": "6",
                "type": "t_address"
              },
              {
                "astId": 3015,
                "contract": "solidity/for-test/Keep3rHelperForTest.sol:Keep3rHelperForTest",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "7",
                "type": "t_struct(Kp3rWethPool)11533_storage"
              },
              {
                "astId": 9839,
                "contract": "solidity/for-test/Keep3rHelperForTest.sol:Keep3rHelperForTest",
                "label": "basefee",
                "offset": 0,
                "slot": "8",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_struct(Kp3rWethPool)11533_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rHelperParameters.Kp3rWethPool",
                "members": [
                  {
                    "astId": 11530,
                    "contract": "solidity/for-test/Keep3rHelperForTest.sol:Keep3rHelperForTest",
                    "label": "poolAddress",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_address"
                  },
                  {
                    "astId": 11532,
                    "contract": "solidity/for-test/Keep3rHelperForTest.sol:Keep3rHelperForTest",
                    "label": "isKP3RToken0",
                    "offset": 20,
                    "slot": "0",
                    "type": "t_bool"
                  }
                ],
                "numberOfBytes": "32"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              },
              "t_uint32": {
                "encoding": "inplace",
                "label": "uint32",
                "numberOfBytes": "4"
              }
            }
          },
          "userdoc": {
            "errors": {
              "InvalidKp3rPool()": [
                {
                  "notice": "Throws when pool does not have KP3R as token0 nor token1"
                }
              ],
              "LiquidityPairInvalid()": [
                {
                  "notice": "Throws when none of the tokens in the liquidity pair is KP3R"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ]
            },
            "events": {
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "Keep3rV2Change(address)": {
                "notice": "Emitted when the Keep3r V2 address is changed"
              },
              "Kp3rWethPoolChange(address,bool)": {
                "notice": "Emitted when the kp3r weth pool is changed"
              },
              "MaxBoostChange(uint256)": {
                "notice": "Emitted when the maximum boost multiplier is changed"
              },
              "MinBoostChange(uint256)": {
                "notice": "Emitted when the minimum boost multiplier is changed"
              },
              "QuoteTwapTimeChange(uint32)": {
                "notice": "Emitted when the quote twap time is changed"
              },
              "TargetBondChange(uint256)": {
                "notice": "Emitted when the target bond amount is changed"
              },
              "WorkExtraGasChange(uint256)": {
                "notice": "Emitted when the work extra gas amount is changed"
              }
            },
            "kind": "user",
            "methods": {
              "BOOST_BASE()": {
                "notice": "The boost base used to calculate the boost rewards for the keeper"
              },
              "KP3R()": {
                "notice": "Address of KP3R token"
              },
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "bonds(address)": {
                "notice": "Returns the amount of KP3R the keeper has bonded"
              },
              "getKP3RsAtTick(uint256,int56,uint256)": {
                "notice": "Given a tick and a liquidity amount, calculates the underlying KP3R tokens"
              },
              "getPaymentParams(uint256)": {
                "notice": "Get multiplier, quote, and extra, in order to calculate keeper payment"
              },
              "getPoolTokens(address)": {
                "notice": "Given a pool address, returns the underlying tokens of the pair"
              },
              "getQuoteAtTick(uint128,int56,uint256)": {
                "notice": "Given a tick and a token amount, calculates the output in correspondant token"
              },
              "getRewardAmount(uint256)": {
                "notice": "Calculates the reward (in KP3R) that corresponds to tx.origin for using gas"
              },
              "getRewardAmountFor(address,uint256)": {
                "notice": "Calculates the reward (in KP3R) that corresponds to a keeper for using gas"
              },
              "getRewardBoostFor(uint256)": {
                "notice": "Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "isKP3RToken0(address)": {
                "notice": "Defines the order of the tokens in the pair for twap calculations"
              },
              "keep3rV2()": {
                "notice": "Address of Keep3r V2"
              },
              "kp3rWethPool()": {
                "notice": "KP3R-WETH pool that is being used as oracle"
              },
              "maxBoost()": {
                "notice": "The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE"
              },
              "minBoost()": {
                "notice": "The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE"
              },
              "observe(address,uint32[])": {
                "notice": "Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "quote(uint256)": {
                "notice": "Calculates the amount of KP3R that corresponds to the ETH passed into the function"
              },
              "quoteTwapTime()": {
                "notice": "The twap time for quoting"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setKeep3rV2(address)": {
                "notice": "Sets the Keep3r V2 address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets KP3R-WETH pool"
              },
              "setMaxBoost(uint256)": {
                "notice": "Sets the maximum boost multiplier"
              },
              "setMinBoost(uint256)": {
                "notice": "Sets the minimum boost multiplier"
              },
              "setQuoteTwapTime(uint32)": {
                "notice": "Sets the quote twap time"
              },
              "setTargetBond(uint256)": {
                "notice": "Sets the target bond amount"
              },
              "setWorkExtraGas(uint256)": {
                "notice": "Sets the work extra gas amount"
              },
              "targetBond()": {
                "notice": "The targeted amount of bonded KP3Rs to max-up reward multiplier         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional"
              },
              "workExtraGas()": {
                "notice": "The amount of unaccounted gas that is going to be added to keeper payments"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/UniV3PairManagerForTest.sol": {
        "UniV3PairManagerForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "ExcessiveSlippage",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPool",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnsuccessfulTransfer",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0Min",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Min",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "burn",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "collect",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint24",
                  "name": "",
                  "type": "uint24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0Desired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Desired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0Min",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Min",
                  "type": "uint256"
                }
              ],
              "name": "internalAddLiquidity",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "dst",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "internalBurn",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "dst",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "internalMint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "payer",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "internalPay",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "internalSafeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "src",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dst",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "internalTransferTokens",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0Desired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Desired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0Min",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Min",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "position",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside0LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside1LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "sqrtRatioAX96",
              "outputs": [
                {
                  "internalType": "uint160",
                  "name": "",
                  "type": "uint160"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "sqrtRatioBX96",
              "outputs": [
                {
                  "internalType": "uint160",
                  "name": "",
                  "type": "uint160"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickLower",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickSpacing",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickUpper",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token0",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0Owed",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Owed",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "uniswapV3MintCallback",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "approve(address,uint256)": {
                "details": "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."
              },
              "burn(uint128,uint256,uint256,address)": {
                "params": {
                  "amount0Min": "The minimum amount of token0 we want to send to the recipient (to)",
                  "amount1Min": "The minimum amount of token1 we want to send to the recipient (to)",
                  "liquidity": "The amount of liquidity to be burned",
                  "to": "The address that will receive the due fees"
                },
                "returns": {
                  "amount0": "The calculated amount of token0 that will be sent to the recipient",
                  "amount1": "The calculated amount of token1 that will be sent to the recipient"
                }
              },
              "collect()": {
                "details": "The collected fees will be sent to governance",
                "returns": {
                  "amount0": "The amount of fees collected in token0",
                  "amount1": "The amount of fees collected in token1"
                }
              },
              "mint(uint256,uint256,uint256,uint256,address)": {
                "details": "Triggers UniV3PairManager#uniswapV3MintCallback",
                "params": {
                  "amount0Desired": "The amount of token0 we would like to provide",
                  "amount0Min": "The minimum amount of token0 we want to provide",
                  "amount1Desired": "The amount of token1 we would like to provide",
                  "amount1Min": "The minimum amount of token1 we want to provide",
                  "to": "The address to which the kLP tokens are going to be minted to"
                },
                "returns": {
                  "liquidity": "kLP tokens sent in exchange for the provision of tokens"
                }
              },
              "position()": {
                "returns": {
                  "feeGrowthInside0LastX128": "The fee growth of token0 as of the last action on the individual position",
                  "feeGrowthInside1LastX128": "The fee growth of token1 as of the last action on the individual position",
                  "liquidity": "The amount of liquidity provided to the UniswapV3 pool by the pair manager",
                  "tokensOwed0": "The uncollected amount of token0 owed to the position as of the last computation",
                  "tokensOwed1": "The uncollected amount of token1 owed to the position as of the last computation"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "transfer(address,uint256)": {
                "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
              },
              "transferFrom(address,address,uint256)": {
                "details": "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."
              },
              "uniswapV3MintCallback(uint256,uint256,bytes)": {
                "params": {
                  "amount0Owed": "The amount of token0 due to the pool for the minted liquidity",
                  "amount1Owed": "The amount of token1 due to the pool for the minted liquidity",
                  "data": "The encoded token0, token1, fee (_poolKey) and the payer (msg.sender) of the IUniV3PairManager#mint function"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_3457": {
                  "entryPoint": null,
                  "id": 3457,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_9897": {
                  "entryPoint": null,
                  "id": 9897,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@getSqrtRatioAtTick_5048": {
                  "entryPoint": 1563,
                  "id": 5048,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 2851,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 2880,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address_fromMemory": {
                  "entryPoint": 2917,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_int24_fromMemory": {
                  "entryPoint": 2973,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_string_memory_ptr_fromMemory": {
                  "entryPoint": 3010,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint24_fromMemory": {
                  "entryPoint": 3194,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_stringliteral_88128fd802ffcab61bb615f5267c4adf0904a425ac58e0dbd5ba48ded50c3374_t_string_memory_ptr_t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 3233,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_stringliteral_a94178d1c412eed8fa1a51e4eb44d52d54f9449839aa27e515bcce7b97754416_t_string_memory_ptr_t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 3313,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 3400,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 3427,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 3450,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_int24": {
                  "entryPoint": 3484,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 3562,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "extract_byte_array_length": {
                  "entryPoint": 3613,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mod_t_int24": {
                  "entryPoint": 3674,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "mod_t_uint256": {
                  "entryPoint": 3711,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "negate_t_int24": {
                  "entryPoint": 3734,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "negate_t_int256": {
                  "entryPoint": 3772,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 3804,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x12": {
                  "entryPoint": 3826,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": 3848,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:6442:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "277:127:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "323:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "332:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "335:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "325:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "325:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "325:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "298:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "307:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "294:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "294:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "319:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "290:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "290:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "287:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "348:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "388:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "358:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "358:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "348:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "243:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "254:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "266:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:208:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "507:195:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "553:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "562:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "565:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "555:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "555:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "555:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "528:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "537:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "524:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "524:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "549:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "520:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "520:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "517:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "578:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "618:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "588:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "588:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "578:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "637:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "681:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "692:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "677:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "677:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "647:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "647:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "637:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "465:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "476:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "488:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "496:6:84",
                            "type": ""
                          }
                        ],
                        "src": "409:293:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "786:198:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "832:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "841:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "844:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "834:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "834:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "834:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "807:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "816:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "803:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "803:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "828:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "799:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "799:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "796:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "857:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "876:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "870:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "870:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "861:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "938:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "947:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "950:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "940:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "940:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "940:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "908:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "926:1:84",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "929:5:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "915:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "915:20:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "905:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "905:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "898:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "898:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "895:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "963:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "973:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "963:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int24_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "752:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "763:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "775:6:84",
                            "type": ""
                          }
                        ],
                        "src": "707:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1080:793:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1126:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1135:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1138:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1128:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1128:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1128:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1101:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1110:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1097:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1097:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1122:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1093:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1093:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1090:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1151:30:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1171:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1165:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1165:16:84"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1155:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1190:28:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1208:2:84",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1212:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1204:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1204:10:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1216:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "1200:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1200:18:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1194:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1245:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1254:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1257:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1247:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1247:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1247:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1233:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1241:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1230:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1230:14:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1227:34:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1270:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1284:9:84"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1295:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1280:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1280:22:84"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1274:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1350:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1359:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1362:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1352:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1352:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1352:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1329:2:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1333:4:84",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1325:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1325:13:84"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1340:7:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1321:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1321:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1314:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1314:35:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1311:55:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1375:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1391:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1385:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1385:9:84"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1379:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1417:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1419:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1419:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1419:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1409:2:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1413:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1406:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1406:10:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1403:36:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1448:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1462:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1458:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1458:7:84"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "1452:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1474:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1494:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1488:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1488:9:84"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1478:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1506:71:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1528:6:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_3",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1552:2:84"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1556:4:84",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1548:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1548:13:84"
                                              },
                                              {
                                                "name": "_4",
                                                "nodeType": "YulIdentifier",
                                                "src": "1563:2:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "1544:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1544:22:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1568:2:84",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1540:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1540:31:84"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "1573:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1536:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1536:40:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1524:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1524:53:84"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1510:10:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1636:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1638:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1638:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1638:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1595:10:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1607:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1592:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1592:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1615:10:84"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1627:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1612:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1612:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "1589:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1589:46:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1586:72:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1674:2:84",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1678:10:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1667:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1667:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1667:22:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1705:6:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1713:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1698:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1698:18:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1698:18:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1762:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1771:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1774:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1764:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1764:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1764:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1739:2:84"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "1743:2:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1735:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1735:11:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1748:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1731:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1731:20:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1753:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1728:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1728:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1725:53:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "1813:2:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1817:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1809:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1809:11:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1826:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1834:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1822:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1822:15:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1839:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1787:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1787:55:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1787:55:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1851:16:84",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "1861:6:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1851:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1046:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1057:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1069:6:84",
                            "type": ""
                          }
                        ],
                        "src": "989:884:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1958:198:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2004:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2013:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2016:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2006:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2006:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2006:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1979:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1988:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1975:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1975:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2000:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1971:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1971:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1968:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2029:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2048:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2042:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2042:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2033:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2110:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2119:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2122:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2112:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2112:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2112:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2080:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "2091:5:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2098:8:84",
                                            "type": "",
                                            "value": "0xffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2087:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2087:20:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2077:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2077:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2070:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2070:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2067:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2135:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2145:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2135:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint24_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1924:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1935:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1947:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1878:278:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2550:358:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2567:3:84"
                                  },
                                  {
                                    "hexValue": "6b4c502d",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2572:6:84",
                                    "type": "",
                                    "value": "kLP-"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2560:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2560:19:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2560:19:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2588:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2608:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2602:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2602:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "2592:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2650:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2658:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2646:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2646:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "2669:3:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2674:1:84",
                                        "type": "",
                                        "value": "4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2665:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2665:11:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2678:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2624:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2624:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2624:61:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2694:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2708:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2713:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2704:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2704:16:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2698:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2740:2:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2744:1:84",
                                        "type": "",
                                        "value": "4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2736:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2736:10:84"
                                  },
                                  {
                                    "hexValue": "2f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2748:3:84",
                                    "type": "",
                                    "value": "/"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2729:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2729:23:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2729:23:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2761:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2783:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2777:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2777:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2765:8:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2825:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2833:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2821:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2821:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2844:2:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2848:1:84",
                                        "type": "",
                                        "value": "5"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2840:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2840:10:84"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2852:8:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2799:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2799:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2799:62:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2870:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2885:2:84"
                                      },
                                      {
                                        "name": "length_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2889:8:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2881:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2881:17:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2900:1:84",
                                    "type": "",
                                    "value": "5"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2877:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2877:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "2870:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_stringliteral_88128fd802ffcab61bb615f5267c4adf0904a425ac58e0dbd5ba48ded50c3374_t_string_memory_ptr_t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "2518:3:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2523:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2531:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "2542:3:84",
                            "type": ""
                          }
                        ],
                        "src": "2161:747:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3302:369:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3319:3:84"
                                  },
                                  {
                                    "hexValue": "4b65657033724c50202d20",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3324:13:84",
                                    "type": "",
                                    "value": "Keep3rLP - "
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3312:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3312:26:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3312:26:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3347:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3367:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3361:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3361:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "3351:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "3409:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3417:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3405:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3405:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3428:3:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3433:2:84",
                                        "type": "",
                                        "value": "11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3424:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3424:12:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3438:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3383:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3383:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3383:62:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3454:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3468:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3473:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3464:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3464:16:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3458:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3500:2:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3504:2:84",
                                        "type": "",
                                        "value": "11"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3496:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3496:11:84"
                                  },
                                  {
                                    "hexValue": "2f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3509:3:84",
                                    "type": "",
                                    "value": "/"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3489:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3489:24:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3489:24:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3522:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3544:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3538:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3538:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3526:8:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3586:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3594:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3582:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3582:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3605:2:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3609:2:84",
                                        "type": "",
                                        "value": "12"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3601:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3601:11:84"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3614:8:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3560:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3560:63:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3560:63:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3632:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3647:2:84"
                                      },
                                      {
                                        "name": "length_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "3651:8:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3643:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3643:17:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3662:2:84",
                                    "type": "",
                                    "value": "12"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3639:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3639:26:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "3632:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_stringliteral_a94178d1c412eed8fa1a51e4eb44d52d54f9449839aa27e515bcce7b97754416_t_string_memory_ptr_t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "3270:3:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3275:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3283:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "3294:3:84",
                            "type": ""
                          }
                        ],
                        "src": "2913:758:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3850:150:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3867:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3878:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3860:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3860:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3860:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3901:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3912:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3897:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3897:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3917:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3890:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3890:29:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3890:29:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3939:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3950:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3935:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3935:18:84"
                                  },
                                  {
                                    "hexValue": "54",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3955:3:84",
                                    "type": "",
                                    "value": "T"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3928:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3928:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3928:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3968:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3980:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3991:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3976:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3976:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3968:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3827:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3841:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3676:324:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4053:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4080:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "4082:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4082:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4082:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4069:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "4076:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "4072:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4072:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4066:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4066:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4063:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4111:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4122:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "4125:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4118:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4118:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "4111:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "4036:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "4039:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "4045:3:84",
                            "type": ""
                          }
                        ],
                        "src": "4005:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4184:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4207:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "4209:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4209:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4209:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "4204:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "4197:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4197:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4194:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4238:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4247:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "4250:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "4243:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4243:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "4238:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "4169:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "4172:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "4178:1:84",
                            "type": ""
                          }
                        ],
                        "src": "4138:120:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4315:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4374:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "4376:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4376:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4376:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "4346:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "4339:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4339:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "4332:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4332:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "4354:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4365:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "4361:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4361:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "4369:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "4357:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4357:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4351:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4351:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "4328:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4328:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4325:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4405:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4420:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "4423:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "4416:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4416:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "4405:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "4294:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "4297:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "4303:7:84",
                            "type": ""
                          }
                        ],
                        "src": "4263:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4483:295:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4493:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4515:1:84",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "4518:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "4504:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4504:16:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4497:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4529:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4551:1:84",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "4554:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "4540:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4540:16:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4533:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4565:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4579:3:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4584:1:84",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4575:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4575:11:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4569:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4648:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "4650:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4650:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4650:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4609:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "4602:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4602:10:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4618:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4631:7:84",
                                                "type": "",
                                                "value": "8388607"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "4627:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4627:12:84"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "4641:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "4623:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4623:22:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4614:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4614:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "4598:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4598:49:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4595:75:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4720:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "4722:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4722:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4722:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4686:2:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4694:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4703:8:84",
                                            "type": "",
                                            "value": "0x7fffff"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "4713:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "4699:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4699:18:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sgt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4690:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4690:28:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "4682:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4682:37:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4679:63:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4751:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4763:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4768:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "4759:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4759:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "4751:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "4465:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "4468:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "4474:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4436:342:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4836:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4846:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4855:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "4850:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4915:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "4940:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "4945:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "4936:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4936:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4959:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4964:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "4955:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4955:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "4949:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4949:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "4929:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4929:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4929:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "4876:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4879:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4873:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4873:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "4887:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4889:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "4898:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4901:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4894:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4894:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "4889:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "4869:3:84",
                                "statements": []
                              },
                              "src": "4865:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5004:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "5017:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "5022:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "5013:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5013:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5031:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5006:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5006:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5006:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "4993:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4996:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4990:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4990:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4987:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "4814:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "4819:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "4824:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4783:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5101:325:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5111:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5125:1:84",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "5128:4:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5121:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5121:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "5111:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5142:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "5172:4:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5178:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "5168:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5168:12:84"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "5146:18:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5219:31:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5221:27:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "5235:6:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5243:4:84",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "5231:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5231:17:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "5221:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "5199:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5192:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5192:26:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5189:61:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5309:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5330:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5337:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5342:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "5333:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5333:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5323:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5323:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5323:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5374:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5377:4:84",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5367:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5367:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5367:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5402:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5405:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5395:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5395:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5395:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "5265:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "5288:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5296:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5285:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5285:14:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "5262:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5262:38:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5259:161:84"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "5081:4:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "5090:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5046:380:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5467:130:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5477:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5499:1:84",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5502:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "5488:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5488:16:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5481:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5528:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "5530:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5530:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5530:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5523:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5516:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5516:11:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5513:37:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5559:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5580:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "x",
                                        "nodeType": "YulIdentifier",
                                        "src": "5583:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "5569:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5569:16:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5587:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "smod",
                                  "nodeType": "YulIdentifier",
                                  "src": "5564:4:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5564:27:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5559:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "5452:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "5455:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "5461:1:84",
                            "type": ""
                          }
                        ],
                        "src": "5431:166:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5640:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5663:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "5665:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5665:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5665:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5660:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5653:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5653:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5650:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5694:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5703:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5706:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "5699:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5699:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5694:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "5625:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "5628:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "5634:1:84",
                            "type": ""
                          }
                        ],
                        "src": "5602:112:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5761:142:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5771:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5797:1:84",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5800:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "5786:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5786:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5775:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5844:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "5846:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5846:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5846:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5821:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5834:7:84",
                                        "type": "",
                                        "value": "8388607"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "5830:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5830:12:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "5818:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5818:25:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5815:51:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5875:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5886:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5889:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "5882:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5882:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "5875:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "5743:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "5753:3:84",
                            "type": ""
                          }
                        ],
                        "src": "5719:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5951:93:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5987:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "5989:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5989:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5989:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5967:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5978:3:84",
                                        "type": "",
                                        "value": "255"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5983:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "5974:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5974:11:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "5964:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5964:22:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5961:48:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6018:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6029:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "6032:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "6025:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6025:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "6018:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "5933:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "5943:3:84",
                            "type": ""
                          }
                        ],
                        "src": "5908:136:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6081:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6098:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6105:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6110:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6101:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6101:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6091:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6091:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6091:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6138:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6141:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6131:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6131:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6131:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6162:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6165:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "6155:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6155:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6155:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "6049:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6213:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6230:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6237:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6242:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6233:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6233:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6223:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6223:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6223:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6270:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6273:4:84",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6263:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6263:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6263:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6294:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6297:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "6287:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6287:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6287:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "6181:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6345:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6362:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6369:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6374:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6365:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6365:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6355:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6355:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6355:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6402:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6405:4:84",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6395:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6395:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6395:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6426:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6429:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "6419:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6419:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6419:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "6313:127:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_int24_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, signextend(2, value))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_uint24_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xffffff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_packed_t_stringliteral_88128fd802ffcab61bb615f5267c4adf0904a425ac58e0dbd5ba48ded50c3374_t_string_memory_ptr_t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, \"kLP-\")\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 4), length)\n        let _1 := add(pos, length)\n        mstore(add(_1, 4), \"/\")\n        let length_1 := mload(value1)\n        copy_memory_to_memory(add(value1, 0x20), add(_1, 5), length_1)\n        end := add(add(_1, length_1), 5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_a94178d1c412eed8fa1a51e4eb44d52d54f9449839aa27e515bcce7b97754416_t_string_memory_ptr_t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, \"Keep3rLP - \")\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 11), length)\n        let _1 := add(pos, length)\n        mstore(add(_1, 11), \"/\")\n        let length_1 := mload(value1)\n        copy_memory_to_memory(add(value1, 0x20), add(_1, 12), length_1)\n        end := add(add(_1, length_1), 12)\n    }\n    function abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 1)\n        mstore(add(headStart, 64), \"T\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_int24(x, y) -> diff\n    {\n        let x_1 := signextend(2, x)\n        let y_1 := signextend(2, y)\n        let _1 := slt(y_1, 0)\n        if and(iszero(_1), slt(x_1, add(not(8388607), y_1))) { panic_error_0x11() }\n        if and(_1, sgt(x_1, add(0x7fffff, y_1))) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function mod_t_int24(x, y) -> r\n    {\n        let y_1 := signextend(2, y)\n        if iszero(y_1) { panic_error_0x12() }\n        r := smod(signextend(2, x), y_1)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function negate_t_int24(value) -> ret\n    {\n        let value_1 := signextend(2, value)\n        if eq(value_1, not(8388607)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function negate_t_int256(value) -> ret\n    {\n        if eq(value, shl(255, 1)) { panic_error_0x11() }\n        ret := sub(0, value)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "6101c06040523480156200001257600080fd5b506040516200350f3803806200350f833981016040819052620000359162000b65565b8181806001600160a01b0381166200005f5760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b039283161781556040805163ddca3f4360e01b81529051919285169163ddca3f4391600480820192602092909190829003018186803b158015620000b757600080fd5b505afa158015620000cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f2919062000c7a565b90506000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200013057600080fd5b505afa15801562000145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016b919062000b40565b90506000846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620001a957600080fd5b505afa158015620001be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e4919062000b40565b90506000856001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022257600080fd5b505afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d919062000b9d565b905060006200027082620d89e862000e5a565b6200027f90620d89e862000d9c565b905060006200028e8262000e96565b33606090811b60805289811b6001600160601b031990811660e05260e889811b6001600160e81b03191661010052600287810b810b821b6101a05286810b810b821b6101805284810b900b901b6101605287821b811660a0529086901b1660c052604080516395d89b4160e01b815290519192506001600160a01b038716916395d89b4191600480820192600092909190829003018186803b1580156200033457600080fd5b505afa15801562000349573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000373919081019062000bc2565b846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620003ad57600080fd5b505afa158015620003c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003ec919081019062000bc2565b604051602001620003ff92919062000cf1565b604051602081830303815290604052600290805190602001906200042592919062000a7d565b50846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200046057600080fd5b505afa15801562000475573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200049f919081019062000bc2565b846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620004d957600080fd5b505afa158015620004ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000518919081019062000bc2565b6040516020016200052b92919062000ca1565b604051602081830303815290604052600390805190602001906200055192919062000a7d565b5062000568816200061b60201b6200117e1760201c565b6001600160a01b0316610120816001600160a01b031660601b815250506200059b826200061b60201b6200117e1760201c565b606090811b6001600160601b031916610140526040805191820181526001600160a01b03968716808352959096166020820181905262ffffff9790971695018590525050600780546001600160a01b03191690921790915550600880546001600160b81b031916909217600160a01b9091021790555062000f1e92505050565b60008060008360020b1262000634578260020b62000643565b8260020b620006439062000ebc565b905062000654620d89e71962000e96565b60020b8111156200068f5760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b600060018216620006a557600160801b620006b7565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615620006ef576080620006ea826ffff97272373d413259a46990580e213a62000d7a565b901c90505b60048216156200071c57608062000717826ffff2e50f5f656932ef12357cf3c7fdcc62000d7a565b901c90505b60088216156200074957608062000744826fffe5caca7e10e4e61c3624eaa0941cd062000d7a565b901c90505b60108216156200077657608062000771826fffcb9843d60f6159c9db58835c92664462000d7a565b901c90505b6020821615620007a35760806200079e826fff973b41fa98c081472e6896dfb254c062000d7a565b901c90505b6040821615620007d0576080620007cb826fff2ea16466c96a3843ec78b326b5286162000d7a565b901c90505b6080821615620007fd576080620007f8826ffe5dee046a99a2a811c461f1969c305362000d7a565b901c90505b6101008216156200082b57608062000826826ffcbe86c7900a88aedcffc83b479aa3a462000d7a565b901c90505b6102008216156200085957608062000854826ff987a7253ac413176f2b074cf7815e5462000d7a565b901c90505b6104008216156200088757608062000882826ff3392b0822b70005940c7a398e4b70f362000d7a565b901c90505b610800821615620008b5576080620008b0826fe7159475a2c29b7443b29c7fa6e889d962000d7a565b901c90505b611000821615620008e3576080620008de826fd097f3bdfd2022b8845ad8f792aa582562000d7a565b901c90505b612000821615620009115760806200090c826fa9f746462d870fdf8a65dc1f90e061e562000d7a565b901c90505b6140008216156200093f5760806200093a826f70d869a156d2a1b890bb3df62baf32f762000d7a565b901c90505b6180008216156200096d57608062000968826f31be135f97d08fd981231505542fcfa662000d7a565b901c90505b620100008216156200099c57608062000997826f09aa508b5b7a84e1c677de54f3e99bc962000d7a565b901c90505b62020000821615620009ca576080620009c5826e5d6af8dedb81196699c329225ee60462000d7a565b901c90505b62040000821615620009f7576080620009f2826d2216e584f5fa1ea926041bedfe9862000d7a565b901c90505b6208000082161562000a2257608062000a1d826b048a170391f7dc42444e8fa262000d7a565b901c90505b60008460020b131562000a405762000a3d8160001962000d63565b90505b62000a516401000000008262000e7f565b1562000a5f57600162000a62565b60005b62000a759060ff16602083901c62000d48565b949350505050565b82805462000a8b9062000e1d565b90600052602060002090601f01602090048101928262000aaf576000855562000afa565b82601f1062000aca57805160ff191683800117855562000afa565b8280016001018555821562000afa579182015b8281111562000afa57825182559160200191906001019062000add565b5062000b0892915062000b0c565b5090565b5b8082111562000b08576000815560010162000b0d565b80516001600160a01b038116811462000b3b57600080fd5b919050565b60006020828403121562000b5357600080fd5b62000b5e8262000b23565b9392505050565b6000806040838503121562000b7957600080fd5b62000b848362000b23565b915062000b946020840162000b23565b90509250929050565b60006020828403121562000bb057600080fd5b81518060020b811462000b5e57600080fd5b60006020828403121562000bd557600080fd5b81516001600160401b038082111562000bed57600080fd5b818401915084601f83011262000c0257600080fd5b81518181111562000c175762000c1762000f08565b604051601f8201601f19908116603f0116810190838211818310171562000c425762000c4262000f08565b8160405282815287602084870101111562000c5c57600080fd5b62000c6f83602083016020880162000dea565b979650505050505050565b60006020828403121562000c8d57600080fd5b815162ffffff8116811462000b5e57600080fd5b636b4c502d60e01b81526000835162000cc281600485016020880162000dea565b602f60f81b600491840191820152835162000ce581600584016020880162000dea565b01600501949350505050565b6a025b2b2b819b926281016960ad1b81526000835162000d1981600b85016020880162000dea565b602f60f81b600b91840191820152835162000d3c81600c84016020880162000dea565b01600c01949350505050565b6000821982111562000d5e5762000d5e62000edc565b500190565b60008262000d755762000d7562000ef2565b500490565b600081600019048311821515161562000d975762000d9762000edc565b500290565b60008160020b8360020b6000811281627fffff190183128115161562000dc65762000dc662000edc565b81627fffff01831381161562000de05762000de062000edc565b5090039392505050565b60005b8381101562000e0757818101518382015260200162000ded565b8381111562000e17576000848401525b50505050565b600181811c9082168062000e3257607f821691505b6020821081141562000e5457634e487b7160e01b600052602260045260246000fd5b50919050565b60008260020b8062000e705762000e7062000ef2565b808360020b0791505092915050565b60008262000e915762000e9162000ef2565b500690565b60008160020b627fffff1981141562000eb35762000eb362000edc565b60000392915050565b6000600160ff1b82141562000ed55762000ed562000edc565b5060000390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160601c60a05160601c60c05160601c60e05160601c6101005160e81c6101205160601c6101405160601c6101605160e81c6101805160e81c6101a05160e81c6124af6200106060003960006106430152600081816103ec0152818161087701528181610c6701528181610dbe01528181610fb5015281816110df01526118e80152600081816104330152818161085601528181610c3c01528181610d9c01528181610f94015281816110bd01526118c60152600081816105ba01526117de01526000818161033101526117bd015260006107030152600081816102a20152818161082601528181610cab01528181610d6d01528181610e7401528181610ec701528181610f0501528181610f640152818161108a01528181611720015261189501526000610677015260006102610152600061058601526124af6000f3fe60806040526004361061019d5760003560e01c806395d89b41116100dd57806395d89b41146104a2578063a3e6dc28146104b7578063a5dc7d4d146104ef578063a9059cbb14610534578063ab033ea914610554578063c45a015514610574578063c6275261146105a8578063cf45affb146105dc578063cf51148d146105fc578063d0c93a7c14610631578063d21220a714610665578063d348799714610699578063dd62ed3e146106b9578063ddca3f43146106f1578063e522538114610739578063eaf00b231461074e578063f39c38a01461076e57600080fd5b806306fdde03146101a957806309218e91146101d4578063095ea7b31461021f5780630dfe16811461024f57806316f0115b1461029057806318160ddd146102c4578063238efcbc146102e857806323b872dd146102ff5780632ea28f5b1461031f578063313ce5671461035357806335001a1a1461037a5780633a323bdf1461039a5780634c0549b0146103ba57806355b812a8146103da57806359c4f905146104215780635aa6e6751461045557806370a082311461047557600080fd5b366101a457005b600080fd5b3480156101b557600080fd5b506101be61078e565b6040516101cb9190612272565b60405180910390f35b3480156101e057600080fd5b506101e961081c565b604080516001600160801b039687168152602081019590955284019290925283166060830152909116608082015260a0016101cb565b34801561022b57600080fd5b5061023f61023a366004611dcf565b61093d565b60405190151581526020016101cb565b34801561025b57600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b6040516101cb91906121d1565b34801561029c57600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b3480156102d057600080fd5b506102da60045481565b6040519081526020016101cb565b3480156102f457600080fd5b506102fd6109a9565b005b34801561030b57600080fd5b5061023f61031a366004611d8e565b610a35565b34801561032b57600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b34801561035f57600080fd5b50610368601281565b60405160ff90911681526020016101cb565b34801561038657600080fd5b506102fd610395366004611dcf565b610afe565b3480156103a657600080fd5b506102fd6103b5366004611dcf565b610b0c565b3480156103c657600080fd5b506102fd6103d5366004611d3d565b610b16565b3480156103e657600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000081565b60405160029190910b81526020016101cb565b34801561042d57600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561046157600080fd5b50600054610283906001600160a01b031681565b34801561048157600080fd5b506102da610490366004611ce7565b60066020526000908152604090205481565b3480156104ae57600080fd5b506101be610b28565b3480156104c357600080fd5b506104d76104d236600461211a565b610b35565b6040516001600160801b0390911681526020016101cb565b3480156104fb57600080fd5b5061050f61050a3660046120e8565b610b65565b604080516001600160801b0390941684526020840192909252908201526060016101cb565b34801561054057600080fd5b5061023f61054f366004611dcf565b610b86565b34801561056057600080fd5b506102fd61056f366004611ce7565b610b9c565b34801561058057600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b457600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e857600080fd5b506102fd6105f7366004611d8e565b610c1d565b34801561060857600080fd5b5061061c610617366004611eff565b610c2d565b604080519283526020830191909152016101cb565b34801561063d57600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067157600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b3480156106a557600080fd5b506102fd6106b4366004612069565b610e59565b3480156106c557600080fd5b506102da6106d4366004611d04565b600560209081526000928352604080842090915290825290205481565b3480156106fd57600080fd5b506107257f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff90911681526020016101cb565b34801561074557600080fd5b5061061c610f31565b34801561075a57600080fd5b506102fd610769366004611d3d565b611172565b34801561077a57600080fd5b50600154610283906001600160a01b031681565b6002805461079b90612371565b80601f01602080910402602001604051908101604052809291908181526020018280546107c790612371565b80156108145780601f106107e957610100808354040283529160200191610814565b820191906000526020600020905b8154815290600101906020018083116107f757829003601f168201915b505050505081565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf307f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006040516020016108a893929190612185565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016108dc91815260200190565b60a06040518083038186803b1580156108f457600080fd5b505afa158015610908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092c9190611f49565b939992985090965094509092509050565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109989086815260200190565b60405180910390a350600192915050565b6001546001600160a01b031633146109d457604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b691610a2b916121d1565b60405180910390a1565b6001600160a01b038316600081815260056020908152604080832033808552925282205491929091908214801590610a6f57506000198114155b15610ae5576000610a80858361232e565b6001600160a01b038881166000818152600560209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b610af0868686611594565b6001925050505b9392505050565b610b088282611630565b5050565b610b0882826116a8565b610b2284848484611172565b50505050565b6003805461079b90612371565b6000610b4386868686611718565b50909150610b5c9050826001600160801b038316611630565b95945050505050565b6000806000610b7687878787611718565b9250925092509450945094915050565b6000610b93338484611594565b50600192915050565b6000546001600160a01b03163314610bc7576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610c129083906121d1565b60405180910390a150565b610c28838383611594565b505050565b60405163a34123a760e01b81527f0000000000000000000000000000000000000000000000000000000000000000600290810b60048301527f0000000000000000000000000000000000000000000000000000000000000000900b60248201526001600160801b038516604482015260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a34123a7906064016040805180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d269190612045565b909250905084821080610d3857508381105b15610d56576040516397c7f53760e01b815260040160405180910390fd5b6040516309e3d67b60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634f1eb3d890610dea9086907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401612235565b6040805180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3b9190611ed0565b5050610e5033876001600160801b03166116a8565b94509492505050565b6000610e6782840184611e16565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610eb257604051634b60273560e01b815260040160405180910390fd5b8415610eec578051516020820151610eec91907f000000000000000000000000000000000000000000000000000000000000000088611172565b8315610f2a57610f2a81600001516020015182602001517f000000000000000000000000000000000000000000000000000000000000000087611172565b5050505050565b6000805481906001600160a01b03163314610f5f576040516354348f0360e01b815260040160405180910390fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf307f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000604051602001610fe693929190612185565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161101a91815260200190565b60a06040518083038186803b15801561103257600080fd5b505afa158015611046573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106a9190611f49565b6000546040516309e3d67b60e31b81529297509095506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169550634f1eb3d8945061110b935016907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401612235565b6040805180830381600087803b15801561112457600080fd5b505af1158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190611ed0565b6001600160801b03918216969116945092505050565b610b228484848461199f565b60008060008360020b12611195578260020b6111a2565b8260020b6111a2906123e3565b90506111b1620d89e7196123c0565b60020b8111156111eb5760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b6000600182166111ff57600160801b611211565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615611246576080611241826ffff97272373d413259a46990580e213a6122e7565b901c90505b600482161561127057608061126b826ffff2e50f5f656932ef12357cf3c7fdcc6122e7565b901c90505b600882161561129a576080611295826fffe5caca7e10e4e61c3624eaa0941cd06122e7565b901c90505b60108216156112c45760806112bf826fffcb9843d60f6159c9db58835c9266446122e7565b901c90505b60208216156112ee5760806112e9826fff973b41fa98c081472e6896dfb254c06122e7565b901c90505b6040821615611318576080611313826fff2ea16466c96a3843ec78b326b528616122e7565b901c90505b608082161561134257608061133d826ffe5dee046a99a2a811c461f1969c30536122e7565b901c90505b61010082161561136d576080611368826ffcbe86c7900a88aedcffc83b479aa3a46122e7565b901c90505b610200821615611398576080611393826ff987a7253ac413176f2b074cf7815e546122e7565b901c90505b6104008216156113c35760806113be826ff3392b0822b70005940c7a398e4b70f36122e7565b901c90505b6108008216156113ee5760806113e9826fe7159475a2c29b7443b29c7fa6e889d96122e7565b901c90505b611000821615611419576080611414826fd097f3bdfd2022b8845ad8f792aa58256122e7565b901c90505b61200082161561144457608061143f826fa9f746462d870fdf8a65dc1f90e061e56122e7565b901c90505b61400082161561146f57608061146a826f70d869a156d2a1b890bb3df62baf32f76122e7565b901c90505b61800082161561149a576080611495826f31be135f97d08fd981231505542fcfa66122e7565b901c90505b620100008216156114c65760806114c1826f09aa508b5b7a84e1c677de54f3e99bc96122e7565b901c90505b620200008216156114f15760806114ec826e5d6af8dedb81196699c329225ee6046122e7565b901c90505b6204000082161561151b576080611516826d2216e584f5fa1ea926041bedfe986122e7565b901c90505b6208000082161561154357608061153e826b048a170391f7dc42444e8fa26122e7565b901c90505b60008460020b131561155e5761155b816000196122d3565b90505b61156c600160201b826123ac565b1561157857600161157b565b60005b61158c9060ff16602083901c6122bb565b949350505050565b6001600160a01b038316600090815260066020526040812080548392906115bc90849061232e565b90915550506001600160a01b038216600090815260066020526040812080548392906115e99084906122bb565b92505081905550816001600160a01b0316836001600160a01b031660008051602061245a8339815191528360405161162391815260200190565b60405180910390a3505050565b806004600082825461164291906122bb565b90915550506001600160a01b0382166000908152600660205260408120805483929061166f9084906122bb565b90915550506040518181526001600160a01b0383169060009060008051602061245a833981519152906020015b60405180910390a35050565b80600460008282546116ba919061232e565b90915550506001600160a01b038216600090815260066020526040812080548392906116e790849061232e565b90915550506040518181526000906001600160a01b0384169060008051602061245a8339815191529060200161169c565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561177757600080fd5b505afa15801561178b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117af9190611fab565b5050505050509050611804817f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008b8b611a99565b6040805160a080820183526007546001600160a01b039081168385018181526008548084166060808801918252600160a01b90920462ffffff9081166080808a01918252948952336020998a019081528a51998a019690965291518616888a01529051169086015290518216848201528451808503909101815291830193849052633c8a7d8d60e01b9093529296507f000000000000000000000000000000000000000000000000000000000000000090911691633c8a7d8d916119139130917f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000918b919060a4016121e5565b6040805180830381600087803b15801561192c57600080fd5b505af1158015611940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119649190612045565b90935091508583108061197657508482105b15611994576040516397c7f53760e01b815260040160405180910390fd5b509450945094915050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691611a0391906121b5565b6000604051808303816000865af19150503d8060008114611a40576040519150601f19603f3d011682016040523d82523d6000602084013e611a45565b606091505b5091509150811580611a735750805115801590611a73575080806020019051810190611a719190611dfb565b155b15611a91576040516316369daf60e31b815260040160405180910390fd5b505050505050565b6000836001600160a01b0316856001600160a01b03161115611ab9579293925b846001600160a01b0316866001600160a01b031611611ae457611add858585611b5b565b9050610b5c565b836001600160a01b0316866001600160a01b03161015611b46576000611b0b878686611b5b565b90506000611b1a878986611bc5565b9050806001600160801b0316826001600160801b031610611b3b5780611b3d565b815b92505050610b5c565b611b51858584611bc5565b9695505050505050565b6000826001600160a01b0316846001600160a01b03161115611b7b579192915b6000611b9e856001600160a01b0316856001600160a01b0316600160601b611bfb565b9050610b5c611bc08483611bb28989612306565b6001600160a01b0316611bfb565b611caa565b6000826001600160a01b0316846001600160a01b03161115611be5579192915b61158c611bc083600160601b611bb28888612306565b600080806000198587098587029250828110838203039150508060001415611c355760008411611c2a57600080fd5b508290049050610af7565b808411611c4157600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b806001600160801b0381168114611cc057600080fd5b919050565b80518015158114611cc057600080fd5b805161ffff81168114611cc057600080fd5b600060208284031215611cf957600080fd5b8135610af78161242c565b60008060408385031215611d1757600080fd5b8235611d228161242c565b91506020830135611d328161242c565b809150509250929050565b60008060008060808587031215611d5357600080fd5b8435611d5e8161242c565b93506020850135611d6e8161242c565b92506040850135611d7e8161242c565b9396929550929360600135925050565b600080600060608486031215611da357600080fd5b8335611dae8161242c565b92506020840135611dbe8161242c565b929592945050506040919091013590565b60008060408385031215611de257600080fd5b8235611ded8161242c565b946020939093013593505050565b600060208284031215611e0d57600080fd5b610af782611cc5565b60008183036080811215611e2957600080fd5b604051604081018181106001600160401b0382111715611e5957634e487b7160e01b600052604160045260246000fd5b6040526060821215611e6a57600080fd5b611e72612285565b91508335611e7f8161242c565b82526020840135611e8f8161242c565b6020830152604084013562ffffff81168114611eaa57600080fd5b6040830152908152606083013590611ec18261242c565b60208101919091529392505050565b60008060408385031215611ee357600080fd5b8251611eee81612444565b6020840151909250611d3281612444565b60008060008060808587031215611f1557600080fd5b8435611f2081612444565b935060208501359250604085013591506060850135611f3e8161242c565b939692955090935050565b600080600080600060a08688031215611f6157600080fd5b8551611f6c81612444565b8095505060208601519350604086015192506060860151611f8c81612444565b6080870151909250611f9d81612444565b809150509295509295909350565b600080600080600080600060e0888a031215611fc657600080fd5b8751611fd18161242c565b8097505060208801518060020b8114611fe957600080fd5b9550611ff760408901611cd5565b945061200560608901611cd5565b935061201360808901611cd5565b925060a088015160ff8116811461202957600080fd5b915061203760c08901611cc5565b905092959891949750929550565b6000806040838503121561205857600080fd5b505080516020909101519092909150565b6000806000806060858703121561207f57600080fd5b843593506020850135925060408501356001600160401b03808211156120a457600080fd5b818701915087601f8301126120b857600080fd5b8135818111156120c757600080fd5b8860208285010111156120d957600080fd5b95989497505060200194505050565b600080600080608085870312156120fe57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a0868803121561213257600080fd5b853594506020860135935060408601359250606086013591506080860135611f9d8161242c565b60008151808452612171816020860160208601612345565b601f01601f19169290920160200192915050565b60609390931b6001600160601b0319168352600291820b60e890811b6014850152910b901b6017820152601a0190565b600082516121c7818460208701612345565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a06080820181905260009061222a90830184612159565b979650505050505050565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b602081526000610af76020830184612159565b604051606081016001600160401b03811182821017156122b557634e487b7160e01b600052604160045260246000fd5b60405290565b600082198211156122ce576122ce612400565b500190565b6000826122e2576122e2612416565b500490565b600081600019048311821515161561230157612301612400565b500290565b60006001600160a01b038381169083168181101561232657612326612400565b039392505050565b60008282101561234057612340612400565b500390565b60005b83811015612360578181015183820152602001612348565b83811115610b225750506000910152565b600181811c9082168061238557607f821691505b602082108114156123a657634e487b7160e01b600052602260045260246000fd5b50919050565b6000826123bb576123bb612416565b500690565b60008160020b627fffff198114156123da576123da612400565b60000392915050565b6000600160ff1b8214156123f9576123f9612400565b5060000390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b038116811461244157600080fd5b50565b6001600160801b038116811461244157600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201a704c8e37e1e82766bcb1a581d023543cda75e44321d2c4f004756e33c2e74a64736f6c63430008070033",
              "opcodes": "PUSH2 0x1C0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x350F CODESIZE SUB DUP1 PUSH3 0x350F DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0xB65 JUMP JUMPDEST DUP2 DUP2 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x5F JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xDDCA3F43 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 DUP6 AND SWAP2 PUSH4 0xDDCA3F43 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xF2 SWAP2 SWAP1 PUSH3 0xC7A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDFE1681 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x145 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x16B SWAP2 SWAP1 PUSH3 0xB40 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD21220A7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1E4 SWAP2 SWAP1 PUSH3 0xB40 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0C93A7C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x237 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x25D SWAP2 SWAP1 PUSH3 0xB9D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x270 DUP3 PUSH3 0xD89E8 PUSH3 0xE5A JUMP JUMPDEST PUSH3 0x27F SWAP1 PUSH3 0xD89E8 PUSH3 0xD9C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x28E DUP3 PUSH3 0xE96 JUMP JUMPDEST CALLER PUSH1 0x60 SWAP1 DUP2 SHL PUSH1 0x80 MSTORE DUP10 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0xE0 MSTORE PUSH1 0xE8 DUP10 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE8 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x2 DUP8 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP3 SHL PUSH2 0x1A0 MSTORE DUP7 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP3 SHL PUSH2 0x180 MSTORE DUP5 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP1 SHL PUSH2 0x160 MSTORE DUP8 DUP3 SHL DUP2 AND PUSH1 0xA0 MSTORE SWAP1 DUP7 SWAP1 SHL AND PUSH1 0xC0 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x95D89B41 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x95D89B41 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x349 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x373 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBC2 JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x3C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x3EC SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBC2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH3 0x3FF SWAP3 SWAP2 SWAP1 PUSH3 0xCF1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x2 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x425 SWAP3 SWAP2 SWAP1 PUSH3 0xA7D JUMP JUMPDEST POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x475 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x49F SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBC2 JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x4D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x4EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH3 0x518 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH3 0xBC2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH3 0x52B SWAP3 SWAP2 SWAP1 PUSH3 0xCA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x551 SWAP3 SWAP2 SWAP1 PUSH3 0xA7D JUMP JUMPDEST POP PUSH3 0x568 DUP2 PUSH3 0x61B PUSH1 0x20 SHL PUSH3 0x117E OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH3 0x59B DUP3 PUSH3 0x61B PUSH1 0x20 SHL PUSH3 0x117E OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x60 SWAP1 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x140 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 ADD DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND DUP1 DUP4 MSTORE SWAP6 SWAP1 SWAP7 AND PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH3 0xFFFFFF SWAP8 SWAP1 SWAP8 AND SWAP6 ADD DUP6 SWAP1 MSTORE POP POP PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xB8 SHL SUB NOT AND SWAP1 SWAP3 OR PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 MUL OR SWAP1 SSTORE POP PUSH3 0xF1E SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH3 0x634 JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH3 0x643 JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH3 0x643 SWAP1 PUSH3 0xEBC JUMP JUMPDEST SWAP1 POP PUSH3 0x654 PUSH3 0xD89E7 NOT PUSH3 0xE96 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH3 0x68F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH3 0x6A5 JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH3 0x6B7 JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH3 0x6EF JUMPI PUSH1 0x80 PUSH3 0x6EA DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH3 0x71C JUMPI PUSH1 0x80 PUSH3 0x717 DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH3 0x749 JUMPI PUSH1 0x80 PUSH3 0x744 DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH3 0x776 JUMPI PUSH1 0x80 PUSH3 0x771 DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH3 0x7A3 JUMPI PUSH1 0x80 PUSH3 0x79E DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH3 0x7D0 JUMPI PUSH1 0x80 PUSH3 0x7CB DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH3 0x7FD JUMPI PUSH1 0x80 PUSH3 0x7F8 DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH3 0x82B JUMPI PUSH1 0x80 PUSH3 0x826 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH3 0x859 JUMPI PUSH1 0x80 PUSH3 0x854 DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH3 0x887 JUMPI PUSH1 0x80 PUSH3 0x882 DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH3 0x8B5 JUMPI PUSH1 0x80 PUSH3 0x8B0 DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH3 0x8E3 JUMPI PUSH1 0x80 PUSH3 0x8DE DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH3 0x911 JUMPI PUSH1 0x80 PUSH3 0x90C DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH3 0x93F JUMPI PUSH1 0x80 PUSH3 0x93A DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH3 0x96D JUMPI PUSH1 0x80 PUSH3 0x968 DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH3 0x99C JUMPI PUSH1 0x80 PUSH3 0x997 DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH3 0x9CA JUMPI PUSH1 0x80 PUSH3 0x9C5 DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH3 0x9F7 JUMPI PUSH1 0x80 PUSH3 0x9F2 DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH3 0xA22 JUMPI PUSH1 0x80 PUSH3 0xA1D DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH3 0xD7A JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH3 0xA40 JUMPI PUSH3 0xA3D DUP2 PUSH1 0x0 NOT PUSH3 0xD63 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH3 0xA51 PUSH5 0x100000000 DUP3 PUSH3 0xE7F JUMP JUMPDEST ISZERO PUSH3 0xA5F JUMPI PUSH1 0x1 PUSH3 0xA62 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH3 0xA75 SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH3 0xD48 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0xA8B SWAP1 PUSH3 0xE1D JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0xAAF JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0xAFA JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0xACA JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xAFA JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xAFA JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xAFA JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xADD JUMP JUMPDEST POP PUSH3 0xB08 SWAP3 SWAP2 POP PUSH3 0xB0C JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0xB08 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0xB0D JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0xB3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xB53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xB5E DUP3 PUSH3 0xB23 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0xB79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xB84 DUP4 PUSH3 0xB23 JUMP JUMPDEST SWAP2 POP PUSH3 0xB94 PUSH1 0x20 DUP5 ADD PUSH3 0xB23 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xBB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH3 0xB5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xBD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0xBED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH3 0xC02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0xC17 JUMPI PUSH3 0xC17 PUSH3 0xF08 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0xC42 JUMPI PUSH3 0xC42 PUSH3 0xF08 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP8 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0xC5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0xC6F DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDEA JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0xC8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH3 0xB5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x6B4C502D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH3 0xCC2 DUP2 PUSH1 0x4 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDEA JUMP JUMPDEST PUSH1 0x2F PUSH1 0xF8 SHL PUSH1 0x4 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH3 0xCE5 DUP2 PUSH1 0x5 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDEA JUMP JUMPDEST ADD PUSH1 0x5 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH11 0x25B2B2B819B9262810169 PUSH1 0xAD SHL DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH3 0xD19 DUP2 PUSH1 0xB DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDEA JUMP JUMPDEST PUSH1 0x2F PUSH1 0xF8 SHL PUSH1 0xB SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH3 0xD3C DUP2 PUSH1 0xC DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH3 0xDEA JUMP JUMPDEST ADD PUSH1 0xC ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH3 0xD5E JUMPI PUSH3 0xD5E PUSH3 0xEDC JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0xD75 JUMPI PUSH3 0xD75 PUSH3 0xEF2 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH3 0xD97 JUMPI PUSH3 0xD97 PUSH3 0xEDC JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND DUP4 PUSH1 0x2 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH3 0x7FFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH3 0xDC6 JUMPI PUSH3 0xDC6 PUSH3 0xEDC JUMP JUMPDEST DUP2 PUSH3 0x7FFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH3 0xDE0 JUMPI PUSH3 0xDE0 PUSH3 0xEDC JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xE07 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xDED JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0xE17 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0xE32 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0xE54 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x2 SIGNEXTEND DUP1 PUSH3 0xE70 JUMPI PUSH3 0xE70 PUSH3 0xEF2 JUMP JUMPDEST DUP1 DUP4 PUSH1 0x2 SIGNEXTEND SMOD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0xE91 JUMPI PUSH3 0xE91 PUSH3 0xEF2 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH3 0xEB3 JUMPI PUSH3 0xEB3 PUSH3 0xEDC JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH3 0xED5 JUMPI PUSH3 0xED5 PUSH3 0xEDC JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0xE8 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH1 0x60 SHR PUSH2 0x160 MLOAD PUSH1 0xE8 SHR PUSH2 0x180 MLOAD PUSH1 0xE8 SHR PUSH2 0x1A0 MLOAD PUSH1 0xE8 SHR PUSH2 0x24AF PUSH3 0x1060 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x643 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3EC ADD MSTORE DUP2 DUP2 PUSH2 0x877 ADD MSTORE DUP2 DUP2 PUSH2 0xC67 ADD MSTORE DUP2 DUP2 PUSH2 0xDBE ADD MSTORE DUP2 DUP2 PUSH2 0xFB5 ADD MSTORE DUP2 DUP2 PUSH2 0x10DF ADD MSTORE PUSH2 0x18E8 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x433 ADD MSTORE DUP2 DUP2 PUSH2 0x856 ADD MSTORE DUP2 DUP2 PUSH2 0xC3C ADD MSTORE DUP2 DUP2 PUSH2 0xD9C ADD MSTORE DUP2 DUP2 PUSH2 0xF94 ADD MSTORE DUP2 DUP2 PUSH2 0x10BD ADD MSTORE PUSH2 0x18C6 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x5BA ADD MSTORE PUSH2 0x17DE ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x331 ADD MSTORE PUSH2 0x17BD ADD MSTORE PUSH1 0x0 PUSH2 0x703 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2A2 ADD MSTORE DUP2 DUP2 PUSH2 0x826 ADD MSTORE DUP2 DUP2 PUSH2 0xCAB ADD MSTORE DUP2 DUP2 PUSH2 0xD6D ADD MSTORE DUP2 DUP2 PUSH2 0xE74 ADD MSTORE DUP2 DUP2 PUSH2 0xEC7 ADD MSTORE DUP2 DUP2 PUSH2 0xF05 ADD MSTORE DUP2 DUP2 PUSH2 0xF64 ADD MSTORE DUP2 DUP2 PUSH2 0x108A ADD MSTORE DUP2 DUP2 PUSH2 0x1720 ADD MSTORE PUSH2 0x1895 ADD MSTORE PUSH1 0x0 PUSH2 0x677 ADD MSTORE PUSH1 0x0 PUSH2 0x261 ADD MSTORE PUSH1 0x0 PUSH2 0x586 ADD MSTORE PUSH2 0x24AF PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x19D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x95D89B41 GT PUSH2 0xDD JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xA3E6DC28 EQ PUSH2 0x4B7 JUMPI DUP1 PUSH4 0xA5DC7D4D EQ PUSH2 0x4EF JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x534 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x554 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x574 JUMPI DUP1 PUSH4 0xC6275261 EQ PUSH2 0x5A8 JUMPI DUP1 PUSH4 0xCF45AFFB EQ PUSH2 0x5DC JUMPI DUP1 PUSH4 0xCF51148D EQ PUSH2 0x5FC JUMPI DUP1 PUSH4 0xD0C93A7C EQ PUSH2 0x631 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x665 JUMPI DUP1 PUSH4 0xD3487997 EQ PUSH2 0x699 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6B9 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x6F1 JUMPI DUP1 PUSH4 0xE5225381 EQ PUSH2 0x739 JUMPI DUP1 PUSH4 0xEAF00B23 EQ PUSH2 0x74E JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x76E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1A9 JUMPI DUP1 PUSH4 0x9218E91 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x24F JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x290 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2C4 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x2E8 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0x2EA28F5B EQ PUSH2 0x31F JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x353 JUMPI DUP1 PUSH4 0x35001A1A EQ PUSH2 0x37A JUMPI DUP1 PUSH4 0x3A323BDF EQ PUSH2 0x39A JUMPI DUP1 PUSH4 0x4C0549B0 EQ PUSH2 0x3BA JUMPI DUP1 PUSH4 0x55B812A8 EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x59C4F905 EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x455 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x1A4 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE PUSH2 0x78E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x2272 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E9 PUSH2 0x81C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x23A CALLDATASIZE PUSH1 0x4 PUSH2 0x1DCF JUMP JUMPDEST PUSH2 0x93D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x21D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x9A9 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x30B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x31A CALLDATASIZE PUSH1 0x4 PUSH2 0x1D8E JUMP JUMPDEST PUSH2 0xA35 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x368 PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x386 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x395 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DCF JUMP JUMPDEST PUSH2 0xAFE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x3B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DCF JUMP JUMPDEST PUSH2 0xB0C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D3D JUMP JUMPDEST PUSH2 0xB16 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x2 SWAP2 SWAP1 SWAP2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40E PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x461 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH2 0x283 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x481 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH2 0x490 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CE7 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE PUSH2 0xB28 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D7 PUSH2 0x4D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x211A JUMP JUMPDEST PUSH2 0xB35 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x50F PUSH2 0x50A CALLDATASIZE PUSH1 0x4 PUSH2 0x20E8 JUMP JUMPDEST PUSH2 0xB65 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x540 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x54F CALLDATASIZE PUSH1 0x4 PUSH2 0x1DCF JUMP JUMPDEST PUSH2 0xB86 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x560 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x56F CALLDATASIZE PUSH1 0x4 PUSH2 0x1CE7 JUMP JUMPDEST PUSH2 0xB9C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x580 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x5F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D8E JUMP JUMPDEST PUSH2 0xC1D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x608 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x61C PUSH2 0x617 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EFF JUMP JUMPDEST PUSH2 0xC2D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40E PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x671 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x6B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2069 JUMP JUMPDEST PUSH2 0xE59 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH2 0x6D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D04 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x725 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0xFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x745 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x61C PUSH2 0xF31 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x75A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x769 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D3D JUMP JUMPDEST PUSH2 0x1172 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x77A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH2 0x283 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH2 0x79B SWAP1 PUSH2 0x2371 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x7C7 SWAP1 PUSH2 0x2371 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x814 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x7E9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x814 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x7F7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x514EA4BF ADDRESS PUSH32 0x0 PUSH32 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x8A8 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2185 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8DC SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x908 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x92C SWAP2 SWAP1 PUSH2 0x1F49 JUMP JUMPDEST SWAP4 SWAP10 SWAP3 SWAP9 POP SWAP1 SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x998 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0xA2B SWAP2 PUSH2 0x21D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP3 KECCAK256 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0xA6F JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0xAE5 JUMPI PUSH1 0x0 PUSH2 0xA80 DUP6 DUP4 PUSH2 0x232E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST PUSH2 0xAF0 DUP7 DUP7 DUP7 PUSH2 0x1594 JUMP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xB08 DUP3 DUP3 PUSH2 0x1630 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xB08 DUP3 DUP3 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0xB22 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1172 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH2 0x79B SWAP1 PUSH2 0x2371 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB43 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1718 JUMP JUMPDEST POP SWAP1 SWAP2 POP PUSH2 0xB5C SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH2 0x1630 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xB76 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1718 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB93 CALLER DUP5 DUP5 PUSH2 0x1594 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBC7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0xC12 SWAP1 DUP4 SWAP1 PUSH2 0x21D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xC28 DUP4 DUP4 DUP4 PUSH2 0x1594 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA34123A7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH32 0x0 PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 SWAP1 SIGNEXTEND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP6 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xA34123A7 SWAP1 PUSH1 0x64 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD02 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD26 SWAP2 SWAP1 PUSH2 0x2045 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP DUP5 DUP3 LT DUP1 PUSH2 0xD38 JUMPI POP DUP4 DUP2 LT JUMPDEST ISZERO PUSH2 0xD56 JUMPI PUSH1 0x40 MLOAD PUSH4 0x97C7F537 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9E3D67B PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x4F1EB3D8 SWAP1 PUSH2 0xDEA SWAP1 DUP7 SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2235 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE17 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE3B SWAP2 SWAP1 PUSH2 0x1ED0 JUMP JUMPDEST POP POP PUSH2 0xE50 CALLER DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x16A8 JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE67 DUP3 DUP5 ADD DUP5 PUSH2 0x1E16 JUMP JUMPDEST SWAP1 POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xEB2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B602735 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 ISZERO PUSH2 0xEEC JUMPI DUP1 MLOAD MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0xEEC SWAP2 SWAP1 PUSH32 0x0 DUP9 PUSH2 0x1172 JUMP JUMPDEST DUP4 ISZERO PUSH2 0xF2A JUMPI PUSH2 0xF2A DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD PUSH32 0x0 DUP8 PUSH2 0x1172 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xF5F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x514EA4BF ADDRESS PUSH32 0x0 PUSH32 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xFE6 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2185 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x101A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1032 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1046 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x106A SWAP2 SWAP1 PUSH2 0x1F49 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x9E3D67B PUSH1 0xE3 SHL DUP2 MSTORE SWAP3 SWAP8 POP SWAP1 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP6 POP PUSH4 0x4F1EB3D8 SWAP5 POP PUSH2 0x110B SWAP4 POP AND SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2235 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1138 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x115C SWAP2 SWAP1 PUSH2 0x1ED0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 AND SWAP7 SWAP2 AND SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xB22 DUP5 DUP5 DUP5 DUP5 PUSH2 0x199F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH2 0x1195 JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0x11A2 JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0x11A2 SWAP1 PUSH2 0x23E3 JUMP JUMPDEST SWAP1 POP PUSH2 0x11B1 PUSH3 0xD89E7 NOT PUSH2 0x23C0 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH2 0x11EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH2 0x11FF JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH2 0x1211 JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH2 0x1246 JUMPI PUSH1 0x80 PUSH2 0x1241 DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH2 0x1270 JUMPI PUSH1 0x80 PUSH2 0x126B DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH2 0x129A JUMPI PUSH1 0x80 PUSH2 0x1295 DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH2 0x12C4 JUMPI PUSH1 0x80 PUSH2 0x12BF DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH2 0x12EE JUMPI PUSH1 0x80 PUSH2 0x12E9 DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH2 0x1318 JUMPI PUSH1 0x80 PUSH2 0x1313 DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH2 0x1342 JUMPI PUSH1 0x80 PUSH2 0x133D DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH2 0x136D JUMPI PUSH1 0x80 PUSH2 0x1368 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH2 0x1398 JUMPI PUSH1 0x80 PUSH2 0x1393 DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH2 0x13C3 JUMPI PUSH1 0x80 PUSH2 0x13BE DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH2 0x13EE JUMPI PUSH1 0x80 PUSH2 0x13E9 DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH2 0x1419 JUMPI PUSH1 0x80 PUSH2 0x1414 DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH2 0x1444 JUMPI PUSH1 0x80 PUSH2 0x143F DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH2 0x146F JUMPI PUSH1 0x80 PUSH2 0x146A DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH2 0x149A JUMPI PUSH1 0x80 PUSH2 0x1495 DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH2 0x14C6 JUMPI PUSH1 0x80 PUSH2 0x14C1 DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH2 0x14F1 JUMPI PUSH1 0x80 PUSH2 0x14EC DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH2 0x151B JUMPI PUSH1 0x80 PUSH2 0x1516 DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH2 0x1543 JUMPI PUSH1 0x80 PUSH2 0x153E DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH2 0x155E JUMPI PUSH2 0x155B DUP2 PUSH1 0x0 NOT PUSH2 0x22D3 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x156C PUSH1 0x1 PUSH1 0x20 SHL DUP3 PUSH2 0x23AC JUMP JUMPDEST ISZERO PUSH2 0x1578 JUMPI PUSH1 0x1 PUSH2 0x157B JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x158C SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH2 0x22BB JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x15BC SWAP1 DUP5 SWAP1 PUSH2 0x232E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x15E9 SWAP1 DUP5 SWAP1 PUSH2 0x22BB JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x245A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 PUSH1 0x40 MLOAD PUSH2 0x1623 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1642 SWAP2 SWAP1 PUSH2 0x22BB JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x166F SWAP1 DUP5 SWAP1 PUSH2 0x22BB JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x245A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x16BA SWAP2 SWAP1 PUSH2 0x232E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x16E7 SWAP1 DUP5 SWAP1 PUSH2 0x232E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x245A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD PUSH2 0x169C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1777 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x178B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17AF SWAP2 SWAP1 PUSH2 0x1FAB JUMP JUMPDEST POP POP POP POP POP POP SWAP1 POP PUSH2 0x1804 DUP2 PUSH32 0x0 PUSH32 0x0 DUP12 DUP12 PUSH2 0x1A99 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 DUP6 ADD DUP2 DUP2 MSTORE PUSH1 0x8 SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP1 DUP9 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV PUSH3 0xFFFFFF SWAP1 DUP2 AND PUSH1 0x80 DUP1 DUP11 ADD SWAP2 DUP3 MSTORE SWAP5 DUP10 MSTORE CALLER PUSH1 0x20 SWAP10 DUP11 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP10 DUP11 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP2 MLOAD DUP7 AND DUP9 DUP11 ADD MSTORE SWAP1 MLOAD AND SWAP1 DUP7 ADD MSTORE SWAP1 MLOAD DUP3 AND DUP5 DUP3 ADD MSTORE DUP5 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE SWAP2 DUP4 ADD SWAP4 DUP5 SWAP1 MSTORE PUSH4 0x3C8A7D8D PUSH1 0xE0 SHL SWAP1 SWAP4 MSTORE SWAP3 SWAP7 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP2 PUSH4 0x3C8A7D8D SWAP2 PUSH2 0x1913 SWAP2 ADDRESS SWAP2 PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 DUP12 SWAP2 SWAP1 PUSH1 0xA4 ADD PUSH2 0x21E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x192C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1940 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1964 SWAP2 SWAP1 PUSH2 0x2045 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP6 DUP4 LT DUP1 PUSH2 0x1976 JUMPI POP DUP5 DUP3 LT JUMPDEST ISZERO PUSH2 0x1994 JUMPI PUSH1 0x40 MLOAD PUSH4 0x97C7F537 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP1 DUP9 AND SWAP2 PUSH2 0x1A03 SWAP2 SWAP1 PUSH2 0x21B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1A40 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1A45 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO DUP1 PUSH2 0x1A73 JUMPI POP DUP1 MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1A73 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1A71 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x1A91 JUMPI PUSH1 0x40 MLOAD PUSH4 0x16369DAF PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x1AB9 JUMPI SWAP3 SWAP4 SWAP3 JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT PUSH2 0x1AE4 JUMPI PUSH2 0x1ADD DUP6 DUP6 DUP6 PUSH2 0x1B5B JUMP JUMPDEST SWAP1 POP PUSH2 0xB5C JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT ISZERO PUSH2 0x1B46 JUMPI PUSH1 0x0 PUSH2 0x1B0B DUP8 DUP7 DUP7 PUSH2 0x1B5B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1B1A DUP8 DUP10 DUP7 PUSH2 0x1BC5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND LT PUSH2 0x1B3B JUMPI DUP1 PUSH2 0x1B3D JUMP JUMPDEST DUP2 JUMPDEST SWAP3 POP POP POP PUSH2 0xB5C JUMP JUMPDEST PUSH2 0x1B51 DUP6 DUP6 DUP5 PUSH2 0x1BC5 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x1B7B JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH1 0x0 PUSH2 0x1B9E DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x1BFB JUMP JUMPDEST SWAP1 POP PUSH2 0xB5C PUSH2 0x1BC0 DUP5 DUP4 PUSH2 0x1BB2 DUP10 DUP10 PUSH2 0x2306 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1BFB JUMP JUMPDEST PUSH2 0x1CAA JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x1BE5 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH2 0x158C PUSH2 0x1BC0 DUP4 PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x1BB2 DUP9 DUP9 PUSH2 0x2306 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x1C35 JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x1C2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0xAF7 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x1C41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x1 DUP8 NOT DUP2 ADD DUP9 AND SWAP8 DUP9 SWAP1 DIV PUSH1 0x3 DUP2 MUL DUP4 XOR DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL SWAP1 DUP2 MUL SWAP1 SWAP3 SUB SWAP1 SWAP2 MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1CC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1CC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1CC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xAF7 DUP2 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1D22 DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1D32 DUP2 PUSH2 0x242C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1D53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1D5E DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x1D6E DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x1D7E DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1DA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1DAE DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1DBE DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1DE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1DED DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAF7 DUP3 PUSH2 0x1CC5 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB PUSH1 0x80 DUP2 SLT ISZERO PUSH2 0x1E29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x1E59 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH1 0x60 DUP3 SLT ISZERO PUSH2 0x1E6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E72 PUSH2 0x2285 JUMP JUMPDEST SWAP2 POP DUP4 CALLDATALOAD PUSH2 0x1E7F DUP2 PUSH2 0x242C JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1E8F DUP2 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1EAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE SWAP1 DUP2 MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x1EC1 DUP3 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1EE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x1EEE DUP2 PUSH2 0x2444 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1D32 DUP2 PUSH2 0x2444 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1F15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1F20 DUP2 PUSH2 0x2444 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x1F3E DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1F61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD PUSH2 0x1F6C DUP2 PUSH2 0x2444 JUMP JUMPDEST DUP1 SWAP6 POP POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x1F8C DUP2 PUSH2 0x2444 JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1F9D DUP2 PUSH2 0x2444 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1FC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1FD1 DUP2 PUSH2 0x242C JUMP JUMPDEST DUP1 SWAP8 POP POP PUSH1 0x20 DUP9 ADD MLOAD DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 POP PUSH2 0x1FF7 PUSH1 0x40 DUP10 ADD PUSH2 0x1CD5 JUMP JUMPDEST SWAP5 POP PUSH2 0x2005 PUSH1 0x60 DUP10 ADD PUSH2 0x1CD5 JUMP JUMPDEST SWAP4 POP PUSH2 0x2013 PUSH1 0x80 DUP10 ADD PUSH2 0x1CD5 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x2029 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH2 0x2037 PUSH1 0xC0 DUP10 ADD PUSH2 0x1CC5 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2058 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x207F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x20A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x20B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x20C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x20D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP POP PUSH1 0x20 ADD SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x20FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 CALLDATALOAD SWAP5 PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2132 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x1F9D DUP2 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2171 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x2345 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 SWAP1 SWAP4 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND DUP4 MSTORE PUSH1 0x2 SWAP2 DUP3 SIGNEXTEND PUSH1 0xE8 SWAP1 DUP2 SHL PUSH1 0x14 DUP6 ADD MSTORE SWAP2 SIGNEXTEND SWAP1 SHL PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x1A ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x21C7 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x2345 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH1 0x2 DUP6 DUP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE DUP5 SWAP1 SIGNEXTEND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x222A SWAP1 DUP4 ADD DUP5 PUSH2 0x2159 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x2 SWAP4 DUP5 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE SWAP2 SWAP1 SWAP3 SIGNEXTEND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 AND PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xAF7 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2159 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x22B5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x22CE JUMPI PUSH2 0x22CE PUSH2 0x2400 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x22E2 JUMPI PUSH2 0x22E2 PUSH2 0x2416 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2301 JUMPI PUSH2 0x2301 PUSH2 0x2400 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x2326 JUMPI PUSH2 0x2326 PUSH2 0x2400 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2340 JUMPI PUSH2 0x2340 PUSH2 0x2400 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2360 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2348 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xB22 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x2385 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x23A6 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x23BB JUMPI PUSH2 0x23BB PUSH2 0x2416 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH2 0x23DA JUMPI PUSH2 0x23DA PUSH2 0x2400 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH2 0x23F9 JUMPI PUSH2 0x23F9 PUSH2 0x2400 JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2441 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2441 JUMPI PUSH1 0x0 DUP1 REVERT INVALID 0xDD CALLCODE MSTORE 0xAD SHL 0xE2 0xC8 SWAP12 PUSH10 0xC2B068FC378DAA952BA7 CALL PUSH4 0xC4A11628 CREATE2 GAS 0x4D CREATE2 0x23 0xB3 0xEF LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE PUSH17 0x4C8E37E1E82766BCB1A581D023543CDA75 0xE4 NUMBER 0x21 0xD2 0xC4 CREATE DIV PUSH22 0x6E33C2E74A64736F6C63430008070033000000000000 ",
              "sourceMap": "569:1207:50:-:0;;;626:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;691:5;698:11;;-1:-1:-1;;;;;357:25:28;;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;-1:-1:-1;;;;;422:24:28;;;;;;4533:27:20::1;::::0;;-1:-1:-1;;;4533:27:20;;;;422:10:28;;4533:25:20;::::1;::::0;::::1;::::0;:27:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:25;:27;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4519:41;;4566:15;4599:5;-1:-1:-1::0;;;;;4584:28:20::1;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4566:48;;4620:15;4653:5;-1:-1:-1::0;;;;;4638:28:20::1;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4620:48;;4674:18;4710:5;-1:-1:-1::0;;;;;4695:33:20::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4674:56:::0;-1:-1:-1;4736:16:20::1;4768:24;4674:56:::0;3991:6:::1;4768:24;:::i;:::-;4755:38;::::0;3991:6:::1;4755:38;:::i;:::-;4736:57:::0;-1:-1:-1;4799:16:20::1;4818:11;4736:57:::0;4818:11:::1;:::i;:::-;4846:10;4836:20;::::0;;::::1;;::::0;4862:12;;;-1:-1:-1;;;;;;4862:12:20;;;::::1;::::0;4880:10:::1;::::0;;;-1:-1:-1;;;;;;4880:10:20;::::1;::::0;4896:26:::1;::::0;;::::1;::::0;::::1;::::0;::::1;;::::0;4928:22;;::::1;::::0;::::1;::::0;::::1;;::::0;4956;;::::1;::::0;::::1;::::0;::::1;;::::0;4984:16;;;;;::::1;::::0;5006;;;;;-1:-1:-1;5006:16:20;-1:-1:-1;5074:23:20;;-1:-1:-1;;;5074:23:20;;;;4956:22;;-1:-1:-1;;;;;;4984:16:20;::::1;::::0;5074:21:::1;::::0;:23:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;4984:16;5074:23;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;5074:23:20::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;5110:7;-1:-1:-1::0;;;;;5104:21:20::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;5104:23:20::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;5042:86;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5028:4;:101;;;;;;;;;;;;:::i;:::-;;5182:7;-1:-1:-1::0;;;;;5176:21:20::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;5176:23:20::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;5212:7;-1:-1:-1::0;;;;;5206:21:20::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;5206:23:20::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;5151:79;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5135:6;:96;;;;;;;;;;;;:::i;:::-;;5254:39;5282:10;5254:27;;;;;:39;;:::i;:::-;-1:-1:-1::0;;;;;5238:55:20::1;;;-1:-1:-1::0;;;;;5238:55:20::1;;;;;::::0;::::1;5315:39;5343:10;5315:27;;;;;:39;;:::i;:::-;5299:55;::::0;;;-1:-1:-1;;;;;;5299:55:20;::::1;::::0;5371:66:::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;5371:66:20;;::::1;::::0;;;;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;-1:-1:-1;;5360:8:20::1;:77:::0;;-1:-1:-1;;;;;;5360:77:20::1;::::0;;::::1;::::0;;;-1:-1:-1;5360:77:20;;;-1:-1:-1;;;;;;5360:77:20;;;;-1:-1:-1;;;5360:77:20;;::::1;;::::0;;-1:-1:-1;569:1207:50;;-1:-1:-1;;;569:1207:50;1363:2473:26;1426:20;1454:15;1479:1;1472:4;:8;;;:57;;1523:4;1516:12;;1472:57;;;1499:4;1492:12;;1491:13;;;:::i;:::-;1454:75;-1:-1:-1;657:9:26;-1:-1:-1;;657:9:26;:::i;:::-;1562:16;;1543:7;:36;;1535:50;;;;-1:-1:-1;;;1535:50:26;;3878:2:84;1535:50:26;;;3860:21:84;3917:1;3897:18;;;3890:29;-1:-1:-1;;;3935:18:84;;;3928:31;3976:18;;1535:50:26;;;;;;;;1592:13;1618:3;1608:13;;:93;;-1:-1:-1;;;1608:93:26;;;1629:34;1608:93;-1:-1:-1;;;;;1592:109:26;;-1:-1:-1;1721:3:26;1711:13;;:18;1707:83;;1787:3;1740:42;:5;1748:34;1740:42;:::i;:::-;1739:51;;1731:59;;1707:83;1810:3;1800:13;;:18;1796:83;;1876:3;1829:42;:5;1837:34;1829:42;:::i;:::-;1828:51;;1820:59;;1796:83;1899:3;1889:13;;:18;1885:83;;1965:3;1918:42;:5;1926:34;1918:42;:::i;:::-;1917:51;;1909:59;;1885:83;1988:4;1978:14;;:19;1974:84;;2055:3;2008:42;:5;2016:34;2008:42;:::i;:::-;2007:51;;1999:59;;1974:84;2078:4;2068:14;;:19;2064:84;;2145:3;2098:42;:5;2106:34;2098:42;:::i;:::-;2097:51;;2089:59;;2064:84;2168:4;2158:14;;:19;2154:84;;2235:3;2188:42;:5;2196:34;2188:42;:::i;:::-;2187:51;;2179:59;;2154:84;2258:4;2248:14;;:19;2244:84;;2325:3;2278:42;:5;2286:34;2278:42;:::i;:::-;2277:51;;2269:59;;2244:84;2348:5;2338:15;;:20;2334:85;;2416:3;2369:42;:5;2377:34;2369:42;:::i;:::-;2368:51;;2360:59;;2334:85;2439:5;2429:15;;:20;2425:85;;2507:3;2460:42;:5;2468:34;2460:42;:::i;:::-;2459:51;;2451:59;;2425:85;2530:5;2520:15;;:20;2516:85;;2598:3;2551:42;:5;2559:34;2551:42;:::i;:::-;2550:51;;2542:59;;2516:85;2621:5;2611:15;;:20;2607:85;;2689:3;2642:42;:5;2650:34;2642:42;:::i;:::-;2641:51;;2633:59;;2607:85;2712:6;2702:16;;:21;2698:86;;2781:3;2734:42;:5;2742:34;2734:42;:::i;:::-;2733:51;;2725:59;;2698:86;2804:6;2794:16;;:21;2790:86;;2873:3;2826:42;:5;2834:34;2826:42;:::i;:::-;2825:51;;2817:59;;2790:86;2896:6;2886:16;;:21;2882:86;;2965:3;2918:42;:5;2926:34;2918:42;:::i;:::-;2917:51;;2909:59;;2882:86;2988:6;2978:16;;:21;2974:86;;3057:3;3010:42;:5;3018:34;3010:42;:::i;:::-;3009:51;;3001:59;;2974:86;3080:7;3070:17;;:22;3066:86;;3149:3;3103:41;:5;3111:33;3103:41;:::i;:::-;3102:50;;3094:58;;3066:86;3172:7;3162:17;;:22;3158:85;;3240:3;3195:40;:5;3203:32;3195:40;:::i;:::-;3194:49;;3186:57;;3158:85;3263:7;3253:17;;:22;3249:83;;3329:3;3286:38;:5;3294:30;3286:38;:::i;:::-;3285:47;;3277:55;;3249:83;3352:7;3342:17;;:22;3338:78;;3413:3;3375:33;:5;3383:25;3375:33;:::i;:::-;3374:42;;3366:50;;3338:78;3434:1;3427:4;:8;;;3423:47;;;3445:25;3465:5;-1:-1:-1;;3445:25:26;:::i;:::-;3437:33;;3423:47;3799:17;3808:7;3799:5;:17;:::i;:::-;:22;:30;;3828:1;3799:30;;;3824:1;3799:30;3782:48;;;;3792:2;3783:11;;;3782:48;:::i;:::-;3759:72;1363:2473;-1:-1:-1;;;;1363:2473:26:o;569:1207:50:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;569:1207:50;;;-1:-1:-1;569:1207:50;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:208::-;266:6;319:2;307:9;298:7;294:23;290:32;287:52;;;335:1;332;325:12;287:52;358:40;388:9;358:40;:::i;:::-;348:50;196:208;-1:-1:-1;;;196:208:84:o;409:293::-;488:6;496;549:2;537:9;528:7;524:23;520:32;517:52;;;565:1;562;555:12;517:52;588:40;618:9;588:40;:::i;:::-;578:50;;647:49;692:2;681:9;677:18;647:49;:::i;:::-;637:59;;409:293;;;;;:::o;707:277::-;775:6;828:2;816:9;807:7;803:23;799:32;796:52;;;844:1;841;834:12;796:52;876:9;870:16;929:5;926:1;915:20;908:5;905:31;895:59;;950:1;947;940:12;989:884;1069:6;1122:2;1110:9;1101:7;1097:23;1093:32;1090:52;;;1138:1;1135;1128:12;1090:52;1165:16;;-1:-1:-1;;;;;1230:14:84;;;1227:34;;;1257:1;1254;1247:12;1227:34;1295:6;1284:9;1280:22;1270:32;;1340:7;1333:4;1329:2;1325:13;1321:27;1311:55;;1362:1;1359;1352:12;1311:55;1391:2;1385:9;1413:2;1409;1406:10;1403:36;;;1419:18;;:::i;:::-;1494:2;1488:9;1462:2;1548:13;;-1:-1:-1;;1544:22:84;;;1568:2;1540:31;1536:40;1524:53;;;1592:18;;;1612:22;;;1589:46;1586:72;;;1638:18;;:::i;:::-;1678:10;1674:2;1667:22;1713:2;1705:6;1698:18;1753:7;1748:2;1743;1739;1735:11;1731:20;1728:33;1725:53;;;1774:1;1771;1764:12;1725:53;1787:55;1839:2;1834;1826:6;1822:15;1817:2;1813;1809:11;1787:55;:::i;:::-;1861:6;989:884;-1:-1:-1;;;;;;;989:884:84:o;1878:278::-;1947:6;2000:2;1988:9;1979:7;1975:23;1971:32;1968:52;;;2016:1;2013;2006:12;1968:52;2048:9;2042:16;2098:8;2091:5;2087:20;2080:5;2077:31;2067:59;;2122:1;2119;2112:12;2161:747;-1:-1:-1;;;2567:3:84;2560:19;2542:3;2608:6;2602:13;2624:61;2678:6;2674:1;2669:3;2665:11;2658:4;2650:6;2646:17;2624:61;:::i;:::-;-1:-1:-1;;;2744:1:84;2704:16;;;2736:10;;;2729:23;2777:13;;2799:62;2777:13;2848:1;2840:10;;2833:4;2821:17;;2799:62;:::i;:::-;2881:17;2900:1;2877:25;;2161:747;-1:-1:-1;;;;2161:747:84:o;2913:758::-;-1:-1:-1;;;3319:3:84;3312:26;3294:3;3367:6;3361:13;3383:62;3438:6;3433:2;3428:3;3424:12;3417:4;3409:6;3405:17;3383:62;:::i;:::-;-1:-1:-1;;;3504:2:84;3464:16;;;3496:11;;;3489:24;3538:13;;3560:63;3538:13;3609:2;3601:11;;3594:4;3582:17;;3560:63;:::i;:::-;3643:17;3662:2;3639:26;;2913:758;-1:-1:-1;;;;2913:758:84:o;4005:128::-;4045:3;4076:1;4072:6;4069:1;4066:13;4063:39;;;4082:18;;:::i;:::-;-1:-1:-1;4118:9:84;;4005:128::o;4138:120::-;4178:1;4204;4194:35;;4209:18;;:::i;:::-;-1:-1:-1;4243:9:84;;4138:120::o;4263:168::-;4303:7;4369:1;4365;4361:6;4357:14;4354:1;4351:21;4346:1;4339:9;4332:17;4328:45;4325:71;;;4376:18;;:::i;:::-;-1:-1:-1;4416:9:84;;4263:168::o;4436:342::-;4474:4;4518:1;4515;4504:16;4554:1;4551;4540:16;4584:1;4579:3;4575:11;4641:3;4631:7;4627:12;4623:22;4618:3;4614:32;4609:2;4602:10;4598:49;4595:75;;;4650:18;;:::i;:::-;4713:3;4703:8;4699:18;4694:3;4690:28;4686:2;4682:37;4679:63;;;4722:18;;:::i;:::-;-1:-1:-1;4759:13:84;;;4436:342;-1:-1:-1;;;4436:342:84:o;4783:258::-;4855:1;4865:113;4879:6;4876:1;4873:13;4865:113;;;4955:11;;;4949:18;4936:11;;;4929:39;4901:2;4894:10;4865:113;;;4996:6;4993:1;4990:13;4987:48;;;5031:1;5022:6;5017:3;5013:16;5006:27;4987:48;;4783:258;;;:::o;5046:380::-;5125:1;5121:12;;;;5168;;;5189:61;;5243:4;5235:6;5231:17;5221:27;;5189:61;5296:2;5288:6;5285:14;5265:18;5262:38;5259:161;;;5342:10;5337:3;5333:20;5330:1;5323:31;5377:4;5374:1;5367:15;5405:4;5402:1;5395:15;5259:161;;5046:380;;;:::o;5431:166::-;5461:1;5502;5499;5488:16;5523:3;5513:37;;5530:18;;:::i;:::-;5587:3;5583:1;5580;5569:16;5564:27;5559:32;;;5431:166;;;;:::o;5602:112::-;5634:1;5660;5650:35;;5665:18;;:::i;:::-;-1:-1:-1;5699:9:84;;5602:112::o;5719:184::-;5753:3;5800:5;5797:1;5786:20;5834:7;5830:12;5821:7;5818:25;5815:51;;;5846:18;;:::i;:::-;5886:1;5882:15;;5719:184;-1:-1:-1;;5719:184:84:o;5908:136::-;5943:3;-1:-1:-1;;;5964:22:84;;5961:48;;;5989:18;;:::i;:::-;-1:-1:-1;6029:1:84;6025:13;;5908:136::o;6049:127::-;6110:10;6105:3;6101:20;6098:1;6091:31;6141:4;6138:1;6131:15;6165:4;6162:1;6155:15;6181:127;6242:10;6237:3;6233:20;6230:1;6223:31;6273:4;6270:1;6263:15;6297:4;6294:1;6287:15;6313:127;6374:10;6369:3;6365:20;6362:1;6355:31;6405:4;6402:1;6395:15;6429:4;6426:1;6419:15;6313:127;569:1207:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_10006": {
                  "entryPoint": null,
                  "id": 10006,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_addLiquidity_3894": {
                  "entryPoint": 5912,
                  "id": 3894,
                  "parameterSlots": 4,
                  "returnSlots": 3
                },
                "@_burn_3970": {
                  "entryPoint": 5800,
                  "id": 3970,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_mint_3942": {
                  "entryPoint": 5680,
                  "id": 3942,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_pay_3914": {
                  "entryPoint": null,
                  "id": 3914,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_safeTransferFrom_4050": {
                  "entryPoint": 6559,
                  "id": 4050,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_transferTokens_3999": {
                  "entryPoint": 5524,
                  "id": 3999,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 2473,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@allowance_3292": {
                  "entryPoint": null,
                  "id": 3292,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@approve_3731": {
                  "entryPoint": 2365,
                  "id": 3731,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@balanceOf_3298": {
                  "entryPoint": null,
                  "id": 3298,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@burn_3613": {
                  "entryPoint": 3117,
                  "id": 3613,
                  "parameterSlots": 4,
                  "returnSlots": 2
                },
                "@collect_3661": {
                  "entryPoint": 3889,
                  "id": 3661,
                  "parameterSlots": 0,
                  "returnSlots": 2
                },
                "@decimals_3284": {
                  "entryPoint": null,
                  "id": 3284,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@factory_3239": {
                  "entryPoint": null,
                  "id": 3239,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_3255": {
                  "entryPoint": null,
                  "id": 3255,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@getLiquidityForAmount0_4377": {
                  "entryPoint": 7003,
                  "id": 4377,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@getLiquidityForAmount1_4413": {
                  "entryPoint": 7109,
                  "id": 4413,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@getLiquidityForAmounts_4493": {
                  "entryPoint": 6809,
                  "id": 4493,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "@getSqrtRatioAtTick_5048": {
                  "entryPoint": 4478,
                  "id": 5048,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@internalAddLiquidity_9922": {
                  "entryPoint": 2917,
                  "id": 9922,
                  "parameterSlots": 4,
                  "returnSlots": 3
                },
                "@internalBurn_9967": {
                  "entryPoint": 2828,
                  "id": 9967,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@internalMint_9954": {
                  "entryPoint": 2814,
                  "id": 9954,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@internalPay_9941": {
                  "entryPoint": 2838,
                  "id": 9941,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@internalSafeTransferFrom_10002": {
                  "entryPoint": 4466,
                  "id": 10002,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@internalTransferTokens_9983": {
                  "entryPoint": 3101,
                  "id": 9983,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@mint_3490": {
                  "entryPoint": 2869,
                  "id": 3490,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "@mulDiv_4263": {
                  "entryPoint": 7163,
                  "id": 4263,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@name_3227": {
                  "entryPoint": 1934,
                  "id": 3227,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pool_3251": {
                  "entryPoint": null,
                  "id": 3251,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@position_3701": {
                  "entryPoint": 2076,
                  "id": 3701,
                  "parameterSlots": 0,
                  "returnSlots": 5
                },
                "@setGovernance_5308": {
                  "entryPoint": 2972,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@sqrtRatioAX96_3259": {
                  "entryPoint": null,
                  "id": 3259,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@sqrtRatioBX96_3263": {
                  "entryPoint": null,
                  "id": 3263,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@symbol_3231": {
                  "entryPoint": 2856,
                  "id": 3231,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@tickLower_3267": {
                  "entryPoint": null,
                  "id": 3267,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@tickSpacing_3275": {
                  "entryPoint": null,
                  "id": 3275,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@tickUpper_3271": {
                  "entryPoint": null,
                  "id": 3271,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@toUint128_4332": {
                  "entryPoint": 7338,
                  "id": 4332,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@token0_3243": {
                  "entryPoint": null,
                  "id": 3243,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@token1_3247": {
                  "entryPoint": null,
                  "id": 3247,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@totalSupply_3235": {
                  "entryPoint": null,
                  "id": 3235,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@transferFrom_3820": {
                  "entryPoint": 2613,
                  "id": 3820,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@transfer_3752": {
                  "entryPoint": 2950,
                  "id": 3752,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@uniswapV3MintCallback_3548": {
                  "entryPoint": 3673,
                  "id": 3548,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "abi_decode_bool_fromMemory": {
                  "entryPoint": 7365,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 7399,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 7428,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_addresst_uint256": {
                  "entryPoint": 7485,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_addresst_addresst_uint256": {
                  "entryPoint": 7566,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 7631,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 7675,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_struct$_MintCallbackData_$11756_memory_ptr": {
                  "entryPoint": 7702,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint128t_uint128_fromMemory": {
                  "entryPoint": 7888,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_uint128t_uint256t_uint256t_address": {
                  "entryPoint": 7935,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_uint128t_uint256t_uint256t_uint128t_uint128_fromMemory": {
                  "entryPoint": 8009,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 5
                },
                "abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory": {
                  "entryPoint": 8107,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 7
                },
                "abi_decode_tuple_t_uint256t_uint256_fromMemory": {
                  "entryPoint": 8261,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_uint256t_uint256t_bytes_calldata_ptr": {
                  "entryPoint": 8297,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256": {
                  "entryPoint": 8424,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_address": {
                  "entryPoint": 8474,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 5
                },
                "abi_decode_uint16_fromMemory": {
                  "entryPoint": 7381,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_bytes": {
                  "entryPoint": 8537,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_address_t_int24_t_int24__to_t_address_t_int24_t_int24__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 8581,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 8629,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 8657,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_int24_t_int24_t_uint128_t_bytes_memory_ptr__to_t_address_t_int24_t_int24_t_uint128_t_bytes_memory_ptr__fromStack_reversed": {
                  "entryPoint": 8677,
                  "id": null,
                  "parameterSlots": 6,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_int24_t_int24_t_uint128_t_uint128__to_t_address_t_int24_t_int24_t_uint128_t_uint128__fromStack_reversed": {
                  "entryPoint": 8757,
                  "id": null,
                  "parameterSlots": 6,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_int24__to_t_int24__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_int24_t_int24_t_uint128__to_t_int24_t_int24_t_uint128__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 8818,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_struct$_MintCallbackData_$11756_memory_ptr__to_t_struct$_MintCallbackData_$11756_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint128_t_uint256_t_uint256__to_t_uint128_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint128_t_uint256_t_uint256_t_uint128_t_uint128__to_t_uint128_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 6,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint160__to_t_uint160__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint24__to_t_uint24__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "allocate_memory": {
                  "entryPoint": 8837,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 8891,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 8915,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 8935,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint160": {
                  "entryPoint": 8966,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 9006,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 9029,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "extract_byte_array_length": {
                  "entryPoint": 9073,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mod_t_uint256": {
                  "entryPoint": 9132,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "negate_t_int24": {
                  "entryPoint": 9152,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "negate_t_int256": {
                  "entryPoint": 9187,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 9216,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x12": {
                  "entryPoint": 9238,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_address": {
                  "entryPoint": 9260,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "validator_revert_uint128": {
                  "entryPoint": 9284,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:17789:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "71:107:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "81:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "96:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "90:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "90:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "81:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "156:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "165:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "168:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "158:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "158:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "158:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "146:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "139:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "139:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "132:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "132:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "122:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "122:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "115:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "115:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "112:60:84"
                            }
                          ]
                        },
                        "name": "abi_decode_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "50:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "61:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "242:104:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "252:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "267:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "261:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "261:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "252:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "324:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "333:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "336:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "326:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "326:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "326:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "296:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "307:5:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "314:6:84",
                                            "type": "",
                                            "value": "0xffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "303:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "303:18:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "293:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "293:29:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "286:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "286:37:84"
                              },
                              "nodeType": "YulIf",
                              "src": "283:57:84"
                            }
                          ]
                        },
                        "name": "abi_decode_uint16_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "221:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "232:5:84",
                            "type": ""
                          }
                        ],
                        "src": "183:163:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "421:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "467:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "476:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "479:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "469:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "469:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "469:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "442:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "451:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "438:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "438:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "463:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "434:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "434:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "431:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "492:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "518:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "505:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "505:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "496:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "562:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "537:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "537:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "537:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "577:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "587:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "577:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "387:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "398:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "410:6:84",
                            "type": ""
                          }
                        ],
                        "src": "351:247:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "690:301:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "736:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "745:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "748:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "738:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "738:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "738:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "711:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "720:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "707:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "707:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "732:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "703:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "703:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "700:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "761:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "787:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "774:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "774:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "765:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "831:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "806:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "806:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "806:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "846:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "856:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "846:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "870:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "902:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "913:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "898:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "898:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "885:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "885:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "874:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "951:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "926:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "926:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "926:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "968:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "978:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "968:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "648:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "659:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "671:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "679:6:84",
                            "type": ""
                          }
                        ],
                        "src": "603:388:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1117:477:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1164:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1173:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1176:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1166:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1166:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1166:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1138:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1147:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1134:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1134:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1159:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1130:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1130:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1127:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1189:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1215:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1202:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1202:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1193:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1259:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1234:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1234:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1234:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1274:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1284:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1274:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1298:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1330:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1341:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1326:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1326:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1313:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1313:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1302:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1379:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1354:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1354:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1354:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1396:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1406:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1396:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1422:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1454:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1465:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1450:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1450:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1437:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1437:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1426:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1503:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1478:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1478:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1478:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1520:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "1530:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1520:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1546:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1573:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1584:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1569:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1569:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1556:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1556:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "1546:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1059:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1070:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1082:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1090:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1098:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "1106:6:84",
                            "type": ""
                          }
                        ],
                        "src": "996:598:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1703:352:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1749:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1758:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1761:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1751:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1751:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1751:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1724:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1733:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1720:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1720:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1745:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1716:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1716:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1713:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1774:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1800:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1787:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1787:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1778:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1844:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1819:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1819:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1819:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1859:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1869:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1859:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1883:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1915:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1926:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1911:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1911:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1898:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1898:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1887:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1964:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1939:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1939:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1939:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1981:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1991:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1981:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2007:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2034:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2045:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2030:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2030:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2017:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2017:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2007:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1653:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1664:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1676:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1684:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1692:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1599:456:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2147:228:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2193:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2202:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2205:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2195:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2195:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2195:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2168:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2177:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2164:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2164:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2189:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2160:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2160:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2157:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2218:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2244:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2231:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2231:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2222:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2288:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2263:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2263:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2263:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2303:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2313:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2303:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2327:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2354:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2365:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2350:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2350:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2337:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2337:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2327:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2105:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2116:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2128:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2136:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2060:315:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2458:124:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2504:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2513:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2516:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2506:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2506:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2506:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2479:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2488:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2475:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2475:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2500:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2471:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2471:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2468:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2529:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2566:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2539:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2539:37:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2529:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2424:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2435:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2447:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2380:202:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2692:1102:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2702:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2716:7:84"
                                  },
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2725:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "2712:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2712:23:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2706:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2760:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2769:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2772:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2762:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2762:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2762:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2751:2:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2755:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2747:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2747:12:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2744:32:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2785:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2805:4:84",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2799:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2799:11:84"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "2789:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2819:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2841:6:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2849:4:84",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2837:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2837:17:84"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "2823:10:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2937:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2958:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2965:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2970:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "2961:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2961:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2951:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2951:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2951:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3002:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3005:4:84",
                                          "type": "",
                                          "value": "0x41"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2995:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2995:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2995:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3030:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3033:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3023:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3023:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3023:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2872:10:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2884:18:84",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2869:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2869:34:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2908:10:84"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2920:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2905:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2905:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "2866:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2866:62:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2863:185:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3064:4:84",
                                    "type": "",
                                    "value": "0x40"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "3070:10:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3057:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3057:24:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3057:24:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3107:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3116:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3119:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3109:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3109:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3109:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3097:2:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3101:4:84",
                                    "type": "",
                                    "value": "0x60"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3093:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3093:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3090:33:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3132:30:84",
                              "value": {
                                "arguments": [],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3145:15:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3145:17:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3136:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3171:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3199:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3186:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3186:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3175:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3243:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3218:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3218:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3218:33:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3267:5:84"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3274:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3260:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3260:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3260:22:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3291:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3323:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3334:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3319:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3319:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3306:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3306:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "3295:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "3372:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3347:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3347:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3347:33:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "3400:5:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3407:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3396:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3396:14:84"
                                  },
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "3412:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3389:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3389:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3389:31:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3429:49:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3461:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3472:4:84",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3457:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3457:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3444:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3444:34:84"
                              },
                              "variables": [
                                {
                                  "name": "value_3",
                                  "nodeType": "YulTypedName",
                                  "src": "3433:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3534:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3543:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3546:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3536:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3536:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3536:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "3500:7:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "3513:7:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3522:8:84",
                                            "type": "",
                                            "value": "0xffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "3509:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3509:22:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "3497:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3497:35:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "3490:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3490:43:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3487:63:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "3570:5:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3577:4:84",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3566:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3566:16:84"
                                  },
                                  {
                                    "name": "value_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "3584:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3559:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3559:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3559:33:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "3608:6:84"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3616:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3601:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3601:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3601:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3631:49:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3663:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3674:4:84",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3659:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3659:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3646:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3646:34:84"
                              },
                              "variables": [
                                {
                                  "name": "value_4",
                                  "nodeType": "YulTypedName",
                                  "src": "3635:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "3714:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3689:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3689:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3689:33:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "3742:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3750:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3738:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3738:15:84"
                                  },
                                  {
                                    "name": "value_4",
                                    "nodeType": "YulIdentifier",
                                    "src": "3755:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3731:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3731:32:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3731:32:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3772:16:84",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "3782:6:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3772:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_struct$_MintCallbackData_$11756_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2658:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2669:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2681:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2587:1207:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3897:287:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3943:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3952:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3955:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3945:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3945:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3945:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3918:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3927:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3914:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3914:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3939:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3910:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3910:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3907:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3968:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3987:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3981:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3981:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3972:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4031:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "4006:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4006:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4006:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4046:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4056:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4046:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4070:40:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4095:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4106:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4091:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4091:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4085:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4085:25:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4074:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4144:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "4119:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4119:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4119:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4161:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "4171:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4161:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint128t_uint128_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3855:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3866:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3878:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3886:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3799:385:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4310:404:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4357:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4366:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4369:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4359:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4359:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4359:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4331:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4340:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4327:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4327:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4352:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4323:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4323:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4320:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4382:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4408:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4395:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4395:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4386:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "4452:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "4427:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4427:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4427:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4467:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "4477:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4467:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4491:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4518:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4529:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4514:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4514:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4501:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4501:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4491:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4542:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4569:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4580:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4565:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4565:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4552:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4552:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4542:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4593:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4625:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4636:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4621:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4621:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4608:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4608:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4597:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4674:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4649:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4649:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4649:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4691:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "4701:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "4691:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint128t_uint256t_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4252:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4263:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4275:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4283:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4291:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4299:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4189:525:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4868:494:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4915:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4924:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4927:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4917:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4917:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4917:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4889:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4898:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4885:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4885:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4910:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4881:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4881:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4878:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4940:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4959:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4953:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4953:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "4944:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5003:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "4978:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4978:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4978:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5018:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5028:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5018:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5042:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5062:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5073:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5058:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5058:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5052:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5052:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5042:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5086:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5106:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5117:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5102:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5102:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5096:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5096:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5086:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5130:40:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5155:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5166:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5151:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5151:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5145:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5145:25:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5134:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5204:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "5179:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5179:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5179:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5221:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "5231:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "5221:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5247:41:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5272:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5283:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5268:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5268:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5262:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5262:26:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "5251:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "5322:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "5297:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5297:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5297:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5339:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "5349:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "5339:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint128t_uint256t_uint256t_uint128t_uint128_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4802:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4813:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4825:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4833:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4841:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4849:6:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "4857:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4719:643:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5540:730:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5587:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5596:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5599:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5589:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5589:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5589:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5561:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5570:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "5557:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5557:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5582:3:84",
                                    "type": "",
                                    "value": "224"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5553:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5553:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5550:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5612:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5631:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5625:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5625:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "5616:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5675:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "5650:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5650:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5650:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5690:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5700:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5690:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5714:40:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5739:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5750:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5735:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5735:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5729:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5729:25:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5718:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5810:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5819:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5822:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5812:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5812:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5812:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5776:7:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5796:1:84",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "5799:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "5785:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5785:22:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "5773:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5773:35:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5766:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5766:43:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5763:63:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5835:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "5845:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5835:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5861:58:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5904:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5915:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5900:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5900:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5871:28:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5871:48:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5861:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5928:58:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5971:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5982:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5967:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5967:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5938:28:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5938:48:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "5928:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5995:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6038:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6049:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6034:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6034:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint16_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6005:28:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6005:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "5995:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6063:41:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6088:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6099:3:84",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6084:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6084:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6078:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6078:26:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "6067:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6156:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6165:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6168:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6158:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6158:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6158:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "6126:7:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "6139:7:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6148:4:84",
                                            "type": "",
                                            "value": "0xff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "6135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6135:18:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "6123:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6123:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6116:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6116:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6113:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6181:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "6191:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value5",
                                  "nodeType": "YulIdentifier",
                                  "src": "6181:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6207:57:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6248:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6259:3:84",
                                        "type": "",
                                        "value": "192"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6244:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6244:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6217:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6217:47:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value6",
                                  "nodeType": "YulIdentifier",
                                  "src": "6207:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5458:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "5469:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5481:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5489:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5497:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "5505:6:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "5513:6:84",
                            "type": ""
                          },
                          {
                            "name": "value5",
                            "nodeType": "YulTypedName",
                            "src": "5521:6:84",
                            "type": ""
                          },
                          {
                            "name": "value6",
                            "nodeType": "YulTypedName",
                            "src": "5529:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5367:903:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6373:147:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6419:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6428:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6431:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6421:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6421:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6421:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6394:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6403:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "6390:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6390:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6415:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6386:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6386:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6383:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6444:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6460:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6454:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6454:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "6444:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6479:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6499:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6510:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6495:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6495:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6489:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6489:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "6479:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6331:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "6342:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6354:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6362:6:84",
                            "type": ""
                          }
                        ],
                        "src": "6275:245:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6648:604:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6694:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6703:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6706:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6696:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6696:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6696:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "6669:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6678:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "6665:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6665:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6690:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6661:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6661:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6658:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6719:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6742:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6729:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6729:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "6719:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6761:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6788:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6799:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6784:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6784:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6771:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6771:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "6761:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6812:46:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6843:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6854:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6839:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6839:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6826:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6826:32:84"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "6816:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6867:28:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6877:18:84",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6871:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6922:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6931:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6934:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6924:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6924:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6924:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "6910:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6918:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6907:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6907:14:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6904:34:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6947:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6961:9:84"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "6972:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6957:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6957:22:84"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "6951:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7027:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7036:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7039:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7029:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7029:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7029:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "7006:2:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "7010:4:84",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "7002:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7002:13:84"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "7017:7:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "6998:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6998:27:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6991:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6991:35:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6988:55:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7052:30:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7079:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7066:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7066:16:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "7056:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7109:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7118:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7121:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7111:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7111:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7111:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7097:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7105:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7094:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7094:14:84"
                              },
                              "nodeType": "YulIf",
                              "src": "7091:34:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7175:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7184:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7187:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7177:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7177:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7177:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "7148:2:84"
                                          },
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "7152:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "7144:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7144:15:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7161:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7140:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7140:24:84"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "7166:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7137:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7137:37:84"
                              },
                              "nodeType": "YulIf",
                              "src": "7134:57:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7200:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7214:2:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7218:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7210:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7210:11:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7200:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7230:16:84",
                              "value": {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "7240:6:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "7230:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256t_bytes_calldata_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6590:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "6601:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6613:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6621:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6629:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "6637:6:84",
                            "type": ""
                          }
                        ],
                        "src": "6525:727:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7378:264:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7425:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7434:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7437:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7427:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7427:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7427:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "7399:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7408:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "7395:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7395:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7420:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7391:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7391:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "7388:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7450:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7473:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7460:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7460:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7450:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7492:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7519:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7530:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7515:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7515:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7502:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7502:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "7492:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7543:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7570:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7581:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7566:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7566:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7553:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7553:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7543:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7594:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7621:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7632:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7617:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7617:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7604:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7604:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "7594:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7320:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "7331:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7343:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7351:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7359:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "7367:6:84",
                            "type": ""
                          }
                        ],
                        "src": "7257:385:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7785:383:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7832:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7841:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7844:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7834:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7834:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7834:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "7806:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7815:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "7802:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7802:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7827:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7798:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7798:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "7795:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7857:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7880:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7867:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7867:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "7857:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7899:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7926:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7937:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7922:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7922:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7909:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7909:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "7899:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7950:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7977:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7988:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7973:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7973:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7960:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7960:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7950:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8001:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8028:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8039:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8024:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8024:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8011:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8011:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "8001:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8052:46:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8082:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8093:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8078:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8078:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8065:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8065:33:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "8056:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "8132:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "8107:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8107:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8107:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8147:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "8157:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "8147:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7719:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "7730:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7742:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "7750:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "7758:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "7766:6:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "7774:6:84",
                            "type": ""
                          }
                        ],
                        "src": "7647:521:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8222:208:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8232:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "8252:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8246:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8246:12:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "8236:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "8274:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8279:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8267:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8267:19:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8267:19:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "8321:5:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8328:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8317:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8317:16:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "8339:3:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8344:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8335:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8335:14:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8351:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "8295:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8295:63:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8295:63:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8367:57:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "8382:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "8395:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8403:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "8391:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8391:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8412:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "8408:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8408:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "8387:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8387:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8378:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8378:39:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8419:4:84",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8374:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8374:50:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "8367:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "8199:5:84",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "8206:3:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "8214:3:84",
                            "type": ""
                          }
                        ],
                        "src": "8173:257:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8602:226:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "8619:3:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "8632:2:84",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "8636:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nodeType": "YulIdentifier",
                                          "src": "8628:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8628:15:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "8657:2:84",
                                                    "type": "",
                                                    "value": "96"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "8661:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "8653:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "8653:10:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8665:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "8649:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8649:18:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "8645:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8645:23:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8624:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8624:45:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8612:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8612:58:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8612:58:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "8690:3:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8695:2:84",
                                        "type": "",
                                        "value": "20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8686:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8686:12:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8704:3:84",
                                        "type": "",
                                        "value": "232"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "8720:1:84",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value1",
                                            "nodeType": "YulIdentifier",
                                            "src": "8723:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "8709:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8709:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8700:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8700:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8679:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8679:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8679:53:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "8752:3:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8757:2:84",
                                        "type": "",
                                        "value": "23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8748:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8748:12:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8766:3:84",
                                        "type": "",
                                        "value": "232"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "8782:1:84",
                                            "type": "",
                                            "value": "2"
                                          },
                                          {
                                            "name": "value2",
                                            "nodeType": "YulIdentifier",
                                            "src": "8785:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "8771:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8771:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "8762:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8762:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8741:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8741:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8741:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8803:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "8814:3:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8819:2:84",
                                    "type": "",
                                    "value": "26"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8810:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8810:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "8803:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_address_t_int24_t_int24__to_t_address_t_int24_t_int24__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "8562:3:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8567:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8575:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8583:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "8594:3:84",
                            "type": ""
                          }
                        ],
                        "src": "8435:393:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8970:137:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8980:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9000:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "8994:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8994:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "8984:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "9042:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9050:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9038:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9038:17:84"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "9057:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "9062:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "9016:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9016:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9016:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9078:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "9089:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "9094:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9085:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9085:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "9078:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "8946:3:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8951:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "8962:3:84",
                            "type": ""
                          }
                        ],
                        "src": "8833:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9213:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9223:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9235:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9246:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9231:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9231:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9223:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9265:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "9280:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9296:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9301:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "9292:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9292:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9305:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "9288:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9288:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "9276:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9276:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9258:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9258:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9258:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9182:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9193:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9204:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9112:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9477:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9487:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9499:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9510:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9495:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9495:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9487:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "9522:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9540:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9545:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "9536:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9536:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9549:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "9532:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9532:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "9526:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9567:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "9582:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9590:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "9578:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9578:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9560:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9560:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9560:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9614:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9625:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9610:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9610:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9634:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9642:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "9630:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9630:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9603:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9603:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9603:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9666:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9677:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9662:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9662:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "9682:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9655:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9655:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9655:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9430:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "9441:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9449:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9457:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9468:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9320:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9923:355:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9940:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "9955:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9971:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9976:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "9967:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9967:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9980:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "9963:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9963:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "9951:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9951:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9933:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9933:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9933:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10004:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10015:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10000:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10000:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10031:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10034:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "10020:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10020:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9993:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9993:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9993:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10062:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10073:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10058:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10058:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10089:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "10092:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "10078:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10078:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10051:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10051:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10051:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10120:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10131:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10116:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10116:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value3",
                                        "nodeType": "YulIdentifier",
                                        "src": "10140:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10156:3:84",
                                                "type": "",
                                                "value": "128"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10161:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "10152:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "10152:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10165:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "10148:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10148:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "10136:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10136:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10109:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10109:60:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10109:60:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10189:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10200:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10185:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10185:19:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10206:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10178:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10178:32:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10178:32:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10219:53:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value4",
                                    "nodeType": "YulIdentifier",
                                    "src": "10244:6:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10256:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10267:3:84",
                                        "type": "",
                                        "value": "160"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10252:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10252:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "10227:16:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10227:45:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10219:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_int24_t_int24_t_uint128_t_bytes_memory_ptr__to_t_address_t_int24_t_int24_t_uint128_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9860:9:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "9871:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "9879:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "9887:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9895:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9903:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9914:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9700:578:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10488:362:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10498:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10510:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10521:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10506:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10506:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10498:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10541:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "10556:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10572:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10577:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "10568:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "10568:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10581:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "10564:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10564:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "10552:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10552:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10534:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10534:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10534:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10605:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10616:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10601:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10601:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10632:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10635:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "10621:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10621:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10594:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10594:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10594:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10663:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10674:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10659:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10659:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10690:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "10693:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "10679:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10679:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10652:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10652:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10652:49:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10710:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10728:3:84",
                                        "type": "",
                                        "value": "128"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10733:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "10724:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10724:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10737:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "10720:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10720:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10714:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10759:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10770:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10755:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10755:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value3",
                                        "nodeType": "YulIdentifier",
                                        "src": "10779:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10787:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "10775:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10775:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10748:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10748:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10748:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10811:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10822:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10807:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10807:19:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value4",
                                        "nodeType": "YulIdentifier",
                                        "src": "10832:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10840:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "10828:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10828:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10800:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10800:44:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10800:44:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_int24_t_int24_t_uint128_t_uint128__to_t_address_t_int24_t_int24_t_uint128_t_uint128__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10425:9:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "10436:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "10444:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "10452:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "10460:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10468:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10479:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10283:567:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10950:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10960:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10972:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10983:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10968:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10968:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10960:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11002:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "11027:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "11020:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11020:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "11013:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11013:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10995:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10995:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10995:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10919:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10930:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10941:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10855:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11148:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11158:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11170:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11181:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11166:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11166:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11158:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11200:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "11211:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11193:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11193:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11193:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11117:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11128:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11139:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11047:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11326:91:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11336:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11348:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11359:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11344:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11344:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11336:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11378:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11400:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "11403:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "11389:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11389:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11371:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11371:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11371:40:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_int24__to_t_int24__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11295:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11306:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11317:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11229:188:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11571:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11581:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11593:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11604:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11589:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11589:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11581:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11623:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11645:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "11648:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "11634:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11634:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11616:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11616:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11616:40:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11676:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11687:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11672:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11672:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11703:1:84",
                                        "type": "",
                                        "value": "2"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "11706:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "11692:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11692:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11665:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11665:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11665:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11734:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11745:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11730:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11730:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "11754:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11770:3:84",
                                                "type": "",
                                                "value": "128"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11775:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "11766:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11766:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "11779:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "11762:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11762:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "11750:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11750:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11723:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11723:60:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11723:60:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_int24_t_int24_t_uint128__to_t_int24_t_int24_t_uint128__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11524:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "11535:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "11543:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11551:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11562:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11422:367:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11915:98:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11932:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11943:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11925:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11925:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11925:21:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11955:52:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "11980:6:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11992:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12003:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11988:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11988:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "11963:16:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11963:44:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11955:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "11884:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11895:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11906:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11794:219:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12192:150:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12209:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12220:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12202:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12202:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12202:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12243:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12254:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12239:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12239:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12259:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12232:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12232:29:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12232:29:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12281:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12292:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12277:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12277:18:84"
                                  },
                                  {
                                    "hexValue": "54",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "12297:3:84",
                                    "type": "",
                                    "value": "T"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12270:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12270:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12270:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12310:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12322:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12333:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12318:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12318:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "12310:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12169:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12183:4:84",
                            "type": ""
                          }
                        ],
                        "src": "12018:324:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12518:373:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12528:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12540:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12551:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12536:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12536:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "12528:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12564:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "12580:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "12574:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12574:13:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "12568:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12596:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12614:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12619:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12610:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12610:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12623:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "12606:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12606:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "12600:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "12641:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "12662:2:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "12656:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12656:9:84"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "12667:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "12652:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12652:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12634:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12634:37:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12634:37:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12691:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12702:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12687:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12687:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "12723:2:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12727:4:84",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "12719:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "12719:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "12713:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12713:20:84"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "12735:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "12709:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12709:29:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12680:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12680:59:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12680:59:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12759:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12770:4:84",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12755:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12755:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "_1",
                                                "nodeType": "YulIdentifier",
                                                "src": "12791:2:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12795:4:84",
                                                "type": "",
                                                "value": "0x40"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "12787:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "12787:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "12781:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12781:20:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12803:8:84",
                                        "type": "",
                                        "value": "0xffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "12777:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12777:35:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12748:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12748:65:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12748:65:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "12833:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12844:4:84",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "12829:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12829:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "12865:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12873:4:84",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "12861:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "12861:17:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "12855:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12855:24:84"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "12881:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "12851:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12851:33:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12822:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12822:63:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12822:63:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_MintCallbackData_$11756_memory_ptr__to_t_struct$_MintCallbackData_$11756_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12487:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "12498:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12509:4:84",
                            "type": ""
                          }
                        ],
                        "src": "12347:544:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12997:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "13007:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13019:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13030:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13015:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13015:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "13007:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13049:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "13064:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "13080:3:84",
                                                "type": "",
                                                "value": "128"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "13085:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "13076:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "13076:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "13089:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "13072:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13072:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "13060:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13060:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13042:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13042:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13042:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "12966:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "12977:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "12988:4:84",
                            "type": ""
                          }
                        ],
                        "src": "12896:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13261:188:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "13271:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13283:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13294:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13279:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13279:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "13271:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13313:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "13328:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "13344:3:84",
                                                "type": "",
                                                "value": "128"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "13349:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "13340:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "13340:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "13353:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "13336:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13336:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "13324:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13324:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13306:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13306:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13306:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13377:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13388:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13373:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13373:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "13393:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13366:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13366:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13366:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13420:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13431:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13416:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13416:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "13436:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13409:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13409:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13409:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint128_t_uint256_t_uint256__to_t_uint128_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13214:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "13225:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "13233:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "13241:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "13252:4:84",
                            "type": ""
                          }
                        ],
                        "src": "13104:345:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13667:315:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "13677:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13689:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13700:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "13685:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13685:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "13677:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13713:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13731:3:84",
                                        "type": "",
                                        "value": "128"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13736:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "13727:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13727:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13740:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "13723:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13723:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "13717:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "13758:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "13773:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "13781:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "13769:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13769:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13751:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13751:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13751:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13805:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13816:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13801:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13801:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "13821:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13794:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13794:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13794:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13848:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13859:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13844:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13844:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "13864:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13837:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13837:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13837:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13891:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13902:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13887:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13887:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value3",
                                        "nodeType": "YulIdentifier",
                                        "src": "13911:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "13919:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "13907:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13907:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13880:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13880:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13880:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "13943:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13954:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13939:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13939:19:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value4",
                                        "nodeType": "YulIdentifier",
                                        "src": "13964:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "13972:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "13960:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13960:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13932:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13932:44:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13932:44:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint128_t_uint256_t_uint256_t_uint128_t_uint128__to_t_uint128_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "13604:9:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "13615:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "13623:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "13631:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "13639:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "13647:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "13658:4:84",
                            "type": ""
                          }
                        ],
                        "src": "13454:528:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14088:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "14098:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14110:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14121:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14106:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14106:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "14098:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14140:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "14155:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "14171:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "14176:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "14167:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "14167:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "14180:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "14163:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "14163:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "14151:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14151:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14133:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14133:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14133:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint160__to_t_uint160__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "14057:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "14068:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "14079:4:84",
                            "type": ""
                          }
                        ],
                        "src": "13987:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14294:91:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "14304:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14316:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14327:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14312:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14312:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "14304:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14346:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "14361:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14369:8:84",
                                        "type": "",
                                        "value": "0xffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "14357:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14357:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14339:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14339:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14339:40:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint24__to_t_uint24__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "14263:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "14274:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "14285:4:84",
                            "type": ""
                          }
                        ],
                        "src": "14195:190:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14491:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "14501:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14513:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14524:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14509:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14509:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "14501:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14543:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "14554:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14536:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14536:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14536:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "14460:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "14471:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "14482:4:84",
                            "type": ""
                          }
                        ],
                        "src": "14390:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14701:119:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "14711:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14723:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14734:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14719:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14719:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "14711:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14753:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "14764:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14746:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14746:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14746:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "14791:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14802:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "14787:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14787:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "14807:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14780:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14780:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14780:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "14662:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "14673:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "14681:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "14692:4:84",
                            "type": ""
                          }
                        ],
                        "src": "14572:248:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "14922:87:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "14932:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14944:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14955:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "14940:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14940:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "14932:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "14974:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "14989:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "14997:4:84",
                                        "type": "",
                                        "value": "0xff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "14985:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14985:17:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "14967:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14967:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14967:36:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "14891:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "14902:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "14913:4:84",
                            "type": ""
                          }
                        ],
                        "src": "14825:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15055:304:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "15065:19:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15081:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "15075:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15075:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "15065:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15093:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "15115:6:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15123:4:84",
                                    "type": "",
                                    "value": "0x60"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "15111:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15111:17:84"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "15097:10:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15211:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15232:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "15239:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "15244:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "15235:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "15235:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "15225:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15225:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15225:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15276:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15279:4:84",
                                          "type": "",
                                          "value": "0x41"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "15269:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15269:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15269:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15304:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "15307:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "15297:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15297:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15297:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "15146:10:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15158:18:84",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "15143:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15143:34:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "15182:10:84"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "15194:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "15179:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15179:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "15140:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15140:62:84"
                              },
                              "nodeType": "YulIf",
                              "src": "15137:185:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15338:2:84",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "15342:10:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "15331:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15331:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "15331:22:84"
                            }
                          ]
                        },
                        "name": "allocate_memory",
                        "nodeType": "YulFunctionDefinition",
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "15044:6:84",
                            "type": ""
                          }
                        ],
                        "src": "15014:345:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15412:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15439:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "15441:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15441:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15441:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "15428:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "15435:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "15431:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15431:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "15425:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15425:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "15422:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15470:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "15481:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "15484:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "15477:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15477:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "15470:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "15395:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "15398:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "15404:3:84",
                            "type": ""
                          }
                        ],
                        "src": "15364:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15543:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15566:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "15568:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15568:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15568:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "15563:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "15556:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15556:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "15553:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15597:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "15606:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "15609:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "15602:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15602:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "15597:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "15528:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "15531:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "15537:1:84",
                            "type": ""
                          }
                        ],
                        "src": "15497:120:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15674:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15733:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "15735:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15735:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15735:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "15705:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "15698:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "15698:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "15691:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15691:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "15713:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "15724:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "15720:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "15720:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "15728:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "15716:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "15716:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "15710:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15710:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "15687:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15687:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "15684:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15764:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "15779:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "15782:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "15775:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15775:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "15764:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "15653:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "15656:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "15662:7:84",
                            "type": ""
                          }
                        ],
                        "src": "15622:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "15844:182:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15854:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15872:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15877:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "15868:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15868:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15881:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "15864:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15864:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "15858:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15892:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "15907:1:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "15910:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "15903:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15903:10:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "15896:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15922:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "15937:1:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "15940:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "15933:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15933:10:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "15926:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "15968:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "15970:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15970:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "15970:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "15958:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "15963:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "15955:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15955:12:84"
                              },
                              "nodeType": "YulIf",
                              "src": "15952:38:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15999:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "16011:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "16016:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "16007:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16007:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "15999:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint160",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "15826:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "15829:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "15835:4:84",
                            "type": ""
                          }
                        ],
                        "src": "15795:231:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16080:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "16102:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "16104:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16104:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16104:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "16096:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "16099:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "16093:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16093:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "16090:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16133:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "16145:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "16148:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "16141:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16141:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "16133:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "16062:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "16065:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "16071:4:84",
                            "type": ""
                          }
                        ],
                        "src": "16031:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16214:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "16224:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "16233:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "16228:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "16293:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "16318:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "16323:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "16314:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "16314:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "16337:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "16342:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "16333:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "16333:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "16327:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "16327:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "16307:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16307:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16307:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "16254:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "16257:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "16251:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16251:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "16265:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "16267:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "16276:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16279:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "16272:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16272:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "16267:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "16247:3:84",
                                "statements": []
                              },
                              "src": "16243:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "16382:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "16395:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "16400:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "16391:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "16391:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16409:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "16384:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16384:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16384:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "16371:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "16374:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "16368:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16368:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "16365:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "16192:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "16197:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "16202:6:84",
                            "type": ""
                          }
                        ],
                        "src": "16161:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16479:325:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "16489:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16503:1:84",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "16506:4:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "16499:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16499:12:84"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "16489:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "16520:38:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "16550:4:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16556:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "16546:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16546:12:84"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "16524:18:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "16597:31:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "16599:27:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "16613:6:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16621:4:84",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "16609:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16609:17:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "16599:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "16577:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "16570:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16570:26:84"
                              },
                              "nodeType": "YulIf",
                              "src": "16567:61:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "16687:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16708:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "16715:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "16720:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "16711:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "16711:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "16701:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16701:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16701:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16752:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16755:4:84",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "16745:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16745:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16745:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16780:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "16783:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "16773:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16773:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16773:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "16643:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "16666:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "16674:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "16663:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "16663:14:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "16640:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16640:38:84"
                              },
                              "nodeType": "YulIf",
                              "src": "16637:161:84"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "16459:4:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "16468:6:84",
                            "type": ""
                          }
                        ],
                        "src": "16424:380:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16847:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "16870:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "16872:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16872:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "16872:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "16867:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "16860:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16860:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "16857:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "16901:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "16910:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "16913:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "16906:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16906:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "16901:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "16832:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "16835:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "16841:1:84",
                            "type": ""
                          }
                        ],
                        "src": "16809:112:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "16968:142:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "16978:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17004:1:84",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "17007:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "16993:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16993:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "16982:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17051:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "17053:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17053:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17053:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "17028:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17041:7:84",
                                        "type": "",
                                        "value": "8388607"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "17037:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17037:12:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "17025:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17025:25:84"
                              },
                              "nodeType": "YulIf",
                              "src": "17022:51:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17082:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17093:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "17096:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "17089:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17089:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "17082:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int24",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "16950:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "16960:3:84",
                            "type": ""
                          }
                        ],
                        "src": "16926:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17158:93:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17194:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "17196:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17196:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17196:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "17174:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17185:3:84",
                                        "type": "",
                                        "value": "255"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17190:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "17181:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17181:11:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "17171:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17171:22:84"
                              },
                              "nodeType": "YulIf",
                              "src": "17168:48:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "17225:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17236:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "17239:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "17232:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17232:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "17225:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "17140:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "17150:3:84",
                            "type": ""
                          }
                        ],
                        "src": "17115:136:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17288:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17305:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17312:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17317:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "17308:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17308:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17298:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17298:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17298:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17345:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17348:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17338:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17338:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17338:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17369:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17372:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "17362:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17362:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17362:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "17256:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17420:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17437:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17444:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "17449:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "17440:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17440:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17430:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17430:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17430:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17477:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17480:4:84",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "17470:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17470:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17470:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17501:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17504:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "17494:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17494:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "17494:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "17388:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17565:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17629:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "17638:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "17641:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "17631:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17631:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17631:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "17588:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "17599:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "17614:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "17619:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "17610:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "17610:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "17623:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "17606:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "17606:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "17595:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "17595:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "17585:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17585:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "17578:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17578:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "17575:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "17554:5:84",
                            "type": ""
                          }
                        ],
                        "src": "17520:131:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "17701:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "17765:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "17774:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "17777:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "17767:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17767:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "17767:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "17724:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "17735:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "17750:3:84",
                                                    "type": "",
                                                    "value": "128"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "17755:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "17746:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "17746:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "17759:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "17742:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "17742:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "17731:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "17731:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "17721:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "17721:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "17714:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17714:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "17711:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_uint128",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "17690:5:84",
                            "type": ""
                          }
                        ],
                        "src": "17656:131:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_bool_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_bool_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_struct$_MintCallbackData_$11756_memory_ptr(headStart, dataEnd) -> value0\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 128) { revert(0, 0) }\n        let memPtr := mload(0x40)\n        let newFreePtr := add(memPtr, 0x40)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(0x40, newFreePtr)\n        if slt(_1, 0x60) { revert(0, 0) }\n        let value := allocate_memory()\n        let value_1 := calldataload(headStart)\n        validator_revert_address(value_1)\n        mstore(value, value_1)\n        let value_2 := calldataload(add(headStart, 32))\n        validator_revert_address(value_2)\n        mstore(add(value, 32), value_2)\n        let value_3 := calldataload(add(headStart, 0x40))\n        if iszero(eq(value_3, and(value_3, 0xffffff))) { revert(0, 0) }\n        mstore(add(value, 0x40), value_3)\n        mstore(memPtr, value)\n        let value_4 := calldataload(add(headStart, 0x60))\n        validator_revert_address(value_4)\n        mstore(add(memPtr, 32), value_4)\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_uint128t_uint128_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_uint128(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_uint128(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_uint128t_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_uint128(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_uint128t_uint256t_uint256t_uint128t_uint128_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_uint128(value)\n        value0 := value\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        let value_1 := mload(add(headStart, 96))\n        validator_revert_uint128(value_1)\n        value3 := value_1\n        let value_2 := mload(add(headStart, 128))\n        validator_revert_uint128(value_2)\n        value4 := value_2\n    }\n    function abi_decode_tuple_t_uint160t_int24t_uint16t_uint16t_uint16t_uint8t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        if iszero(eq(value_1, signextend(2, value_1))) { revert(0, 0) }\n        value1 := value_1\n        value2 := abi_decode_uint16_fromMemory(add(headStart, 64))\n        value3 := abi_decode_uint16_fromMemory(add(headStart, 96))\n        value4 := abi_decode_uint16_fromMemory(add(headStart, 128))\n        let value_2 := mload(add(headStart, 160))\n        if iszero(eq(value_2, and(value_2, 0xff))) { revert(0, 0) }\n        value5 := value_2\n        value6 := abi_decode_bool_fromMemory(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value2 := add(_2, 32)\n        value3 := length\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let value := calldataload(add(headStart, 128))\n        validator_revert_address(value)\n        value4 := value\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_packed_t_address_t_int24_t_int24__to_t_address_t_int24_t_int24__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        mstore(pos, and(shl(96, value0), not(sub(shl(96, 1), 1))))\n        mstore(add(pos, 20), shl(232, signextend(2, value1)))\n        mstore(add(pos, 23), shl(232, signextend(2, value2)))\n        end := add(pos, 26)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_int24_t_int24_t_uint128_t_bytes_memory_ptr__to_t_address_t_int24_t_int24_t_uint128_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), signextend(2, value1))\n        mstore(add(headStart, 64), signextend(2, value2))\n        mstore(add(headStart, 96), and(value3, sub(shl(128, 1), 1)))\n        mstore(add(headStart, 128), 160)\n        tail := abi_encode_bytes(value4, add(headStart, 160))\n    }\n    function abi_encode_tuple_t_address_t_int24_t_int24_t_uint128_t_uint128__to_t_address_t_int24_t_int24_t_uint128_t_uint128__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), signextend(2, value1))\n        mstore(add(headStart, 64), signextend(2, value2))\n        let _1 := sub(shl(128, 1), 1)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_int24__to_t_int24__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, signextend(2, value0))\n    }\n    function abi_encode_tuple_t_int24_t_int24_t_uint128__to_t_int24_t_int24_t_uint128__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, signextend(2, value0))\n        mstore(add(headStart, 32), signextend(2, value1))\n        mstore(add(headStart, 64), and(value2, sub(shl(128, 1), 1)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 1)\n        mstore(add(headStart, 64), \"T\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_struct$_MintCallbackData_$11756_memory_ptr__to_t_struct$_MintCallbackData_$11756_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := mload(value0)\n        let _2 := sub(shl(160, 1), 1)\n        mstore(headStart, and(mload(_1), _2))\n        mstore(add(headStart, 0x20), and(mload(add(_1, 0x20)), _2))\n        mstore(add(headStart, 0x40), and(mload(add(_1, 0x40)), 0xffffff))\n        mstore(add(headStart, 0x60), and(mload(add(value0, 0x20)), _2))\n    }\n    function abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(128, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint128_t_uint256_t_uint256__to_t_uint128_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, sub(shl(128, 1), 1)))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint128_t_uint256_t_uint256_t_uint128_t_uint128__to_t_uint128_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := sub(shl(128, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n    function abi_encode_tuple_t_uint160__to_t_uint160__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint24__to_t_uint24__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x60)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_uint160(x, y) -> diff\n    {\n        let _1 := sub(shl(160, 1), 1)\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function negate_t_int24(value) -> ret\n    {\n        let value_1 := signextend(2, value)\n        if eq(value_1, not(8388607)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function negate_t_int256(value) -> ret\n    {\n        if eq(value, shl(255, 1)) { panic_error_0x11() }\n        ret := sub(0, value)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function validator_revert_uint128(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(128, 1), 1)))) { revert(0, 0) }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {
                "3239": [
                  {
                    "length": 32,
                    "start": 1414
                  }
                ],
                "3243": [
                  {
                    "length": 32,
                    "start": 609
                  }
                ],
                "3247": [
                  {
                    "length": 32,
                    "start": 1655
                  }
                ],
                "3251": [
                  {
                    "length": 32,
                    "start": 674
                  },
                  {
                    "length": 32,
                    "start": 2086
                  },
                  {
                    "length": 32,
                    "start": 3243
                  },
                  {
                    "length": 32,
                    "start": 3437
                  },
                  {
                    "length": 32,
                    "start": 3700
                  },
                  {
                    "length": 32,
                    "start": 3783
                  },
                  {
                    "length": 32,
                    "start": 3845
                  },
                  {
                    "length": 32,
                    "start": 3940
                  },
                  {
                    "length": 32,
                    "start": 4234
                  },
                  {
                    "length": 32,
                    "start": 5920
                  },
                  {
                    "length": 32,
                    "start": 6293
                  }
                ],
                "3255": [
                  {
                    "length": 32,
                    "start": 1795
                  }
                ],
                "3259": [
                  {
                    "length": 32,
                    "start": 817
                  },
                  {
                    "length": 32,
                    "start": 6077
                  }
                ],
                "3263": [
                  {
                    "length": 32,
                    "start": 1466
                  },
                  {
                    "length": 32,
                    "start": 6110
                  }
                ],
                "3267": [
                  {
                    "length": 32,
                    "start": 1075
                  },
                  {
                    "length": 32,
                    "start": 2134
                  },
                  {
                    "length": 32,
                    "start": 3132
                  },
                  {
                    "length": 32,
                    "start": 3484
                  },
                  {
                    "length": 32,
                    "start": 3988
                  },
                  {
                    "length": 32,
                    "start": 4285
                  },
                  {
                    "length": 32,
                    "start": 6342
                  }
                ],
                "3271": [
                  {
                    "length": 32,
                    "start": 1004
                  },
                  {
                    "length": 32,
                    "start": 2167
                  },
                  {
                    "length": 32,
                    "start": 3175
                  },
                  {
                    "length": 32,
                    "start": 3518
                  },
                  {
                    "length": 32,
                    "start": 4021
                  },
                  {
                    "length": 32,
                    "start": 4319
                  },
                  {
                    "length": 32,
                    "start": 6376
                  }
                ],
                "3275": [
                  {
                    "length": 32,
                    "start": 1603
                  }
                ]
              },
              "linkReferences": {},
              "object": "60806040526004361061019d5760003560e01c806395d89b41116100dd57806395d89b41146104a2578063a3e6dc28146104b7578063a5dc7d4d146104ef578063a9059cbb14610534578063ab033ea914610554578063c45a015514610574578063c6275261146105a8578063cf45affb146105dc578063cf51148d146105fc578063d0c93a7c14610631578063d21220a714610665578063d348799714610699578063dd62ed3e146106b9578063ddca3f43146106f1578063e522538114610739578063eaf00b231461074e578063f39c38a01461076e57600080fd5b806306fdde03146101a957806309218e91146101d4578063095ea7b31461021f5780630dfe16811461024f57806316f0115b1461029057806318160ddd146102c4578063238efcbc146102e857806323b872dd146102ff5780632ea28f5b1461031f578063313ce5671461035357806335001a1a1461037a5780633a323bdf1461039a5780634c0549b0146103ba57806355b812a8146103da57806359c4f905146104215780635aa6e6751461045557806370a082311461047557600080fd5b366101a457005b600080fd5b3480156101b557600080fd5b506101be61078e565b6040516101cb9190612272565b60405180910390f35b3480156101e057600080fd5b506101e961081c565b604080516001600160801b039687168152602081019590955284019290925283166060830152909116608082015260a0016101cb565b34801561022b57600080fd5b5061023f61023a366004611dcf565b61093d565b60405190151581526020016101cb565b34801561025b57600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b6040516101cb91906121d1565b34801561029c57600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b3480156102d057600080fd5b506102da60045481565b6040519081526020016101cb565b3480156102f457600080fd5b506102fd6109a9565b005b34801561030b57600080fd5b5061023f61031a366004611d8e565b610a35565b34801561032b57600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b34801561035f57600080fd5b50610368601281565b60405160ff90911681526020016101cb565b34801561038657600080fd5b506102fd610395366004611dcf565b610afe565b3480156103a657600080fd5b506102fd6103b5366004611dcf565b610b0c565b3480156103c657600080fd5b506102fd6103d5366004611d3d565b610b16565b3480156103e657600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000081565b60405160029190910b81526020016101cb565b34801561042d57600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561046157600080fd5b50600054610283906001600160a01b031681565b34801561048157600080fd5b506102da610490366004611ce7565b60066020526000908152604090205481565b3480156104ae57600080fd5b506101be610b28565b3480156104c357600080fd5b506104d76104d236600461211a565b610b35565b6040516001600160801b0390911681526020016101cb565b3480156104fb57600080fd5b5061050f61050a3660046120e8565b610b65565b604080516001600160801b0390941684526020840192909252908201526060016101cb565b34801561054057600080fd5b5061023f61054f366004611dcf565b610b86565b34801561056057600080fd5b506102fd61056f366004611ce7565b610b9c565b34801561058057600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b457600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e857600080fd5b506102fd6105f7366004611d8e565b610c1d565b34801561060857600080fd5b5061061c610617366004611eff565b610c2d565b604080519283526020830191909152016101cb565b34801561063d57600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067157600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b3480156106a557600080fd5b506102fd6106b4366004612069565b610e59565b3480156106c557600080fd5b506102da6106d4366004611d04565b600560209081526000928352604080842090915290825290205481565b3480156106fd57600080fd5b506107257f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff90911681526020016101cb565b34801561074557600080fd5b5061061c610f31565b34801561075a57600080fd5b506102fd610769366004611d3d565b611172565b34801561077a57600080fd5b50600154610283906001600160a01b031681565b6002805461079b90612371565b80601f01602080910402602001604051908101604052809291908181526020018280546107c790612371565b80156108145780601f106107e957610100808354040283529160200191610814565b820191906000526020600020905b8154815290600101906020018083116107f757829003601f168201915b505050505081565b60008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf307f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006040516020016108a893929190612185565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016108dc91815260200190565b60a06040518083038186803b1580156108f457600080fd5b505afa158015610908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092c9190611f49565b939992985090965094509092509050565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109989086815260200190565b60405180910390a350600192915050565b6001546001600160a01b031633146109d457604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b691610a2b916121d1565b60405180910390a1565b6001600160a01b038316600081815260056020908152604080832033808552925282205491929091908214801590610a6f57506000198114155b15610ae5576000610a80858361232e565b6001600160a01b038881166000818152600560209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b610af0868686611594565b6001925050505b9392505050565b610b088282611630565b5050565b610b0882826116a8565b610b2284848484611172565b50505050565b6003805461079b90612371565b6000610b4386868686611718565b50909150610b5c9050826001600160801b038316611630565b95945050505050565b6000806000610b7687878787611718565b9250925092509450945094915050565b6000610b93338484611594565b50600192915050565b6000546001600160a01b03163314610bc7576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610c129083906121d1565b60405180910390a150565b610c28838383611594565b505050565b60405163a34123a760e01b81527f0000000000000000000000000000000000000000000000000000000000000000600290810b60048301527f0000000000000000000000000000000000000000000000000000000000000000900b60248201526001600160801b038516604482015260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a34123a7906064016040805180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d269190612045565b909250905084821080610d3857508381105b15610d56576040516397c7f53760e01b815260040160405180910390fd5b6040516309e3d67b60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634f1eb3d890610dea9086907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401612235565b6040805180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3b9190611ed0565b5050610e5033876001600160801b03166116a8565b94509492505050565b6000610e6782840184611e16565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610eb257604051634b60273560e01b815260040160405180910390fd5b8415610eec578051516020820151610eec91907f000000000000000000000000000000000000000000000000000000000000000088611172565b8315610f2a57610f2a81600001516020015182602001517f000000000000000000000000000000000000000000000000000000000000000087611172565b5050505050565b6000805481906001600160a01b03163314610f5f576040516354348f0360e01b815260040160405180910390fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf307f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000604051602001610fe693929190612185565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161101a91815260200190565b60a06040518083038186803b15801561103257600080fd5b505afa158015611046573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106a9190611f49565b6000546040516309e3d67b60e31b81529297509095506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169550634f1eb3d8945061110b935016907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401612235565b6040805180830381600087803b15801561112457600080fd5b505af1158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190611ed0565b6001600160801b03918216969116945092505050565b610b228484848461199f565b60008060008360020b12611195578260020b6111a2565b8260020b6111a2906123e3565b90506111b1620d89e7196123c0565b60020b8111156111eb5760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b6000600182166111ff57600160801b611211565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615611246576080611241826ffff97272373d413259a46990580e213a6122e7565b901c90505b600482161561127057608061126b826ffff2e50f5f656932ef12357cf3c7fdcc6122e7565b901c90505b600882161561129a576080611295826fffe5caca7e10e4e61c3624eaa0941cd06122e7565b901c90505b60108216156112c45760806112bf826fffcb9843d60f6159c9db58835c9266446122e7565b901c90505b60208216156112ee5760806112e9826fff973b41fa98c081472e6896dfb254c06122e7565b901c90505b6040821615611318576080611313826fff2ea16466c96a3843ec78b326b528616122e7565b901c90505b608082161561134257608061133d826ffe5dee046a99a2a811c461f1969c30536122e7565b901c90505b61010082161561136d576080611368826ffcbe86c7900a88aedcffc83b479aa3a46122e7565b901c90505b610200821615611398576080611393826ff987a7253ac413176f2b074cf7815e546122e7565b901c90505b6104008216156113c35760806113be826ff3392b0822b70005940c7a398e4b70f36122e7565b901c90505b6108008216156113ee5760806113e9826fe7159475a2c29b7443b29c7fa6e889d96122e7565b901c90505b611000821615611419576080611414826fd097f3bdfd2022b8845ad8f792aa58256122e7565b901c90505b61200082161561144457608061143f826fa9f746462d870fdf8a65dc1f90e061e56122e7565b901c90505b61400082161561146f57608061146a826f70d869a156d2a1b890bb3df62baf32f76122e7565b901c90505b61800082161561149a576080611495826f31be135f97d08fd981231505542fcfa66122e7565b901c90505b620100008216156114c65760806114c1826f09aa508b5b7a84e1c677de54f3e99bc96122e7565b901c90505b620200008216156114f15760806114ec826e5d6af8dedb81196699c329225ee6046122e7565b901c90505b6204000082161561151b576080611516826d2216e584f5fa1ea926041bedfe986122e7565b901c90505b6208000082161561154357608061153e826b048a170391f7dc42444e8fa26122e7565b901c90505b60008460020b131561155e5761155b816000196122d3565b90505b61156c600160201b826123ac565b1561157857600161157b565b60005b61158c9060ff16602083901c6122bb565b949350505050565b6001600160a01b038316600090815260066020526040812080548392906115bc90849061232e565b90915550506001600160a01b038216600090815260066020526040812080548392906115e99084906122bb565b92505081905550816001600160a01b0316836001600160a01b031660008051602061245a8339815191528360405161162391815260200190565b60405180910390a3505050565b806004600082825461164291906122bb565b90915550506001600160a01b0382166000908152600660205260408120805483929061166f9084906122bb565b90915550506040518181526001600160a01b0383169060009060008051602061245a833981519152906020015b60405180910390a35050565b80600460008282546116ba919061232e565b90915550506001600160a01b038216600090815260066020526040812080548392906116e790849061232e565b90915550506040518181526000906001600160a01b0384169060008051602061245a8339815191529060200161169c565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561177757600080fd5b505afa15801561178b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117af9190611fab565b5050505050509050611804817f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008b8b611a99565b6040805160a080820183526007546001600160a01b039081168385018181526008548084166060808801918252600160a01b90920462ffffff9081166080808a01918252948952336020998a019081528a51998a019690965291518616888a01529051169086015290518216848201528451808503909101815291830193849052633c8a7d8d60e01b9093529296507f000000000000000000000000000000000000000000000000000000000000000090911691633c8a7d8d916119139130917f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000918b919060a4016121e5565b6040805180830381600087803b15801561192c57600080fd5b505af1158015611940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119649190612045565b90935091508583108061197657508482105b15611994576040516397c7f53760e01b815260040160405180910390fd5b509450945094915050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691611a0391906121b5565b6000604051808303816000865af19150503d8060008114611a40576040519150601f19603f3d011682016040523d82523d6000602084013e611a45565b606091505b5091509150811580611a735750805115801590611a73575080806020019051810190611a719190611dfb565b155b15611a91576040516316369daf60e31b815260040160405180910390fd5b505050505050565b6000836001600160a01b0316856001600160a01b03161115611ab9579293925b846001600160a01b0316866001600160a01b031611611ae457611add858585611b5b565b9050610b5c565b836001600160a01b0316866001600160a01b03161015611b46576000611b0b878686611b5b565b90506000611b1a878986611bc5565b9050806001600160801b0316826001600160801b031610611b3b5780611b3d565b815b92505050610b5c565b611b51858584611bc5565b9695505050505050565b6000826001600160a01b0316846001600160a01b03161115611b7b579192915b6000611b9e856001600160a01b0316856001600160a01b0316600160601b611bfb565b9050610b5c611bc08483611bb28989612306565b6001600160a01b0316611bfb565b611caa565b6000826001600160a01b0316846001600160a01b03161115611be5579192915b61158c611bc083600160601b611bb28888612306565b600080806000198587098587029250828110838203039150508060001415611c355760008411611c2a57600080fd5b508290049050610af7565b808411611c4157600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b806001600160801b0381168114611cc057600080fd5b919050565b80518015158114611cc057600080fd5b805161ffff81168114611cc057600080fd5b600060208284031215611cf957600080fd5b8135610af78161242c565b60008060408385031215611d1757600080fd5b8235611d228161242c565b91506020830135611d328161242c565b809150509250929050565b60008060008060808587031215611d5357600080fd5b8435611d5e8161242c565b93506020850135611d6e8161242c565b92506040850135611d7e8161242c565b9396929550929360600135925050565b600080600060608486031215611da357600080fd5b8335611dae8161242c565b92506020840135611dbe8161242c565b929592945050506040919091013590565b60008060408385031215611de257600080fd5b8235611ded8161242c565b946020939093013593505050565b600060208284031215611e0d57600080fd5b610af782611cc5565b60008183036080811215611e2957600080fd5b604051604081018181106001600160401b0382111715611e5957634e487b7160e01b600052604160045260246000fd5b6040526060821215611e6a57600080fd5b611e72612285565b91508335611e7f8161242c565b82526020840135611e8f8161242c565b6020830152604084013562ffffff81168114611eaa57600080fd5b6040830152908152606083013590611ec18261242c565b60208101919091529392505050565b60008060408385031215611ee357600080fd5b8251611eee81612444565b6020840151909250611d3281612444565b60008060008060808587031215611f1557600080fd5b8435611f2081612444565b935060208501359250604085013591506060850135611f3e8161242c565b939692955090935050565b600080600080600060a08688031215611f6157600080fd5b8551611f6c81612444565b8095505060208601519350604086015192506060860151611f8c81612444565b6080870151909250611f9d81612444565b809150509295509295909350565b600080600080600080600060e0888a031215611fc657600080fd5b8751611fd18161242c565b8097505060208801518060020b8114611fe957600080fd5b9550611ff760408901611cd5565b945061200560608901611cd5565b935061201360808901611cd5565b925060a088015160ff8116811461202957600080fd5b915061203760c08901611cc5565b905092959891949750929550565b6000806040838503121561205857600080fd5b505080516020909101519092909150565b6000806000806060858703121561207f57600080fd5b843593506020850135925060408501356001600160401b03808211156120a457600080fd5b818701915087601f8301126120b857600080fd5b8135818111156120c757600080fd5b8860208285010111156120d957600080fd5b95989497505060200194505050565b600080600080608085870312156120fe57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a0868803121561213257600080fd5b853594506020860135935060408601359250606086013591506080860135611f9d8161242c565b60008151808452612171816020860160208601612345565b601f01601f19169290920160200192915050565b60609390931b6001600160601b0319168352600291820b60e890811b6014850152910b901b6017820152601a0190565b600082516121c7818460208701612345565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a06080820181905260009061222a90830184612159565b979650505050505050565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b602081526000610af76020830184612159565b604051606081016001600160401b03811182821017156122b557634e487b7160e01b600052604160045260246000fd5b60405290565b600082198211156122ce576122ce612400565b500190565b6000826122e2576122e2612416565b500490565b600081600019048311821515161561230157612301612400565b500290565b60006001600160a01b038381169083168181101561232657612326612400565b039392505050565b60008282101561234057612340612400565b500390565b60005b83811015612360578181015183820152602001612348565b83811115610b225750506000910152565b600181811c9082168061238557607f821691505b602082108114156123a657634e487b7160e01b600052602260045260246000fd5b50919050565b6000826123bb576123bb612416565b500690565b60008160020b627fffff198114156123da576123da612400565b60000392915050565b6000600160ff1b8214156123f9576123f9612400565b5060000390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b038116811461244157600080fd5b50565b6001600160801b038116811461244157600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201a704c8e37e1e82766bcb1a581d023543cda75e44321d2c4f004756e33c2e74a64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x19D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x95D89B41 GT PUSH2 0xDD JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xA3E6DC28 EQ PUSH2 0x4B7 JUMPI DUP1 PUSH4 0xA5DC7D4D EQ PUSH2 0x4EF JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x534 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x554 JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x574 JUMPI DUP1 PUSH4 0xC6275261 EQ PUSH2 0x5A8 JUMPI DUP1 PUSH4 0xCF45AFFB EQ PUSH2 0x5DC JUMPI DUP1 PUSH4 0xCF51148D EQ PUSH2 0x5FC JUMPI DUP1 PUSH4 0xD0C93A7C EQ PUSH2 0x631 JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x665 JUMPI DUP1 PUSH4 0xD3487997 EQ PUSH2 0x699 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6B9 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x6F1 JUMPI DUP1 PUSH4 0xE5225381 EQ PUSH2 0x739 JUMPI DUP1 PUSH4 0xEAF00B23 EQ PUSH2 0x74E JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x76E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1A9 JUMPI DUP1 PUSH4 0x9218E91 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x24F JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x290 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2C4 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x2E8 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0x2EA28F5B EQ PUSH2 0x31F JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x353 JUMPI DUP1 PUSH4 0x35001A1A EQ PUSH2 0x37A JUMPI DUP1 PUSH4 0x3A323BDF EQ PUSH2 0x39A JUMPI DUP1 PUSH4 0x4C0549B0 EQ PUSH2 0x3BA JUMPI DUP1 PUSH4 0x55B812A8 EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x59C4F905 EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x455 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x1A4 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE PUSH2 0x78E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x2272 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E9 PUSH2 0x81C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 AND PUSH1 0x60 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x23A CALLDATASIZE PUSH1 0x4 PUSH2 0x1DCF JUMP JUMPDEST PUSH2 0x93D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x21D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x9A9 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x30B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x31A CALLDATASIZE PUSH1 0x4 PUSH2 0x1D8E JUMP JUMPDEST PUSH2 0xA35 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x368 PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x386 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x395 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DCF JUMP JUMPDEST PUSH2 0xAFE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x3B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DCF JUMP JUMPDEST PUSH2 0xB0C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D3D JUMP JUMPDEST PUSH2 0xB16 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x2 SWAP2 SWAP1 SWAP2 SIGNEXTEND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40E PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x461 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH2 0x283 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x481 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH2 0x490 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CE7 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BE PUSH2 0xB28 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4D7 PUSH2 0x4D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x211A JUMP JUMPDEST PUSH2 0xB35 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x50F PUSH2 0x50A CALLDATASIZE PUSH1 0x4 PUSH2 0x20E8 JUMP JUMPDEST PUSH2 0xB65 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP5 AND DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x540 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23F PUSH2 0x54F CALLDATASIZE PUSH1 0x4 PUSH2 0x1DCF JUMP JUMPDEST PUSH2 0xB86 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x560 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x56F CALLDATASIZE PUSH1 0x4 PUSH2 0x1CE7 JUMP JUMPDEST PUSH2 0xB9C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x580 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x5F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D8E JUMP JUMPDEST PUSH2 0xC1D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x608 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x61C PUSH2 0x617 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EFF JUMP JUMPDEST PUSH2 0xC2D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40E PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x671 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x283 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x6B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2069 JUMP JUMPDEST PUSH2 0xE59 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DA PUSH2 0x6D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D04 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x725 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0xFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x745 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x61C PUSH2 0xF31 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x75A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FD PUSH2 0x769 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D3D JUMP JUMPDEST PUSH2 0x1172 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x77A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH2 0x283 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH2 0x79B SWAP1 PUSH2 0x2371 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x7C7 SWAP1 PUSH2 0x2371 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x814 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x7E9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x814 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x7F7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x514EA4BF ADDRESS PUSH32 0x0 PUSH32 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x8A8 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2185 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8DC SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x908 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x92C SWAP2 SWAP1 PUSH2 0x1F49 JUMP JUMPDEST SWAP4 SWAP10 SWAP3 SWAP9 POP SWAP1 SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x998 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0xA2B SWAP2 PUSH2 0x21D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP3 KECCAK256 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0xA6F JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0xAE5 JUMPI PUSH1 0x0 PUSH2 0xA80 DUP6 DUP4 PUSH2 0x232E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST PUSH2 0xAF0 DUP7 DUP7 DUP7 PUSH2 0x1594 JUMP JUMPDEST PUSH1 0x1 SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xB08 DUP3 DUP3 PUSH2 0x1630 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xB08 DUP3 DUP3 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0xB22 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1172 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH2 0x79B SWAP1 PUSH2 0x2371 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB43 DUP7 DUP7 DUP7 DUP7 PUSH2 0x1718 JUMP JUMPDEST POP SWAP1 SWAP2 POP PUSH2 0xB5C SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH2 0x1630 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xB76 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1718 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB93 CALLER DUP5 DUP5 PUSH2 0x1594 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBC7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0xC12 SWAP1 DUP4 SWAP1 PUSH2 0x21D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xC28 DUP4 DUP4 DUP4 PUSH2 0x1594 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA34123A7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH32 0x0 PUSH1 0x2 SWAP1 DUP2 SIGNEXTEND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 SWAP1 SIGNEXTEND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP6 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xA34123A7 SWAP1 PUSH1 0x64 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD02 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD26 SWAP2 SWAP1 PUSH2 0x2045 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP DUP5 DUP3 LT DUP1 PUSH2 0xD38 JUMPI POP DUP4 DUP2 LT JUMPDEST ISZERO PUSH2 0xD56 JUMPI PUSH1 0x40 MLOAD PUSH4 0x97C7F537 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9E3D67B PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x4F1EB3D8 SWAP1 PUSH2 0xDEA SWAP1 DUP7 SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2235 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE17 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE3B SWAP2 SWAP1 PUSH2 0x1ED0 JUMP JUMPDEST POP POP PUSH2 0xE50 CALLER DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x16A8 JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE67 DUP3 DUP5 ADD DUP5 PUSH2 0x1E16 JUMP JUMPDEST SWAP1 POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xEB2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B602735 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 ISZERO PUSH2 0xEEC JUMPI DUP1 MLOAD MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0xEEC SWAP2 SWAP1 PUSH32 0x0 DUP9 PUSH2 0x1172 JUMP JUMPDEST DUP4 ISZERO PUSH2 0xF2A JUMPI PUSH2 0xF2A DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD PUSH32 0x0 DUP8 PUSH2 0x1172 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xF5F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x514EA4BF ADDRESS PUSH32 0x0 PUSH32 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xFE6 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2185 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x101A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1032 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1046 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x106A SWAP2 SWAP1 PUSH2 0x1F49 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH4 0x9E3D67B PUSH1 0xE3 SHL DUP2 MSTORE SWAP3 SWAP8 POP SWAP1 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP6 POP PUSH4 0x4F1EB3D8 SWAP5 POP PUSH2 0x110B SWAP4 POP AND SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2235 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1138 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x115C SWAP2 SWAP1 PUSH2 0x1ED0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 AND SWAP7 SWAP2 AND SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xB22 DUP5 DUP5 DUP5 DUP5 PUSH2 0x199F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x2 SIGNEXTEND SLT PUSH2 0x1195 JUMPI DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0x11A2 JUMP JUMPDEST DUP3 PUSH1 0x2 SIGNEXTEND PUSH2 0x11A2 SWAP1 PUSH2 0x23E3 JUMP JUMPDEST SWAP1 POP PUSH2 0x11B1 PUSH3 0xD89E7 NOT PUSH2 0x23C0 JUMP JUMPDEST PUSH1 0x2 SIGNEXTEND DUP2 GT ISZERO PUSH2 0x11EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0xFA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 AND PUSH2 0x11FF JUMPI PUSH1 0x1 PUSH1 0x80 SHL PUSH2 0x1211 JUMP JUMPDEST PUSH16 0xFFFCB933BD6FAD37AA2D162D1A594001 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x88 SHL SUB AND SWAP1 POP PUSH1 0x2 DUP3 AND ISZERO PUSH2 0x1246 JUMPI PUSH1 0x80 PUSH2 0x1241 DUP3 PUSH16 0xFFF97272373D413259A46990580E213A PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x4 DUP3 AND ISZERO PUSH2 0x1270 JUMPI PUSH1 0x80 PUSH2 0x126B DUP3 PUSH16 0xFFF2E50F5F656932EF12357CF3C7FDCC PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x8 DUP3 AND ISZERO PUSH2 0x129A JUMPI PUSH1 0x80 PUSH2 0x1295 DUP3 PUSH16 0xFFE5CACA7E10E4E61C3624EAA0941CD0 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x10 DUP3 AND ISZERO PUSH2 0x12C4 JUMPI PUSH1 0x80 PUSH2 0x12BF DUP3 PUSH16 0xFFCB9843D60F6159C9DB58835C926644 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x20 DUP3 AND ISZERO PUSH2 0x12EE JUMPI PUSH1 0x80 PUSH2 0x12E9 DUP3 PUSH16 0xFF973B41FA98C081472E6896DFB254C0 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x40 DUP3 AND ISZERO PUSH2 0x1318 JUMPI PUSH1 0x80 PUSH2 0x1313 DUP3 PUSH16 0xFF2EA16466C96A3843EC78B326B52861 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x80 DUP3 AND ISZERO PUSH2 0x1342 JUMPI PUSH1 0x80 PUSH2 0x133D DUP3 PUSH16 0xFE5DEE046A99A2A811C461F1969C3053 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x100 DUP3 AND ISZERO PUSH2 0x136D JUMPI PUSH1 0x80 PUSH2 0x1368 DUP3 PUSH16 0xFCBE86C7900A88AEDCFFC83B479AA3A4 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x200 DUP3 AND ISZERO PUSH2 0x1398 JUMPI PUSH1 0x80 PUSH2 0x1393 DUP3 PUSH16 0xF987A7253AC413176F2B074CF7815E54 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x400 DUP3 AND ISZERO PUSH2 0x13C3 JUMPI PUSH1 0x80 PUSH2 0x13BE DUP3 PUSH16 0xF3392B0822B70005940C7A398E4B70F3 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x800 DUP3 AND ISZERO PUSH2 0x13EE JUMPI PUSH1 0x80 PUSH2 0x13E9 DUP3 PUSH16 0xE7159475A2C29B7443B29C7FA6E889D9 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x1000 DUP3 AND ISZERO PUSH2 0x1419 JUMPI PUSH1 0x80 PUSH2 0x1414 DUP3 PUSH16 0xD097F3BDFD2022B8845AD8F792AA5825 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x2000 DUP3 AND ISZERO PUSH2 0x1444 JUMPI PUSH1 0x80 PUSH2 0x143F DUP3 PUSH16 0xA9F746462D870FDF8A65DC1F90E061E5 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x4000 DUP3 AND ISZERO PUSH2 0x146F JUMPI PUSH1 0x80 PUSH2 0x146A DUP3 PUSH16 0x70D869A156D2A1B890BB3DF62BAF32F7 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH2 0x8000 DUP3 AND ISZERO PUSH2 0x149A JUMPI PUSH1 0x80 PUSH2 0x1495 DUP3 PUSH16 0x31BE135F97D08FD981231505542FCFA6 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x10000 DUP3 AND ISZERO PUSH2 0x14C6 JUMPI PUSH1 0x80 PUSH2 0x14C1 DUP3 PUSH16 0x9AA508B5B7A84E1C677DE54F3E99BC9 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x20000 DUP3 AND ISZERO PUSH2 0x14F1 JUMPI PUSH1 0x80 PUSH2 0x14EC DUP3 PUSH15 0x5D6AF8DEDB81196699C329225EE604 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x40000 DUP3 AND ISZERO PUSH2 0x151B JUMPI PUSH1 0x80 PUSH2 0x1516 DUP3 PUSH14 0x2216E584F5FA1EA926041BEDFE98 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH3 0x80000 DUP3 AND ISZERO PUSH2 0x1543 JUMPI PUSH1 0x80 PUSH2 0x153E DUP3 PUSH12 0x48A170391F7DC42444E8FA2 PUSH2 0x22E7 JUMP JUMPDEST SWAP1 SHR SWAP1 POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x2 SIGNEXTEND SGT ISZERO PUSH2 0x155E JUMPI PUSH2 0x155B DUP2 PUSH1 0x0 NOT PUSH2 0x22D3 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x156C PUSH1 0x1 PUSH1 0x20 SHL DUP3 PUSH2 0x23AC JUMP JUMPDEST ISZERO PUSH2 0x1578 JUMPI PUSH1 0x1 PUSH2 0x157B JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x158C SWAP1 PUSH1 0xFF AND PUSH1 0x20 DUP4 SWAP1 SHR PUSH2 0x22BB JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x15BC SWAP1 DUP5 SWAP1 PUSH2 0x232E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x15E9 SWAP1 DUP5 SWAP1 PUSH2 0x22BB JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x245A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 PUSH1 0x40 MLOAD PUSH2 0x1623 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1642 SWAP2 SWAP1 PUSH2 0x22BB JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x166F SWAP1 DUP5 SWAP1 PUSH2 0x22BB JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x245A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x16BA SWAP2 SWAP1 PUSH2 0x232E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x16E7 SWAP1 DUP5 SWAP1 PUSH2 0x232E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x245A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x20 ADD PUSH2 0x169C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3850C7BD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xE0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1777 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x178B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17AF SWAP2 SWAP1 PUSH2 0x1FAB JUMP JUMPDEST POP POP POP POP POP POP SWAP1 POP PUSH2 0x1804 DUP2 PUSH32 0x0 PUSH32 0x0 DUP12 DUP12 PUSH2 0x1A99 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP4 DUP6 ADD DUP2 DUP2 MSTORE PUSH1 0x8 SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP1 DUP9 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV PUSH3 0xFFFFFF SWAP1 DUP2 AND PUSH1 0x80 DUP1 DUP11 ADD SWAP2 DUP3 MSTORE SWAP5 DUP10 MSTORE CALLER PUSH1 0x20 SWAP10 DUP11 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP10 DUP11 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP2 MLOAD DUP7 AND DUP9 DUP11 ADD MSTORE SWAP1 MLOAD AND SWAP1 DUP7 ADD MSTORE SWAP1 MLOAD DUP3 AND DUP5 DUP3 ADD MSTORE DUP5 MLOAD DUP1 DUP6 SUB SWAP1 SWAP2 ADD DUP2 MSTORE SWAP2 DUP4 ADD SWAP4 DUP5 SWAP1 MSTORE PUSH4 0x3C8A7D8D PUSH1 0xE0 SHL SWAP1 SWAP4 MSTORE SWAP3 SWAP7 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP2 PUSH4 0x3C8A7D8D SWAP2 PUSH2 0x1913 SWAP2 ADDRESS SWAP2 PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 DUP12 SWAP2 SWAP1 PUSH1 0xA4 ADD PUSH2 0x21E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x192C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1940 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1964 SWAP2 SWAP1 PUSH2 0x2045 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP6 DUP4 LT DUP1 PUSH2 0x1976 JUMPI POP DUP5 DUP3 LT JUMPDEST ISZERO PUSH2 0x1994 JUMPI PUSH1 0x40 MLOAD PUSH4 0x97C7F537 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP1 DUP4 ADD DUP6 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP2 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP1 DUP9 AND SWAP2 PUSH2 0x1A03 SWAP2 SWAP1 PUSH2 0x21B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1A40 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1A45 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO DUP1 PUSH2 0x1A73 JUMPI POP DUP1 MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1A73 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1A71 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x1A91 JUMPI PUSH1 0x40 MLOAD PUSH4 0x16369DAF PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x1AB9 JUMPI SWAP3 SWAP4 SWAP3 JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT PUSH2 0x1AE4 JUMPI PUSH2 0x1ADD DUP6 DUP6 DUP6 PUSH2 0x1B5B JUMP JUMPDEST SWAP1 POP PUSH2 0xB5C JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT ISZERO PUSH2 0x1B46 JUMPI PUSH1 0x0 PUSH2 0x1B0B DUP8 DUP7 DUP7 PUSH2 0x1B5B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1B1A DUP8 DUP10 DUP7 PUSH2 0x1BC5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND LT PUSH2 0x1B3B JUMPI DUP1 PUSH2 0x1B3D JUMP JUMPDEST DUP2 JUMPDEST SWAP3 POP POP POP PUSH2 0xB5C JUMP JUMPDEST PUSH2 0x1B51 DUP6 DUP6 DUP5 PUSH2 0x1BC5 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x1B7B JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH1 0x0 PUSH2 0x1B9E DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x1BFB JUMP JUMPDEST SWAP1 POP PUSH2 0xB5C PUSH2 0x1BC0 DUP5 DUP4 PUSH2 0x1BB2 DUP10 DUP10 PUSH2 0x2306 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1BFB JUMP JUMPDEST PUSH2 0x1CAA JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x1BE5 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH2 0x158C PUSH2 0x1BC0 DUP4 PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x1BB2 DUP9 DUP9 PUSH2 0x2306 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x1C35 JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x1C2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0xAF7 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x1C41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x1 DUP8 NOT DUP2 ADD DUP9 AND SWAP8 DUP9 SWAP1 DIV PUSH1 0x3 DUP2 MUL DUP4 XOR DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL SWAP1 DUP2 MUL SWAP1 SWAP3 SUB SWAP1 SWAP2 MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1CC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1CC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1CC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xAF7 DUP2 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1D22 DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1D32 DUP2 PUSH2 0x242C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1D53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1D5E DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x1D6E DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x1D7E DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1DA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1DAE DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1DBE DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1DE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1DED DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAF7 DUP3 PUSH2 0x1CC5 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB PUSH1 0x80 DUP2 SLT ISZERO PUSH2 0x1E29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x1E59 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH1 0x60 DUP3 SLT ISZERO PUSH2 0x1E6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E72 PUSH2 0x2285 JUMP JUMPDEST SWAP2 POP DUP4 CALLDATALOAD PUSH2 0x1E7F DUP2 PUSH2 0x242C JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1E8F DUP2 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH3 0xFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1EAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE SWAP1 DUP2 MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x1EC1 DUP3 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1EE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x1EEE DUP2 PUSH2 0x2444 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1D32 DUP2 PUSH2 0x2444 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1F15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1F20 DUP2 PUSH2 0x2444 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x1F3E DUP2 PUSH2 0x242C JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1F61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD PUSH2 0x1F6C DUP2 PUSH2 0x2444 JUMP JUMPDEST DUP1 SWAP6 POP POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x1F8C DUP2 PUSH2 0x2444 JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1F9D DUP2 PUSH2 0x2444 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1FC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 MLOAD PUSH2 0x1FD1 DUP2 PUSH2 0x242C JUMP JUMPDEST DUP1 SWAP8 POP POP PUSH1 0x20 DUP9 ADD MLOAD DUP1 PUSH1 0x2 SIGNEXTEND DUP2 EQ PUSH2 0x1FE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 POP PUSH2 0x1FF7 PUSH1 0x40 DUP10 ADD PUSH2 0x1CD5 JUMP JUMPDEST SWAP5 POP PUSH2 0x2005 PUSH1 0x60 DUP10 ADD PUSH2 0x1CD5 JUMP JUMPDEST SWAP4 POP PUSH2 0x2013 PUSH1 0x80 DUP10 ADD PUSH2 0x1CD5 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x2029 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH2 0x2037 PUSH1 0xC0 DUP10 ADD PUSH2 0x1CC5 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2058 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x207F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x20A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x20B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x20C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x20D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP POP PUSH1 0x20 ADD SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x20FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 CALLDATALOAD SWAP5 PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2132 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x1F9D DUP2 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2171 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x2345 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 SWAP4 SWAP1 SWAP4 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND DUP4 MSTORE PUSH1 0x2 SWAP2 DUP3 SIGNEXTEND PUSH1 0xE8 SWAP1 DUP2 SHL PUSH1 0x14 DUP6 ADD MSTORE SWAP2 SIGNEXTEND SWAP1 SHL PUSH1 0x17 DUP3 ADD MSTORE PUSH1 0x1A ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x21C7 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x2345 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH1 0x2 DUP6 DUP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE DUP5 SWAP1 SIGNEXTEND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x222A SWAP1 DUP4 ADD DUP5 PUSH2 0x2159 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 SWAP1 SWAP6 AND DUP6 MSTORE PUSH1 0x2 SWAP4 DUP5 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE SWAP2 SWAP1 SWAP3 SIGNEXTEND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 AND PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xAF7 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2159 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x22B5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x22CE JUMPI PUSH2 0x22CE PUSH2 0x2400 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x22E2 JUMPI PUSH2 0x22E2 PUSH2 0x2416 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2301 JUMPI PUSH2 0x2301 PUSH2 0x2400 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x2326 JUMPI PUSH2 0x2326 PUSH2 0x2400 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2340 JUMPI PUSH2 0x2340 PUSH2 0x2400 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2360 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2348 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xB22 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x2385 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x23A6 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x23BB JUMPI PUSH2 0x23BB PUSH2 0x2416 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 SIGNEXTEND PUSH3 0x7FFFFF NOT DUP2 EQ ISZERO PUSH2 0x23DA JUMPI PUSH2 0x23DA PUSH2 0x2400 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL DUP3 EQ ISZERO PUSH2 0x23F9 JUMPI PUSH2 0x23F9 PUSH2 0x2400 JUMP JUMPDEST POP PUSH1 0x0 SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2441 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2441 JUMPI PUSH1 0x0 DUP1 REVERT INVALID 0xDD CALLCODE MSTORE 0xAD SHL 0xE2 0xC8 SWAP12 PUSH10 0xC2B068FC378DAA952BA7 CALL PUSH4 0xC4A11628 CREATE2 GAS 0x4D CREATE2 0x23 0xB3 0xEF LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE PUSH17 0x4C8E37E1E82766BCB1A581D023543CDA75 0xE4 NUMBER 0x21 0xD2 0xC4 CREATE DIV PUSH22 0x6E33C2E74A64736F6C63430008070033000000000000 ",
              "sourceMap": "569:1207:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2791:27:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7337:446;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;13769:15:84;;;13751:34;;13816:2;13801:18;;13794:34;;;;13844:18;;13837:34;;;;13907:15;;13902:2;13887:18;;13880:43;13960:15;;;13731:3;13939:19;;13932:44;13700:3;13685:19;7337:446:20;13454:528:84;7812:199:20;;;;;;;;;;-1:-1:-1;7812:199:20;;;;;:::i;:::-;;:::i;:::-;;;11020:14:84;;11013:22;10995:41;;10983:2;10968:18;7812:199:20;10855:187:84;3063:40:20;;;;;;;;;;;;;;;;;;;;;;:::i;3215:38::-;;;;;;;;;;;;;;;2915:35;;;;;;;;;;;;;;;;;;;11193:25:84;;;11181:2;11166:18;2915:35:20;11047:177:84;680:175:28;;;;;;;;;;;;;:::i;:::-;;8215:495:20;;;;;;;;;;-1:-1:-1;8215:495:20;;;;;:::i;:::-;;:::i;3371:47::-;;;;;;;;;;;;;;;4086:44;;;;;;;;;;;;4128:2;4086:44;;;;;14997:4:84;14985:17;;;14967:36;;14955:2;14940:18;4086:44:20;14825:184:84;1223:96:50;;;;;;;;;;-1:-1:-1;1223:96:50;;;;;:::i;:::-;;:::i;1323:::-;;;;;;;;;;-1:-1:-1;1323:96:50;;;;;:::i;:::-;;:::i;1051:168::-;;;;;;;;;;-1:-1:-1;1051:168:50;;;;;:::i;:::-;;:::i;3629:41:20:-;;;;;;;;;;;;;;;;;;11400:1:84;11389:21;;;;11371:40;;11359:2;11344:18;3629:41:20;11229:188:84;3547:41:20;;;;;;;;;;;;;;;199:34:28;;;;;;;;;;-1:-1:-1;199:34:28;;;;-1:-1:-1;;;;;199:34:28;;;4263:53:20;;;;;;;;;;-1:-1:-1;4263:53:20;;;;;:::i;:::-;;;;;;;;;;;;;;2856:29;;;;;;;;;;;;;:::i;5583:308::-;;;;;;;;;;-1:-1:-1;5583:308:20;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;13060:32:84;;;13042:51;;13030:2;13015:18;5583:308:20;12896:203:84;717:330:50;;;;;;;;;;-1:-1:-1;717:330:50;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;13324:32:84;;;13306:51;;13388:2;13373:18;;13366:34;;;;13416:18;;;13409:34;13294:2;13279:18;717:330:50;13104:345:84;8040:146:20;;;;;;;;;;-1:-1:-1;8040:146:20;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;;;;;-1:-1:-1;485:161:28;;;;;:::i;:::-;;:::i;2986:41:20:-;;;;;;;;;;;;;;;3459:47;;;;;;;;;;;;;;;1423:143:50;;;;;;;;;;-1:-1:-1;1423:143:50;;;;;:::i;:::-;;:::i;6407:470:20:-;;;;;;;;;;-1:-1:-1;6407:470:20;;;;;:::i;:::-;;:::i;:::-;;;;14746:25:84;;;14802:2;14787:18;;14780:34;;;;14719:18;6407:470:20;14572:248:84;3711:43:20;;;;;;;;;;;;;;;3139:40;;;;;;;;;;;;;;;5931:436;;;;;;;;;;-1:-1:-1;5931:436:20;;;;;:::i;:::-;;:::i;4160:73::-;;;;;;;;;;-1:-1:-1;4160:73:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;3294:36;;;;;;;;;;;;;;;;;;14369:8:84;14357:21;;;14339:40;;14327:2;14312:18;3294:36:20;14195:190:84;6917:380:20;;;;;;;;;;;;;:::i;1570:171:50:-;;;;;;;;;;-1:-1:-1;1570:171:50;;;;;:::i;:::-;;:::i;268:41:28:-;;;;;;;;;;-1:-1:-1;268:41:28;;;;-1:-1:-1;;;;;268:41:28;;;2791:27:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7337:446::-;7412:17;7437:32;7477;7517:19;7544;7685:4;-1:-1:-1;;;;;7670:30:20;;7743:4;7750:9;7761;7718:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7708:64;;;;;;7670:108;;;;;;;;;;;;;11193:25:84;;11181:2;11166:18;;11047:177;7670:108:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7578:200;;;;-1:-1:-1;7578:200:20;;-1:-1:-1;7578:200:20;-1:-1:-1;7578:200:20;;-1:-1:-1;7337:446:20;-1:-1:-1;7337:446:20:o;7812:199::-;7911:10;7889:4;7901:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;7901:30:20;;;;;;;;;;:39;;;7952:37;7889:4;;7901:30;;7952:37;;;;7934:6;11193:25:84;;11181:2;11166:18;;11047:177;7952:37:20;;;;;;;;-1:-1:-1;8002:4:20;7812:199;;;;:::o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;::::1;754:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;8215:495:20:-;-1:-1:-1;;;;;8395:15:20;;8322:4;8395:15;;;:9;:15;;;;;;;;8352:10;8395:24;;;;;;;;8322:4;;8352:10;;8395:24;8430:15;;;;;:56;;;-1:-1:-1;;8449:16:20;:37;;8430:56;8426:223;;;8496:20;8519:25;8538:6;8519:16;:25;:::i;:::-;-1:-1:-1;;;;;8552:15:20;;;;;;;:9;:15;;;;;;;;:24;;;;;;;;;;;;;:39;;;8605:37;;11193:25:84;;;8552:39:20;;-1:-1:-1;8552:24:20;;:15;;8605:37;;11166:18:84;8605:37:20;;;;;;;8488:161;8426:223;8655:33;8671:4;8677:2;8681:6;8655:15;:33::i;:::-;8701:4;8694:11;;;;8215:495;;;;;;:::o;1223:96:50:-;1296:18;1302:3;1307:6;1296:5;:18::i;:::-;1223:96;;:::o;1323:::-;1396:18;1402:3;1407:6;1396:5;:18::i;1051:168::-;1178:36;1183:5;1190;1197:9;1208:5;1178:4;:36::i;:::-;1051:168;;;;:::o;2856:29:20:-;;;;;;;:::i;5583:308::-;5748:17;5791:69;5805:14;5821;5837:10;5849;5791:13;:69::i;:::-;-1:-1:-1;5773:87:20;;-1:-1:-1;5866:20:20;;-1:-1:-1;5872:2:20;-1:-1:-1;;;;;5866:20:20;;:5;:20::i;:::-;5583:308;;;;;;;:::o;717:330:50:-;888:17;913:15;936;973:69;987:14;1003;1019:10;1031;973:13;:69::i;:::-;966:76;;;;;;717:330;;;;;;;;:::o;8040:146:20:-;8113:4;8125:39;8141:10;8153:2;8157:6;8125:15;:39::i;:::-;-1:-1:-1;8177:4:20;8040:146;;;;:::o;485:161:28:-;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;:::-;;;;;;;;485:161:::0;:::o;1423:143:50:-;1528:33;1544:3;1549;1554:6;1528:15;:33::i;:::-;1423:143;;;:::o;6407:470:20:-;6600:58;;-1:-1:-1;;;6600:58:20;;6626:9;11645:1:84;11634:21;;;6600:58:20;;;11616:40:84;6637:9:20;11692:21:84;;11672:18;;;11665:49;-1:-1:-1;;;;;11750:32:84;;11730:18;;;11723:60;6539:15:20;;;;-1:-1:-1;;;;;6615:4:20;6600:25;;;;11589:18:84;;6600:58:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6579:79;;-1:-1:-1;6579:79:20;-1:-1:-1;6669:20:20;;;;:44;;;6703:10;6693:7;:20;6669:44;6665:76;;;6722:19;;-1:-1:-1;;;6722:19:20;;;;;;;;;;;6665:76;6748:90;;-1:-1:-1;;;6748:90:20;;-1:-1:-1;;;;;6763:4:20;6748:28;;;;:90;;6777:2;;6781:9;;6792;;6811:7;;6829;;6748:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6844:28;6850:10;6862:9;-1:-1:-1;;;;;6844:28:20;:5;:28::i;:::-;6407:470;;;;;;;:::o;5931:436::-;6065:31;6099:36;;;;6110:4;6099:36;:::i;:::-;6065:70;-1:-1:-1;6145:10:20;-1:-1:-1;;;;;6159:4:20;6145:18;;6141:41;;6172:10;;-1:-1:-1;;;6172:10:20;;;;;;;;;;;6141:41;6192:15;;6188:84;;6214:16;;:23;6239:13;;;;6209:63;;6214:23;6254:4;6260:11;6209:4;:63::i;:::-;6282:15;;6278:84;;6299:63;6304:7;:16;;;:23;;;6329:7;:13;;;6344:4;6350:11;6299:4;:63::i;:::-;6059:308;5931:436;;;;:::o;6917:380::-;6978:15;983:10:28;;6978:15:20;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;7025:19:20::1;7046::::0;7084:4:::1;-1:-1:-1::0;;;;;7069:30:20::1;;7142:4;7149:9;7160;7117:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7107:64;;;;;;7069:108;;;;;;;;;;;;;11193:25:84::0;;11181:2;11166:18;;11047:177;7069:108:20::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7233:10;::::0;7204:88:::1;::::0;-1:-1:-1;;;7204:88:20;;7018:159;;-1:-1:-1;7018:159:20;;-1:-1:-1;;;;;;7219:4:20::1;7204:28:::0;::::1;::::0;-1:-1:-1;7204:28:20::1;::::0;-1:-1:-1;7204:88:20::1;::::0;-1:-1:-1;7233:10:20::1;::::0;7245:9:::1;::::0;7256::::1;::::0;7018:159;;;;7204:88:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7183:109:20;;::::1;::::0;;::::1;::::0;-1:-1:-1;6917:380:20;-1:-1:-1;;;6917:380:20:o;1570:171:50:-;1695:41;1713:5;1720:4;1726:2;1730:5;1695:17;:41::i;1363:2473:26:-;1426:20;1454:15;1479:1;1472:4;:8;;;:57;;1523:4;1516:12;;1472:57;;;1499:4;1492:12;;1491:13;;;:::i;:::-;1454:75;-1:-1:-1;657:9:26;-1:-1:-1;;657:9:26;:::i;:::-;1562:16;;1543:7;:36;;1535:50;;;;-1:-1:-1;;;1535:50:26;;12220:2:84;1535:50:26;;;12202:21:84;12259:1;12239:18;;;12232:29;-1:-1:-1;;;12277:18:84;;;12270:31;12318:18;;1535:50:26;;;;;;;;1592:13;1618:3;1608:13;;:93;;-1:-1:-1;;;1608:93:26;;;1629:34;1608:93;-1:-1:-1;;;;;1592:109:26;;-1:-1:-1;1721:3:26;1711:13;;:18;1707:83;;1787:3;1740:42;:5;1748:34;1740:42;:::i;:::-;1739:51;;1731:59;;1707:83;1810:3;1800:13;;:18;1796:83;;1876:3;1829:42;:5;1837:34;1829:42;:::i;:::-;1828:51;;1820:59;;1796:83;1899:3;1889:13;;:18;1885:83;;1965:3;1918:42;:5;1926:34;1918:42;:::i;:::-;1917:51;;1909:59;;1885:83;1988:4;1978:14;;:19;1974:84;;2055:3;2008:42;:5;2016:34;2008:42;:::i;:::-;2007:51;;1999:59;;1974:84;2078:4;2068:14;;:19;2064:84;;2145:3;2098:42;:5;2106:34;2098:42;:::i;:::-;2097:51;;2089:59;;2064:84;2168:4;2158:14;;:19;2154:84;;2235:3;2188:42;:5;2196:34;2188:42;:::i;:::-;2187:51;;2179:59;;2154:84;2258:4;2248:14;;:19;2244:84;;2325:3;2278:42;:5;2286:34;2278:42;:::i;:::-;2277:51;;2269:59;;2244:84;2348:5;2338:15;;:20;2334:85;;2416:3;2369:42;:5;2377:34;2369:42;:::i;:::-;2368:51;;2360:59;;2334:85;2439:5;2429:15;;:20;2425:85;;2507:3;2460:42;:5;2468:34;2460:42;:::i;:::-;2459:51;;2451:59;;2425:85;2530:5;2520:15;;:20;2516:85;;2598:3;2551:42;:5;2559:34;2551:42;:::i;:::-;2550:51;;2542:59;;2516:85;2621:5;2611:15;;:20;2607:85;;2689:3;2642:42;:5;2650:34;2642:42;:::i;:::-;2641:51;;2633:59;;2607:85;2712:6;2702:16;;:21;2698:86;;2781:3;2734:42;:5;2742:34;2734:42;:::i;:::-;2733:51;;2725:59;;2698:86;2804:6;2794:16;;:21;2790:86;;2873:3;2826:42;:5;2834:34;2826:42;:::i;:::-;2825:51;;2817:59;;2790:86;2896:6;2886:16;;:21;2882:86;;2965:3;2918:42;:5;2926:34;2918:42;:::i;:::-;2917:51;;2909:59;;2882:86;2988:6;2978:16;;:21;2974:86;;3057:3;3010:42;:5;3018:34;3010:42;:::i;:::-;3009:51;;3001:59;;2974:86;3080:7;3070:17;;:22;3066:86;;3149:3;3103:41;:5;3111:33;3103:41;:::i;:::-;3102:50;;3094:58;;3066:86;3172:7;3162:17;;:22;3158:85;;3240:3;3195:40;:5;3203:32;3195:40;:::i;:::-;3194:49;;3186:57;;3158:85;3263:7;3253:17;;:22;3249:83;;3329:3;3286:38;:5;3294:30;3286:38;:::i;:::-;3285:47;;3277:55;;3249:83;3352:7;3342:17;;:22;3338:78;;3413:3;3375:33;:5;3383:25;3375:33;:::i;:::-;3374:42;;3366:50;;3338:78;3434:1;3427:4;:8;;;3423:47;;;3445:25;3465:5;-1:-1:-1;;3445:25:26;:::i;:::-;3437:33;;3423:47;3799:17;-1:-1:-1;;;3799:5:26;:17;:::i;:::-;:22;:30;;3828:1;3799:30;;;3824:1;3799:30;3782:48;;;;3792:2;3783:11;;;3782:48;:::i;:::-;3759:72;1363:2473;-1:-1:-1;;;;1363:2473:26:o;11913:195:20:-;-1:-1:-1;;;;;12011:15:20;;;;;;:9;:15;;;;;:25;;12030:6;;12011:15;:25;;12030:6;;12011:25;:::i;:::-;;;;-1:-1:-1;;;;;;;12042:13:20;;;;;;:9;:13;;;;;:23;;12059:6;;12042:13;:23;;12059:6;;12042:23;:::i;:::-;;;;;;;;12092:2;-1:-1:-1;;;;;12077:26:20;12086:4;-1:-1:-1;;;;;12077:26:20;-1:-1:-1;;;;;;;;;;;12096:6:20;12077:26;;;;11193:25:84;;11181:2;11166:18;;11047:177;12077:26:20;;;;;;;;11913:195;;;:::o;11036:156::-;11109:6;11094:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11121:13:20;;;;;;:9;:13;;;;;:23;;11138:6;;11121:13;:23;;11138:6;;11121:23;:::i;:::-;;;;-1:-1:-1;;11155:32:20;;11193:25:84;;;-1:-1:-1;;;;;11155:32:20;;;11172:1;;-1:-1:-1;;;;;;;;;;;11155:32:20;11181:2:84;11166:18;11155:32:20;;;;;;;;11036:156;;:::o;11496:::-;11569:6;11554:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11581:13:20;;;;;;:9;:13;;;;;:23;;11598:6;;11581:13;:23;;11598:6;;11581:23;:::i;:::-;;;;-1:-1:-1;;11615:32:20;;11193:25:84;;;11636:1:20;;-1:-1:-1;;;;;11615:32:20;;;-1:-1:-1;;;;;;;;;;;11615:32:20;11181:2:84;11166:18;11615:32:20;11047:177:84;9505:737:20;9669:17;9694:15;9717;9748:20;9799:4;-1:-1:-1;;;;;9784:26:20;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9747:65;;;;;;;;9831:115;9871:12;9885:13;9900;9915:14;9931;9831:39;:115::i;:::-;10090:57;;;;;;;;;10118:8;10090:57;-1:-1:-1;;;;;10090:57:20;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10090:57:20;;;;;;;;;;;;;;;;;10135:10;10090:57;;;;;;;10079:69;;;;;12634:37:84;;;;12713:20;;12709:29;;12687:20;;;12680:59;12781:20;;12777:35;12755:20;;;12748:65;12855:24;;12851:33;;12829:20;;;12822:63;10079:69:20;;;;;;;;;;12536:19:84;;;10079:69:20;;;;-1:-1:-1;;;9974:180:20;;;9819:127;;-1:-1:-1;9989:4:20;9974:25;;;;;;:180;;10015:4;;10028:9;;10045;;9819:127;;10079:69;9974:180;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9953:201;;-1:-1:-1;9953:201:20;-1:-1:-1;10165:20:20;;;;:44;;;10199:10;10189:7;:20;10165:44;10161:76;;;10218:19;;-1:-1:-1;;;10218:19:20;;;;;;;;;;;10161:76;9741:501;9505:737;;;;;;;;:::o;12647:395::-;12867:69;;;-1:-1:-1;;;;;9578:15:84;;;12867:69:20;;;9560:34:84;9630:15;;;9610:18;;;9603:43;9662:18;;;;9655:34;;;12867:69:20;;;;;;;;;;9495:18:84;;;;12867:69:20;;;;;;;-1:-1:-1;;;;;12867:69:20;-1:-1:-1;;;12867:69:20;;;12856:81;;-1:-1:-1;;;;12856:10:20;;;;:81;;12867:69;12856:81;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12820:117;;;;12948:7;12947:8;:59;;;-1:-1:-1;12960:11:20;;:16;;;;:45;;;12992:4;12981:24;;;;;;;;;;;;:::i;:::-;12980:25;12960:45;12943:94;;;13015:22;;-1:-1:-1;;;13015:22:20;;;;;;;;;;;12943:94;12759:283;;12647:395;;;;:::o;1103:827:24:-;1284:17;1329:13;-1:-1:-1;;;;;1313:29:24;:13;-1:-1:-1;;;;;1313:29:24;;1309:98;;;1378:13;;1393;1309:98;1434:13;-1:-1:-1;;;;;1418:29:24;:12;-1:-1:-1;;;;;1418:29:24;;1414:512;;1469:61;1492:13;1507;1522:7;1469:22;:61::i;:::-;1457:73;;1414:512;;;1562:13;-1:-1:-1;;;;;1547:28:24;:12;-1:-1:-1;;;;;1547:28:24;;1543:383;;;1585:18;1606:60;1629:12;1643:13;1658:7;1606:22;:60::i;:::-;1585:81;;1674:18;1695:60;1718:13;1733:12;1747:7;1695:22;:60::i;:::-;1674:81;;1789:10;-1:-1:-1;;;;;1776:23:24;:10;-1:-1:-1;;;;;1776:23:24;;:49;;1815:10;1776:49;;;1802:10;1776:49;1764:61;;1577:255;;1543:383;;;1858:61;1881:13;1896;1911:7;1858:22;:61::i;:::-;1846:73;1103:827;-1:-1:-1;;;;;;1103:827:24:o;289:447::-;423:17;468:13;-1:-1:-1;;;;;452:29:24;:13;-1:-1:-1;;;;;452:29:24;;448:98;;;517:13;;532;448:98;552:20;575:63;591:13;-1:-1:-1;;;;;575:63:24;606:13;-1:-1:-1;;;;;575:63:24;-1:-1:-1;;;575:15:24;:63::i;:::-;552:86;-1:-1:-1;651:80:24;661:69;677:7;552:86;700:29;716:13;700;:29;:::i;:::-;-1:-1:-1;;;;;661:69:24;:15;:69::i;:::-;651:9;:80::i;740:359::-;874:17;919:13;-1:-1:-1;;;;;903:29:24;:13;-1:-1:-1;;;;;903:29:24;;899:98;;;968:13;;983;899:98;1010:84;1020:73;1036:7;-1:-1:-1;;;1063:29:24;1079:13;1063;:29;:::i;735:3600:23:-;833:14;;;-1:-1:-1;;1336:1:23;1333;1326:20;1371:1;1368;1364:9;1355:18;;1418:5;1414:2;1411:13;1403:5;1399:2;1395:14;1391:34;1382:43;;;1501:5;1510:1;1501:10;1497:155;;;1545:1;1531:11;:15;1523:24;;;;;;-1:-1:-1;1588:23:23;;;;-1:-1:-1;1630:13:23;;1497:155;1773:5;1759:11;:19;1751:28;;;;;;2044:17;2114:11;2111:1;2108;2101:25;3338:1;2473;2458:12;;:16;;2457:32;;2575:22;;;;3319:1;:15;;3318:21;;3557:17;;;3553:21;;3546:28;3613:17;;;3609:21;;3602:28;3670:17;;;3666:21;;3659:28;3727:17;;;3723:21;;3716:28;3784:17;;;3780:21;;3773:28;3842:17;;;3838:21;;;3831:28;;;2442:12;2923;;;2919:23;;;2915:31;;;2233:20;;;2222:32;;;2970:12;;;;2272:21;;2693:16;;;;2961:21;;;;4292:11;;;-1:-1:-1;;;;735:3600:23:o;181:104:24:-;278:1;-1:-1:-1;;;;;258:21:24;;;;250:30;;;;;;181:104;;;:::o;14:164:84:-;90:13;;139;;132:21;122:32;;112:60;;168:1;165;158:12;183:163;261:13;;314:6;303:18;;293:29;;283:57;;336:1;333;326:12;351:247;410:6;463:2;451:9;442:7;438:23;434:32;431:52;;;479:1;476;469:12;431:52;518:9;505:23;537:31;562:5;537:31;:::i;603:388::-;671:6;679;732:2;720:9;711:7;707:23;703:32;700:52;;;748:1;745;738:12;700:52;787:9;774:23;806:31;831:5;806:31;:::i;:::-;856:5;-1:-1:-1;913:2:84;898:18;;885:32;926:33;885:32;926:33;:::i;:::-;978:7;968:17;;;603:388;;;;;:::o;996:598::-;1082:6;1090;1098;1106;1159:3;1147:9;1138:7;1134:23;1130:33;1127:53;;;1176:1;1173;1166:12;1127:53;1215:9;1202:23;1234:31;1259:5;1234:31;:::i;:::-;1284:5;-1:-1:-1;1341:2:84;1326:18;;1313:32;1354:33;1313:32;1354:33;:::i;:::-;1406:7;-1:-1:-1;1465:2:84;1450:18;;1437:32;1478:33;1437:32;1478:33;:::i;:::-;996:598;;;;-1:-1:-1;1530:7:84;;1584:2;1569:18;1556:32;;-1:-1:-1;;996:598:84:o;1599:456::-;1676:6;1684;1692;1745:2;1733:9;1724:7;1720:23;1716:32;1713:52;;;1761:1;1758;1751:12;1713:52;1800:9;1787:23;1819:31;1844:5;1819:31;:::i;:::-;1869:5;-1:-1:-1;1926:2:84;1911:18;;1898:32;1939:33;1898:32;1939:33;:::i;:::-;1599:456;;1991:7;;-1:-1:-1;;;2045:2:84;2030:18;;;;2017:32;;1599:456::o;2060:315::-;2128:6;2136;2189:2;2177:9;2168:7;2164:23;2160:32;2157:52;;;2205:1;2202;2195:12;2157:52;2244:9;2231:23;2263:31;2288:5;2263:31;:::i;:::-;2313:5;2365:2;2350:18;;;;2337:32;;-1:-1:-1;;;2060:315:84:o;2380:202::-;2447:6;2500:2;2488:9;2479:7;2475:23;2471:32;2468:52;;;2516:1;2513;2506:12;2468:52;2539:37;2566:9;2539:37;:::i;2587:1207::-;2681:6;2725:9;2716:7;2712:23;2755:3;2751:2;2747:12;2744:32;;;2772:1;2769;2762:12;2744:32;2805:4;2799:11;2849:4;2841:6;2837:17;2920:6;2908:10;2905:22;-1:-1:-1;;;;;2872:10:84;2869:34;2866:62;2863:185;;;2970:10;2965:3;2961:20;2958:1;2951:31;3005:4;3002:1;2995:15;3033:4;3030:1;3023:15;2863:185;3064:4;3057:24;3101:4;3093:13;;3090:33;;;3119:1;3116;3109:12;3090:33;3145:17;;:::i;:::-;3132:30;;3199:9;3186:23;3218:33;3243:7;3218:33;:::i;:::-;3260:22;;3334:2;3319:18;;3306:32;3347:33;3306:32;3347:33;:::i;:::-;3407:2;3396:14;;3389:31;3472:4;3457:20;;3444:34;3522:8;3509:22;;3497:35;;3487:63;;3546:1;3543;3536:12;3487:63;3577:4;3566:16;;3559:33;3601:21;;;3674:4;3659:20;;3646:34;;3689:33;3646:34;3689:33;:::i;:::-;3750:2;3738:15;;3731:32;;;;3742:6;2587:1207;-1:-1:-1;;;2587:1207:84:o;3799:385::-;3878:6;3886;3939:2;3927:9;3918:7;3914:23;3910:32;3907:52;;;3955:1;3952;3945:12;3907:52;3987:9;3981:16;4006:31;4031:5;4006:31;:::i;:::-;4106:2;4091:18;;4085:25;4056:5;;-1:-1:-1;4119:33:84;4085:25;4119:33;:::i;4189:525::-;4275:6;4283;4291;4299;4352:3;4340:9;4331:7;4327:23;4323:33;4320:53;;;4369:1;4366;4359:12;4320:53;4408:9;4395:23;4427:31;4452:5;4427:31;:::i;:::-;4477:5;-1:-1:-1;4529:2:84;4514:18;;4501:32;;-1:-1:-1;4580:2:84;4565:18;;4552:32;;-1:-1:-1;4636:2:84;4621:18;;4608:32;4649:33;4608:32;4649:33;:::i;:::-;4189:525;;;;-1:-1:-1;4189:525:84;;-1:-1:-1;;4189:525:84:o;4719:643::-;4825:6;4833;4841;4849;4857;4910:3;4898:9;4889:7;4885:23;4881:33;4878:53;;;4927:1;4924;4917:12;4878:53;4959:9;4953:16;4978:31;5003:5;4978:31;:::i;:::-;5028:5;5018:15;;;5073:2;5062:9;5058:18;5052:25;5042:35;;5117:2;5106:9;5102:18;5096:25;5086:35;;5166:2;5155:9;5151:18;5145:25;5179:33;5204:7;5179:33;:::i;:::-;5283:3;5268:19;;5262:26;5231:7;;-1:-1:-1;5297:33:84;5262:26;5297:33;:::i;:::-;5349:7;5339:17;;;4719:643;;;;;;;;:::o;5367:903::-;5481:6;5489;5497;5505;5513;5521;5529;5582:3;5570:9;5561:7;5557:23;5553:33;5550:53;;;5599:1;5596;5589:12;5550:53;5631:9;5625:16;5650:31;5675:5;5650:31;:::i;:::-;5700:5;5690:15;;;5750:2;5739:9;5735:18;5729:25;5799:7;5796:1;5785:22;5776:7;5773:35;5763:63;;5822:1;5819;5812:12;5763:63;5845:7;-1:-1:-1;5871:48:84;5915:2;5900:18;;5871:48;:::i;:::-;5861:58;;5938:48;5982:2;5971:9;5967:18;5938:48;:::i;:::-;5928:58;;6005:49;6049:3;6038:9;6034:19;6005:49;:::i;:::-;5995:59;;6099:3;6088:9;6084:19;6078:26;6148:4;6139:7;6135:18;6126:7;6123:31;6113:59;;6168:1;6165;6158:12;6113:59;6191:7;-1:-1:-1;6217:47:84;6259:3;6244:19;;6217:47;:::i;:::-;6207:57;;5367:903;;;;;;;;;;:::o;6275:245::-;6354:6;6362;6415:2;6403:9;6394:7;6390:23;6386:32;6383:52;;;6431:1;6428;6421:12;6383:52;-1:-1:-1;;6454:16:84;;6510:2;6495:18;;;6489:25;6454:16;;6489:25;;-1:-1:-1;6275:245:84:o;6525:727::-;6613:6;6621;6629;6637;6690:2;6678:9;6669:7;6665:23;6661:32;6658:52;;;6706:1;6703;6696:12;6658:52;6742:9;6729:23;6719:33;;6799:2;6788:9;6784:18;6771:32;6761:42;;6854:2;6843:9;6839:18;6826:32;-1:-1:-1;;;;;6918:2:84;6910:6;6907:14;6904:34;;;6934:1;6931;6924:12;6904:34;6972:6;6961:9;6957:22;6947:32;;7017:7;7010:4;7006:2;7002:13;6998:27;6988:55;;7039:1;7036;7029:12;6988:55;7079:2;7066:16;7105:2;7097:6;7094:14;7091:34;;;7121:1;7118;7111:12;7091:34;7166:7;7161:2;7152:6;7148:2;7144:15;7140:24;7137:37;7134:57;;;7187:1;7184;7177:12;7134:57;6525:727;;;;-1:-1:-1;;7218:2:84;7210:11;;-1:-1:-1;;;6525:727:84:o;7257:385::-;7343:6;7351;7359;7367;7420:3;7408:9;7399:7;7395:23;7391:33;7388:53;;;7437:1;7434;7427:12;7388:53;-1:-1:-1;;7460:23:84;;;7530:2;7515:18;;7502:32;;-1:-1:-1;7581:2:84;7566:18;;7553:32;;7632:2;7617:18;7604:32;;-1:-1:-1;7257:385:84;-1:-1:-1;7257:385:84:o;7647:521::-;7742:6;7750;7758;7766;7774;7827:3;7815:9;7806:7;7802:23;7798:33;7795:53;;;7844:1;7841;7834:12;7795:53;7880:9;7867:23;7857:33;;7937:2;7926:9;7922:18;7909:32;7899:42;;7988:2;7977:9;7973:18;7960:32;7950:42;;8039:2;8028:9;8024:18;8011:32;8001:42;;8093:3;8082:9;8078:19;8065:33;8107:31;8132:5;8107:31;:::i;8173:257::-;8214:3;8252:5;8246:12;8279:6;8274:3;8267:19;8295:63;8351:6;8344:4;8339:3;8335:14;8328:4;8321:5;8317:16;8295:63;:::i;:::-;8412:2;8391:15;-1:-1:-1;;8387:29:84;8378:39;;;;8419:4;8374:50;;8173:257;-1:-1:-1;;8173:257:84:o;8435:393::-;8657:2;8628:15;;;;-1:-1:-1;;;;;;8624:45:84;8612:58;;8720:1;8709:21;;;8704:3;8700:31;;;8695:2;8686:12;;8679:53;8771:21;;8762:31;;8757:2;8748:12;;8741:53;8819:2;8810:12;;8435:393::o;8833:274::-;8962:3;9000:6;8994:13;9016:53;9062:6;9057:3;9050:4;9042:6;9038:17;9016:53;:::i;:::-;9085:16;;;;;8833:274;-1:-1:-1;;8833:274:84:o;9112:203::-;-1:-1:-1;;;;;9276:32:84;;;;9258:51;;9246:2;9231:18;;9112:203::o;9700:578::-;-1:-1:-1;;;;;9951:32:84;;9933:51;;10031:1;10020:21;;;10015:2;10000:18;;9993:49;10078:21;;;10073:2;10058:18;;10051:49;-1:-1:-1;;;;;10136:32:84;;10131:2;10116:18;;10109:60;9971:3;10156;10185:19;;10178:32;;;-1:-1:-1;;10227:45:84;;10252:19;;10244:6;10227:45;:::i;:::-;10219:53;9700:578;-1:-1:-1;;;;;;;9700:578:84:o;10283:567::-;-1:-1:-1;;;;;10552:32:84;;;;10534:51;;10632:1;10621:21;;;10616:2;10601:18;;10594:49;10679:21;;;;10674:2;10659:18;;10652:49;-1:-1:-1;;;;;10775:15:84;;;10770:2;10755:18;;10748:43;10828:15;10728:3;10807:19;;10800:44;10521:3;10506:19;;10283:567::o;11794:219::-;11943:2;11932:9;11925:21;11906:4;11963:44;12003:2;11992:9;11988:18;11980:6;11963:44;:::i;15014:345::-;15081:2;15075:9;15123:4;15111:17;;-1:-1:-1;;;;;15143:34:84;;15179:22;;;15140:62;15137:185;;;15244:10;15239:3;15235:20;15232:1;15225:31;15279:4;15276:1;15269:15;15307:4;15304:1;15297:15;15137:185;15338:2;15331:22;15014:345;:::o;15364:128::-;15404:3;15435:1;15431:6;15428:1;15425:13;15422:39;;;15441:18;;:::i;:::-;-1:-1:-1;15477:9:84;;15364:128::o;15497:120::-;15537:1;15563;15553:35;;15568:18;;:::i;:::-;-1:-1:-1;15602:9:84;;15497:120::o;15622:168::-;15662:7;15728:1;15724;15720:6;15716:14;15713:1;15710:21;15705:1;15698:9;15691:17;15687:45;15684:71;;;15735:18;;:::i;:::-;-1:-1:-1;15775:9:84;;15622:168::o;15795:231::-;15835:4;-1:-1:-1;;;;;15933:10:84;;;;15903;;15955:12;;;15952:38;;;15970:18;;:::i;:::-;16007:13;;15795:231;-1:-1:-1;;;15795:231:84:o;16031:125::-;16071:4;16099:1;16096;16093:8;16090:34;;;16104:18;;:::i;:::-;-1:-1:-1;16141:9:84;;16031:125::o;16161:258::-;16233:1;16243:113;16257:6;16254:1;16251:13;16243:113;;;16333:11;;;16327:18;16314:11;;;16307:39;16279:2;16272:10;16243:113;;;16374:6;16371:1;16368:13;16365:48;;;-1:-1:-1;;16409:1:84;16391:16;;16384:27;16161:258::o;16424:380::-;16503:1;16499:12;;;;16546;;;16567:61;;16621:4;16613:6;16609:17;16599:27;;16567:61;16674:2;16666:6;16663:14;16643:18;16640:38;16637:161;;;16720:10;16715:3;16711:20;16708:1;16701:31;16755:4;16752:1;16745:15;16783:4;16780:1;16773:15;16637:161;;16424:380;;;:::o;16809:112::-;16841:1;16867;16857:35;;16872:18;;:::i;:::-;-1:-1:-1;16906:9:84;;16809:112::o;16926:184::-;16960:3;17007:5;17004:1;16993:20;17041:7;17037:12;17028:7;17025:25;17022:51;;;17053:18;;:::i;:::-;17093:1;17089:15;;16926:184;-1:-1:-1;;16926:184:84:o;17115:136::-;17150:3;-1:-1:-1;;;17171:22:84;;17168:48;;;17196:18;;:::i;:::-;-1:-1:-1;17236:1:84;17232:13;;17115:136::o;17256:127::-;17317:10;17312:3;17308:20;17305:1;17298:31;17348:4;17345:1;17338:15;17372:4;17369:1;17362:15;17388:127;17449:10;17444:3;17440:20;17437:1;17430:31;17480:4;17477:1;17470:15;17504:4;17501:1;17494:15;17520:131;-1:-1:-1;;;;;17595:31:84;;17585:42;;17575:70;;17641:1;17638;17631:12;17575:70;17520:131;:::o;17656:::-;-1:-1:-1;;;;;17731:31:84;;17721:42;;17711:70;;17777:1;17774;17767:12"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1878200",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "52015",
                "allowance(address,address)": "infinite",
                "approve(address,uint256)": "24538",
                "balanceOf(address)": "2866",
                "burn(uint128,uint256,uint256,address)": "infinite",
                "collect()": "infinite",
                "decimals()": "403",
                "factory()": "infinite",
                "fee()": "infinite",
                "governance()": "2692",
                "internalAddLiquidity(uint256,uint256,uint256,uint256)": "infinite",
                "internalBurn(address,uint256)": "infinite",
                "internalMint(address,uint256)": "infinite",
                "internalPay(address,address,address,uint256)": "infinite",
                "internalSafeTransferFrom(address,address,address,uint256)": "infinite",
                "internalTransferTokens(address,address,uint256)": "infinite",
                "mint(uint256,uint256,uint256,uint256,address)": "infinite",
                "name()": "infinite",
                "pendingGovernance()": "2713",
                "pool()": "infinite",
                "position()": "infinite",
                "setGovernance(address)": "27897",
                "sqrtRatioAX96()": "infinite",
                "sqrtRatioBX96()": "infinite",
                "symbol()": "infinite",
                "tickLower()": "infinite",
                "tickSpacing()": "infinite",
                "tickUpper()": "infinite",
                "token0()": "infinite",
                "token1()": "infinite",
                "totalSupply()": "2406",
                "transfer(address,uint256)": "infinite",
                "transferFrom(address,address,uint256)": "infinite",
                "uniswapV3MintCallback(uint256,uint256,bytes)": "infinite"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "burn(uint128,uint256,uint256,address)": "cf51148d",
              "collect()": "e5225381",
              "decimals()": "313ce567",
              "factory()": "c45a0155",
              "fee()": "ddca3f43",
              "governance()": "5aa6e675",
              "internalAddLiquidity(uint256,uint256,uint256,uint256)": "a5dc7d4d",
              "internalBurn(address,uint256)": "3a323bdf",
              "internalMint(address,uint256)": "35001a1a",
              "internalPay(address,address,address,uint256)": "4c0549b0",
              "internalSafeTransferFrom(address,address,address,uint256)": "eaf00b23",
              "internalTransferTokens(address,address,uint256)": "cf45affb",
              "mint(uint256,uint256,uint256,uint256,address)": "a3e6dc28",
              "name()": "06fdde03",
              "pendingGovernance()": "f39c38a0",
              "pool()": "16f0115b",
              "position()": "09218e91",
              "setGovernance(address)": "ab033ea9",
              "sqrtRatioAX96()": "2ea28f5b",
              "sqrtRatioBX96()": "c6275261",
              "symbol()": "95d89b41",
              "tickLower()": "59c4f905",
              "tickSpacing()": "d0c93a7c",
              "tickUpper()": "55b812a8",
              "token0()": "0dfe1681",
              "token1()": "d21220a7",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "uniswapV3MintCallback(uint256,uint256,bytes)": "d3487997"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ExcessiveSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsuccessfulTransfer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Desired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Desired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"}],\"name\":\"internalAddLiquidity\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"internalBurn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"internalMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"internalPay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"internalSafeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"internalTransferTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Desired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Desired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"position\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sqrtRatioAX96\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sqrtRatioBX96\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickLower\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickUpper\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Owed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Owed\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"uniswapV3MintCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"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.\"},\"burn(uint128,uint256,uint256,address)\":{\"params\":{\"amount0Min\":\"The minimum amount of token0 we want to send to the recipient (to)\",\"amount1Min\":\"The minimum amount of token1 we want to send to the recipient (to)\",\"liquidity\":\"The amount of liquidity to be burned\",\"to\":\"The address that will receive the due fees\"},\"returns\":{\"amount0\":\"The calculated amount of token0 that will be sent to the recipient\",\"amount1\":\"The calculated amount of token1 that will be sent to the recipient\"}},\"collect()\":{\"details\":\"The collected fees will be sent to governance\",\"returns\":{\"amount0\":\"The amount of fees collected in token0\",\"amount1\":\"The amount of fees collected in token1\"}},\"mint(uint256,uint256,uint256,uint256,address)\":{\"details\":\"Triggers UniV3PairManager#uniswapV3MintCallback\",\"params\":{\"amount0Desired\":\"The amount of token0 we would like to provide\",\"amount0Min\":\"The minimum amount of token0 we want to provide\",\"amount1Desired\":\"The amount of token1 we would like to provide\",\"amount1Min\":\"The minimum amount of token1 we want to provide\",\"to\":\"The address to which the kLP tokens are going to be minted to\"},\"returns\":{\"liquidity\":\"kLP tokens sent in exchange for the provision of tokens\"}},\"position()\":{\"returns\":{\"feeGrowthInside0LastX128\":\"The fee growth of token0 as of the last action on the individual position\",\"feeGrowthInside1LastX128\":\"The fee growth of token1 as of the last action on the individual position\",\"liquidity\":\"The amount of liquidity provided to the UniswapV3 pool by the pair manager\",\"tokensOwed0\":\"The uncollected amount of token0 owed to the position as of the last computation\",\"tokensOwed1\":\"The uncollected amount of token1 owed to the position as of the last computation\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"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.\"},\"uniswapV3MintCallback(uint256,uint256,bytes)\":{\"params\":{\"amount0Owed\":\"The amount of token0 due to the pool for the minted liquidity\",\"amount1Owed\":\"The amount of token1 due to the pool for the minted liquidity\",\"data\":\"The encoded token0, token1, fee (_poolKey) and the payer (msg.sender) of the IUniV3PairManager#mint function\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ExcessiveSlippage()\":[{\"notice\":\"Throws when the slippage exceeds what the user is comfortable with\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPool()\":[{\"notice\":\"Throws when the caller of the function is not the pool\"}],\"UnsuccessfulTransfer()\":[{\"notice\":\"Throws when a transfer is unsuccessful\"}]},\"events\":{\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"factory()\":{\"notice\":\"Address of the factory from which the pair manager was created\"},\"fee()\":{\"notice\":\"The fee of the Uniswap pool passed into the constructor\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"mint(uint256,uint256,uint256,uint256,address)\":{\"notice\":\"Mints kLP tokens to an address according to the liquidity the msg.sender provides to the UniswapV3 pool\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pool()\":{\"notice\":\"Address of the pool from which the Keep3r pair manager will interact with\"},\"position()\":{\"notice\":\"Returns the pair manager's position in the corresponding UniswapV3 pool\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"sqrtRatioAX96()\":{\"notice\":\"The sqrtRatioAX96 at the lowest tick (-887200) of the Uniswap pool\"},\"sqrtRatioBX96()\":{\"notice\":\"The sqrtRatioBX96 at the highest tick (887200) of the Uniswap pool\"},\"tickLower()\":{\"notice\":\"Lowest tick in the Uniswap's curve\"},\"tickSpacing()\":{\"notice\":\"The pair tick spacing\"},\"tickUpper()\":{\"notice\":\"Highest tick in the Uniswap's curve\"},\"token0()\":{\"notice\":\"Token0 of the pool\"},\"token1()\":{\"notice\":\"Token1 of the pool\"},\"uniswapV3MintCallback(uint256,uint256,bytes)\":{\"notice\":\"This function is called after a user calls IUniV3PairManager#mint function         It ensures that any tokens owed to the pool are paid by the msg.sender of IUniV3PairManager#mint function\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/UniV3PairManagerForTest.sol\":\"UniV3PairManagerForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    constructor(string memory name_, string memory symbol_) {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `recipient` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\\n        _transfer(_msgSender(), recipient, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        _approve(_msgSender(), spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` and `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``sender``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        _transfer(sender, recipient, amount);\\n\\n        uint256 currentAllowance = _allowances[sender][_msgSender()];\\n        require(currentAllowance >= amount, \\\"ERC20: transfer amount exceeds allowance\\\");\\n        unchecked {\\n            _approve(sender, _msgSender(), currentAllowance - amount);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        uint256 currentAllowance = _allowances[_msgSender()][spender];\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(_msgSender(), spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `sender` to `recipient`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `sender` cannot be the zero address.\\n     * - `recipient` cannot be the zero address.\\n     * - `sender` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) internal virtual {\\n        require(sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(sender, recipient, amount);\\n\\n        uint256 senderBalance = _balances[sender];\\n        require(senderBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[sender] = senderBalance - amount;\\n        }\\n        _balances[recipient] += amount;\\n\\n        emit Transfer(sender, recipient, amount);\\n\\n        _afterTokenTransfer(sender, recipient, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        _balances[account] += amount;\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n        }\\n        _totalSupply -= amount;\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n}\\n\",\"keccak256\":\"0xb03df8481a954604ad0c9125680893b2e3f7ff770fe470e38b89ac61b84e8072\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\"},\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\nimport './pool/IUniswapV3PoolImmutables.sol';\\nimport './pool/IUniswapV3PoolState.sol';\\nimport './pool/IUniswapV3PoolDerivedState.sol';\\nimport './pool/IUniswapV3PoolActions.sol';\\nimport './pool/IUniswapV3PoolOwnerActions.sol';\\nimport './pool/IUniswapV3PoolEvents.sol';\\n\\n/// @title The interface for a Uniswap V3 Pool\\n/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform\\n/// to the ERC20 specification\\n/// @dev The pool interface is broken up into many smaller pieces\\ninterface IUniswapV3Pool is\\n    IUniswapV3PoolImmutables,\\n    IUniswapV3PoolState,\\n    IUniswapV3PoolDerivedState,\\n    IUniswapV3PoolActions,\\n    IUniswapV3PoolOwnerActions,\\n    IUniswapV3PoolEvents\\n{\\n\\n}\\n\",\"keccak256\":\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissionless pool actions\\n/// @notice Contains pool methods that can be called by anyone\\ninterface IUniswapV3PoolActions {\\n    /// @notice Sets the initial price for the pool\\n    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\\n    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96\\n    function initialize(uint160 sqrtPriceX96) external;\\n\\n    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback\\n    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\\n    /// on tickLower, tickUpper, the amount of liquidity, and the current price.\\n    /// @param recipient The address for which the liquidity will be created\\n    /// @param tickLower The lower tick of the position in which to add liquidity\\n    /// @param tickUpper The upper tick of the position in which to add liquidity\\n    /// @param amount The amount of liquidity to mint\\n    /// @param data Any data that should be passed through to the callback\\n    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback\\n    function mint(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount,\\n        bytes calldata data\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Collects tokens owed to a position\\n    /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\\n    /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\\n    /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\\n    /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\\n    /// @param recipient The address which should receive the fees collected\\n    /// @param tickLower The lower tick of the position for which to collect fees\\n    /// @param tickUpper The upper tick of the position for which to collect fees\\n    /// @param amount0Requested How much token0 should be withdrawn from the fees owed\\n    /// @param amount1Requested How much token1 should be withdrawn from the fees owed\\n    /// @return amount0 The amount of fees collected in token0\\n    /// @return amount1 The amount of fees collected in token1\\n    function collect(\\n        address recipient,\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n\\n    /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\\n    /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\\n    /// @dev Fees must be collected separately via a call to #collect\\n    /// @param tickLower The lower tick of the position for which to burn liquidity\\n    /// @param tickUpper The upper tick of the position for which to burn liquidity\\n    /// @param amount How much liquidity to burn\\n    /// @return amount0 The amount of token0 sent to the recipient\\n    /// @return amount1 The amount of token1 sent to the recipient\\n    function burn(\\n        int24 tickLower,\\n        int24 tickUpper,\\n        uint128 amount\\n    ) external returns (uint256 amount0, uint256 amount1);\\n\\n    /// @notice Swap token0 for token1, or token1 for token0\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\\n    /// @param recipient The address to receive the output of the swap\\n    /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\\n    /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\\n    /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\\n    /// value after the swap. If one for zero, the price cannot be greater than this value after the swap\\n    /// @param data Any data to be passed through to the callback\\n    /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\\n    /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive\\n    function swap(\\n        address recipient,\\n        bool zeroForOne,\\n        int256 amountSpecified,\\n        uint160 sqrtPriceLimitX96,\\n        bytes calldata data\\n    ) external returns (int256 amount0, int256 amount1);\\n\\n    /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\\n    /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback\\n    /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\\n    /// with 0 amount{0,1} and sending the donation amount(s) from the callback\\n    /// @param recipient The address which will receive the token0 and token1 amounts\\n    /// @param amount0 The amount of token0 to send\\n    /// @param amount1 The amount of token1 to send\\n    /// @param data Any data to be passed through to the callback\\n    function flash(\\n        address recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        bytes calldata data\\n    ) external;\\n\\n    /// @notice Increase the maximum number of price and liquidity observations that this pool will store\\n    /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\\n    /// the input observationCardinalityNext.\\n    /// @param observationCardinalityNext The desired minimum number of observations for the pool to store\\n    function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external;\\n}\\n\",\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that is not stored\\n/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the\\n/// blockchain. The functions here may have variable gas costs.\\ninterface IUniswapV3PoolDerivedState {\\n    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\\n    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\\n    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\\n    /// you must call it with secondsAgos = [3600, 0].\\n    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\\n    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\\n    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\\n    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\\n    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\\n    /// timestamp\\n    function observe(uint32[] calldata secondsAgos)\\n        external\\n        view\\n        returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);\\n\\n    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\\n    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\\n    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\\n    /// snapshot is taken and the second snapshot is taken.\\n    /// @param tickLower The lower tick of the range\\n    /// @param tickUpper The upper tick of the range\\n    /// @return tickCumulativeInside The snapshot of the tick accumulator for the range\\n    /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\\n    /// @return secondsInside The snapshot of seconds per liquidity for the range\\n    function snapshotCumulativesInside(int24 tickLower, int24 tickUpper)\\n        external\\n        view\\n        returns (\\n            int56 tickCumulativeInside,\\n            uint160 secondsPerLiquidityInsideX128,\\n            uint32 secondsInside\\n        );\\n}\\n\",\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Events emitted by a pool\\n/// @notice Contains all events emitted by the pool\\ninterface IUniswapV3PoolEvents {\\n    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool\\n    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\\n    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\\n    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool\\n    event Initialize(uint160 sqrtPriceX96, int24 tick);\\n\\n    /// @notice Emitted when liquidity is minted for a given position\\n    /// @param sender The address that minted the liquidity\\n    /// @param owner The owner of the position and recipient of any minted liquidity\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity minted to the position range\\n    /// @param amount0 How much token0 was required for the minted liquidity\\n    /// @param amount1 How much token1 was required for the minted liquidity\\n    event Mint(\\n        address sender,\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted when fees are collected by the owner of a position\\n    /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\\n    /// @param owner The owner of the position for which fees are collected\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount0 The amount of token0 fees collected\\n    /// @param amount1 The amount of token1 fees collected\\n    event Collect(\\n        address indexed owner,\\n        address recipient,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount0,\\n        uint128 amount1\\n    );\\n\\n    /// @notice Emitted when a position's liquidity is removed\\n    /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\\n    /// @param owner The owner of the position for which liquidity is removed\\n    /// @param tickLower The lower tick of the position\\n    /// @param tickUpper The upper tick of the position\\n    /// @param amount The amount of liquidity to remove\\n    /// @param amount0 The amount of token0 withdrawn\\n    /// @param amount1 The amount of token1 withdrawn\\n    event Burn(\\n        address indexed owner,\\n        int24 indexed tickLower,\\n        int24 indexed tickUpper,\\n        uint128 amount,\\n        uint256 amount0,\\n        uint256 amount1\\n    );\\n\\n    /// @notice Emitted by the pool for any swaps between token0 and token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the output of the swap\\n    /// @param amount0 The delta of the token0 balance of the pool\\n    /// @param amount1 The delta of the token1 balance of the pool\\n    /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\\n    /// @param liquidity The liquidity of the pool after the swap\\n    /// @param tick The log base 1.0001 of price of the pool after the swap\\n    event Swap(\\n        address indexed sender,\\n        address indexed recipient,\\n        int256 amount0,\\n        int256 amount1,\\n        uint160 sqrtPriceX96,\\n        uint128 liquidity,\\n        int24 tick\\n    );\\n\\n    /// @notice Emitted by the pool for any flashes of token0/token1\\n    /// @param sender The address that initiated the swap call, and that received the callback\\n    /// @param recipient The address that received the tokens from flash\\n    /// @param amount0 The amount of token0 that was flashed\\n    /// @param amount1 The amount of token1 that was flashed\\n    /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\\n    /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee\\n    event Flash(\\n        address indexed sender,\\n        address indexed recipient,\\n        uint256 amount0,\\n        uint256 amount1,\\n        uint256 paid0,\\n        uint256 paid1\\n    );\\n\\n    /// @notice Emitted by the pool for increases to the number of observations that can be stored\\n    /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\\n    /// just before a mint/swap/burn.\\n    /// @param observationCardinalityNextOld The previous value of the next observation cardinality\\n    /// @param observationCardinalityNextNew The updated value of the next observation cardinality\\n    event IncreaseObservationCardinalityNext(\\n        uint16 observationCardinalityNextOld,\\n        uint16 observationCardinalityNextNew\\n    );\\n\\n    /// @notice Emitted when the protocol fee is changed by the pool\\n    /// @param feeProtocol0Old The previous value of the token0 protocol fee\\n    /// @param feeProtocol1Old The previous value of the token1 protocol fee\\n    /// @param feeProtocol0New The updated value of the token0 protocol fee\\n    /// @param feeProtocol1New The updated value of the token1 protocol fee\\n    event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New);\\n\\n    /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner\\n    /// @param sender The address that collects the protocol fees\\n    /// @param recipient The address that receives the collected protocol fees\\n    /// @param amount0 The amount of token0 protocol fees that is withdrawn\\n    /// @param amount0 The amount of token1 protocol fees that is withdrawn\\n    event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that never changes\\n/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values\\ninterface IUniswapV3PoolImmutables {\\n    /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\\n    /// @return The contract address\\n    function factory() external view returns (address);\\n\\n    /// @notice The first of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token0() external view returns (address);\\n\\n    /// @notice The second of the two tokens of the pool, sorted by address\\n    /// @return The token contract address\\n    function token1() external view returns (address);\\n\\n    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6\\n    /// @return The fee\\n    function fee() external view returns (uint24);\\n\\n    /// @notice The pool tick spacing\\n    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\\n    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\\n    /// This value is an int24 to avoid casting even though it is always positive.\\n    /// @return The tick spacing\\n    function tickSpacing() external view returns (int24);\\n\\n    /// @notice The maximum amount of position liquidity that can use any tick in the range\\n    /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\\n    /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\\n    /// @return The max amount of liquidity per tick\\n    function maxLiquidityPerTick() external view returns (uint128);\\n}\\n\",\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Permissioned pool actions\\n/// @notice Contains pool methods that may only be called by the factory owner\\ninterface IUniswapV3PoolOwnerActions {\\n    /// @notice Set the denominator of the protocol's % share of the fees\\n    /// @param feeProtocol0 new protocol fee for token0 of the pool\\n    /// @param feeProtocol1 new protocol fee for token1 of the pool\\n    function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;\\n\\n    /// @notice Collect the protocol fee accrued to the pool\\n    /// @param recipient The address to which collected protocol fees should be sent\\n    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\\n    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\\n    /// @return amount0 The protocol fee collected in token0\\n    /// @return amount1 The protocol fee collected in token1\\n    function collectProtocol(\\n        address recipient,\\n        uint128 amount0Requested,\\n        uint128 amount1Requested\\n    ) external returns (uint128 amount0, uint128 amount1);\\n}\\n\",\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\"},\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n/// @title Pool state that can change\\n/// @notice These methods compose the pool's state, and can change with any frequency including multiple times\\n/// per transaction\\ninterface IUniswapV3PoolState {\\n    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\\n    /// when accessed externally.\\n    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\\n    /// tick The current tick of the pool, i.e. according to the last tick transition that was run.\\n    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\\n    /// boundary.\\n    /// observationIndex The index of the last oracle observation that was written,\\n    /// observationCardinality The current maximum number of observations stored in the pool,\\n    /// observationCardinalityNext The next maximum number of observations, to be updated when the observation.\\n    /// feeProtocol The protocol fee for both tokens of the pool.\\n    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\\n    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\\n    /// unlocked Whether the pool is currently locked to reentrancy\\n    function slot0()\\n        external\\n        view\\n        returns (\\n            uint160 sqrtPriceX96,\\n            int24 tick,\\n            uint16 observationIndex,\\n            uint16 observationCardinality,\\n            uint16 observationCardinalityNext,\\n            uint8 feeProtocol,\\n            bool unlocked\\n        );\\n\\n    /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal0X128() external view returns (uint256);\\n\\n    /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\\n    /// @dev This value can overflow the uint256\\n    function feeGrowthGlobal1X128() external view returns (uint256);\\n\\n    /// @notice The amounts of token0 and token1 that are owed to the protocol\\n    /// @dev Protocol fees will never exceed uint128 max in either token\\n    function protocolFees() external view returns (uint128 token0, uint128 token1);\\n\\n    /// @notice The currently in range liquidity available to the pool\\n    /// @dev This value has no relationship to the total liquidity across all ticks\\n    function liquidity() external view returns (uint128);\\n\\n    /// @notice Look up information about a specific tick in the pool\\n    /// @param tick The tick to look up\\n    /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\\n    /// tick upper,\\n    /// liquidityNet how much liquidity changes when the pool price crosses the tick,\\n    /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\\n    /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\\n    /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\\n    /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\\n    /// secondsOutside the seconds spent on the other side of the tick from the current tick,\\n    /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\\n    /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\\n    /// In addition, these values are only relative and must be used only in comparison to previous snapshots for\\n    /// a specific position.\\n    function ticks(int24 tick)\\n        external\\n        view\\n        returns (\\n            uint128 liquidityGross,\\n            int128 liquidityNet,\\n            uint256 feeGrowthOutside0X128,\\n            uint256 feeGrowthOutside1X128,\\n            int56 tickCumulativeOutside,\\n            uint160 secondsPerLiquidityOutsideX128,\\n            uint32 secondsOutside,\\n            bool initialized\\n        );\\n\\n    /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information\\n    function tickBitmap(int16 wordPosition) external view returns (uint256);\\n\\n    /// @notice Returns the information about a position by the position's key\\n    /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\\n    /// @return _liquidity The amount of liquidity in the position,\\n    /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\\n    /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\\n    /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\\n    /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke\\n    function positions(bytes32 key)\\n        external\\n        view\\n        returns (\\n            uint128 _liquidity,\\n            uint256 feeGrowthInside0LastX128,\\n            uint256 feeGrowthInside1LastX128,\\n            uint128 tokensOwed0,\\n            uint128 tokensOwed1\\n        );\\n\\n    /// @notice Returns data about a specific observation index\\n    /// @param index The element of the observations array to fetch\\n    /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\\n    /// ago, rather than at a specific index in the array.\\n    /// @return blockTimestamp The timestamp of the observation,\\n    /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\\n    /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\\n    /// Returns initialized whether the observation has been initialized and the values are safe to use\\n    function observations(uint256 index)\\n        external\\n        view\\n        returns (\\n            uint32 blockTimestamp,\\n            int56 tickCumulative,\\n            uint160 secondsPerLiquidityCumulativeX128,\\n            bool initialized\\n        );\\n}\\n\",\"keccak256\":\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/UniV3PairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/*\\n\\nCoded for The Keep3r Network with \\u2665 by\\n\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2557\\u2003\\u2003\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\n\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255d\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u255a\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u2588\\u2588\\u2588\\u2588\\u2554\\u2550\\u2588\\u2588\\u2588\\u2588\\u2551\\u2591\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255d\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255a\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\n\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2591\\u2591\\u2591\\u2588\\u2588\\u2551\\u2003\\u2003\\u2591\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2554\\u255d\\u2591\\u255a\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2591\\u2591\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u2591\\u255a\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2554\\u255d\\n\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2003\\u2003\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u255d\\u255a\\u2550\\u255d\\u2591\\u2591\\u255a\\u2550\\u2550\\u255d\\u255a\\u2550\\u2550\\u2550\\u2550\\u2550\\u255d\\u2591\\n\\nhttps://defi.sucks\\n\\n*/\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/ERC20.sol';\\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\\n\\nimport './libraries/LiquidityAmounts.sol';\\nimport './libraries/PoolAddress.sol';\\nimport './libraries/FixedPoint96.sol';\\nimport './libraries/FullMath.sol';\\nimport './libraries/TickMath.sol';\\n\\nimport '../interfaces/external/IWeth9.sol';\\nimport '../interfaces/IUniV3PairManager.sol';\\n\\nimport './peripherals/Governable.sol';\\n\\ncontract UniV3PairManager is IUniV3PairManager, Governable {\\n  /// @inheritdoc IERC20Metadata\\n  string public override name;\\n\\n  /// @inheritdoc IERC20Metadata\\n  string public override symbol;\\n\\n  /// @inheritdoc IERC20\\n  uint256 public override totalSupply;\\n\\n  /// @inheritdoc IPairManager\\n  address public immutable override factory;\\n\\n  /// @inheritdoc IPairManager\\n  address public immutable override token0;\\n\\n  /// @inheritdoc IPairManager\\n  address public immutable override token1;\\n\\n  /// @inheritdoc IPairManager\\n  address public immutable override pool;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  uint24 public immutable override fee;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  uint160 public immutable override sqrtRatioAX96;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  uint160 public immutable override sqrtRatioBX96;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  int24 public immutable override tickLower;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  int24 public immutable override tickUpper;\\n\\n  /// @inheritdoc IUniV3PairManager\\n  int24 public immutable override tickSpacing;\\n\\n  /// @notice Uniswap's maximum tick\\n  /// @dev Due to tick spacing, pools with different fees may have differences between _MAX_TICK and tickUpper. Use tickUpper to find the max tick of the pool.\\n  int24 private constant _MAX_TICK = 887272;\\n\\n  /// @inheritdoc IERC20Metadata\\n  //solhint-disable-next-line const-name-snakecase\\n  uint8 public constant override decimals = 18;\\n\\n  /// @inheritdoc IERC20\\n  mapping(address => mapping(address => uint256)) public override allowance;\\n\\n  /// @inheritdoc IERC20\\n  mapping(address => uint256) public override balanceOf;\\n\\n  /// @notice Struct that contains token0, token1, and fee of the Uniswap pool\\n  PoolAddress.PoolKey private _poolKey;\\n\\n  constructor(address _pool, address _governance) Governable(_governance) {\\n    uint24 _fee = IUniswapV3Pool(_pool).fee();\\n    address _token0 = IUniswapV3Pool(_pool).token0();\\n    address _token1 = IUniswapV3Pool(_pool).token1();\\n    int24 _tickSpacing = IUniswapV3Pool(_pool).tickSpacing();\\n    int24 _tickUpper = _MAX_TICK - (_MAX_TICK % _tickSpacing);\\n    int24 _tickLower = -_tickUpper;\\n\\n    factory = msg.sender;\\n    pool = _pool;\\n    fee = _fee;\\n    tickSpacing = _tickSpacing;\\n    tickUpper = _tickUpper;\\n    tickLower = _tickLower;\\n    token0 = _token0;\\n    token1 = _token1;\\n    name = string(abi.encodePacked('Keep3rLP - ', ERC20(_token0).symbol(), '/', ERC20(_token1).symbol()));\\n    symbol = string(abi.encodePacked('kLP-', ERC20(_token0).symbol(), '/', ERC20(_token1).symbol()));\\n\\n    sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(_tickLower);\\n    sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(_tickUpper);\\n    _poolKey = PoolAddress.PoolKey({token0: _token0, token1: _token1, fee: _fee});\\n  }\\n\\n  // This low-level function should be called from a contract which performs important safety checks\\n  /// @inheritdoc IUniV3PairManager\\n  function mint(\\n    uint256 amount0Desired,\\n    uint256 amount1Desired,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external override returns (uint128 liquidity) {\\n    (liquidity, , ) = _addLiquidity(amount0Desired, amount1Desired, amount0Min, amount1Min);\\n    _mint(to, liquidity);\\n  }\\n\\n  /// @inheritdoc IUniV3PairManager\\n  function uniswapV3MintCallback(\\n    uint256 amount0Owed,\\n    uint256 amount1Owed,\\n    bytes calldata data\\n  ) external override {\\n    MintCallbackData memory decoded = abi.decode(data, (MintCallbackData));\\n    if (msg.sender != pool) revert OnlyPool();\\n    if (amount0Owed > 0) _pay(decoded._poolKey.token0, decoded.payer, pool, amount0Owed);\\n    if (amount1Owed > 0) _pay(decoded._poolKey.token1, decoded.payer, pool, amount1Owed);\\n  }\\n\\n  /// @inheritdoc IUniV3PairManager\\n  function burn(\\n    uint128 liquidity,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external override returns (uint256 amount0, uint256 amount1) {\\n    (amount0, amount1) = IUniswapV3Pool(pool).burn(tickLower, tickUpper, liquidity);\\n\\n    if (amount0 < amount0Min || amount1 < amount1Min) revert ExcessiveSlippage();\\n\\n    IUniswapV3Pool(pool).collect(to, tickLower, tickUpper, uint128(amount0), uint128(amount1));\\n    _burn(msg.sender, liquidity);\\n  }\\n\\n  /// @inheritdoc IUniV3PairManager\\n  function collect() external override onlyGovernance returns (uint256 amount0, uint256 amount1) {\\n    (, , , uint128 tokensOwed0, uint128 tokensOwed1) = IUniswapV3Pool(pool).positions(\\n      keccak256(abi.encodePacked(address(this), tickLower, tickUpper))\\n    );\\n    (amount0, amount1) = IUniswapV3Pool(pool).collect(governance, tickLower, tickUpper, tokensOwed0, tokensOwed1);\\n  }\\n\\n  /// @inheritdoc IUniV3PairManager\\n  function position()\\n    external\\n    view\\n    override\\n    returns (\\n      uint128 liquidity,\\n      uint256 feeGrowthInside0LastX128,\\n      uint256 feeGrowthInside1LastX128,\\n      uint128 tokensOwed0,\\n      uint128 tokensOwed1\\n    )\\n  {\\n    (liquidity, feeGrowthInside0LastX128, feeGrowthInside1LastX128, tokensOwed0, tokensOwed1) = IUniswapV3Pool(pool).positions(\\n      keccak256(abi.encodePacked(address(this), tickLower, tickUpper))\\n    );\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external override returns (bool) {\\n    allowance[msg.sender][spender] = amount;\\n\\n    emit Approval(msg.sender, spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address to, uint256 amount) external override returns (bool) {\\n    _transferTokens(msg.sender, to, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) external override returns (bool) {\\n    address spender = msg.sender;\\n    uint256 spenderAllowance = allowance[from][spender];\\n\\n    if (spender != from && spenderAllowance != type(uint256).max) {\\n      uint256 newAllowance = spenderAllowance - amount;\\n      allowance[from][spender] = newAllowance;\\n\\n      emit Approval(from, spender, newAllowance);\\n    }\\n\\n    _transferTokens(from, to, amount);\\n    return true;\\n  }\\n\\n  /// @notice Adds liquidity to an initialized pool\\n  /// @dev Reverts if the returned amount0 is less than amount0Min or if amount1 is less than amount1Min\\n  /// @dev This function calls the mint function of the corresponding Uniswap pool, which in turn calls UniswapV3Callback\\n  /// @param amount0Desired The amount of token0 we would like to provide\\n  /// @param amount1Desired The amount of token1 we would like to provide\\n  /// @param amount0Min The minimum amount of token0 we want to provide\\n  /// @param amount1Min The minimum amount of token1 we want to provide\\n  /// @return liquidity The calculated liquidity we get for the token amounts we provided\\n  /// @return amount0 The amount of token0 we ended up providing\\n  /// @return amount1 The amount of token1 we ended up providing\\n  function _addLiquidity(\\n    uint256 amount0Desired,\\n    uint256 amount1Desired,\\n    uint256 amount0Min,\\n    uint256 amount1Min\\n  )\\n    internal\\n    returns (\\n      uint128 liquidity,\\n      uint256 amount0,\\n      uint256 amount1\\n    )\\n  {\\n    (uint160 sqrtPriceX96, , , , , , ) = IUniswapV3Pool(pool).slot0();\\n\\n    liquidity = LiquidityAmounts.getLiquidityForAmounts(sqrtPriceX96, sqrtRatioAX96, sqrtRatioBX96, amount0Desired, amount1Desired);\\n\\n    (amount0, amount1) = IUniswapV3Pool(pool).mint(\\n      address(this),\\n      tickLower,\\n      tickUpper,\\n      liquidity,\\n      abi.encode(MintCallbackData({_poolKey: _poolKey, payer: msg.sender}))\\n    );\\n\\n    if (amount0 < amount0Min || amount1 < amount1Min) revert ExcessiveSlippage();\\n  }\\n\\n  /// @notice Transfers the passed-in token from the payer to the recipient for the corresponding value\\n  /// @param token The token to be transferred to the recipient\\n  /// @param from The address of the payer\\n  /// @param to The address of the passed-in tokens recipient\\n  /// @param value How much of that token to be transferred from payer to the recipient\\n  function _pay(\\n    address token,\\n    address from,\\n    address to,\\n    uint256 value\\n  ) internal {\\n    _safeTransferFrom(token, from, to, value);\\n  }\\n\\n  /// @notice Mints Keep3r credits to the passed-in address of recipient and increases total supply of Keep3r credits by the corresponding amount\\n  /// @param to The recipient of the Keep3r credits\\n  /// @param amount The amount Keep3r credits to be minted to the recipient\\n  function _mint(address to, uint256 amount) internal {\\n    totalSupply += amount;\\n    balanceOf[to] += amount;\\n    emit Transfer(address(0), to, amount);\\n  }\\n\\n  /// @notice Burns Keep3r credits to the passed-in address of recipient and reduces total supply of Keep3r credits by the corresponding amount\\n  /// @param to The address that will get its Keep3r credits burned\\n  /// @param amount The amount Keep3r credits to be burned from the recipient/recipient\\n  function _burn(address to, uint256 amount) internal {\\n    totalSupply -= amount;\\n    balanceOf[to] -= amount;\\n    emit Transfer(to, address(0), amount);\\n  }\\n\\n  /// @notice Transfers amount of Keep3r credits between two addresses\\n  /// @param from The user that transfers the Keep3r credits\\n  /// @param to The user that receives the Keep3r credits\\n  /// @param amount The amount of Keep3r credits to be transferred\\n  function _transferTokens(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal {\\n    balanceOf[from] -= amount;\\n    balanceOf[to] += amount;\\n\\n    emit Transfer(from, to, amount);\\n  }\\n\\n  /// @notice Transfers the passed-in token from the specified \\\"from\\\" to the specified \\\"to\\\" for the corresponding value\\n  /// @dev Reverts with IUniV3PairManager#UnsuccessfulTransfer if the transfer was not successful,\\n  ///      or if the passed data length is different than 0 and the decoded data is not a boolean\\n  /// @param token The token to be transferred to the specified \\\"to\\\"\\n  /// @param from  The address which is going to transfer the tokens\\n  /// @param value How much of that token to be transferred from \\\"from\\\" to \\\"to\\\"\\n  function _safeTransferFrom(\\n    address token,\\n    address from,\\n    address to,\\n    uint256 value\\n  ) internal {\\n    // solhint-disable-next-line avoid-low-level-calls\\n    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));\\n    if (!success || (data.length != 0 && !abi.decode(data, (bool)))) revert UnsuccessfulTransfer();\\n  }\\n}\\n\",\"keccak256\":\"0xcae7fbc99cb2f267f34894b47f02fde1c58cb22600afe4eb328d7492a9dbb396\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FixedPoint96.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nlibrary FixedPoint96 {\\n  // solhint-disable\\n  uint8 internal constant RESOLUTION = 96;\\n  uint256 internal constant Q96 = 0x1000000000000000000000000;\\n}\\n\",\"keccak256\":\"0x32a5c51474a7a83b902ffd6f54f8407e2b98d1142c9b06914fb75d50dd9c573c\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/libraries/LiquidityAmounts.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './FullMath.sol';\\nimport './FixedPoint96.sol';\\n\\n// solhint-disable\\nlibrary LiquidityAmounts {\\n  function toUint128(uint256 x) private pure returns (uint128 y) {\\n    require((y = uint128(x)) == x);\\n  }\\n\\n  function getLiquidityForAmount0(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount0\\n  ) internal pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n    uint256 intermediate = FullMath.mulDiv(sqrtRatioAX96, sqrtRatioBX96, FixedPoint96.Q96);\\n    return toUint128(FullMath.mulDiv(amount0, intermediate, sqrtRatioBX96 - sqrtRatioAX96));\\n  }\\n\\n  function getLiquidityForAmount1(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount1\\n  ) internal pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n    return toUint128(FullMath.mulDiv(amount1, FixedPoint96.Q96, sqrtRatioBX96 - sqrtRatioAX96));\\n  }\\n\\n  function getLiquidityForAmounts(\\n    uint160 sqrtRatioX96,\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount0,\\n    uint256 amount1\\n  ) internal pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\\n      liquidity = getLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amount0);\\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\\n      uint128 liquidity0 = getLiquidityForAmount0(sqrtRatioX96, sqrtRatioBX96, amount0);\\n      uint128 liquidity1 = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioX96, amount1);\\n\\n      liquidity = liquidity0 < liquidity1 ? liquidity0 : liquidity1;\\n    } else {\\n      liquidity = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1);\\n    }\\n  }\\n\\n  function getAmount0ForLiquidity(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) internal pure returns (uint256 amount0) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    return FullMath.mulDiv(uint256(liquidity) << FixedPoint96.RESOLUTION, sqrtRatioBX96 - sqrtRatioAX96, sqrtRatioBX96) / sqrtRatioAX96;\\n  }\\n\\n  function getAmount1ForLiquidity(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) internal pure returns (uint256 amount1) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    return FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96);\\n  }\\n\\n  function getAmountsForLiquidity(\\n    uint160 sqrtRatioX96,\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) internal pure returns (uint256 amount0, uint256 amount1) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\\n      amount0 = getAmount0ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\\n      amount0 = getAmount0ForLiquidity(sqrtRatioX96, sqrtRatioBX96, liquidity);\\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioX96, liquidity);\\n    } else {\\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x33666cfb046e29d6a9539e552b7aace75daab08f0449fec13de7282bac84f786\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/libraries/PoolAddress.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nlibrary PoolAddress {\\n  struct PoolKey {\\n    address token0;\\n    address token1;\\n    uint24 fee;\\n  }\\n}\\n\",\"keccak256\":\"0x68b07a437302c14ff93ebaabfb49f4fa70263cfbb19bf15446ddfcb91eb5a5e6\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/libraries/TickMath.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.5.0;\\n\\n// solhint-disable\\n\\n/// @title Math library for computing sqrt prices from ticks and vice versa\\n/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\\n///         prices between 2**-128 and 2**128\\nlibrary TickMath {\\n  /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128\\n  int24 internal constant MIN_TICK = -887272;\\n  /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128\\n  int24 internal constant MAX_TICK = -MIN_TICK;\\n\\n  /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)\\n  uint160 internal constant MIN_SQRT_RATIO = 4295128739;\\n  /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)\\n  uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;\\n\\n  /// @notice Calculates sqrt(1.0001^tick) * 2^96\\n  /// @dev Throws if |tick| > max tick\\n  /// @param tick The input tick for the above formula\\n  /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the given tick\\n  function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {\\n    uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));\\n    require(absTick <= uint256(int256(MAX_TICK)), 'T');\\n\\n    uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;\\n    if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;\\n    if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;\\n    if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;\\n    if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;\\n    if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;\\n    if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;\\n    if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;\\n    if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;\\n    if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;\\n    if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;\\n    if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;\\n    if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;\\n    if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;\\n    if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;\\n    if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;\\n    if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;\\n    if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;\\n    if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;\\n    if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;\\n\\n    if (tick > 0) ratio = type(uint256).max / ratio;\\n\\n    // Divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96.\\n    // we then downcast because we know the result always fits within 160 bits due to our tick input constraint\\n    // we round up in the division so getTickAtSqrtRatio of the output price is always consistent\\n    sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));\\n  }\\n\\n  /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\\n  /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may ever return.\\n  /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\\n  /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio\\n  function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {\\n    // Second inequality must be < because the price can never reach the price at the max tick\\n    require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');\\n    uint256 ratio = uint256(sqrtPriceX96) << 32;\\n\\n    uint256 r = ratio;\\n    uint256 msb = 0;\\n\\n    assembly {\\n      let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(5, gt(r, 0xFFFFFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(4, gt(r, 0xFFFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(3, gt(r, 0xFF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(2, gt(r, 0xF))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := shl(1, gt(r, 0x3))\\n      msb := or(msb, f)\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      let f := gt(r, 0x1)\\n      msb := or(msb, f)\\n    }\\n\\n    if (msb >= 128) r = ratio >> (msb - 127);\\n    else r = ratio << (127 - msb);\\n\\n    int256 log_2 = (int256(msb) - 128) << 64;\\n\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(63, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(62, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(61, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(60, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(59, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(58, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(57, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(56, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(55, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(54, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(53, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(52, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(51, f))\\n      r := shr(f, r)\\n    }\\n    assembly {\\n      r := shr(127, mul(r, r))\\n      let f := shr(128, r)\\n      log_2 := or(log_2, shl(50, f))\\n    }\\n\\n    int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number\\n\\n    int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);\\n    int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);\\n\\n    tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;\\n  }\\n}\\n\",\"keccak256\":\"0x11b965ba576ff91b4a6e9533c0f334f2b7b6024ee1c54e36d21799de5580899d\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/for-test/UniV3PairManagerForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/ERC20.sol';\\nimport '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';\\n\\nimport '../contracts/libraries/LiquidityAmounts.sol';\\nimport '../contracts/libraries/PoolAddress.sol';\\nimport '../contracts/libraries/FixedPoint96.sol';\\nimport '../contracts/libraries/FullMath.sol';\\nimport '../contracts/libraries/TickMath.sol';\\nimport '../contracts/UniV3PairManager.sol';\\nimport '../interfaces/external/IWeth9.sol';\\nimport '../interfaces/IUniV3PairManager.sol';\\n\\ncontract UniV3PairManagerForTest is UniV3PairManager {\\n  constructor(address _pool, address _governance) UniV3PairManager(_pool, _governance) {}\\n\\n  function internalAddLiquidity(\\n    uint256 amount0Desired,\\n    uint256 amount1Desired,\\n    uint256 amount0Min,\\n    uint256 amount1Min\\n  )\\n    external\\n    returns (\\n      uint128 liquidity,\\n      uint256 amount0,\\n      uint256 amount1\\n    )\\n  {\\n    return _addLiquidity(amount0Desired, amount1Desired, amount0Min, amount1Min);\\n  }\\n\\n  function internalPay(\\n    address token,\\n    address payer,\\n    address recipient,\\n    uint256 value\\n  ) external {\\n    return _pay(token, payer, recipient, value);\\n  }\\n\\n  function internalMint(address dst, uint256 amount) external {\\n    return _mint(dst, amount);\\n  }\\n\\n  function internalBurn(address dst, uint256 amount) external {\\n    return _burn(dst, amount);\\n  }\\n\\n  function internalTransferTokens(\\n    address src,\\n    address dst,\\n    uint256 amount\\n  ) external {\\n    _transferTokens(src, dst, amount);\\n  }\\n\\n  function internalSafeTransferFrom(\\n    address token,\\n    address from,\\n    address to,\\n    uint256 value\\n  ) external {\\n    _safeTransferFrom(token, from, to, value);\\n  }\\n\\n  receive() external payable {}\\n}\\n\",\"keccak256\":\"0xf3c3175a9e0ac5cdee59d57d2221b42b751e6e417412ff7cd98c3b0d39bad7b4\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/IUniV3PairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IPairManager.sol';\\nimport '../contracts/libraries/PoolAddress.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\nimport './peripherals/IGovernable.sol';\\n\\n/// @title Pair Manager contract\\n/// @notice Creates a UniswapV3 position, and tokenizes in an ERC20 manner\\n///         so that the user can use it as liquidity for a Keep3rJob\\ninterface IUniV3PairManager is IGovernable, IPairManager {\\n  // Structs\\n\\n  /// @notice The data to be decoded by the UniswapV3MintCallback function\\n  struct MintCallbackData {\\n    PoolAddress.PoolKey _poolKey; // Struct that contains token0, token1, and fee of the pool passed into the constructor\\n    address payer; // The address of the payer, which will be the msg.sender of the mint function\\n  }\\n\\n  // Variables\\n\\n  /// @notice The fee of the Uniswap pool passed into the constructor\\n  /// @return _fee The fee of the Uniswap pool passed into the constructor\\n  function fee() external view returns (uint24 _fee);\\n\\n  /// @notice Highest tick in the Uniswap's curve\\n  /// @return _tickUpper The highest tick in the Uniswap's curve\\n  function tickUpper() external view returns (int24 _tickUpper);\\n\\n  /// @notice Lowest tick in the Uniswap's curve\\n  /// @return _tickLower The lower tick in the Uniswap's curve\\n  function tickLower() external view returns (int24 _tickLower);\\n\\n  /// @notice The pair tick spacing\\n  /// @return _tickSpacing The pair tick spacing\\n  function tickSpacing() external view returns (int24 _tickSpacing);\\n\\n  /// @notice The sqrtRatioAX96 at the lowest tick (-887200) of the Uniswap pool\\n  /// @return _sqrtPriceA96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the lowest tick\\n  function sqrtRatioAX96() external view returns (uint160 _sqrtPriceA96);\\n\\n  /// @notice The sqrtRatioBX96 at the highest tick (887200) of the Uniswap pool\\n  /// @return _sqrtPriceBX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the highest tick\\n  function sqrtRatioBX96() external view returns (uint160 _sqrtPriceBX96);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the pool\\n  error OnlyPool();\\n\\n  /// @notice Throws when the slippage exceeds what the user is comfortable with\\n  error ExcessiveSlippage();\\n\\n  /// @notice Throws when a transfer is unsuccessful\\n  error UnsuccessfulTransfer();\\n\\n  // Methods\\n\\n  /// @notice This function is called after a user calls IUniV3PairManager#mint function\\n  ///         It ensures that any tokens owed to the pool are paid by the msg.sender of IUniV3PairManager#mint function\\n  /// @param amount0Owed The amount of token0 due to the pool for the minted liquidity\\n  /// @param amount1Owed The amount of token1 due to the pool for the minted liquidity\\n  /// @param data The encoded token0, token1, fee (_poolKey) and the payer (msg.sender) of the IUniV3PairManager#mint function\\n  function uniswapV3MintCallback(\\n    uint256 amount0Owed,\\n    uint256 amount1Owed,\\n    bytes calldata data\\n  ) external;\\n\\n  /// @notice Mints kLP tokens to an address according to the liquidity the msg.sender provides to the UniswapV3 pool\\n  /// @dev Triggers UniV3PairManager#uniswapV3MintCallback\\n  /// @param amount0Desired The amount of token0 we would like to provide\\n  /// @param amount1Desired The amount of token1 we would like to provide\\n  /// @param amount0Min The minimum amount of token0 we want to provide\\n  /// @param amount1Min The minimum amount of token1 we want to provide\\n  /// @param to The address to which the kLP tokens are going to be minted to\\n  /// @return liquidity kLP tokens sent in exchange for the provision of tokens\\n  function mint(\\n    uint256 amount0Desired,\\n    uint256 amount1Desired,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external returns (uint128 liquidity);\\n\\n  /// @notice Returns the pair manager's position in the corresponding UniswapV3 pool\\n  /// @return liquidity The amount of liquidity provided to the UniswapV3 pool by the pair manager\\n  /// @return feeGrowthInside0LastX128 The fee growth of token0 as of the last action on the individual position\\n  /// @return feeGrowthInside1LastX128 The fee growth of token1 as of the last action on the individual position\\n  /// @return tokensOwed0 The uncollected amount of token0 owed to the position as of the last computation\\n  /// @return tokensOwed1 The uncollected amount of token1 owed to the position as of the last computation\\n  function position()\\n    external\\n    view\\n    returns (\\n      uint128 liquidity,\\n      uint256 feeGrowthInside0LastX128,\\n      uint256 feeGrowthInside1LastX128,\\n      uint128 tokensOwed0,\\n      uint128 tokensOwed1\\n    );\\n\\n  /// @notice Calls the UniswapV3 pool's collect function, which collects up to a maximum amount of fees\\n  //          owed to a specific position to the recipient, in this case, that recipient is the pair manager\\n  /// @dev The collected fees will be sent to governance\\n  /// @return amount0 The amount of fees collected in token0\\n  /// @return amount1 The amount of fees collected in token1\\n  function collect() external returns (uint256 amount0, uint256 amount1);\\n\\n  /// @notice Burns the corresponding amount of kLP tokens from the msg.sender and withdraws the specified liquidity\\n  //          in the entire range\\n  /// @param liquidity The amount of liquidity to be burned\\n  /// @param amount0Min The minimum amount of token0 we want to send to the recipient (to)\\n  /// @param amount1Min The minimum amount of token1 we want to send to the recipient (to)\\n  /// @param to The address that will receive the due fees\\n  /// @return amount0 The calculated amount of token0 that will be sent to the recipient\\n  /// @return amount1 The calculated amount of token1 that will be sent to the recipient\\n  function burn(\\n    uint128 liquidity,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external returns (uint256 amount0, uint256 amount1);\\n}\\n\",\"keccak256\":\"0x5d5793eaa4ed95d51d6185af159921fca68a3020b151bde710e1a6f58f288cfe\",\"license\":\"MIT\"},\"solidity/interfaces/external/IWeth9.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\n\\ninterface IWeth9 is IERC20 {\\n  function deposit() external payable;\\n\\n  function withdraw(uint256) external;\\n}\\n\",\"keccak256\":\"0x62b6fd021e9fef703f5c77705d8da9ee1967e34e00a0c8a827ee3c0f973399a5\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5266,
                "contract": "solidity/for-test/UniV3PairManagerForTest.sol:UniV3PairManagerForTest",
                "label": "governance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/UniV3PairManagerForTest.sol:UniV3PairManagerForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              },
              {
                "astId": 3227,
                "contract": "solidity/for-test/UniV3PairManagerForTest.sol:UniV3PairManagerForTest",
                "label": "name",
                "offset": 0,
                "slot": "2",
                "type": "t_string_storage"
              },
              {
                "astId": 3231,
                "contract": "solidity/for-test/UniV3PairManagerForTest.sol:UniV3PairManagerForTest",
                "label": "symbol",
                "offset": 0,
                "slot": "3",
                "type": "t_string_storage"
              },
              {
                "astId": 3235,
                "contract": "solidity/for-test/UniV3PairManagerForTest.sol:UniV3PairManagerForTest",
                "label": "totalSupply",
                "offset": 0,
                "slot": "4",
                "type": "t_uint256"
              },
              {
                "astId": 3292,
                "contract": "solidity/for-test/UniV3PairManagerForTest.sol:UniV3PairManagerForTest",
                "label": "allowance",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 3298,
                "contract": "solidity/for-test/UniV3PairManagerForTest.sol:UniV3PairManagerForTest",
                "label": "balanceOf",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 3302,
                "contract": "solidity/for-test/UniV3PairManagerForTest.sol:UniV3PairManagerForTest",
                "label": "_poolKey",
                "offset": 0,
                "slot": "7",
                "type": "t_struct(PoolKey)4649_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
              },
              "t_struct(PoolKey)4649_storage": {
                "encoding": "inplace",
                "label": "struct PoolAddress.PoolKey",
                "members": [
                  {
                    "astId": 4644,
                    "contract": "solidity/for-test/UniV3PairManagerForTest.sol:UniV3PairManagerForTest",
                    "label": "token0",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_address"
                  },
                  {
                    "astId": 4646,
                    "contract": "solidity/for-test/UniV3PairManagerForTest.sol:UniV3PairManagerForTest",
                    "label": "token1",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_address"
                  },
                  {
                    "astId": 4648,
                    "contract": "solidity/for-test/UniV3PairManagerForTest.sol:UniV3PairManagerForTest",
                    "label": "fee",
                    "offset": 20,
                    "slot": "1",
                    "type": "t_uint24"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint24": {
                "encoding": "inplace",
                "label": "uint24",
                "numberOfBytes": "3"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "ExcessiveSlippage()": [
                {
                  "notice": "Throws when the slippage exceeds what the user is comfortable with"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPool()": [
                {
                  "notice": "Throws when the caller of the function is not the pool"
                }
              ],
              "UnsuccessfulTransfer()": [
                {
                  "notice": "Throws when a transfer is unsuccessful"
                }
              ]
            },
            "events": {
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "factory()": {
                "notice": "Address of the factory from which the pair manager was created"
              },
              "fee()": {
                "notice": "The fee of the Uniswap pool passed into the constructor"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "mint(uint256,uint256,uint256,uint256,address)": {
                "notice": "Mints kLP tokens to an address according to the liquidity the msg.sender provides to the UniswapV3 pool"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pool()": {
                "notice": "Address of the pool from which the Keep3r pair manager will interact with"
              },
              "position()": {
                "notice": "Returns the pair manager's position in the corresponding UniswapV3 pool"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "sqrtRatioAX96()": {
                "notice": "The sqrtRatioAX96 at the lowest tick (-887200) of the Uniswap pool"
              },
              "sqrtRatioBX96()": {
                "notice": "The sqrtRatioBX96 at the highest tick (887200) of the Uniswap pool"
              },
              "tickLower()": {
                "notice": "Lowest tick in the Uniswap's curve"
              },
              "tickSpacing()": {
                "notice": "The pair tick spacing"
              },
              "tickUpper()": {
                "notice": "Highest tick in the Uniswap's curve"
              },
              "token0()": {
                "notice": "Token0 of the pool"
              },
              "token1()": {
                "notice": "Token1 of the pool"
              },
              "uniswapV3MintCallback(uint256,uint256,bytes)": {
                "notice": "This function is called after a user calls IUniV3PairManager#mint function         It ensures that any tokens owed to the pool are paid by the msg.sender of IUniV3PairManager#mint function"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/libraries/LiquidityAmountsForTest.sol": {
        "LiquidityAmountsForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioAX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioBX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                }
              ],
              "name": "getAmount0ForLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioAX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioBX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                }
              ],
              "name": "getAmount1ForLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioAX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioBX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                }
              ],
              "name": "getAmountsForLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioAX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioBX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                }
              ],
              "name": "getLiquidityForAmount0",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioAX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioBX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "getLiquidityForAmount1",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioAX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint160",
                  "name": "sqrtRatioBX96",
                  "type": "uint160"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "name": "getLiquidityForAmounts",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            }
          ],
          "devdoc": {
            "details": "Made this library into a contract to be able to calculate liquidity more precisely for tests",
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50610685806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806308c0f7951461006757806329e24cb7146100975780636098fd4a146100b857806367df6e89146100cb5780636ac69a8e146100de578063c72e160b146100f1575b600080fd5b61007a6100753660046105bb565b610119565b6040516001600160801b0390911681526020015b60405180910390f35b6100aa6100a53660046104cf565b61016c565b60405190815260200161008e565b61007a6100c6366004610566565b6101b6565b61007a6100d93660046105bb565b61027a565b6100aa6100ec3660046104cf565b6102d1565b6101046100ff366004610512565b61033b565b6040805192835260208301919091520161008e565b6000826001600160a01b0316846001600160a01b03161115610139579192915b61016261015d83600160601b61014f8888610619565b6001600160a01b03166103d7565b610486565b90505b9392505050565b6000826001600160a01b0316846001600160a01b0316111561018c579192915b6101626001600160801b0383166101a38686610619565b6001600160a01b0316600160601b6103d7565b6000836001600160a01b0316856001600160a01b031611156101d6579293925b846001600160a01b0316866001600160a01b031611610201576101fa85858561027a565b9050610271565b836001600160a01b0316866001600160a01b0316101561026357600061022887868661027a565b90506000610237878986610119565b9050806001600160801b0316826001600160801b031610610258578061025a565b815b92505050610271565b61026e858584610119565b90505b95945050505050565b6000826001600160a01b0316846001600160a01b0316111561029a579192915b60006102bd856001600160a01b0316856001600160a01b0316600160601b6103d7565b905061027161015d848361014f8989610619565b6000826001600160a01b0316846001600160a01b031611156102f1579192915b6001600160a01b038416610331600160601b600160e01b03606085901b166103198787610619565b6001600160a01b0316866001600160a01b03166103d7565b61016291906105f7565b600080836001600160a01b0316856001600160a01b0316111561035c579293925b846001600160a01b0316866001600160a01b031611610387576103808585856102d1565b91506103ce565b836001600160a01b0316866001600160a01b031610156103c0576103ac8685856102d1565b91506103b985878561016c565b90506103ce565b6103cb85858561016c565b90505b94509492505050565b600080806000198587098587029250828110838203039150508060001415610411576000841161040657600080fd5b508290049050610165565b80841161041d57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b806001600160801b038116811461049c57600080fd5b919050565b80356001600160801b038116811461049c57600080fd5b80356001600160a01b038116811461049c57600080fd5b6000806000606084860312156104e457600080fd5b6104ed846104b8565b92506104fb602085016104b8565b9150610509604085016104a1565b90509250925092565b6000806000806080858703121561052857600080fd5b610531856104b8565b935061053f602086016104b8565b925061054d604086016104b8565b915061055b606086016104a1565b905092959194509250565b600080600080600060a0868803121561057e57600080fd5b610587866104b8565b9450610595602087016104b8565b93506105a3604087016104b8565b94979396509394606081013594506080013592915050565b6000806000606084860312156105d057600080fd5b6105d9846104b8565b92506105e7602085016104b8565b9150604084013590509250925092565b60008261061457634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160a01b038381169083168181101561064757634e487b7160e01b600052601160045260246000fd5b03939250505056fea2646970667358221220f19f6a3a34b916f995200f5fe177f5b5c91afc369e8769e4dce272cdac8a22d664736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x685 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8C0F795 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x29E24CB7 EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x6098FD4A EQ PUSH2 0xB8 JUMPI DUP1 PUSH4 0x67DF6E89 EQ PUSH2 0xCB JUMPI DUP1 PUSH4 0x6AC69A8E EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0xC72E160B EQ PUSH2 0xF1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7A PUSH2 0x75 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BB JUMP JUMPDEST PUSH2 0x119 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xAA PUSH2 0xA5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CF JUMP JUMPDEST PUSH2 0x16C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8E JUMP JUMPDEST PUSH2 0x7A PUSH2 0xC6 CALLDATASIZE PUSH1 0x4 PUSH2 0x566 JUMP JUMPDEST PUSH2 0x1B6 JUMP JUMPDEST PUSH2 0x7A PUSH2 0xD9 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BB JUMP JUMPDEST PUSH2 0x27A JUMP JUMPDEST PUSH2 0xAA PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0x4CF JUMP JUMPDEST PUSH2 0x2D1 JUMP JUMPDEST PUSH2 0x104 PUSH2 0xFF CALLDATASIZE PUSH1 0x4 PUSH2 0x512 JUMP JUMPDEST PUSH2 0x33B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x8E JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x139 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH2 0x162 PUSH2 0x15D DUP4 PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x14F DUP9 DUP9 PUSH2 0x619 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3D7 JUMP JUMPDEST PUSH2 0x486 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x18C JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH2 0x162 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH2 0x1A3 DUP7 DUP7 PUSH2 0x619 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x1D6 JUMPI SWAP3 SWAP4 SWAP3 JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT PUSH2 0x201 JUMPI PUSH2 0x1FA DUP6 DUP6 DUP6 PUSH2 0x27A JUMP JUMPDEST SWAP1 POP PUSH2 0x271 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 PUSH2 0x228 DUP8 DUP7 DUP7 PUSH2 0x27A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x237 DUP8 DUP10 DUP7 PUSH2 0x119 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND LT PUSH2 0x258 JUMPI DUP1 PUSH2 0x25A JUMP JUMPDEST DUP2 JUMPDEST SWAP3 POP POP POP PUSH2 0x271 JUMP JUMPDEST PUSH2 0x26E DUP6 DUP6 DUP5 PUSH2 0x119 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x29A JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH1 0x0 PUSH2 0x2BD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x3D7 JUMP JUMPDEST SWAP1 POP PUSH2 0x271 PUSH2 0x15D DUP5 DUP4 PUSH2 0x14F DUP10 DUP10 PUSH2 0x619 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x2F1 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x331 PUSH1 0x1 PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH1 0x60 DUP6 SWAP1 SHL AND PUSH2 0x319 DUP8 DUP8 PUSH2 0x619 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3D7 JUMP JUMPDEST PUSH2 0x162 SWAP2 SWAP1 PUSH2 0x5F7 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x35C JUMPI SWAP3 SWAP4 SWAP3 JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT PUSH2 0x387 JUMPI PUSH2 0x380 DUP6 DUP6 DUP6 PUSH2 0x2D1 JUMP JUMPDEST SWAP2 POP PUSH2 0x3CE JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT ISZERO PUSH2 0x3C0 JUMPI PUSH2 0x3AC DUP7 DUP6 DUP6 PUSH2 0x2D1 JUMP JUMPDEST SWAP2 POP PUSH2 0x3B9 DUP6 DUP8 DUP6 PUSH2 0x16C JUMP JUMPDEST SWAP1 POP PUSH2 0x3CE JUMP JUMPDEST PUSH2 0x3CB DUP6 DUP6 DUP6 PUSH2 0x16C JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x411 JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x165 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x41D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x1 DUP8 NOT DUP2 ADD DUP9 AND SWAP8 DUP9 SWAP1 DIV PUSH1 0x3 DUP2 MUL DUP4 XOR DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL SWAP1 DUP2 MUL SWAP1 SWAP3 SUB SWAP1 SWAP2 MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x49C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x49C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x49C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4ED DUP5 PUSH2 0x4B8 JUMP JUMPDEST SWAP3 POP PUSH2 0x4FB PUSH1 0x20 DUP6 ADD PUSH2 0x4B8 JUMP JUMPDEST SWAP2 POP PUSH2 0x509 PUSH1 0x40 DUP6 ADD PUSH2 0x4A1 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x528 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x531 DUP6 PUSH2 0x4B8 JUMP JUMPDEST SWAP4 POP PUSH2 0x53F PUSH1 0x20 DUP7 ADD PUSH2 0x4B8 JUMP JUMPDEST SWAP3 POP PUSH2 0x54D PUSH1 0x40 DUP7 ADD PUSH2 0x4B8 JUMP JUMPDEST SWAP2 POP PUSH2 0x55B PUSH1 0x60 DUP7 ADD PUSH2 0x4A1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x57E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x587 DUP7 PUSH2 0x4B8 JUMP JUMPDEST SWAP5 POP PUSH2 0x595 PUSH1 0x20 DUP8 ADD PUSH2 0x4B8 JUMP JUMPDEST SWAP4 POP PUSH2 0x5A3 PUSH1 0x40 DUP8 ADD PUSH2 0x4B8 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5D9 DUP5 PUSH2 0x4B8 JUMP JUMPDEST SWAP3 POP PUSH2 0x5E7 PUSH1 0x20 DUP6 ADD PUSH2 0x4B8 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x614 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x647 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALL SWAP16 PUSH11 0x3A34B916F995200F5FE177 CREATE2 0xB5 0xC9 BYTE 0xFC CALLDATASIZE SWAP15 DUP8 PUSH10 0xE4DCE272CDAC8A22D664 PUSH20 0x6F6C634300080700330000000000000000000000 ",
              "sourceMap": "303:3278:51:-:0;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@getAmount0ForLiquidity_10234": {
                  "entryPoint": 721,
                  "id": 10234,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@getAmount1ForLiquidity_10268": {
                  "entryPoint": 364,
                  "id": 10268,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@getAmountsForLiquidity_10339": {
                  "entryPoint": 827,
                  "id": 10339,
                  "parameterSlots": 4,
                  "returnSlots": 2
                },
                "@getLiquidityForAmount0_10077": {
                  "entryPoint": 634,
                  "id": 10077,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@getLiquidityForAmount1_10113": {
                  "entryPoint": 281,
                  "id": 10113,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@getLiquidityForAmounts_10193": {
                  "entryPoint": 438,
                  "id": 10193,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "@mulDiv_4263": {
                  "entryPoint": 983,
                  "id": 4263,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@toUint128_10032": {
                  "entryPoint": 1158,
                  "id": 10032,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint160t_uint160t_uint128": {
                  "entryPoint": 1231,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_uint160t_uint160t_uint160t_uint128": {
                  "entryPoint": 1298,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_uint160t_uint160t_uint160t_uint256t_uint256": {
                  "entryPoint": 1382,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 5
                },
                "abi_decode_tuple_t_uint160t_uint160t_uint256": {
                  "entryPoint": 1467,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_uint128": {
                  "entryPoint": 1185,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_uint160": {
                  "entryPoint": 1208,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 1527,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint160": {
                  "entryPoint": 1561,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:3128:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:84",
                                                    "type": "",
                                                    "value": "128"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "111:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_uint128",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "241:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "251:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "273:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "260:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "260:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "251:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "343:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "352:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "355:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "345:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "345:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "345:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "302:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "313:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "328:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "333:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "324:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "324:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "337:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "320:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "320:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "309:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "309:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "299:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "299:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "292:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "292:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "289:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_uint160",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "220:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "231:5:84",
                            "type": ""
                          }
                        ],
                        "src": "192:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "474:230:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "520:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "529:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "532:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "522:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "522:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "522:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "495:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "504:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "491:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "491:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "516:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "487:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "487:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "484:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "545:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "574:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint160",
                                  "nodeType": "YulIdentifier",
                                  "src": "555:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "555:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "545:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "593:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "626:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "637:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "622:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "622:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint160",
                                  "nodeType": "YulIdentifier",
                                  "src": "603:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "603:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "593:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "650:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "683:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "694:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "679:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "679:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "660:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "660:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "650:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160t_uint160t_uint128",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "424:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "435:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "447:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "455:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "463:6:84",
                            "type": ""
                          }
                        ],
                        "src": "370:334:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "830:288:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "877:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "886:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "889:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "879:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "879:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "879:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "851:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "860:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "847:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "847:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "872:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "843:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "843:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "840:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "902:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "931:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint160",
                                  "nodeType": "YulIdentifier",
                                  "src": "912:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "912:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "902:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "950:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "983:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "994:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "979:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "979:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint160",
                                  "nodeType": "YulIdentifier",
                                  "src": "960:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "960:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "950:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1007:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1040:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1051:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1036:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1036:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint160",
                                  "nodeType": "YulIdentifier",
                                  "src": "1017:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1017:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1007:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1064:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1097:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1108:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1093:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1093:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint128",
                                  "nodeType": "YulIdentifier",
                                  "src": "1074:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1074:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "1064:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160t_uint160t_uint160t_uint128",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "772:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "783:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "795:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "803:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "811:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "819:6:84",
                            "type": ""
                          }
                        ],
                        "src": "709:409:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1261:334:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1308:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1317:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1320:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1310:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1310:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1310:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1282:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1291:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1278:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1278:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1303:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1274:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1274:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1271:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1333:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1362:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint160",
                                  "nodeType": "YulIdentifier",
                                  "src": "1343:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1343:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1333:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1381:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1414:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1425:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1410:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1410:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint160",
                                  "nodeType": "YulIdentifier",
                                  "src": "1391:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1391:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1381:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1438:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1471:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1482:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1467:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1467:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint160",
                                  "nodeType": "YulIdentifier",
                                  "src": "1448:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1448:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1438:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1495:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1522:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1533:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1518:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1518:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1505:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1505:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "1495:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1546:43:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1573:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1584:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1569:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1569:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1556:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1556:33:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "1546:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160t_uint160t_uint160t_uint256t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1195:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1206:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1218:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1226:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1234:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "1242:6:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "1250:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1123:472:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1704:224:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1750:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1759:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1762:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1752:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1752:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1752:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1725:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1734:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1721:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1721:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1746:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1717:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1717:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1714:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1775:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1804:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint160",
                                  "nodeType": "YulIdentifier",
                                  "src": "1785:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1785:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1775:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1823:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1856:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1867:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1852:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1852:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_uint160",
                                  "nodeType": "YulIdentifier",
                                  "src": "1833:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1833:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1823:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1880:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1907:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1918:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1903:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1903:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1890:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1890:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1880:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint160t_uint160t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1654:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1665:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1677:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1685:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1693:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1600:328:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2034:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2044:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2056:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2067:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2052:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2052:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2044:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2086:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2101:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2117:3:84",
                                                "type": "",
                                                "value": "128"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2122:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "2113:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2113:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2126:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "2109:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2109:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2097:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2097:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2079:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2079:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2079:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2003:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2014:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2025:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1933:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2242:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2252:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2264:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2275:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2260:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2260:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2252:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2294:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2305:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2287:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2287:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2287:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2211:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2222:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2233:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2141:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2452:119:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2462:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2474:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2485:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2470:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2470:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2462:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2504:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2515:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2497:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2497:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2497:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2542:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2553:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2538:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2538:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2558:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2531:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2531:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2531:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2413:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2424:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2432:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2443:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2323:248:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2622:171:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2653:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2674:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2681:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "2686:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "2677:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2677:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2667:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2667:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2667:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2718:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2721:4:84",
                                          "type": "",
                                          "value": "0x12"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2711:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2711:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2711:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2746:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2749:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2739:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2739:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2739:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "2642:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2635:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2635:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2632:132:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2773:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "2782:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "2785:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "2778:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2778:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "2773:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "2607:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "2610:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "2616:1:84",
                            "type": ""
                          }
                        ],
                        "src": "2576:217:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2847:279:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2857:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2875:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2880:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "2871:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2871:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2884:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "2867:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2867:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2861:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2895:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "2910:1:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2913:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "2906:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2906:10:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2899:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2925:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "2940:1:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2943:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "2936:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2936:10:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2929:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2979:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3000:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "3007:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "3012:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "3003:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3003:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "2993:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2993:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2993:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3044:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3047:4:84",
                                          "type": "",
                                          "value": "0x11"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3037:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3037:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3037:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3072:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3075:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3065:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3065:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3065:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2961:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2966:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2958:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2958:12:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2955:135:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3099:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3111:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3116:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "3107:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3107:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "3099:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint160",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "2829:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "2832:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "2838:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2798:328:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_uint128(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(128, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_uint160(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint160t_uint160t_uint128(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_uint160(headStart)\n        value1 := abi_decode_uint160(add(headStart, 32))\n        value2 := abi_decode_uint128(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint160t_uint160t_uint160t_uint128(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_uint160(headStart)\n        value1 := abi_decode_uint160(add(headStart, 32))\n        value2 := abi_decode_uint160(add(headStart, 64))\n        value3 := abi_decode_uint128(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_uint160t_uint160t_uint160t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_uint160(headStart)\n        value1 := abi_decode_uint160(add(headStart, 32))\n        value2 := abi_decode_uint160(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_uint160t_uint160t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_uint160(headStart)\n        value1 := abi_decode_uint160(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(128, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function checked_sub_t_uint160(x, y) -> diff\n    {\n        let _1 := sub(shl(160, 1), 1)\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x_1, y_1)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100625760003560e01c806308c0f7951461006757806329e24cb7146100975780636098fd4a146100b857806367df6e89146100cb5780636ac69a8e146100de578063c72e160b146100f1575b600080fd5b61007a6100753660046105bb565b610119565b6040516001600160801b0390911681526020015b60405180910390f35b6100aa6100a53660046104cf565b61016c565b60405190815260200161008e565b61007a6100c6366004610566565b6101b6565b61007a6100d93660046105bb565b61027a565b6100aa6100ec3660046104cf565b6102d1565b6101046100ff366004610512565b61033b565b6040805192835260208301919091520161008e565b6000826001600160a01b0316846001600160a01b03161115610139579192915b61016261015d83600160601b61014f8888610619565b6001600160a01b03166103d7565b610486565b90505b9392505050565b6000826001600160a01b0316846001600160a01b0316111561018c579192915b6101626001600160801b0383166101a38686610619565b6001600160a01b0316600160601b6103d7565b6000836001600160a01b0316856001600160a01b031611156101d6579293925b846001600160a01b0316866001600160a01b031611610201576101fa85858561027a565b9050610271565b836001600160a01b0316866001600160a01b0316101561026357600061022887868661027a565b90506000610237878986610119565b9050806001600160801b0316826001600160801b031610610258578061025a565b815b92505050610271565b61026e858584610119565b90505b95945050505050565b6000826001600160a01b0316846001600160a01b0316111561029a579192915b60006102bd856001600160a01b0316856001600160a01b0316600160601b6103d7565b905061027161015d848361014f8989610619565b6000826001600160a01b0316846001600160a01b031611156102f1579192915b6001600160a01b038416610331600160601b600160e01b03606085901b166103198787610619565b6001600160a01b0316866001600160a01b03166103d7565b61016291906105f7565b600080836001600160a01b0316856001600160a01b0316111561035c579293925b846001600160a01b0316866001600160a01b031611610387576103808585856102d1565b91506103ce565b836001600160a01b0316866001600160a01b031610156103c0576103ac8685856102d1565b91506103b985878561016c565b90506103ce565b6103cb85858561016c565b90505b94509492505050565b600080806000198587098587029250828110838203039150508060001415610411576000841161040657600080fd5b508290049050610165565b80841161041d57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b806001600160801b038116811461049c57600080fd5b919050565b80356001600160801b038116811461049c57600080fd5b80356001600160a01b038116811461049c57600080fd5b6000806000606084860312156104e457600080fd5b6104ed846104b8565b92506104fb602085016104b8565b9150610509604085016104a1565b90509250925092565b6000806000806080858703121561052857600080fd5b610531856104b8565b935061053f602086016104b8565b925061054d604086016104b8565b915061055b606086016104a1565b905092959194509250565b600080600080600060a0868803121561057e57600080fd5b610587866104b8565b9450610595602087016104b8565b93506105a3604087016104b8565b94979396509394606081013594506080013592915050565b6000806000606084860312156105d057600080fd5b6105d9846104b8565b92506105e7602085016104b8565b9150604084013590509250925092565b60008261061457634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160a01b038381169083168181101561064757634e487b7160e01b600052601160045260246000fd5b03939250505056fea2646970667358221220f19f6a3a34b916f995200f5fe177f5b5c91afc369e8769e4dce272cdac8a22d664736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8C0F795 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x29E24CB7 EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x6098FD4A EQ PUSH2 0xB8 JUMPI DUP1 PUSH4 0x67DF6E89 EQ PUSH2 0xCB JUMPI DUP1 PUSH4 0x6AC69A8E EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0xC72E160B EQ PUSH2 0xF1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7A PUSH2 0x75 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BB JUMP JUMPDEST PUSH2 0x119 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xAA PUSH2 0xA5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CF JUMP JUMPDEST PUSH2 0x16C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8E JUMP JUMPDEST PUSH2 0x7A PUSH2 0xC6 CALLDATASIZE PUSH1 0x4 PUSH2 0x566 JUMP JUMPDEST PUSH2 0x1B6 JUMP JUMPDEST PUSH2 0x7A PUSH2 0xD9 CALLDATASIZE PUSH1 0x4 PUSH2 0x5BB JUMP JUMPDEST PUSH2 0x27A JUMP JUMPDEST PUSH2 0xAA PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0x4CF JUMP JUMPDEST PUSH2 0x2D1 JUMP JUMPDEST PUSH2 0x104 PUSH2 0xFF CALLDATASIZE PUSH1 0x4 PUSH2 0x512 JUMP JUMPDEST PUSH2 0x33B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x8E JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x139 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH2 0x162 PUSH2 0x15D DUP4 PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x14F DUP9 DUP9 PUSH2 0x619 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3D7 JUMP JUMPDEST PUSH2 0x486 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x18C JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH2 0x162 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH2 0x1A3 DUP7 DUP7 PUSH2 0x619 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x1D6 JUMPI SWAP3 SWAP4 SWAP3 JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT PUSH2 0x201 JUMPI PUSH2 0x1FA DUP6 DUP6 DUP6 PUSH2 0x27A JUMP JUMPDEST SWAP1 POP PUSH2 0x271 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 PUSH2 0x228 DUP8 DUP7 DUP7 PUSH2 0x27A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x237 DUP8 DUP10 DUP7 PUSH2 0x119 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND LT PUSH2 0x258 JUMPI DUP1 PUSH2 0x25A JUMP JUMPDEST DUP2 JUMPDEST SWAP3 POP POP POP PUSH2 0x271 JUMP JUMPDEST PUSH2 0x26E DUP6 DUP6 DUP5 PUSH2 0x119 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x29A JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH1 0x0 PUSH2 0x2BD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x60 SHL PUSH2 0x3D7 JUMP JUMPDEST SWAP1 POP PUSH2 0x271 PUSH2 0x15D DUP5 DUP4 PUSH2 0x14F DUP10 DUP10 PUSH2 0x619 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x2F1 JUMPI SWAP2 SWAP3 SWAP2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x331 PUSH1 0x1 PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH1 0x60 DUP6 SWAP1 SHL AND PUSH2 0x319 DUP8 DUP8 PUSH2 0x619 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3D7 JUMP JUMPDEST PUSH2 0x162 SWAP2 SWAP1 PUSH2 0x5F7 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT ISZERO PUSH2 0x35C JUMPI SWAP3 SWAP4 SWAP3 JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT PUSH2 0x387 JUMPI PUSH2 0x380 DUP6 DUP6 DUP6 PUSH2 0x2D1 JUMP JUMPDEST SWAP2 POP PUSH2 0x3CE JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT ISZERO PUSH2 0x3C0 JUMPI PUSH2 0x3AC DUP7 DUP6 DUP6 PUSH2 0x2D1 JUMP JUMPDEST SWAP2 POP PUSH2 0x3B9 DUP6 DUP8 DUP6 PUSH2 0x16C JUMP JUMPDEST SWAP1 POP PUSH2 0x3CE JUMP JUMPDEST PUSH2 0x3CB DUP6 DUP6 DUP6 PUSH2 0x16C JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x411 JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x165 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x41D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x1 DUP8 NOT DUP2 ADD DUP9 AND SWAP8 DUP9 SWAP1 DIV PUSH1 0x3 DUP2 MUL DUP4 XOR DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL DUP1 DUP3 MUL DUP5 SUB MUL SWAP1 DUP2 MUL SWAP1 SWAP3 SUB SWAP1 SWAP2 MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x49C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x49C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x49C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4ED DUP5 PUSH2 0x4B8 JUMP JUMPDEST SWAP3 POP PUSH2 0x4FB PUSH1 0x20 DUP6 ADD PUSH2 0x4B8 JUMP JUMPDEST SWAP2 POP PUSH2 0x509 PUSH1 0x40 DUP6 ADD PUSH2 0x4A1 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x528 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x531 DUP6 PUSH2 0x4B8 JUMP JUMPDEST SWAP4 POP PUSH2 0x53F PUSH1 0x20 DUP7 ADD PUSH2 0x4B8 JUMP JUMPDEST SWAP3 POP PUSH2 0x54D PUSH1 0x40 DUP7 ADD PUSH2 0x4B8 JUMP JUMPDEST SWAP2 POP PUSH2 0x55B PUSH1 0x60 DUP7 ADD PUSH2 0x4A1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x57E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x587 DUP7 PUSH2 0x4B8 JUMP JUMPDEST SWAP5 POP PUSH2 0x595 PUSH1 0x20 DUP8 ADD PUSH2 0x4B8 JUMP JUMPDEST SWAP4 POP PUSH2 0x5A3 PUSH1 0x40 DUP8 ADD PUSH2 0x4B8 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5D9 DUP5 PUSH2 0x4B8 JUMP JUMPDEST SWAP3 POP PUSH2 0x5E7 PUSH1 0x20 DUP6 ADD PUSH2 0x4B8 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x614 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x647 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALL SWAP16 PUSH11 0x3A34B916F995200F5FE177 CREATE2 0xB5 0xC9 BYTE 0xFC CALLDATASIZE SWAP15 DUP8 PUSH10 0xE4DCE272CDAC8A22D664 PUSH20 0x6F6C634300080700330000000000000000000000 ",
              "sourceMap": "303:3278:51:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;897:357;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2097:32:84;;;2079:51;;2067:2;2052:18;897:357:51;;;;;;;;2491:349;;;;;;:::i;:::-;;:::i;:::-;;;2287:25:84;;;2275:2;2260:18;2491:349:51;2141:177:84;1258:827:51;;;;;;:::i;:::-;;:::i;448:445::-;;;;;;:::i;:::-;;:::i;2089:398::-;;;;;;:::i;:::-;;:::i;2844:735::-;;;;;;:::i;:::-;;:::i;:::-;;;;2497:25:84;;;2553:2;2538:18;;2531:34;;;;2470:18;2844:735:51;2323:248:84;897:357:51;1029:17;1074:13;-1:-1:-1;;;;;1058:29:51;:13;-1:-1:-1;;;;;1058:29:51;;1054:98;;;1123:13;;1138;1054:98;1165:84;1175:73;1191:7;-1:-1:-1;;;1218:29:51;1234:13;1218;:29;:::i;:::-;-1:-1:-1;;;;;1175:73:51;:15;:73::i;:::-;1165:9;:84::i;:::-;1158:91;;897:357;;;;;;:::o;2491:349::-;2625:15;2668:13;-1:-1:-1;;;;;2652:29:51;:13;-1:-1:-1;;;;;2652:29:51;;2648:98;;;2717:13;;2732;2648:98;2760:75;-1:-1:-1;;;;;2760:75:51;;2787:29;2803:13;2787;:29;:::i;:::-;-1:-1:-1;;;;;2760:75:51;-1:-1:-1;;;2760:15:51;:75::i;1258:827::-;1439:17;1484:13;-1:-1:-1;;;;;1468:29:51;:13;-1:-1:-1;;;;;1468:29:51;;1464:98;;;1533:13;;1548;1464:98;1589:13;-1:-1:-1;;;;;1573:29:51;:12;-1:-1:-1;;;;;1573:29:51;;1569:512;;1624:61;1647:13;1662;1677:7;1624:22;:61::i;:::-;1612:73;;1569:512;;;1717:13;-1:-1:-1;;;;;1702:28:51;:12;-1:-1:-1;;;;;1702:28:51;;1698:383;;;1740:18;1761:60;1784:12;1798:13;1813:7;1761:22;:60::i;:::-;1740:81;;1829:18;1850:60;1873:13;1888:12;1902:7;1850:22;:60::i;:::-;1829:81;;1944:10;-1:-1:-1;;;;;1931:23:51;:10;-1:-1:-1;;;;;1931:23:51;;:49;;1970:10;1931:49;;;1957:10;1931:49;1919:61;;1732:255;;1698:383;;;2013:61;2036:13;2051;2066:7;2013:22;:61::i;:::-;2001:73;;1698:383;1258:827;;;;;;;:::o;448:445::-;580:17;625:13;-1:-1:-1;;;;;609:29:51;:13;-1:-1:-1;;;;;609:29:51;;605:98;;;674:13;;689;605:98;709:20;732:63;748:13;-1:-1:-1;;;;;732:63:51;763:13;-1:-1:-1;;;;;732:63:51;-1:-1:-1;;;732:15:51;:63::i;:::-;709:86;-1:-1:-1;808:80:51;818:69;834:7;709:86;857:29;873:13;857;:29;:::i;2089:398::-;2223:15;2266:13;-1:-1:-1;;;;;2250:29:51;:13;-1:-1:-1;;;;;2250:29:51;;2246:98;;;2315:13;;2330;2246:98;-1:-1:-1;;;;;2358:124:51;;:108;-1:-1:-1;;;;;;;161:2:22;2374:45:51;;;;2421:29;2469:13;2421;:29;:::i;:::-;-1:-1:-1;;;;;2358:108:51;2452:13;-1:-1:-1;;;;;2358:108:51;:15;:108::i;:::-;:124;;;;:::i;2844:735::-;3006:15;3023;3066:13;-1:-1:-1;;;;;3050:29:51;:13;-1:-1:-1;;;;;3050:29:51;;3046:98;;;3115:13;;3130;3046:98;3171:13;-1:-1:-1;;;;;3155:29:51;:12;-1:-1:-1;;;;;3155:29:51;;3151:424;;3204:63;3227:13;3242;3257:9;3204:22;:63::i;:::-;3194:73;;3151:424;;;3299:13;-1:-1:-1;;;;;3284:28:51;:12;-1:-1:-1;;;;;3284:28:51;;3280:295;;;3332:62;3355:12;3369:13;3384:9;3332:22;:62::i;:::-;3322:72;;3412:62;3435:13;3450:12;3464:9;3412:22;:62::i;:::-;3402:72;;3280:295;;;3505:63;3528:13;3543;3558:9;3505:22;:63::i;:::-;3495:73;;3280:295;2844:735;;;;;;;:::o;735:3600:23:-;833:14;;;-1:-1:-1;;1336:1:23;1333;1326:20;1371:1;1368;1364:9;1355:18;;1418:5;1414:2;1411:13;1403:5;1399:2;1395:14;1391:34;1382:43;;;1501:5;1510:1;1501:10;1497:155;;;1545:1;1531:11;:15;1523:24;;;;;;-1:-1:-1;1588:23:23;;;;-1:-1:-1;1630:13:23;;1497:155;1773:5;1759:11;:19;1751:28;;;;;;2044:17;2114:11;2111:1;2108;2101:25;3338:1;2473;2458:12;;:16;;2457:32;;2575:22;;;;3319:1;:15;;3318:21;;3557:17;;;3553:21;;3546:28;3613:17;;;3609:21;;3602:28;3670:17;;;3666:21;;3659:28;3727:17;;;3723:21;;3716:28;3784:17;;;3780:21;;3773:28;3842:17;;;3838:21;;;3831:28;;;2442:12;2923;;;2919:23;;;2915:31;;;2233:20;;;2222:32;;;2970:12;;;;2272:21;;2693:16;;;;2961:21;;;;4292:11;;;-1:-1:-1;;;;735:3600:23:o;340:104:51:-;437:1;-1:-1:-1;;;;;417:21:51;;;;409:30;;;;;;340:104;;;:::o;14:173:84:-;82:20;;-1:-1:-1;;;;;131:31:84;;121:42;;111:70;;177:1;174;167:12;192:173;260:20;;-1:-1:-1;;;;;309:31:84;;299:42;;289:70;;355:1;352;345:12;370:334;447:6;455;463;516:2;504:9;495:7;491:23;487:32;484:52;;;532:1;529;522:12;484:52;555:29;574:9;555:29;:::i;:::-;545:39;;603:38;637:2;626:9;622:18;603:38;:::i;:::-;593:48;;660:38;694:2;683:9;679:18;660:38;:::i;:::-;650:48;;370:334;;;;;:::o;709:409::-;795:6;803;811;819;872:3;860:9;851:7;847:23;843:33;840:53;;;889:1;886;879:12;840:53;912:29;931:9;912:29;:::i;:::-;902:39;;960:38;994:2;983:9;979:18;960:38;:::i;:::-;950:48;;1017:38;1051:2;1040:9;1036:18;1017:38;:::i;:::-;1007:48;;1074:38;1108:2;1097:9;1093:18;1074:38;:::i;:::-;1064:48;;709:409;;;;;;;:::o;1123:472::-;1218:6;1226;1234;1242;1250;1303:3;1291:9;1282:7;1278:23;1274:33;1271:53;;;1320:1;1317;1310:12;1271:53;1343:29;1362:9;1343:29;:::i;:::-;1333:39;;1391:38;1425:2;1414:9;1410:18;1391:38;:::i;:::-;1381:48;;1448:38;1482:2;1471:9;1467:18;1448:38;:::i;:::-;1123:472;;;;-1:-1:-1;1438:48:84;;1533:2;1518:18;;1505:32;;-1:-1:-1;1584:3:84;1569:19;1556:33;;1123:472;-1:-1:-1;;1123:472:84:o;1600:328::-;1677:6;1685;1693;1746:2;1734:9;1725:7;1721:23;1717:32;1714:52;;;1762:1;1759;1752:12;1714:52;1785:29;1804:9;1785:29;:::i;:::-;1775:39;;1833:38;1867:2;1856:9;1852:18;1833:38;:::i;:::-;1823:48;;1918:2;1907:9;1903:18;1890:32;1880:42;;1600:328;;;;;:::o;2576:217::-;2616:1;2642;2632:132;;2686:10;2681:3;2677:20;2674:1;2667:31;2721:4;2718:1;2711:15;2749:4;2746:1;2739:15;2632:132;-1:-1:-1;2778:9:84;;2576:217::o;2798:328::-;2838:4;-1:-1:-1;;;;;2936:10:84;;;;2906;;2958:12;;;2955:135;;;3012:10;3007:3;3003:20;3000:1;2993:31;3047:4;3044:1;3037:15;3075:4;3072:1;3065:15;2955:135;3107:13;;2798:328;-1:-1:-1;;;2798:328:84:o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "333800",
                "executionCost": "374",
                "totalCost": "334174"
              },
              "external": {
                "getAmount0ForLiquidity(uint160,uint160,uint128)": "infinite",
                "getAmount1ForLiquidity(uint160,uint160,uint128)": "infinite",
                "getAmountsForLiquidity(uint160,uint160,uint160,uint128)": "infinite",
                "getLiquidityForAmount0(uint160,uint160,uint256)": "infinite",
                "getLiquidityForAmount1(uint160,uint160,uint256)": "infinite",
                "getLiquidityForAmounts(uint160,uint160,uint160,uint256,uint256)": "infinite"
              },
              "internal": {
                "toUint128(uint256)": "61"
              }
            },
            "methodIdentifiers": {
              "getAmount0ForLiquidity(uint160,uint160,uint128)": "6ac69a8e",
              "getAmount1ForLiquidity(uint160,uint160,uint128)": "29e24cb7",
              "getAmountsForLiquidity(uint160,uint160,uint160,uint128)": "c72e160b",
              "getLiquidityForAmount0(uint160,uint160,uint256)": "67df6e89",
              "getLiquidityForAmount1(uint160,uint160,uint256)": "08c0f795",
              "getLiquidityForAmounts(uint160,uint160,uint160,uint256,uint256)": "6098fd4a"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtRatioAX96\",\"type\":\"uint160\"},{\"internalType\":\"uint160\",\"name\":\"sqrtRatioBX96\",\"type\":\"uint160\"},{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"}],\"name\":\"getAmount0ForLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtRatioAX96\",\"type\":\"uint160\"},{\"internalType\":\"uint160\",\"name\":\"sqrtRatioBX96\",\"type\":\"uint160\"},{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"}],\"name\":\"getAmount1ForLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtRatioX96\",\"type\":\"uint160\"},{\"internalType\":\"uint160\",\"name\":\"sqrtRatioAX96\",\"type\":\"uint160\"},{\"internalType\":\"uint160\",\"name\":\"sqrtRatioBX96\",\"type\":\"uint160\"},{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"}],\"name\":\"getAmountsForLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtRatioAX96\",\"type\":\"uint160\"},{\"internalType\":\"uint160\",\"name\":\"sqrtRatioBX96\",\"type\":\"uint160\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"}],\"name\":\"getLiquidityForAmount0\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtRatioAX96\",\"type\":\"uint160\"},{\"internalType\":\"uint160\",\"name\":\"sqrtRatioBX96\",\"type\":\"uint160\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"getLiquidityForAmount1\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtRatioX96\",\"type\":\"uint160\"},{\"internalType\":\"uint160\",\"name\":\"sqrtRatioAX96\",\"type\":\"uint160\"},{\"internalType\":\"uint160\",\"name\":\"sqrtRatioBX96\",\"type\":\"uint160\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"getLiquidityForAmounts\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Made this library into a contract to be able to calculate liquidity more precisely for tests\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/libraries/LiquidityAmountsForTest.sol\":\"LiquidityAmountsForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/contracts/libraries/FixedPoint96.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nlibrary FixedPoint96 {\\n  // solhint-disable\\n  uint8 internal constant RESOLUTION = 96;\\n  uint256 internal constant Q96 = 0x1000000000000000000000000;\\n}\\n\",\"keccak256\":\"0x32a5c51474a7a83b902ffd6f54f8407e2b98d1142c9b06914fb75d50dd9c573c\",\"license\":\"GPL-2.0-or-later\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/for-test/libraries/LiquidityAmountsForTest.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../contracts/libraries/FullMath.sol';\\nimport '../../contracts/libraries/FixedPoint96.sol';\\n\\n/// @dev Made this library into a contract to be able to calculate liquidity more precisely for tests\\n\\n// solhint-disable\\ncontract LiquidityAmountsForTest {\\n  function toUint128(uint256 x) private pure returns (uint128 y) {\\n    require((y = uint128(x)) == x);\\n  }\\n\\n  function getLiquidityForAmount0(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount0\\n  ) public pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n    uint256 intermediate = FullMath.mulDiv(sqrtRatioAX96, sqrtRatioBX96, FixedPoint96.Q96);\\n    return toUint128(FullMath.mulDiv(amount0, intermediate, sqrtRatioBX96 - sqrtRatioAX96));\\n  }\\n\\n  function getLiquidityForAmount1(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount1\\n  ) public pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n    return toUint128(FullMath.mulDiv(amount1, FixedPoint96.Q96, sqrtRatioBX96 - sqrtRatioAX96));\\n  }\\n\\n  function getLiquidityForAmounts(\\n    uint160 sqrtRatioX96,\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint256 amount0,\\n    uint256 amount1\\n  ) external pure returns (uint128 liquidity) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\\n      liquidity = getLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amount0);\\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\\n      uint128 liquidity0 = getLiquidityForAmount0(sqrtRatioX96, sqrtRatioBX96, amount0);\\n      uint128 liquidity1 = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioX96, amount1);\\n\\n      liquidity = liquidity0 < liquidity1 ? liquidity0 : liquidity1;\\n    } else {\\n      liquidity = getLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1);\\n    }\\n  }\\n\\n  function getAmount0ForLiquidity(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) public pure returns (uint256 amount0) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    return FullMath.mulDiv(uint256(liquidity) << FixedPoint96.RESOLUTION, sqrtRatioBX96 - sqrtRatioAX96, sqrtRatioBX96) / sqrtRatioAX96;\\n  }\\n\\n  function getAmount1ForLiquidity(\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) public pure returns (uint256 amount1) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    return FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96);\\n  }\\n\\n  function getAmountsForLiquidity(\\n    uint160 sqrtRatioX96,\\n    uint160 sqrtRatioAX96,\\n    uint160 sqrtRatioBX96,\\n    uint128 liquidity\\n  ) external pure returns (uint256 amount0, uint256 amount1) {\\n    if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\\n\\n    if (sqrtRatioX96 <= sqrtRatioAX96) {\\n      amount0 = getAmount0ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\\n    } else if (sqrtRatioX96 < sqrtRatioBX96) {\\n      amount0 = getAmount0ForLiquidity(sqrtRatioX96, sqrtRatioBX96, liquidity);\\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioX96, liquidity);\\n    } else {\\n      amount1 = getAmount1ForLiquidity(sqrtRatioAX96, sqrtRatioBX96, liquidity);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x0e08b6fce058794327e487030617c4eea3d3348f511d8bc63f4e7a80a2290b98\",\"license\":\"GPL-2.0-or-later\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/DustCollectorForTest.sol": {
        "DustCollectorForTest": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                }
              ],
              "name": "DustSent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                }
              ],
              "name": "sendDust",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "sendDust(address,uint256,address)": {
                "params": {
                  "_amount": "The amount of the token that will be transferred",
                  "_to": "The address that will receive the idle funds",
                  "_token": "The token that will be transferred"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_10355": {
                  "entryPoint": null,
                  "id": 10355,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50338061002f5760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b039092166001600160a01b03199092169190911790556106f18061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063238efcbc1461005c5780635aa6e67514610066578063966abd001461008f578063ab033ea9146100a2578063f39c38a0146100b5575b600080fd5b6100646100c8565b005b600054610079906001600160a01b031681565b6040516100869190610644565b60405180910390f35b61006461009d3660046105ca565b610154565b6100646100b03660046105af565b61026a565b600154610079906001600160a01b031681565b6001546001600160a01b031633146100f357604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161014a91610644565b60405180910390a1565b6000546001600160a01b0316331461017f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166101a65760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610207576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610201573d6000803e3d6000fd5b5061021b565b61021b6001600160a01b03841682846102eb565b604080516001600160a01b0385811682526020820185905283168183015290517f9a3055ded8c8b5f21bbf4946c5afab6e1fa8b3f057922658e5e1ade125fb0b1e9181900360600190a1505050565b6000546001600160a01b03163314610295576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906102e0908390610644565b60405180910390a150565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261033d908490610342565b505050565b6000610397826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166104199092919063ffffffff16565b80519091501561033d57808060200190518101906103b59190610606565b61033d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084015b60405180910390fd5b60606104288484600085610432565b90505b9392505050565b6060824710156104935760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b843b6104e15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b031685876040516104fd9190610628565b60006040518083038185875af1925050503d806000811461053a576040519150601f19603f3d011682016040523d82523d6000602084013e61053f565b606091505b509150915061054f82828661055a565b979650505050505050565b6060831561056957508161042b565b8251156105795782518084602001fd5b8160405162461bcd60e51b81526004016104109190610658565b80356001600160a01b03811681146105aa57600080fd5b919050565b6000602082840312156105c157600080fd5b61042b82610593565b6000806000606084860312156105df57600080fd5b6105e884610593565b9250602084013591506105fd60408501610593565b90509250925092565b60006020828403121561061857600080fd5b8151801515811461042b57600080fd5b6000825161063a81846020870161068b565b9190910192915050565b6001600160a01b0391909116815260200190565b602081526000825180602084015261067781604085016020870161068b565b601f01601f19169190910160400192915050565b60005b838110156106a657818101518382015260200161068e565b838111156106b5576000848401525b5050505056fea2646970667358221220d33ffcbd6eae895620b8049ef0740d5097091a5789e159bd47204c67be46341164736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER DUP1 PUSH2 0x2F JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x6F1 DUP1 PUSH2 0x5F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x966ABD00 EQ PUSH2 0x8F JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0xB5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0xC8 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x79 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x86 SWAP2 SWAP1 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0x9D CALLDATASIZE PUSH1 0x4 PUSH2 0x5CA JUMP JUMPDEST PUSH2 0x154 JUMP JUMPDEST PUSH2 0x64 PUSH2 0xB0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5AF JUMP JUMPDEST PUSH2 0x26A JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x79 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xF3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x14A SWAP2 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x17F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x207 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 DUP4 ISZERO PUSH2 0x8FC MUL SWAP1 DUP5 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x201 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x21B JUMP JUMPDEST PUSH2 0x21B PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP3 DUP5 PUSH2 0x2EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP6 SWAP1 MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH32 0x9A3055DED8C8B5F21BBF4946C5AFAB6E1FA8B3F057922658E5E1ADE125FB0B1E SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x295 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x2E0 SWAP1 DUP4 SWAP1 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x33D SWAP1 DUP5 SWAP1 PUSH2 0x342 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x397 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x419 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x33D JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3B5 SWAP2 SWAP1 PUSH2 0x606 JUMP JUMPDEST PUSH2 0x33D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0x428 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x432 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x493 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x410 JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x4E1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x410 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x4FD SWAP2 SWAP1 PUSH2 0x628 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x53A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x53F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x54F DUP3 DUP3 DUP7 PUSH2 0x55A JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x569 JUMPI POP DUP2 PUSH2 0x42B JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x579 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x658 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x42B DUP3 PUSH2 0x593 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E8 DUP5 PUSH2 0x593 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x5FD PUSH1 0x40 DUP6 ADD PUSH2 0x593 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x42B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x63A DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x68B JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x677 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x68B JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6A6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x68E JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x6B5 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 EXTCODEHASH 0xFC 0xBD PUSH15 0xAE895620B8049EF0740D5097091A57 DUP10 0xE1 MSIZE 0xBD SELFBALANCE KECCAK256 0x4C PUSH8 0xBE46341164736F6C PUSH4 0x43000807 STOP CALLER ",
              "sourceMap": "122:108:52:-:0;;;173:55;;;;;;;;;-1:-1:-1;214:10:52;357:25:28;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;422:24:28;;;-1:-1:-1;;;;;;422:24:28;;;;;;;;;122:108:52;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_callOptionalReturn_911": {
                  "entryPoint": 834,
                  "id": 911,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 200,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@functionCallWithValue_1073": {
                  "entryPoint": 1074,
                  "id": 1073,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@functionCall_1003": {
                  "entryPoint": 1049,
                  "id": 1003,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@isContract_932": {
                  "entryPoint": null,
                  "id": 932,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@safeTransfer_719": {
                  "entryPoint": 747,
                  "id": 719,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@sendDust_5256": {
                  "entryPoint": 340,
                  "id": 5256,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 618,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@verifyCallResult_1208": {
                  "entryPoint": 1370,
                  "id": 1208,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_decode_address": {
                  "entryPoint": 1427,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 1455,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_uint256t_address": {
                  "entryPoint": 1482,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 1542,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 1576,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 1604,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 1624,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 1675,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:3968:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "111:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "262:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "308:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "317:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "320:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "310:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "310:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "310:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "292:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "279:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "275:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "272:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "333:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "362:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "333:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "228:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "239:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "251:6:84",
                            "type": ""
                          }
                        ],
                        "src": "192:186:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "487:224:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "533:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "542:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "545:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "535:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "535:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "535:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "508:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "517:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "504:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "504:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "529:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "500:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "500:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "497:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "558:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "587:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "568:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "568:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "558:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "606:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "633:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "644:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "629:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "629:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "616:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "616:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "606:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "657:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "690:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "701:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "686:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "686:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "667:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "667:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "657:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "437:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "448:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "460:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "468:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "476:6:84",
                            "type": ""
                          }
                        ],
                        "src": "383:328:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "794:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "840:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "849:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "852:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "842:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "842:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "842:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "815:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "824:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "811:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "811:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "836:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "807:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "807:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "804:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "865:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "884:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "878:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "878:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "869:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "947:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "956:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "959:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "949:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "949:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "949:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "916:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "937:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "930:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "930:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "923:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "923:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "913:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "913:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "906:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "906:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "903:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "972:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "982:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "972:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "760:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "771:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "783:6:84",
                            "type": ""
                          }
                        ],
                        "src": "716:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1135:137:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1145:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1165:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1159:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1159:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "1149:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1207:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1215:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1203:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1203:17:84"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "1222:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1227:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1181:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1181:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1181:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1243:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "1254:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1259:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1250:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1250:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "1243:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "1111:3:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1116:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "1127:3:84",
                            "type": ""
                          }
                        ],
                        "src": "998:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1378:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1388:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1400:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1411:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1396:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1396:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1388:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1430:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1445:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1461:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1466:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1457:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1457:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1470:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1453:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1453:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1441:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1441:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1423:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1423:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1423:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1347:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1358:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1369:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1277:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1614:145:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1624:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1636:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1647:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1632:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1632:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1624:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1666:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1681:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1697:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1702:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1693:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1693:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1706:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1689:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1689:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1677:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1677:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1659:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1659:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1659:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1730:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1741:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1726:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1726:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1746:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1719:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1719:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1719:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1575:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1586:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1594:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1605:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1485:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1921:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1931:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1943:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1954:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1939:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1939:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1931:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1966:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1984:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1989:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1980:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1980:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1993:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "1976:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1976:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1970:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2011:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2026:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2034:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2022:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2022:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2004:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2004:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2004:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2058:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2069:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2054:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2054:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2074:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2047:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2047:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2047:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2101:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2112:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2097:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2097:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2121:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2129:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2117:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2117:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2090:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2090:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2090:43:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1874:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1885:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1893:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1901:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1912:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1764:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2265:262:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2282:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2293:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2275:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2275:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2275:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2305:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2325:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2319:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2319:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "2309:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2352:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2363:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2348:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2348:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2368:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2341:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2341:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2341:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2410:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2418:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2406:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2406:15:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2427:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2438:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2423:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2423:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2443:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2384:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2384:66:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2384:66:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2459:62:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2475:9:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "2494:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2502:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "2490:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2490:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2511:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "2507:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2507:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "2486:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2486:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2471:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2471:45:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2518:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2467:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2467:54:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2459:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2234:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2245:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2256:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2144:383:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2706:228:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2723:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2734:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2716:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2716:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2716:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2757:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2768:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2753:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2753:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2773:2:84",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2746:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2746:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2746:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2796:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2807:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2792:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2792:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2812:34:84",
                                    "type": "",
                                    "value": "Address: insufficient balance fo"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2785:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2785:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2785:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2867:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2878:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2863:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2863:18:84"
                                  },
                                  {
                                    "hexValue": "722063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "2883:8:84",
                                    "type": "",
                                    "value": "r call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2856:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2856:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2856:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2901:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2913:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2924:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2909:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2909:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2901:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2683:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2697:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2532:402:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3113:179:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3130:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3141:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3123:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3123:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3123:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3164:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3175:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3160:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3160:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3180:2:84",
                                    "type": "",
                                    "value": "29"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3153:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3153:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3153:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3203:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3214:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3199:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3199:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3219:31:84",
                                    "type": "",
                                    "value": "Address: call to non-contract"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3192:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3192:59:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3192:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3260:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3272:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3283:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3268:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3268:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3260:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3090:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3104:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2939:353:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3471:232:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3488:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3499:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3481:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3481:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3481:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3522:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3533:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3518:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3518:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3538:2:84",
                                    "type": "",
                                    "value": "42"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3511:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3511:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3511:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3561:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3572:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3557:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3557:18:84"
                                  },
                                  {
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3577:34:84",
                                    "type": "",
                                    "value": "SafeERC20: ERC20 operation did n"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3550:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3550:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3550:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3632:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3643:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3628:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3628:18:84"
                                  },
                                  {
                                    "hexValue": "6f742073756363656564",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "3648:12:84",
                                    "type": "",
                                    "value": "ot succeed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3621:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3621:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3621:40:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3670:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3682:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3693:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3678:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3678:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3670:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3448:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3462:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3297:406:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3761:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3771:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3780:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "3775:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3840:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "3865:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "3870:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "3861:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3861:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3884:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3889:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "3880:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "3880:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "3874:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3874:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3854:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3854:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3854:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "3801:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3804:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3798:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3798:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "3812:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3814:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "3823:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3826:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3819:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3819:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "3814:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "3794:3:84",
                                "statements": []
                              },
                              "src": "3790:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3929:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "3942:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "3947:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "3938:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3938:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3956:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3931:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3931:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3931:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "3918:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3921:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3915:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3915:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3912:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "3739:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "3744:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "3749:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3708:258:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100575760003560e01c8063238efcbc1461005c5780635aa6e67514610066578063966abd001461008f578063ab033ea9146100a2578063f39c38a0146100b5575b600080fd5b6100646100c8565b005b600054610079906001600160a01b031681565b6040516100869190610644565b60405180910390f35b61006461009d3660046105ca565b610154565b6100646100b03660046105af565b61026a565b600154610079906001600160a01b031681565b6001546001600160a01b031633146100f357604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161014a91610644565b60405180910390a1565b6000546001600160a01b0316331461017f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166101a65760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610207576040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610201573d6000803e3d6000fd5b5061021b565b61021b6001600160a01b03841682846102eb565b604080516001600160a01b0385811682526020820185905283168183015290517f9a3055ded8c8b5f21bbf4946c5afab6e1fa8b3f057922658e5e1ade125fb0b1e9181900360600190a1505050565b6000546001600160a01b03163314610295576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906102e0908390610644565b60405180910390a150565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261033d908490610342565b505050565b6000610397826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166104199092919063ffffffff16565b80519091501561033d57808060200190518101906103b59190610606565b61033d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084015b60405180910390fd5b60606104288484600085610432565b90505b9392505050565b6060824710156104935760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b843b6104e15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b031685876040516104fd9190610628565b60006040518083038185875af1925050503d806000811461053a576040519150601f19603f3d011682016040523d82523d6000602084013e61053f565b606091505b509150915061054f82828661055a565b979650505050505050565b6060831561056957508161042b565b8251156105795782518084602001fd5b8160405162461bcd60e51b81526004016104109190610658565b80356001600160a01b03811681146105aa57600080fd5b919050565b6000602082840312156105c157600080fd5b61042b82610593565b6000806000606084860312156105df57600080fd5b6105e884610593565b9250602084013591506105fd60408501610593565b90509250925092565b60006020828403121561061857600080fd5b8151801515811461042b57600080fd5b6000825161063a81846020870161068b565b9190910192915050565b6001600160a01b0391909116815260200190565b602081526000825180602084015261067781604085016020870161068b565b601f01601f19169190910160400192915050565b60005b838110156106a657818101518382015260200161068e565b838111156106b5576000848401525b5050505056fea2646970667358221220d33ffcbd6eae895620b8049ef0740d5097091a5789e159bd47204c67be46341164736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x966ABD00 EQ PUSH2 0x8F JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0xB5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0xC8 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x79 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x86 SWAP2 SWAP1 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0x9D CALLDATASIZE PUSH1 0x4 PUSH2 0x5CA JUMP JUMPDEST PUSH2 0x154 JUMP JUMPDEST PUSH2 0x64 PUSH2 0xB0 CALLDATASIZE PUSH1 0x4 PUSH2 0x5AF JUMP JUMPDEST PUSH2 0x26A JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x79 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xF3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x14A SWAP2 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x17F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x207 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 DUP4 ISZERO PUSH2 0x8FC MUL SWAP1 DUP5 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x201 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x21B JUMP JUMPDEST PUSH2 0x21B PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP3 DUP5 PUSH2 0x2EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP6 SWAP1 MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH32 0x9A3055DED8C8B5F21BBF4946C5AFAB6E1FA8B3F057922658E5E1ADE125FB0B1E SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x295 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x2E0 SWAP1 DUP4 SWAP1 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x33D SWAP1 DUP5 SWAP1 PUSH2 0x342 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x397 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x419 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x33D JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3B5 SWAP2 SWAP1 PUSH2 0x606 JUMP JUMPDEST PUSH2 0x33D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0x428 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x432 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x493 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x410 JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x4E1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x410 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x4FD SWAP2 SWAP1 PUSH2 0x628 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x53A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x53F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x54F DUP3 DUP3 DUP7 PUSH2 0x55A JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x569 JUMPI POP DUP2 PUSH2 0x42B JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x579 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x410 SWAP2 SWAP1 PUSH2 0x658 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x42B DUP3 PUSH2 0x593 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E8 DUP5 PUSH2 0x593 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x5FD PUSH1 0x40 DUP6 ADD PUSH2 0x593 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x42B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x63A DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x68B JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x677 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x68B JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6A6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x68E JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x6B5 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 EXTCODEHASH 0xFC 0xBD PUSH15 0xAE895620B8049EF0740D5097091A57 DUP10 0xE1 MSIZE 0xBD SELFBALANCE KECCAK256 0x4C PUSH8 0xBE46341164736F6C PUSH4 0x43000807 STOP CALLER ",
              "sourceMap": "122:108:52:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;:::-;;199:34;;;;;-1:-1:-1;;;;;199:34:28;;;;;;;;;;:::i;:::-;;;;;;;;486:348:27;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;268:41::-;;;;;-1:-1:-1;;;;;268:41:28;;;680:175;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;::::1;754:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;486:348:27:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;609:17:27;::::1;605:43;;635:13;;-1:-1:-1::0;;;635:13:27::1;;;;;;;;;;;605:43;-1:-1:-1::0;;;;;658:22:27;::::1;439:42;658:22;654:135;;;690:30;::::0;-1:-1:-1;;;;;690:21:27;::::1;::::0;:30;::::1;;;::::0;712:7;;690:30:::1;::::0;;;712:7;690:21;:30;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;654:135;;;741:41;-1:-1:-1::0;;;;;741:27:27;::::1;769:3:::0;774:7;741:27:::1;:41::i;:::-;799:30;::::0;;-1:-1:-1;;;;;2022:15:84;;;2004:34;;2069:2;2054:18;;2047:34;;;2117:15;;2097:18;;;2090:43;799:30:27;;::::1;::::0;;;;1954:2:84;799:30:27;;::::1;486:348:::0;;;:::o;485:161:28:-;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;:::-;;;;;;;;485:161:::0;:::o;634:205:4:-;773:58;;;-1:-1:-1;;;;;1677:32:84;;773:58:4;;;1659:51:84;1726:18;;;;1719:34;;;773:58:4;;;;;;;;;;1632:18:84;;;;773:58:4;;;;;;;;-1:-1:-1;;;;;773:58:4;-1:-1:-1;;;773:58:4;;;746:86;;766:5;;746:19;:86::i;:::-;634:205;;;:::o;3140:706::-;3559:23;3585:69;3613:4;3585:69;;;;;;;;;;;;;;;;;3593:5;-1:-1:-1;;;;;3585:27:4;;;:69;;;;;:::i;:::-;3668:17;;3559:95;;-1:-1:-1;3668:21:4;3664:176;;3763:10;3752:30;;;;;;;;;;;;:::i;:::-;3744:85;;;;-1:-1:-1;;;3744:85:4;;3499:2:84;3744:85:4;;;3481:21:84;3538:2;3518:18;;;3511:30;3577:34;3557:18;;;3550:62;-1:-1:-1;;;3628:18:84;;;3621:40;3678:19;;3744:85:4;;;;;;;;3461:223:5;3594:12;3625:52;3647:6;3655:4;3661:1;3664:12;3625:21;:52::i;:::-;3618:59;;3461:223;;;;;;:::o;4548:499::-;4713:12;4770:5;4745:21;:30;;4737:81;;;;-1:-1:-1;;;4737:81:5;;2734:2:84;4737:81:5;;;2716:21:84;2773:2;2753:18;;;2746:30;2812:34;2792:18;;;2785:62;-1:-1:-1;;;2863:18:84;;;2856:36;2909:19;;4737:81:5;2532:402:84;4737:81:5;1034:20;;4828:60;;;;-1:-1:-1;;;4828:60:5;;3141:2:84;4828:60:5;;;3123:21:84;3180:2;3160:18;;;3153:30;3219:31;3199:18;;;3192:59;3268:18;;4828:60:5;2939:353:84;4828:60:5;4900:12;4914:23;4941:6;-1:-1:-1;;;;;4941:11:5;4960:5;4967:4;4941:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4899:73;;;;4989:51;5006:7;5015:10;5027:12;4989:16;:51::i;:::-;4982:58;4548:499;-1:-1:-1;;;;;;;4548:499:5:o;7161:692::-;7307:12;7335:7;7331:516;;;-1:-1:-1;7365:10:5;7358:17;;7331:516;7476:17;;:21;7472:365;;7670:10;7664:17;7730:15;7717:10;7713:2;7709:19;7702:44;7472:365;7809:12;7802:20;;-1:-1:-1;;;7802:20:5;;;;;;;;:::i;14:173:84:-;82:20;;-1:-1:-1;;;;;131:31:84;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:328::-;460:6;468;476;529:2;517:9;508:7;504:23;500:32;497:52;;;545:1;542;535:12;497:52;568:29;587:9;568:29;:::i;:::-;558:39;;644:2;633:9;629:18;616:32;606:42;;667:38;701:2;690:9;686:18;667:38;:::i;:::-;657:48;;383:328;;;;;:::o;716:277::-;783:6;836:2;824:9;815:7;811:23;807:32;804:52;;;852:1;849;842:12;804:52;884:9;878:16;937:5;930:13;923:21;916:5;913:32;903:60;;959:1;956;949:12;998:274;1127:3;1165:6;1159:13;1181:53;1227:6;1222:3;1215:4;1207:6;1203:17;1181:53;:::i;:::-;1250:16;;;;;998:274;-1:-1:-1;;998:274:84:o;1277:203::-;-1:-1:-1;;;;;1441:32:84;;;;1423:51;;1411:2;1396:18;;1277:203::o;2144:383::-;2293:2;2282:9;2275:21;2256:4;2325:6;2319:13;2368:6;2363:2;2352:9;2348:18;2341:34;2384:66;2443:6;2438:2;2427:9;2423:18;2418:2;2410:6;2406:15;2384:66;:::i;:::-;2511:2;2490:15;-1:-1:-1;;2486:29:84;2471:45;;;;2518:2;2467:54;;2144:383;-1:-1:-1;;2144:383:84:o;3708:258::-;3780:1;3790:113;3804:6;3801:1;3798:13;3790:113;;;3880:11;;;3874:18;3861:11;;;3854:39;3826:2;3819:10;3790:113;;;3921:6;3918:1;3915:13;3912:48;;;3956:1;3947:6;3942:3;3938:16;3931:27;3912:48;;3708:258;;;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "355400",
                "executionCost": "24684",
                "totalCost": "380084"
              },
              "external": {
                "acceptGovernance()": "51860",
                "governance()": "2361",
                "pendingGovernance()": "2427",
                "sendDust(address,uint256,address)": "infinite",
                "setGovernance(address)": "27859"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "governance()": "5aa6e675",
              "pendingGovernance()": "f39c38a0",
              "sendDust(address,uint256,address)": "966abd00",
              "setGovernance(address)": "ab033ea9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"DustSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"sendDust\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"sendDust(address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of the token that will be transferred\",\"_to\":\"The address that will receive the idle funds\",\"_token\":\"The token that will be transferred\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"DustSent(address,uint256,address)\":{\"notice\":\"Emitted when dust is sent\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"sendDust(address,uint256,address)\":{\"notice\":\"Allows an authorized user to transfer the tokens or eth that may have been left in a contract\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/DustCollectorForTest.sol\":\"DustCollectorForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/DustCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '../../contracts/peripherals/Governable.sol';\\nimport '../../interfaces/peripherals/IDustCollector.sol';\\n\\nabstract contract DustCollector is IDustCollector, Governable {\\n  using SafeERC20 for IERC20;\\n\\n  address internal constant _ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n  function sendDust(\\n    address _token,\\n    uint256 _amount,\\n    address _to\\n  ) external override onlyGovernance {\\n    if (_to == address(0)) revert ZeroAddress();\\n    if (_token == _ETH_ADDRESS) {\\n      payable(_to).transfer(_amount);\\n    } else {\\n      IERC20(_token).safeTransfer(_to, _amount);\\n    }\\n    emit DustSent(_token, _amount, _to);\\n  }\\n}\\n\",\"keccak256\":\"0x246ac2c4057520bb627ea8040367549786f4477a04fd79358927cd607952bc2f\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/DustCollectorForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../contracts/peripherals/DustCollector.sol';\\n\\ncontract DustCollectorForTest is DustCollector {\\n  constructor() DustCollector() Governable(msg.sender) {}\\n}\\n\",\"keccak256\":\"0x4ccef4628067e6a70689ecc26dfcc1388807aebe1019865dc6b30eb0adc114d0\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IDustCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\ninterface IDustCollector is IBaseErrors {\\n  /// @notice Emitted when dust is sent\\n  /// @param _token The token that will be transferred\\n  /// @param _amount The amount of the token that will be transferred\\n  /// @param _to The address which will receive the funds\\n  event DustSent(address _token, uint256 _amount, address _to);\\n\\n  /// @notice Allows an authorized user to transfer the tokens or eth that may have been left in a contract\\n  /// @param _token The token that will be transferred\\n  /// @param _amount The amount of the token that will be transferred\\n  /// @param _to The address that will receive the idle funds\\n  function sendDust(\\n    address _token,\\n    uint256 _amount,\\n    address _to\\n  ) external;\\n}\\n\",\"keccak256\":\"0x38dce228111f2a3c6b26ac09c5652c3f1f184c4cfe50d11ff0958ef6a50683bb\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5266,
                "contract": "solidity/for-test/peripherals/DustCollectorForTest.sol:DustCollectorForTest",
                "label": "governance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/peripherals/DustCollectorForTest.sol:DustCollectorForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              }
            }
          },
          "userdoc": {
            "errors": {
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "DustSent(address,uint256,address)": {
                "notice": "Emitted when dust is sent"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "sendDust(address,uint256,address)": {
                "notice": "Allows an authorized user to transfer the tokens or eth that may have been left in a contract"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/GovernableForTest.sol": {
        "GovernableForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governor",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_10370": {
                  "entryPoint": null,
                  "id": 10370,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 124,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:306:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "95:209:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "141:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "150:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "153:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "143:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "143:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "143:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "116:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "112:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "112:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "137:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "108:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "108:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "105:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "166:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "185:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "179:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "179:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "170:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "258:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "267:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "270:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "260:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "260:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "260:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "217:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "228:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "243:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "248:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "239:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "239:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "252:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "235:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "235:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "224:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "224:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "214:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "214:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "207:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "207:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "204:70:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "283:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "293:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "283:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "61:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "72:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "84:6:84",
                            "type": ""
                          }
                        ],
                        "src": "14:290:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506040516102ec3803806102ec83398101604081905261002f9161007c565b806001600160a01b0381166100565760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055506100ac565b60006020828403121561008e57600080fd5b81516001600160a01b03811681146100a557600080fd5b9392505050565b610231806100bb6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063238efcbc146100515780635aa6e6751461005b578063ab033ea914610084578063f39c38a014610097575b600080fd5b6100596100aa565b005b60005461006e906001600160a01b031681565b60405161007b91906101e7565b60405180910390f35b6100596100923660046101b7565b610136565b60015461006e906001600160a01b031681565b6001546001600160a01b031633146100d557604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161012c916101e7565b60405180910390a1565b6000546001600160a01b03163314610161576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906101ac9083906101e7565b60405180910390a150565b6000602082840312156101c957600080fd5b81356001600160a01b03811681146101e057600080fd5b9392505050565b6001600160a01b039190911681526020019056fea26469706673582212200df1ad41c1d0f02e479f61ddb0f48f23dbd00c455969bdc2f4484c5e68f3fa3f64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x2EC CODESIZE SUB DUP1 PUSH2 0x2EC DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x7C JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x56 JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH2 0xAC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x231 DUP1 PUSH2 0xBB PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x84 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x97 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0xAA JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x6E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7B SWAP2 SWAP1 PUSH2 0x1E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x59 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B7 JUMP JUMPDEST PUSH2 0x136 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x6E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x12C SWAP2 PUSH2 0x1E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x161 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x1AC SWAP1 DUP4 SWAP1 PUSH2 0x1E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD CALL 0xAD COINBASE 0xC1 0xD0 CREATE 0x2E SELFBALANCE SWAP16 PUSH2 0xDDB0 DELEGATECALL DUP16 0x23 0xDB 0xD0 0xC GASLIMIT MSIZE PUSH10 0xBDC2F4484C5E68F3FA3F PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "119:102:53:-:0;;;164:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;206:9;-1:-1:-1;;;;;357:25:28;;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;-1:-1:-1;;;;;422:24:28;;;;;;;;;;-1:-1:-1;119:102:53;;14:290:84;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:84;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:84:o;:::-;119:102:53;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@acceptGovernance_5327": {
                  "entryPoint": 170,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 310,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 439,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 487,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:510:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "84:216:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "130:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "139:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "142:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "132:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "132:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "132:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "105:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "114:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "101:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "101:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "126:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "97:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "97:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "94:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "155:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "181:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "168:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "168:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "159:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "254:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "263:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "266:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "256:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "256:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "256:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "213:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "224:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "239:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "244:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "235:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "235:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "248:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "231:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "231:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "220:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "220:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "210:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "210:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "203:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "203:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "200:70:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "279:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "289:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "279:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "50:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "61:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "73:6:84",
                            "type": ""
                          }
                        ],
                        "src": "14:286:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "406:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "416:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "428:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "439:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "424:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "424:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "416:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "458:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "473:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "489:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "494:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "485:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "485:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "498:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "481:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "481:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "469:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "469:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "451:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "451:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "451:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "375:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "386:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "397:4:84",
                            "type": ""
                          }
                        ],
                        "src": "305:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c8063238efcbc146100515780635aa6e6751461005b578063ab033ea914610084578063f39c38a014610097575b600080fd5b6100596100aa565b005b60005461006e906001600160a01b031681565b60405161007b91906101e7565b60405180910390f35b6100596100923660046101b7565b610136565b60015461006e906001600160a01b031681565b6001546001600160a01b031633146100d557604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161012c916101e7565b60405180910390a1565b6000546001600160a01b03163314610161576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906101ac9083906101e7565b60405180910390a150565b6000602082840312156101c957600080fd5b81356001600160a01b03811681146101e057600080fd5b9392505050565b6001600160a01b039190911681526020019056fea26469706673582212200df1ad41c1d0f02e479f61ddb0f48f23dbd00c455969bdc2f4484c5e68f3fa3f64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x84 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x97 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0xAA JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x6E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7B SWAP2 SWAP1 PUSH2 0x1E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x59 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B7 JUMP JUMPDEST PUSH2 0x136 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x6E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x12C SWAP2 PUSH2 0x1E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x161 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x1AC SWAP1 DUP4 SWAP1 PUSH2 0x1E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD CALL 0xAD COINBASE 0xC1 0xD0 CREATE 0x2E SELFBALANCE SWAP16 PUSH2 0xDDB0 DELEGATECALL DUP16 0x23 0xDB 0xD0 0xC GASLIMIT MSIZE PUSH10 0xBDC2F4484C5E68F3FA3F PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "119:102:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;:::-;;199:34;;;;;-1:-1:-1;;;;;199:34:28;;;;;;;;;;:::i;:::-;;;;;;;;485:161;;;;;;:::i;:::-;;:::i;268:41::-;;;;;-1:-1:-1;;;;;268:41:28;;;680:175;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;::::1;754:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;485:161::-;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;:::-;;;;;;;;485:161:::0;:::o;14:286:84:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:84;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:84:o;305:203::-;-1:-1:-1;;;;;469:32:84;;;;451:51;;439:2;424:18;;305:203::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "112200",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "51860",
                "governance()": "2361",
                "pendingGovernance()": "2405",
                "setGovernance(address)": "27802"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "governance()": "5aa6e675",
              "pendingGovernance()": "f39c38a0",
              "setGovernance(address)": "ab033ea9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governor\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}]},\"events\":{\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/GovernableForTest.sol\":\"GovernableForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/GovernableForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../contracts/peripherals/Governable.sol';\\n\\ncontract GovernableForTest is Governable {\\n  constructor(address _governor) Governable(_governor) {}\\n}\\n\",\"keccak256\":\"0xc8b730504679963e78f31af1234479eef5a5b57aeb34fee5cb30ff1000dcd1c8\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5266,
                "contract": "solidity/for-test/peripherals/GovernableForTest.sol:GovernableForTest",
                "label": "governance",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/peripherals/GovernableForTest.sol:GovernableForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "1",
                "type": "t_address"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              }
            }
          },
          "userdoc": {
            "errors": {
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ]
            },
            "events": {
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol": {
        "Keep3rAccountanceForTest": {
          "abi": [
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "job",
                  "type": "address"
                }
              ],
              "name": "setJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "keeper",
                  "type": "address"
                }
              ],
              "name": "setKeeper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506104ac806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ba5760003560e01c806307b435c2146100bf57806315006b82146100fd578063168f92e7146101285780631b44555e1461015357806321040b0114610173578063748747e61461019e5780637c8fce23146101b35780638cb22b76146101c8578063951dc22c146101fb578063a39744b514610203578063a662031b1461022e578063b0103b1a14610241578063cd22af1b14610264578063e326ac431461028f575b600080fd5b6100ea6100cd3660046103f6565b600f60209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100ea61010b3660046103f6565b600d60209081526000928352604080842090915290825290205481565b6100ea6101363660046103f6565b600660209081526000928352604080842090915290825290205481565b6100ea6101613660046103db565b60026020526000908152604090205481565b6100ea6101813660046103f6565b601060209081526000928352604080842090915290825290205481565b6101b16101ac3660046103db565b6102af565b005b6101bb6102be565b6040516100f49190610429565b6101eb6101d63660046103db565b60116020526000908152604090205460ff1681565b60405190151581526020016100f4565b6101bb6102cf565b6100ea6102113660046103f6565b600560209081526000928352604080842090915290825290205481565b6101b161023c3660046103db565b6102db565b6101eb61024f3660046103db565b60046020526000908152604090205460ff1681565b6100ea6102723660046103f6565b600e60209081526000928352604080842090915290825290205481565b6100ea61029d3660046103db565b60036020526000908152604090205481565b6102ba6000826102e2565b5050565b60606102ca6012610300565b905090565b60606102ca6000610300565b6102ba6012825b60006102f7836001600160a01b038416610314565b90505b92915050565b6060600061030d83610363565b9392505050565b600081815260018301602052604081205461035b575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556102fa565b5060006102fa565b6060816000018054806020026020016040519081016040528092919081815260200182805480156103b357602002820191906000526020600020905b81548152602001906001019080831161039f575b50505050509050919050565b80356001600160a01b03811681146103d657600080fd5b919050565b6000602082840312156103ed57600080fd5b6102f7826103bf565b6000806040838503121561040957600080fd5b610412836103bf565b9150610420602084016103bf565b90509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561046a5783516001600160a01b031683529284019291840191600101610445565b5090969550505050505056fea264697066735822122077e31172a3665b8090496f922993119760efbb6a43b34bcf4c3a20e9a8d0bc4e64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4AC DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xBA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7B435C2 EQ PUSH2 0xBF JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x128 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x173 JUMPI DUP1 PUSH4 0x748747E6 EQ PUSH2 0x19E JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x203 JUMPI DUP1 PUSH4 0xA662031B EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x241 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x28F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEA PUSH2 0xCD CALLDATASIZE PUSH1 0x4 PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xEA PUSH2 0x10B CALLDATASIZE PUSH1 0x4 PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xEA PUSH2 0x136 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xEA PUSH2 0x161 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xEA PUSH2 0x181 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x1AC CALLDATASIZE PUSH1 0x4 PUSH2 0x3DB JUMP JUMPDEST PUSH2 0x2AF JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1BB PUSH2 0x2BE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF4 SWAP2 SWAP1 PUSH2 0x429 JUMP JUMPDEST PUSH2 0x1EB PUSH2 0x1D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DB JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF4 JUMP JUMPDEST PUSH2 0x1BB PUSH2 0x2CF JUMP JUMPDEST PUSH2 0xEA PUSH2 0x211 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x3DB JUMP JUMPDEST PUSH2 0x2DB JUMP JUMPDEST PUSH2 0x1EB PUSH2 0x24F CALLDATASIZE PUSH1 0x4 PUSH2 0x3DB JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xEA PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xEA PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x3DB JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2BA PUSH1 0x0 DUP3 PUSH2 0x2E2 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2CA PUSH1 0x12 PUSH2 0x300 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2CA PUSH1 0x0 PUSH2 0x300 JUMP JUMPDEST PUSH2 0x2BA PUSH1 0x12 DUP3 JUMPDEST PUSH1 0x0 PUSH2 0x2F7 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x314 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x30D DUP4 PUSH2 0x363 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x35B JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x2FA JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x2FA JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3B3 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x39F JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F7 DUP3 PUSH2 0x3BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x409 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x412 DUP4 PUSH2 0x3BF JUMP JUMPDEST SWAP2 POP PUSH2 0x420 PUSH1 0x20 DUP5 ADD PUSH2 0x3BF JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x46A JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x445 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH24 0xE31172A3665B8090496F922993119760EFBB6A43B34BCF4C GASPRICE KECCAK256 0xE9 0xA8 0xD0 0xBC 0x4E PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "126:256:54:-:0;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_add_1372": {
                  "entryPoint": 788,
                  "id": 1372,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_contains_1475": {
                  "entryPoint": null,
                  "id": 1475,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_values_1520": {
                  "entryPoint": 867,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@add_1658": {
                  "entryPoint": 738,
                  "id": 1658,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 702,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keepers_5506": {
                  "entryPoint": 719,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@setJob_10392": {
                  "entryPoint": 731,
                  "id": 10392,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeeper_10404": {
                  "entryPoint": 687,
                  "id": 10404,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 768,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_address": {
                  "entryPoint": 959,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 987,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 1014,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 1065,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1682:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "111:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "262:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "308:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "317:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "320:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "310:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "310:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "310:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "292:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "279:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "275:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "272:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "333:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "362:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "333:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "228:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "239:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "251:6:84",
                            "type": ""
                          }
                        ],
                        "src": "192:186:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "470:173:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "516:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "525:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "528:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "518:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "518:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "518:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "491:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "500:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "487:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "487:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "512:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "480:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "541:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "570:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "551:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "551:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "541:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "589:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "622:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "633:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "618:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "618:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "599:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "599:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "589:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "428:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "439:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "451:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "459:6:84",
                            "type": ""
                          }
                        ],
                        "src": "383:260:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "799:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "809:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "819:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "813:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "830:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "848:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "859:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "844:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "844:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "834:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "878:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "889:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "871:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "871:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "871:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "901:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "912:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "905:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "927:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "947:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "941:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "941:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "931:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "970:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "978:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "963:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "963:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "963:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "994:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1005:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1016:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1001:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1001:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "994:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1028:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1046:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1054:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1042:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1042:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1032:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1066:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1075:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "1070:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1134:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "1155:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1170:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "1164:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1164:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "1187:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "1192:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1183:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "1183:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "1196:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "1179:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1179:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "1160:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1160:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1148:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1148:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1148:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1213:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "1224:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1229:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1220:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1220:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "1213:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1245:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "1259:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1267:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1255:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1255:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1245:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1096:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1099:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1093:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1093:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1107:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1109:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1118:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1121:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1114:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1114:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1109:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1089:3:84",
                                "statements": []
                              },
                              "src": "1085:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1289:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "1297:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1289:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "768:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "779:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "790:4:84",
                            "type": ""
                          }
                        ],
                        "src": "648:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1406:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1416:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1428:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1439:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1424:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1424:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1416:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1458:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "1483:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "1476:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1476:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "1469:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1469:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1451:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1451:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1451:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1375:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1386:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1397:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1311:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1604:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1614:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1626:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1637:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1622:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1622:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1614:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1656:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1667:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1649:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1649:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1649:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1573:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1584:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1595:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1503:177:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100ba5760003560e01c806307b435c2146100bf57806315006b82146100fd578063168f92e7146101285780631b44555e1461015357806321040b0114610173578063748747e61461019e5780637c8fce23146101b35780638cb22b76146101c8578063951dc22c146101fb578063a39744b514610203578063a662031b1461022e578063b0103b1a14610241578063cd22af1b14610264578063e326ac431461028f575b600080fd5b6100ea6100cd3660046103f6565b600f60209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100ea61010b3660046103f6565b600d60209081526000928352604080842090915290825290205481565b6100ea6101363660046103f6565b600660209081526000928352604080842090915290825290205481565b6100ea6101613660046103db565b60026020526000908152604090205481565b6100ea6101813660046103f6565b601060209081526000928352604080842090915290825290205481565b6101b16101ac3660046103db565b6102af565b005b6101bb6102be565b6040516100f49190610429565b6101eb6101d63660046103db565b60116020526000908152604090205460ff1681565b60405190151581526020016100f4565b6101bb6102cf565b6100ea6102113660046103f6565b600560209081526000928352604080842090915290825290205481565b6101b161023c3660046103db565b6102db565b6101eb61024f3660046103db565b60046020526000908152604090205460ff1681565b6100ea6102723660046103f6565b600e60209081526000928352604080842090915290825290205481565b6100ea61029d3660046103db565b60036020526000908152604090205481565b6102ba6000826102e2565b5050565b60606102ca6012610300565b905090565b60606102ca6000610300565b6102ba6012825b60006102f7836001600160a01b038416610314565b90505b92915050565b6060600061030d83610363565b9392505050565b600081815260018301602052604081205461035b575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556102fa565b5060006102fa565b6060816000018054806020026020016040519081016040528092919081815260200182805480156103b357602002820191906000526020600020905b81548152602001906001019080831161039f575b50505050509050919050565b80356001600160a01b03811681146103d657600080fd5b919050565b6000602082840312156103ed57600080fd5b6102f7826103bf565b6000806040838503121561040957600080fd5b610412836103bf565b9150610420602084016103bf565b90509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561046a5783516001600160a01b031683529284019291840191600101610445565b5090969550505050505056fea264697066735822122077e31172a3665b8090496f922993119760efbb6a43b34bcf4c3a20e9a8d0bc4e64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xBA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7B435C2 EQ PUSH2 0xBF JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x128 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x173 JUMPI DUP1 PUSH4 0x748747E6 EQ PUSH2 0x19E JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x203 JUMPI DUP1 PUSH4 0xA662031B EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x241 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x28F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEA PUSH2 0xCD CALLDATASIZE PUSH1 0x4 PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xEA PUSH2 0x10B CALLDATASIZE PUSH1 0x4 PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xEA PUSH2 0x136 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xEA PUSH2 0x161 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xEA PUSH2 0x181 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x1AC CALLDATASIZE PUSH1 0x4 PUSH2 0x3DB JUMP JUMPDEST PUSH2 0x2AF JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1BB PUSH2 0x2BE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF4 SWAP2 SWAP1 PUSH2 0x429 JUMP JUMPDEST PUSH2 0x1EB PUSH2 0x1D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DB JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF4 JUMP JUMPDEST PUSH2 0x1BB PUSH2 0x2CF JUMP JUMPDEST PUSH2 0xEA PUSH2 0x211 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x3DB JUMP JUMPDEST PUSH2 0x2DB JUMP JUMPDEST PUSH2 0x1EB PUSH2 0x24F CALLDATASIZE PUSH1 0x4 PUSH2 0x3DB JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xEA PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xEA PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x3DB JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2BA PUSH1 0x0 DUP3 PUSH2 0x2E2 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2CA PUSH1 0x12 PUSH2 0x300 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2CA PUSH1 0x0 PUSH2 0x300 JUMP JUMPDEST PUSH2 0x2BA PUSH1 0x12 DUP3 JUMPDEST PUSH1 0x0 PUSH2 0x2F7 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x314 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x30D DUP4 PUSH2 0x363 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x35B JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x2FA JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x2FA JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3B3 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x39F JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F7 DUP3 PUSH2 0x3BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x409 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x412 DUP4 PUSH2 0x3BF JUMP JUMPDEST SWAP2 POP PUSH2 0x420 PUSH1 0x20 DUP5 ADD PUSH2 0x3BF JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x46A JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x445 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH24 0xE31172A3665B8090496F922993119760EFBB6A43B34BCF4C GASPRICE KECCAK256 0xE9 0xA8 0xD0 0xBC 0x4E PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "126:256:54:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1968:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;1649:25:84;;;1637:2;1622:18;1968:80:29;;;;;;;;1728:76;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;880:79;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;:::i;:::-;;;;;;;;;;;;;;2090:78;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;305:75:54;;;;;;:::i;:::-;;:::i;:::-;;2385:105:29;;;:::i;:::-;;;;;;;:::i;2210:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1476:14:84;;1469:22;1451:41;;1439:2;1424:18;2210:50:29;1311:187:84;2531:111:29;;;:::i;769:69::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;238:63:54;;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1846:80;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;534:53;;;;;;:::i;:::-;;;;;;;;;;;;;;305:75:54;355:20;:8;368:6;355:12;:20::i;:::-;;305:75;:::o;2385:105:29:-;2433:22;2471:14;:5;:12;:14::i;:::-;2463:22;;2385:105;:::o;2531:111::-;2582:22;2620:17;:8;:15;:17::i;238:63:54:-;282:14;:5;292:3;7545:150:8;7615:4;7638:50;7643:3;-1:-1:-1;;;;;7663:23:8;;7638:4;:50::i;:::-;7631:57;;7545:150;;;;;:::o;9499:257::-;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;:::-;9590:44;9499:257;-1:-1:-1;;;9499:257:8:o;1630:404::-;1693:4;3767:19;;;:12;;;:19;;;;;;1709:319;;-1:-1:-1;1751:23:8;;;;;;;;:11;:23;;;;;;;;;;;;;1931:18;;1909:19;;;:12;;;:19;;;;;;:40;;;;1963:11;;1709:319;-1:-1:-1;2012:5:8;2005:12;;4986:109;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;14:173:84:-;82:20;;-1:-1:-1;;;;;131:31:84;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:658::-;819:2;871:21;;;941:13;;844:18;;;963:22;;;790:4;;819:2;1042:15;;;;1016:2;1001:18;;;790:4;1085:195;1099:6;1096:1;1093:13;1085:195;;;1164:13;;-1:-1:-1;;;;;1160:39:84;1148:52;;1255:15;;;;1220:12;;;;1196:1;1114:9;1085:195;;;-1:-1:-1;1297:3:84;;648:658;-1:-1:-1;;;;;;648:658:84:o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "239200",
                "executionCost": "281",
                "totalCost": "239481"
              },
              "external": {
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "disputes(address)": "2755",
                "firstSeen(address)": "2776",
                "hasBonded(address)": "2667",
                "jobTokenCredits(address,address)": "infinite",
                "jobs()": "infinite",
                "keepers()": "infinite",
                "pendingBonds(address,address)": "infinite",
                "pendingUnbonds(address,address)": "infinite",
                "setJob(address)": "infinite",
                "setKeeper(address)": "infinite",
                "workCompleted(address)": "2556"
              }
            },
            "methodIdentifiers": {
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "disputes(address)": "b0103b1a",
              "firstSeen(address)": "e326ac43",
              "hasBonded(address)": "8cb22b76",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keepers()": "951dc22c",
              "pendingBonds(address,address)": "15006b82",
              "pendingUnbonds(address,address)": "21040b01",
              "setJob(address)": "a662031b",
              "setKeeper(address)": "748747e6",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"job\",\"type\":\"address\"}],\"name\":\"setJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"keeper\",\"type\":\"address\"}],\"name\":\"setKeeper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}]},\"events\":{\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/Keep3rAccountanceForTest.sol\":\"Keep3rAccountanceForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/Keep3rAccountanceForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../contracts/peripherals/Keep3rAccountance.sol';\\n\\ncontract Keep3rAccountanceForTest is Keep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  function setJob(address job) external {\\n    _jobs.add(job);\\n  }\\n\\n  function setKeeper(address keeper) external {\\n    _keepers.add(keeper);\\n  }\\n}\\n\",\"keccak256\":\"0x117b8e5522159cf5aeb96b44539632e0762f3003b87abb29b50e774c03840647\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5368,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "_keepers",
                "offset": 0,
                "slot": "0",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "workCompleted",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "firstSeen",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "disputes",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "bonds",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "hasBonded",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                "label": "_jobs",
                "offset": 0,
                "slot": "18",
                "type": "t_struct(AddressSet)1631_storage"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol:Keep3rAccountanceForTest",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ]
            },
            "events": {
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/Keep3rDisputableForTest.sol": {
        "Keep3rDisputableForTest": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "AlreadyDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "Dispute",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_resolver",
                  "type": "address"
                }
              ],
              "name": "Resolve",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "dispute(address)": {
                "params": {
                  "_jobOrKeeper": "The address in dispute"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "resolve(address)": {
                "params": {
                  "_jobOrKeeper": "The address cleared"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_10418": {
                  "entryPoint": null,
                  "id": 10418,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b503380806100305760405162b293ed60e81b815260040160405180910390fd5b601480546001600160a01b0319166001600160a01b039290921691909117905550610aec806100606000396000f3fe608060405234801561001057600080fd5b50600436106101385760003560e01c8063951dc22c116100b3578063951dc22c146102d75780639d5c33d8146102df578063a39744b5146102f2578063aac6aa9c1461031d578063ab033ea914610330578063b0103b1a14610343578063b87fcbff14610366578063cd22af1b14610389578063e326ac43146103b4578063f0f346b9146103d4578063f39c38a0146103e7578063f75f9f7b146103fa57600080fd5b806307b435c21461013d57806315006b821461017b578063168f92e7146101a65780631b44555e146101d157806321040b01146101f1578063238efcbc1461021c578063274a8db41461022657806355ea6c47146102595780635aa6e6751461026c57806368a9f19c1461028c5780637c8fce231461029f5780638cb22b76146102b4575b600080fd5b61016861014b366004610a22565b600f60209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b610168610189366004610a22565b600d60209081526000928352604080842090915290825290205481565b6101686101b4366004610a22565b600660209081526000928352604080842090915290825290205481565b6101686101df366004610a07565b60026020526000908152604090205481565b6101686101ff366004610a22565b601060209081526000928352604080842090915290825290205481565b61022461040d565b005b610249610234366004610a07565b60176020526000908152604090205460ff1681565b6040519015158152602001610172565b610224610267366004610a07565b610499565b60145461027f906001600160a01b031681565b6040516101729190610a55565b61022461029a366004610a07565b61054d565b6102a7610610565b6040516101729190610a69565b6102496102c2366004610a07565b60116020526000908152604090205460ff1681565b6102a7610621565b6102246102ed366004610a07565b61062d565b610168610300366004610a22565b600560209081526000928352604080842090915290825290205481565b61022461032b366004610a07565b6106e5565b61022461033e366004610a07565b610799565b610249610351366004610a07565b60046020526000908152604090205460ff1681565b610249610374366004610a07565b60166020526000908152604090205460ff1681565b610168610397366004610a22565b600e60209081526000928352604080842090915290825290205481565b6101686103c2366004610a07565b60036020526000908152604090205481565b6102246103e2366004610a07565b61080f565b60155461027f906001600160a01b031681565b610224610408366004610a07565b6108c3565b6015546001600160a01b0316331461043857604051637ef5703160e11b815260040160405180910390fd5b60158054601480546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161048f91610a55565b60405180910390a1565b3360009081526017602052604090205460ff166104c957604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff16610502576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260046020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b6014546001600160a01b03163314610578576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090205460ff16156105b25760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b90610605908390610a55565b60405180910390a150565b606061061c601261097b565b905090565b606061061c600061097b565b6014546001600160a01b03163314610658576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff16156106925760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f90610605908390610a55565b6014546001600160a01b03163314610710576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090205460ff16610749576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d02590610605908390610a55565b6014546001600160a01b031633146107c4576040516354348f0360e01b815260040160405180910390fd5b601580546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610605908390610a55565b6014546001600160a01b0316331461083a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff1661087357604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e90610605908390610a55565b3360009081526017602052604090205460ff166108f357604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff161561092d576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260046020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b606060006109888361098f565b9392505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156109df57602002820191906000526020600020905b8154815260200190600101908083116109cb575b50505050509050919050565b80356001600160a01b0381168114610a0257600080fd5b919050565b600060208284031215610a1957600080fd5b610988826109eb565b60008060408385031215610a3557600080fd5b610a3e836109eb565b9150610a4c602084016109eb565b90509250929050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015610aaa5783516001600160a01b031683529284019291840191600101610a85565b5090969550505050505056fea26469706673582212207ad60a451eb391cb77b0cdb07a455859813f21ae461f714a332ac7ad5412b1b264736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER DUP1 DUP1 PUSH2 0x30 JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH2 0xAEC DUP1 PUSH2 0x60 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x138 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x951DC22C GT PUSH2 0xB3 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x2DF JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x31D JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x330 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x343 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x3B4 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x3E7 JUMPI DUP1 PUSH4 0xF75F9F7B EQ PUSH2 0x3FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x13D JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x17B JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x1A6 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x1D1 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x226 JUMPI DUP1 PUSH4 0x55EA6C47 EQ PUSH2 0x259 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x28C JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x29F JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x2B4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x168 PUSH2 0x14B CALLDATASIZE PUSH1 0x4 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x168 PUSH2 0x189 CALLDATASIZE PUSH1 0x4 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x1B4 CALLDATASIZE PUSH1 0x4 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x1DF CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x1FF CALLDATASIZE PUSH1 0x4 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x40D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x249 PUSH2 0x234 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x172 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x267 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x499 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x27F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x172 SWAP2 SWAP1 PUSH2 0xA55 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x29A CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x54D JUMP JUMPDEST PUSH2 0x2A7 PUSH2 0x610 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x172 SWAP2 SWAP1 PUSH2 0xA69 JUMP JUMPDEST PUSH2 0x249 PUSH2 0x2C2 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2A7 PUSH2 0x621 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x2ED CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x62D JUMP JUMPDEST PUSH2 0x168 PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x32B CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x6E5 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x33E CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x799 JUMP JUMPDEST PUSH2 0x249 PUSH2 0x351 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x249 PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x397 CALLDATASIZE PUSH1 0x4 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x3C2 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x3E2 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x80F JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH2 0x27F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x408 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x8C3 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x438 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x15 DUP1 SLOAD PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x48F SWAP2 PUSH2 0xA55 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x502 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0xE02B2375D8FB4AEF3E5BC5D53BFFCF70B6F185C5C93E69DCBE8B6CFC58E837E2 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x578 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x5B2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x605 SWAP1 DUP4 SWAP1 PUSH2 0xA55 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x61C PUSH1 0x12 PUSH2 0x97B JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x61C PUSH1 0x0 PUSH2 0x97B JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x658 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x692 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x605 SWAP1 DUP4 SWAP1 PUSH2 0xA55 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x710 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x749 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x605 SWAP1 DUP4 SWAP1 PUSH2 0xA55 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7C4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x605 SWAP1 DUP4 SWAP1 PUSH2 0xA55 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x83A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x873 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x605 SWAP1 DUP4 SWAP1 PUSH2 0xA55 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x8F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x92D JUMPI PUSH1 0x40 MLOAD PUSH4 0x4EE891B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x70125A1C0F5202217AAE14EC399ABFAAA13C2FD98A91D43BD3A897DD4751E80 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x988 DUP4 PUSH2 0x98F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x9DF JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x9CB JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xA02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x988 DUP3 PUSH2 0x9EB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xA35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA3E DUP4 PUSH2 0x9EB JUMP JUMPDEST SWAP2 POP PUSH2 0xA4C PUSH1 0x20 DUP5 ADD PUSH2 0x9EB JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAAA JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xA85 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH27 0xD60A451EB391CB77B0CDB07A455859813F21AE461F714A332AC7AD SLOAD SLT 0xB1 0xB2 PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "125:99:55:-:0;;;182:40;;;;;;;;;-1:-1:-1;208:10:55;;357:25:28;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;-1:-1:-1;;;;;422:24:28;;;;;;;;;;-1:-1:-1;125:99:55;;;-1:-1:-1;125:99:55;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_values_1520": {
                  "entryPoint": 2447,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 1037,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 1581,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 1357,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@dispute_5547": {
                  "entryPoint": 2243,
                  "id": 5547,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 1552,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keepers_5506": {
                  "entryPoint": 1569,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@removeDisputer_6072": {
                  "entryPoint": 2063,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 1765,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@resolve_5577": {
                  "entryPoint": 1177,
                  "id": 5577,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 1945,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 2427,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_address": {
                  "entryPoint": 2539,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 2567,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 2594,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 2645,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 2665,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1890:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "111:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "262:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "308:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "317:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "320:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "310:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "310:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "310:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "292:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "279:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "275:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "272:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "333:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "362:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "333:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "228:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "239:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "251:6:84",
                            "type": ""
                          }
                        ],
                        "src": "192:186:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "470:173:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "516:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "525:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "528:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "518:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "518:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "518:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "491:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "500:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "487:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "487:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "512:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "480:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "541:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "570:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "551:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "551:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "541:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "589:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "622:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "633:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "618:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "618:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "599:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "599:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "589:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "428:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "439:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "451:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "459:6:84",
                            "type": ""
                          }
                        ],
                        "src": "383:260:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "749:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "759:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "771:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "782:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "767:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "767:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "759:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "801:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "816:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "832:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "837:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "828:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "828:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "841:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "824:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "824:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "812:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "812:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "794:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "794:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "794:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "718:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "729:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "740:4:84",
                            "type": ""
                          }
                        ],
                        "src": "648:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1007:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1017:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1027:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1021:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1038:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1056:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1067:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1052:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1052:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1042:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1086:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1097:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1079:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1079:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1079:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1109:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "1120:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "1113:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1135:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1155:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1149:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1149:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "1139:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1178:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1186:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1171:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1171:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1171:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1202:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1213:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1224:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1209:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1209:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "1202:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1236:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1254:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1262:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1250:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1250:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1240:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1274:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1283:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "1278:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1342:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "1363:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1378:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "1372:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1372:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "1395:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "1400:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1391:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "1391:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "1404:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "1387:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1387:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "1368:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1368:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1356:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1356:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1356:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1421:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "1432:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1437:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1428:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1428:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "1421:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1453:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "1467:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1475:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1463:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1463:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1453:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1304:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1307:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1301:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1301:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1315:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1317:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1326:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1329:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1322:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1322:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1317:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1297:3:84",
                                "statements": []
                              },
                              "src": "1293:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1497:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "1505:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1497:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "976:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "987:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "998:4:84",
                            "type": ""
                          }
                        ],
                        "src": "856:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1614:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1624:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1636:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1647:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1632:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1632:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1624:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1666:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "1691:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "1684:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1684:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "1677:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1677:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1659:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1659:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1659:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1583:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1594:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1605:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1519:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1812:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1822:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1834:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1845:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1830:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1830:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1822:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1864:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1875:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1857:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1857:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1857:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1781:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1792:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1803:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1711:177:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106101385760003560e01c8063951dc22c116100b3578063951dc22c146102d75780639d5c33d8146102df578063a39744b5146102f2578063aac6aa9c1461031d578063ab033ea914610330578063b0103b1a14610343578063b87fcbff14610366578063cd22af1b14610389578063e326ac43146103b4578063f0f346b9146103d4578063f39c38a0146103e7578063f75f9f7b146103fa57600080fd5b806307b435c21461013d57806315006b821461017b578063168f92e7146101a65780631b44555e146101d157806321040b01146101f1578063238efcbc1461021c578063274a8db41461022657806355ea6c47146102595780635aa6e6751461026c57806368a9f19c1461028c5780637c8fce231461029f5780638cb22b76146102b4575b600080fd5b61016861014b366004610a22565b600f60209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b610168610189366004610a22565b600d60209081526000928352604080842090915290825290205481565b6101686101b4366004610a22565b600660209081526000928352604080842090915290825290205481565b6101686101df366004610a07565b60026020526000908152604090205481565b6101686101ff366004610a22565b601060209081526000928352604080842090915290825290205481565b61022461040d565b005b610249610234366004610a07565b60176020526000908152604090205460ff1681565b6040519015158152602001610172565b610224610267366004610a07565b610499565b60145461027f906001600160a01b031681565b6040516101729190610a55565b61022461029a366004610a07565b61054d565b6102a7610610565b6040516101729190610a69565b6102496102c2366004610a07565b60116020526000908152604090205460ff1681565b6102a7610621565b6102246102ed366004610a07565b61062d565b610168610300366004610a22565b600560209081526000928352604080842090915290825290205481565b61022461032b366004610a07565b6106e5565b61022461033e366004610a07565b610799565b610249610351366004610a07565b60046020526000908152604090205460ff1681565b610249610374366004610a07565b60166020526000908152604090205460ff1681565b610168610397366004610a22565b600e60209081526000928352604080842090915290825290205481565b6101686103c2366004610a07565b60036020526000908152604090205481565b6102246103e2366004610a07565b61080f565b60155461027f906001600160a01b031681565b610224610408366004610a07565b6108c3565b6015546001600160a01b0316331461043857604051637ef5703160e11b815260040160405180910390fd5b60158054601480546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161048f91610a55565b60405180910390a1565b3360009081526017602052604090205460ff166104c957604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff16610502576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260046020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b6014546001600160a01b03163314610578576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090205460ff16156105b25760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b90610605908390610a55565b60405180910390a150565b606061061c601261097b565b905090565b606061061c600061097b565b6014546001600160a01b03163314610658576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff16156106925760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f90610605908390610a55565b6014546001600160a01b03163314610710576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090205460ff16610749576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d02590610605908390610a55565b6014546001600160a01b031633146107c4576040516354348f0360e01b815260040160405180910390fd5b601580546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610605908390610a55565b6014546001600160a01b0316331461083a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff1661087357604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e90610605908390610a55565b3360009081526017602052604090205460ff166108f357604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff161561092d576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260046020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b606060006109888361098f565b9392505050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156109df57602002820191906000526020600020905b8154815260200190600101908083116109cb575b50505050509050919050565b80356001600160a01b0381168114610a0257600080fd5b919050565b600060208284031215610a1957600080fd5b610988826109eb565b60008060408385031215610a3557600080fd5b610a3e836109eb565b9150610a4c602084016109eb565b90509250929050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015610aaa5783516001600160a01b031683529284019291840191600101610a85565b5090969550505050505056fea26469706673582212207ad60a451eb391cb77b0cdb07a455859813f21ae461f714a332ac7ad5412b1b264736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x138 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x951DC22C GT PUSH2 0xB3 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x2DF JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x31D JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x330 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x343 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x3B4 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x3E7 JUMPI DUP1 PUSH4 0xF75F9F7B EQ PUSH2 0x3FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x13D JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x17B JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x1A6 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x1D1 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x226 JUMPI DUP1 PUSH4 0x55EA6C47 EQ PUSH2 0x259 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x28C JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x29F JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x2B4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x168 PUSH2 0x14B CALLDATASIZE PUSH1 0x4 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x168 PUSH2 0x189 CALLDATASIZE PUSH1 0x4 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x1B4 CALLDATASIZE PUSH1 0x4 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x1DF CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x1FF CALLDATASIZE PUSH1 0x4 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x40D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x249 PUSH2 0x234 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x172 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x267 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x499 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x27F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x172 SWAP2 SWAP1 PUSH2 0xA55 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x29A CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x54D JUMP JUMPDEST PUSH2 0x2A7 PUSH2 0x610 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x172 SWAP2 SWAP1 PUSH2 0xA69 JUMP JUMPDEST PUSH2 0x249 PUSH2 0x2C2 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2A7 PUSH2 0x621 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x2ED CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x62D JUMP JUMPDEST PUSH2 0x168 PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x32B CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x6E5 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x33E CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x799 JUMP JUMPDEST PUSH2 0x249 PUSH2 0x351 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x249 PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x397 CALLDATASIZE PUSH1 0x4 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x3C2 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x3E2 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x80F JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH2 0x27F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x224 PUSH2 0x408 CALLDATASIZE PUSH1 0x4 PUSH2 0xA07 JUMP JUMPDEST PUSH2 0x8C3 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x438 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x15 DUP1 SLOAD PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x48F SWAP2 PUSH2 0xA55 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x502 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0xE02B2375D8FB4AEF3E5BC5D53BFFCF70B6F185C5C93E69DCBE8B6CFC58E837E2 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x578 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x5B2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x605 SWAP1 DUP4 SWAP1 PUSH2 0xA55 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x61C PUSH1 0x12 PUSH2 0x97B JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x61C PUSH1 0x0 PUSH2 0x97B JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x658 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x692 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x605 SWAP1 DUP4 SWAP1 PUSH2 0xA55 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x710 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x749 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x605 SWAP1 DUP4 SWAP1 PUSH2 0xA55 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7C4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x605 SWAP1 DUP4 SWAP1 PUSH2 0xA55 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x83A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x873 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x605 SWAP1 DUP4 SWAP1 PUSH2 0xA55 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x8F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x92D JUMPI PUSH1 0x40 MLOAD PUSH4 0x4EE891B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x70125A1C0F5202217AAE14EC399ABFAAA13C2FD98A91D43BD3A897DD4751E80 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x988 DUP4 PUSH2 0x98F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x9DF JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x9CB JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xA02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x988 DUP3 PUSH2 0x9EB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xA35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA3E DUP4 PUSH2 0x9EB JUMP JUMPDEST SWAP2 POP PUSH2 0xA4C PUSH1 0x20 DUP5 ADD PUSH2 0x9EB JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAAA JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xA85 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH27 0xD60A451EB391CB77B0CDB07A455859813F21AE461F714A332AC7AD SLOAD SLT 0xB1 0xB2 PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "125:99:55:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1968:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;1857:25:84;;;1845:2;1830:18;1968:80:29;;;;;;;;1728:76;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;880:79;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;:::i;:::-;;;;;;;;;;;;;;2090:78;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;:::-;;384:50:32;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1684:14:84;;1677:22;1659:41;;1647:2;1632:18;384:50:32;1519:187:84;568:210:30;;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;-1:-1:-1;;;;;199:34:28;;;;;;;;;;:::i;533:194:32:-;;;;;;:::i;:::-;;:::i;2385:105:29:-;;;:::i;:::-;;;;;;;:::i;2210:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2531:111;;;:::i;999:203:32:-;;;;;;:::i;:::-;;:::i;769:69:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;762:202:32;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;299::32;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1846:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;534:53;;;;;;:::i;:::-;;;;;;;;;;;;;;1237:211:32;;;;;;:::i;:::-;;:::i;268:41:28:-;;;;;-1:-1:-1;;;;;268:41:28;;;316:212:30;;;;;;:::i;:::-;;:::i;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;754:10:::1;:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;568:210:30:-;1778:10:32;1768:21;;;;:9;:21;;;;;;;;1763:49;;1798:14;;-1:-1:-1;;;1798:14:32;;;;;;;;;;;1763:49;-1:-1:-1;;;;;649:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;::::1;;644:49;;680:13;;-1:-1:-1::0;;;680:13:30::1;;;;;;;;;;;644:49;-1:-1:-1::0;;;;;699:22:30;::::1;724:5;699:22:::0;;;:8:::1;:22;::::0;;;;;:30;;-1:-1:-1;;699:30:30::1;::::0;;740:33;762:10:::1;::::0;699:22;740:33:::1;::::0;::::1;568:210:::0;:::o;533:194:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;:::-;;;;;;;;533:194:::0;:::o;2385:105:29:-;2433:22;2471:14;:5;:12;:14::i;:::-;2463:22;;2385:105;:::o;2531:111::-;2582:22;2620:17;:8;:15;:17::i;999:203:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;762:202::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;316:212:30:-:0;1778:10:32;1768:21;;;;:9;:21;;;;;;;;1763:49;;1798:14;;-1:-1:-1;;;1798:14:32;;;;;;;;;;;1763:49;-1:-1:-1;;;;;396:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;::::1;;392:52;;;427:17;;-1:-1:-1::0;;;427:17:30::1;;;;;;;;;;;392:52;-1:-1:-1::0;;;;;450:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;:29;;-1:-1:-1;;450:29:30::1;475:4;450:29;::::0;;490:33;512:10:::1;::::0;450:22;490:33:::1;::::0;::::1;316:212:::0;:::o;9499:257:8:-;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;:::-;9590:44;9499:257;-1:-1:-1;;;9499:257:8:o;4986:109::-;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;14:173:84:-;82:20;;-1:-1:-1;;;;;131:31:84;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:203::-;-1:-1:-1;;;;;812:32:84;;;;794:51;;782:2;767:18;;648:203::o;856:658::-;1027:2;1079:21;;;1149:13;;1052:18;;;1171:22;;;998:4;;1027:2;1250:15;;;;1224:2;1209:18;;;998:4;1293:195;1307:6;1304:1;1301:13;1293:195;;;1372:13;;-1:-1:-1;;;;;1368:39:84;1356:52;;1463:15;;;;1428:12;;;;1404:1;1322:9;1293:195;;;-1:-1:-1;1505:3:84;;856:658;-1:-1:-1;;;;;;856:658:84:o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "559200",
                "executionCost": "24887",
                "totalCost": "584087"
              },
              "external": {
                "acceptGovernance()": "51993",
                "addDisputer(address)": "30110",
                "addSlasher(address)": "30287",
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "dispute(address)": "30781",
                "disputers(address)": "2664",
                "disputes(address)": "2641",
                "firstSeen(address)": "2684",
                "governance()": "2538",
                "hasBonded(address)": "2774",
                "jobTokenCredits(address,address)": "infinite",
                "jobs()": "infinite",
                "keepers()": "infinite",
                "pendingBonds(address,address)": "infinite",
                "pendingGovernance()": "2581",
                "pendingUnbonds(address,address)": "infinite",
                "removeDisputer(address)": "30277",
                "removeSlasher(address)": "30145",
                "resolve(address)": "30685",
                "setGovernance(address)": "27903",
                "slashers(address)": "2663",
                "workCompleted(address)": "2575"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "dispute(address)": "f75f9f7b",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keepers()": "951dc22c",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "resolve(address)": "55ea6c47",
              "setGovernance(address)": "ab033ea9",
              "slashers(address)": "b87fcbff",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"Dispute\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"Resolve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"dispute(address)\":{\"params\":{\"_jobOrKeeper\":\"The address in dispute\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"resolve(address)\":{\"params\":{\"_jobOrKeeper\":\"The address cleared\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyDisputed()\":[{\"notice\":\"Throws when a job or keeper is already disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"NotDisputed()\":[{\"notice\":\"Throws when a job or keeper is not disputed and someone tries to resolve the dispute\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}]},\"events\":{\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Dispute(address,address)\":{\"notice\":\"Emitted when a keeper or a job is disputed\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"Resolve(address,address)\":{\"notice\":\"Emitted when a dispute is resolved\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"dispute(address)\":{\"notice\":\"Allows governance to create a dispute for a given keeper/job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"resolve(address)\":{\"notice\":\"Allows governance to resolve a dispute on a keeper/job\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/Keep3rDisputableForTest.sol\":\"Keep3rDisputableForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rParameters.sol';\\nimport './Keep3rRoles.sol';\\nimport '../../interfaces/peripherals/IKeep3rDisputable.sol';\\n\\nabstract contract Keep3rDisputable is IKeep3rDisputable, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rDisputable\\n  function dispute(address _jobOrKeeper) external override onlyDisputer {\\n    if (disputes[_jobOrKeeper]) revert AlreadyDisputed();\\n    disputes[_jobOrKeeper] = true;\\n    emit Dispute(_jobOrKeeper, msg.sender);\\n  }\\n\\n  /// @inheritdoc IKeep3rDisputable\\n  function resolve(address _jobOrKeeper) external override onlyDisputer {\\n    if (!disputes[_jobOrKeeper]) revert NotDisputed();\\n    disputes[_jobOrKeeper] = false;\\n    emit Resolve(_jobOrKeeper, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x941e9ba02b2ad3975edc444cd771ef1e5386051553632140f882258ea7e4d4bc\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/Keep3rDisputableForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../contracts/peripherals/Keep3rDisputable.sol';\\n\\ncontract Keep3rDisputableForTest is Keep3rDisputable {\\n  constructor() Keep3rRoles(msg.sender) {}\\n}\\n\",\"keccak256\":\"0xf2d5031180069351715473f7db119088a88d95f11680a625ba51415eabf7012f\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Creates/resolves disputes for jobs or keepers\\n///         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\\n///         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\\ninterface IKeep3rDisputable {\\n  /// @notice Emitted when a keeper or a job is disputed\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _disputer The user that called the function and disputed the keeper\\n  event Dispute(address indexed _jobOrKeeper, address indexed _disputer);\\n\\n  /// @notice Emitted when a dispute is resolved\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _resolver The user that called the function and resolved the dispute\\n  event Resolve(address indexed _jobOrKeeper, address indexed _resolver);\\n\\n  /// @notice Throws when a job or keeper is already disputed\\n  error AlreadyDisputed();\\n\\n  /// @notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute\\n  error NotDisputed();\\n\\n  /// @notice Allows governance to create a dispute for a given keeper/job\\n  /// @param _jobOrKeeper The address in dispute\\n  function dispute(address _jobOrKeeper) external;\\n\\n  /// @notice Allows governance to resolve a dispute on a keeper/job\\n  /// @param _jobOrKeeper The address cleared\\n  function resolve(address _jobOrKeeper) external;\\n}\\n\",\"keccak256\":\"0x002b9b4c75e62d48d74b6447649d39eb5c1e128d2523bb11e08e9cd3e27b1f70\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5368,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "_keepers",
                "offset": 0,
                "slot": "0",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "workCompleted",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "firstSeen",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "disputes",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "bonds",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "hasBonded",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "_jobs",
                "offset": 0,
                "slot": "18",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "governance",
                "offset": 0,
                "slot": "20",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "21",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "slashers",
                "offset": 0,
                "slot": "22",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                "label": "disputers",
                "offset": 0,
                "slot": "23",
                "type": "t_mapping(t_address,t_bool)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol:Keep3rDisputableForTest",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyDisputed()": [
                {
                  "notice": "Throws when a job or keeper is already disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "NotDisputed()": [
                {
                  "notice": "Throws when a job or keeper is not disputed and someone tries to resolve the dispute"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ]
            },
            "events": {
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Dispute(address,address)": {
                "notice": "Emitted when a keeper or a job is disputed"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "Resolve(address,address)": {
                "notice": "Emitted when a dispute is resolved"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "dispute(address)": {
                "notice": "Allows governance to create a dispute for a given keeper/job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "resolve(address)": {
                "notice": "Allows governance to resolve a dispute on a keeper/job"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/Keep3rParametersForTest.sol": {
        "Keep3rParametersForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "name": "viewIsKP3RToken0",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "name": "viewLiquidityPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_10446": {
                  "entryPoint": null,
                  "id": 10446,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5689": {
                  "entryPoint": null,
                  "id": 5689,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 418,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory": {
                  "entryPoint": 447,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 540,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1152:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "328:332:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "375:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "384:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "387:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "377:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "377:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "377:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "349:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "358:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "345:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "345:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "370:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "341:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "341:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "338:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "400:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "440:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "410:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "410:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "400:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "459:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "503:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "514:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "499:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "499:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "469:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "469:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "459:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "527:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "571:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "582:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "567:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "567:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "537:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "537:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "527:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "595:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "639:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "650:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "635:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "635:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "605:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "605:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "595:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "270:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "281:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "293:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "301:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "309:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "317:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:464:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "743:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "789:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "798:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "801:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "791:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "791:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "791:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "764:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "773:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "760:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "760:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "785:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "756:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "756:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "753:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "814:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "833:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "827:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "827:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "818:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "896:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "905:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "908:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "898:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "898:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "898:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "865:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "886:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "879:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "879:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "872:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "872:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "862:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "855:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "855:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "852:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "921:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "931:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "921:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "709:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "720:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "732:6:84",
                            "type": ""
                          }
                        ],
                        "src": "665:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1048:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1058:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1070:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1081:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1066:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1066:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1058:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1100:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1115:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1131:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1136:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1127:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1127:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1140:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1123:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1123:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1111:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1111:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1093:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1093:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1093:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1017:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1028:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1039:4:84",
                            "type": ""
                          }
                        ],
                        "src": "947:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526203f480601c5562127500601d556729a2241af62c0000601e5562069780601f55622cd300602055601e6021553480156200003e57600080fd5b5060405162001414380380620014148339810160408190526200006191620001bf565b83838383338080620000855760405162b293ed60e81b815260040160405180910390fd5b601480546001600160a01b03199081166001600160a01b0393841617909155601a80548216888416178155601880548316888516179055601980548316878516179055601b8054831686851690811782556000818152600b602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200013057600080fd5b505afa15801562000145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016b91906200021c565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055506200024795505050505050565b80516001600160a01b0381168114620001ba57600080fd5b919050565b60008060008060808587031215620001d657600080fd5b620001e185620001a2565b9350620001f160208601620001a2565b92506200020160408601620001a2565b91506200021160608601620001a2565b905092959194509250565b6000602082840312156200022f57600080fd5b815180151581146200024057600080fd5b9392505050565b6111bd80620002576000396000f3fe608060405234801561001057600080fd5b50600436106102345760003560e01c8063951dc22c11610131578063cb4be2bb116100b3578063cb4be2bb14610599578063cb54694d146105ac578063cd22af1b146105bf578063ddca3f43146105ea578063e326ac43146105f3578063ebbb619414610613578063ec00cdfc14610626578063f0f346b914610639578063f11a1d1a1461064c578063f39c38a01461065f578063fc253d2b1461067257600080fd5b8063951dc22c146104a55780639d5c33d8146104ad578063a39744b5146104c0578063a7d2e784146104eb578063aac6aa9c146104f4578063ab033ea914610507578063b0103b1a1461051a578063b23922331461053d578063b7e7734014610550578063b87fcbff14610563578063c7ae40d01461058657600080fd5b80635aa6e675116101ba5780635aa6e675146103e05780635ebe23f0146103f3578063633fb68f146103fc57806368a9f19c1461040557806369fe0e2d1461041857806372da828a1461042b578063768b5d901461043e5780637b40c913146104475780637c8fce231461045a5780638cb22b761461046f5780638fe204dd1461049257600080fd5b806307b435c21461023957806315006b8214610277578063160e1e31146102a2578063168f92e7146102b75780631b44555e146102e25780631ef94b911461030257806321040b0114610322578063238efcbc1461034d578063240d2d7414610355578063274a8db4146103815780634b6c91a7146103b4575b600080fd5b6102646102473660046110b8565b600f60209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6102646102853660046110b8565b600d60209081526000928352604080842090915290825290205481565b6102b56102b036600461109d565b61067b565b005b6102646102c53660046110b8565b600660209081526000928352604080842090915290825290205481565b6102646102f036600461109d565b60026020526000908152604090205481565b601854610315906001600160a01b031681565b60405161026e9190611126565b6102646103303660046110b8565b601060209081526000928352604080842090915290825290205481565b6102b56107e1565b61031561036336600461109d565b6001600160a01b039081166000908152600b60205260409020541690565b6103a461038f36600461109d565b60176020526000908152604090205460ff1681565b604051901515815260200161026e565b6103a46103c236600461109d565b6001600160a01b03166000908152600c602052604090205460ff1690565b601454610315906001600160a01b031681565b610264601c5481565b610264601e5481565b6102b561041336600461109d565b61086d565b6102b561042636600461110d565b610925565b6102b561043936600461109d565b610985565b610264601f5481565b601b54610315906001600160a01b031681565b610462610a22565b60405161026e919061113a565b6103a461047d36600461109d565b60116020526000908152604090205460ff1681565b6102b56104a036600461110d565b610a33565b610462610a93565b6102b56104bb36600461109d565b610a9f565b6102646104ce3660046110b8565b600560209081526000928352604080842090915290825290205481565b610264601d5481565b6102b561050236600461109d565b610b57565b6102b561051536600461109d565b610c0b565b6103a461052836600461109d565b60046020526000908152604090205460ff1681565b6102b561054b36600461110d565b610c81565b6102b561055e36600461110d565b610cdf565b6103a461057136600461109d565b60166020526000908152604090205460ff1681565b601954610315906001600160a01b031681565b6102b56105a736600461109d565b610d3f565b6102b56105ba36600461110d565b610ddc565b6102646105cd3660046110b8565b600e60209081526000928352604080842090915290825290205481565b61026460215481565b61026461060136600461109d565b60036020526000908152604090205481565b6102b561062136600461110d565b610e60565b6102b561063436600461109d565b610ec0565b6102b561064736600461109d565b610f5d565b601a54610315906001600160a01b031681565b601554610315906001600160a01b031681565b61026460205481565b6014546001600160a01b031633146106a6576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166106cd5760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b038084166001600160a01b031992831681179093556000838152600b6020526040908190208054909316909317909155601a54915163696a437b60e01b815291169063696a437b9061072e908490600401611126565b60206040518083038186803b15801561074657600080fd5b505afa15801561075a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e91906110eb565b6001600160a01b0382166000908152600c602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa906107d6908390611126565b60405180910390a150565b6015546001600160a01b0316331461080c57604051637ef5703160e11b815260040160405180910390fd5b60158054601480546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161086391611126565b60405180910390a1565b6014546001600160a01b03163314610898576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090205460ff16156108d25760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b906107d6908390611126565b6014546001600160a01b03163314610950576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d906020016107d6565b6014546001600160a01b031633146109b0576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166109d75760405163d92e233d60e01b815260040160405180910390fd5b601a80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b0906107d6908390611126565b6060610a2e6012611011565b905090565b6014546001600160a01b03163314610a5e576040516354348f0360e01b815260040160405180910390fd5b601d8190556040518181527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee2906020016107d6565b6060610a2e6000611011565b6014546001600160a01b03163314610aca576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff1615610b045760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f906107d6908390611126565b6014546001600160a01b03163314610b82576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090205460ff16610bbb576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d025906107d6908390611126565b6014546001600160a01b03163314610c36576040516354348f0360e01b815260040160405180910390fd5b601580546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906107d6908390611126565b6014546001600160a01b03163314610cac576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6991016107d6565b6014546001600160a01b03163314610d0a576040516354348f0360e01b815260040160405180910390fd5b601c8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b43906020016107d6565b6014546001600160a01b03163314610d6a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610d915760405163d92e233d60e01b815260040160405180910390fd5b601980546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae250906107d6908390611126565b6014546001600160a01b03163314610e07576040516354348f0360e01b815260040160405180910390fd5b62015180811015610e2b57604051633f384aad60e21b815260040160405180910390fd5b601f8190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d9906020016107d6565b6014546001600160a01b03163314610e8b576040516354348f0360e01b815260040160405180910390fd5b601e8190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e7906020016107d6565b6014546001600160a01b03163314610eeb576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610f125760405163d92e233d60e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf906107d6908390611126565b6014546001600160a01b03163314610f88576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff16610fc157604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e906107d6908390611126565b6060600061101e83611025565b9392505050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561107557602002820191906000526020600020905b815481526020019060010190808311611061575b50505050509050919050565b80356001600160a01b038116811461109857600080fd5b919050565b6000602082840312156110af57600080fd5b61101e82611081565b600080604083850312156110cb57600080fd5b6110d483611081565b91506110e260208401611081565b90509250929050565b6000602082840312156110fd57600080fd5b8151801515811461101e57600080fd5b60006020828403121561111f57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b8181101561117b5783516001600160a01b031683529284019291840191600101611156565b5090969550505050505056fea264697066735822122080febc874e1e77874c46e6e52428bf1c5554a932b51c5499835e2bad5a4d86c364736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x3F480 PUSH1 0x1C SSTORE PUSH3 0x127500 PUSH1 0x1D SSTORE PUSH8 0x29A2241AF62C0000 PUSH1 0x1E SSTORE PUSH3 0x69780 PUSH1 0x1F SSTORE PUSH3 0x2CD300 PUSH1 0x20 SSTORE PUSH1 0x1E PUSH1 0x21 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1414 CODESIZE SUB DUP1 PUSH3 0x1414 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x61 SWAP2 PUSH3 0x1BF JUMP JUMPDEST DUP4 DUP4 DUP4 DUP4 CALLER DUP1 DUP1 PUSH3 0x85 JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1A DUP1 SLOAD DUP3 AND DUP9 DUP5 AND OR DUP2 SSTORE PUSH1 0x18 DUP1 SLOAD DUP4 AND DUP9 DUP6 AND OR SWAP1 SSTORE PUSH1 0x19 DUP1 SLOAD DUP4 AND DUP8 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1B DUP1 SLOAD DUP4 AND DUP7 DUP6 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP6 AND SWAP1 SWAP2 OR SWAP1 SWAP4 SSTORE SWAP1 SLOAD SWAP1 SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x696A437B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x145 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x16B SWAP2 SWAP1 PUSH3 0x21C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x247 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E1 DUP6 PUSH3 0x1A2 JUMP JUMPDEST SWAP4 POP PUSH3 0x1F1 PUSH1 0x20 DUP7 ADD PUSH3 0x1A2 JUMP JUMPDEST SWAP3 POP PUSH3 0x201 PUSH1 0x40 DUP7 ADD PUSH3 0x1A2 JUMP JUMPDEST SWAP2 POP PUSH3 0x211 PUSH1 0x60 DUP7 ADD PUSH3 0x1A2 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x11BD DUP1 PUSH3 0x257 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x234 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x951DC22C GT PUSH2 0x131 JUMPI DUP1 PUSH4 0xCB4BE2BB GT PUSH2 0xB3 JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x599 JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x5AC JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x5BF JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x5EA JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x5F3 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0x613 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0x626 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x639 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0x64C JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x65F JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0x672 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x951DC22C EQ PUSH2 0x4A5 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x4C0 JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x4EB JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x4F4 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x507 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x51A JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x53D JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x550 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x563 JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x586 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5AA6E675 GT PUSH2 0x1BA JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x3E0 JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x3F3 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x3FC JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x405 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x42B JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x447 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x45A JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x46F JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x492 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x2E2 JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x322 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x34D JUMPI DUP1 PUSH4 0x240D2D74 EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x381 JUMPI DUP1 PUSH4 0x4B6C91A7 EQ PUSH2 0x3B4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x264 PUSH2 0x247 CALLDATASIZE PUSH1 0x4 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x264 PUSH2 0x285 CALLDATASIZE PUSH1 0x4 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x2B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0x67B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x264 PUSH2 0x2C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x2F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x315 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26E SWAP2 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x330 CALLDATASIZE PUSH1 0x4 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x7E1 JUMP JUMPDEST PUSH2 0x315 PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x38F CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x26E JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x3C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x315 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH1 0x1C SLOAD DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH1 0x1E SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x413 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0x86D JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x426 CALLDATASIZE PUSH1 0x4 PUSH2 0x110D JUMP JUMPDEST PUSH2 0x925 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x439 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0x985 JUMP JUMPDEST PUSH2 0x264 PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x315 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x462 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26E SWAP2 SWAP1 PUSH2 0x113A JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x47D CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x4A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x110D JUMP JUMPDEST PUSH2 0xA33 JUMP JUMPDEST PUSH2 0x462 PUSH2 0xA93 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x4BB CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0xA9F JUMP JUMPDEST PUSH2 0x264 PUSH2 0x4CE CALLDATASIZE PUSH1 0x4 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH1 0x1D SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x502 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x515 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0xC0B JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x528 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x54B CALLDATASIZE PUSH1 0x4 PUSH2 0x110D JUMP JUMPDEST PUSH2 0xC81 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x55E CALLDATASIZE PUSH1 0x4 PUSH2 0x110D JUMP JUMPDEST PUSH2 0xCDF JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x571 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x19 SLOAD PUSH2 0x315 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x5A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0xD3F JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x5BA CALLDATASIZE PUSH1 0x4 PUSH2 0x110D JUMP JUMPDEST PUSH2 0xDDC JUMP JUMPDEST PUSH2 0x264 PUSH2 0x5CD CALLDATASIZE PUSH1 0x4 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x601 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x621 CALLDATASIZE PUSH1 0x4 PUSH2 0x110D JUMP JUMPDEST PUSH2 0xE60 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x634 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0xEC0 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x647 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0xF5D JUMP JUMPDEST PUSH1 0x1A SLOAD PUSH2 0x315 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH2 0x315 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x6CD JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1A SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x72E SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x746 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x75A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x77E SWAP2 SWAP1 PUSH2 0x10EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x80C JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x15 DUP1 SLOAD PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x863 SWAP2 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x898 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x8D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x950 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9B0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x9D7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xA2E PUSH1 0x12 PUSH2 0x1011 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP1 PUSH1 0x20 ADD PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xA2E PUSH1 0x0 PUSH2 0x1011 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xACA JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB04 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB82 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xBBB JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC36 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP2 ADD PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD0A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD91 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x19 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE07 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0xE2B JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE8B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xEEB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xF12 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xF88 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xFC1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x101E DUP4 PUSH2 0x1025 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1075 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1061 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1098 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x101E DUP3 PUSH2 0x1081 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10D4 DUP4 PUSH2 0x1081 JUMP JUMPDEST SWAP2 POP PUSH2 0x10E2 PUSH1 0x20 DUP5 ADD PUSH2 0x1081 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x101E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x111F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x117B JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1156 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP1 INVALID 0xBC DUP8 0x4E 0x1E PUSH24 0x874C46E6E52428BF1C5554A932B51C5499835E2BAD5A4D86 0xC3 PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "125:505:56:-:0;;;702:6:31;667:41;;786:7;749:44;;877:7;834:50;;968:6;925:49;;1057:7;1015:49;;1135:2;1105:32;;182:221:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;320:13;335:9;346:14;362:13;389:10;;357:25:28;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;;;-1:-1:-1;;;;;422:24:28;;;;;;;1479:12:31;:28;;;;;;;;;;1513:8;:20;;;;;;;;;;1539:13;:30;;;;;;;;;;1575:12;:28;;;;;;;;;;;;-1:-1:-1;1609:28:31;;;:14;:28;;;;;;;:43;;;;;;;;;;;1703:12;;1730;;1689:54;;-1:-1:-1;;;1689:54:31;;1730:12;;;1689:54;;;1093:51:84;1703:12:31;;;;-1:-1:-1;1689:40:31;;1066:18:84;;1689:54:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1658:28:31;;;;;;;;:13;:28;;;;;:85;;-1:-1:-1;;1658:85:31;;;;;;;;;;-1:-1:-1;125:505:56;;-1:-1:-1;;;;;;125:505:56;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:464::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;469:49;514:2;503:9;499:18;469:49;:::i;:::-;459:59;;537:49;582:2;571:9;567:18;537:49;:::i;:::-;527:59;;605:49;650:2;639:9;635:18;605:49;:::i;:::-;595:59;;196:464;;;;;;;:::o;665:277::-;732:6;785:2;773:9;764:7;760:23;756:32;753:52;;;801:1;798;791:12;753:52;833:9;827:16;886:5;879:13;872:21;865:5;862:32;852:60;;908:1;905;898:12;852:60;931:5;665:277;-1:-1:-1;;;665:277:84:o;947:203::-;125:505:56;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_values_1520": {
                  "entryPoint": 4133,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 2017,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 2719,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 2157,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@bondTime_5611": {
                  "entryPoint": null,
                  "id": 5611,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_5636": {
                  "entryPoint": null,
                  "id": 5636,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@inflationPeriod_5631": {
                  "entryPoint": null,
                  "id": 5631,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 2594,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keep3rHelper_5602": {
                  "entryPoint": null,
                  "id": 5602,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1Proxy_5598": {
                  "entryPoint": null,
                  "id": 5598,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1_5594": {
                  "entryPoint": null,
                  "id": 5594,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keepers_5506": {
                  "entryPoint": 2707,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@kp3rWethPool_5606": {
                  "entryPoint": null,
                  "id": 5606,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@liquidityMinimum_5621": {
                  "entryPoint": null,
                  "id": 5621,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@removeDisputer_6072": {
                  "entryPoint": 3933,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 2903,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@rewardPeriodTime_5626": {
                  "entryPoint": null,
                  "id": 5626,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@setBondTime_5836": {
                  "entryPoint": 3295,
                  "id": 5836,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setFee_5933": {
                  "entryPoint": 2341,
                  "id": 5933,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 3083,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setInflationPeriod_5915": {
                  "entryPoint": 3201,
                  "id": 5915,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rHelper_5717": {
                  "entryPoint": 2437,
                  "id": 5717,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1Proxy_5773": {
                  "entryPoint": 3391,
                  "id": 5773,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1_5745": {
                  "entryPoint": 3776,
                  "id": 5745,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_5818": {
                  "entryPoint": 1659,
                  "id": 5818,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setLiquidityMinimum_5872": {
                  "entryPoint": 3680,
                  "id": 5872,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRewardPeriodTime_5897": {
                  "entryPoint": 3548,
                  "id": 5897,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setUnbondTime_5854": {
                  "entryPoint": 2611,
                  "id": 5854,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@unbondTime_5616": {
                  "entryPoint": null,
                  "id": 5616,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 4113,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@viewIsKP3RToken0_10470": {
                  "entryPoint": null,
                  "id": 10470,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@viewLiquidityPool_10458": {
                  "entryPoint": null,
                  "id": 10458,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_address": {
                  "entryPoint": 4225,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 4253,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 4280,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 4331,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 4365,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 4390,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 4410,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:2357:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "111:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "262:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "308:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "317:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "320:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "310:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "310:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "310:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "292:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "279:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "275:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "272:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "333:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "362:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "333:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "228:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "239:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "251:6:84",
                            "type": ""
                          }
                        ],
                        "src": "192:186:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "470:173:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "516:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "525:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "528:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "518:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "518:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "518:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "491:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "500:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "487:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "487:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "512:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "480:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "541:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "570:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "551:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "551:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "541:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "589:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "622:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "633:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "618:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "618:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "599:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "599:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "589:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "428:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "439:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "451:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "459:6:84",
                            "type": ""
                          }
                        ],
                        "src": "383:260:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "726:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "772:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "781:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "784:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "774:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "774:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "774:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "747:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "756:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "743:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "743:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "768:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "739:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "739:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "736:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "797:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "816:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "810:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "810:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "801:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "879:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "888:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "891:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "881:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "881:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "881:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "848:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "869:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "862:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "862:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "855:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "855:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "845:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "845:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "838:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "838:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "835:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "904:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "914:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "904:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "692:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "703:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "715:6:84",
                            "type": ""
                          }
                        ],
                        "src": "648:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1000:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1046:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1055:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1058:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1048:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1048:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1048:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1021:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1030:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1017:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1017:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1042:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1013:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1013:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1010:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1071:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1094:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1081:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1081:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1071:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "966:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "977:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "989:6:84",
                            "type": ""
                          }
                        ],
                        "src": "930:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1216:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1226:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1238:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1249:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1234:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1234:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1226:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1268:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1283:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1299:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1304:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1295:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1295:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1308:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1291:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1291:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1279:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1261:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1261:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1261:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1185:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1196:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1207:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1115:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1474:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1484:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1494:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1488:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1505:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1523:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1534:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1519:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1519:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1509:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1553:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1564:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1546:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1546:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1546:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1576:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "1587:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "1580:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1602:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1622:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1616:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1616:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "1606:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1645:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1653:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1638:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1638:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1638:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1669:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1680:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1691:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1676:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1676:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "1669:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1703:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1721:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1729:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1717:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1717:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1707:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1741:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1750:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "1745:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1809:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "1830:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1845:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "1839:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1839:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "1862:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "1867:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1858:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "1858:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "1871:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "1854:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1854:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "1835:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1835:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1823:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1823:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1823:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1888:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "1899:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1904:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1895:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1895:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "1888:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1920:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "1934:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1942:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1930:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1930:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1920:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1771:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1774:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1768:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1768:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1782:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1784:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1793:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1796:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1789:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1789:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1784:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1764:3:84",
                                "statements": []
                              },
                              "src": "1760:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1964:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "1972:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1964:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1443:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1454:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1465:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1323:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2081:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2091:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2103:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2114:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2099:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2099:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2091:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2133:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "2158:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "2151:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2151:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "2144:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2144:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2126:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2126:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2126:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2050:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2061:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2072:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1986:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2279:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2289:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2301:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2312:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2297:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2297:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2289:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2331:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2342:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2324:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2324:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2324:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2248:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2259:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2270:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2178:177:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106102345760003560e01c8063951dc22c11610131578063cb4be2bb116100b3578063cb4be2bb14610599578063cb54694d146105ac578063cd22af1b146105bf578063ddca3f43146105ea578063e326ac43146105f3578063ebbb619414610613578063ec00cdfc14610626578063f0f346b914610639578063f11a1d1a1461064c578063f39c38a01461065f578063fc253d2b1461067257600080fd5b8063951dc22c146104a55780639d5c33d8146104ad578063a39744b5146104c0578063a7d2e784146104eb578063aac6aa9c146104f4578063ab033ea914610507578063b0103b1a1461051a578063b23922331461053d578063b7e7734014610550578063b87fcbff14610563578063c7ae40d01461058657600080fd5b80635aa6e675116101ba5780635aa6e675146103e05780635ebe23f0146103f3578063633fb68f146103fc57806368a9f19c1461040557806369fe0e2d1461041857806372da828a1461042b578063768b5d901461043e5780637b40c913146104475780637c8fce231461045a5780638cb22b761461046f5780638fe204dd1461049257600080fd5b806307b435c21461023957806315006b8214610277578063160e1e31146102a2578063168f92e7146102b75780631b44555e146102e25780631ef94b911461030257806321040b0114610322578063238efcbc1461034d578063240d2d7414610355578063274a8db4146103815780634b6c91a7146103b4575b600080fd5b6102646102473660046110b8565b600f60209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6102646102853660046110b8565b600d60209081526000928352604080842090915290825290205481565b6102b56102b036600461109d565b61067b565b005b6102646102c53660046110b8565b600660209081526000928352604080842090915290825290205481565b6102646102f036600461109d565b60026020526000908152604090205481565b601854610315906001600160a01b031681565b60405161026e9190611126565b6102646103303660046110b8565b601060209081526000928352604080842090915290825290205481565b6102b56107e1565b61031561036336600461109d565b6001600160a01b039081166000908152600b60205260409020541690565b6103a461038f36600461109d565b60176020526000908152604090205460ff1681565b604051901515815260200161026e565b6103a46103c236600461109d565b6001600160a01b03166000908152600c602052604090205460ff1690565b601454610315906001600160a01b031681565b610264601c5481565b610264601e5481565b6102b561041336600461109d565b61086d565b6102b561042636600461110d565b610925565b6102b561043936600461109d565b610985565b610264601f5481565b601b54610315906001600160a01b031681565b610462610a22565b60405161026e919061113a565b6103a461047d36600461109d565b60116020526000908152604090205460ff1681565b6102b56104a036600461110d565b610a33565b610462610a93565b6102b56104bb36600461109d565b610a9f565b6102646104ce3660046110b8565b600560209081526000928352604080842090915290825290205481565b610264601d5481565b6102b561050236600461109d565b610b57565b6102b561051536600461109d565b610c0b565b6103a461052836600461109d565b60046020526000908152604090205460ff1681565b6102b561054b36600461110d565b610c81565b6102b561055e36600461110d565b610cdf565b6103a461057136600461109d565b60166020526000908152604090205460ff1681565b601954610315906001600160a01b031681565b6102b56105a736600461109d565b610d3f565b6102b56105ba36600461110d565b610ddc565b6102646105cd3660046110b8565b600e60209081526000928352604080842090915290825290205481565b61026460215481565b61026461060136600461109d565b60036020526000908152604090205481565b6102b561062136600461110d565b610e60565b6102b561063436600461109d565b610ec0565b6102b561064736600461109d565b610f5d565b601a54610315906001600160a01b031681565b601554610315906001600160a01b031681565b61026460205481565b6014546001600160a01b031633146106a6576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166106cd5760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b038084166001600160a01b031992831681179093556000838152600b6020526040908190208054909316909317909155601a54915163696a437b60e01b815291169063696a437b9061072e908490600401611126565b60206040518083038186803b15801561074657600080fd5b505afa15801561075a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077e91906110eb565b6001600160a01b0382166000908152600c602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa906107d6908390611126565b60405180910390a150565b6015546001600160a01b0316331461080c57604051637ef5703160e11b815260040160405180910390fd5b60158054601480546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161086391611126565b60405180910390a1565b6014546001600160a01b03163314610898576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090205460ff16156108d25760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b906107d6908390611126565b6014546001600160a01b03163314610950576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d906020016107d6565b6014546001600160a01b031633146109b0576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166109d75760405163d92e233d60e01b815260040160405180910390fd5b601a80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b0906107d6908390611126565b6060610a2e6012611011565b905090565b6014546001600160a01b03163314610a5e576040516354348f0360e01b815260040160405180910390fd5b601d8190556040518181527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee2906020016107d6565b6060610a2e6000611011565b6014546001600160a01b03163314610aca576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff1615610b045760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f906107d6908390611126565b6014546001600160a01b03163314610b82576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090205460ff16610bbb576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526016602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d025906107d6908390611126565b6014546001600160a01b03163314610c36576040516354348f0360e01b815260040160405180910390fd5b601580546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906107d6908390611126565b6014546001600160a01b03163314610cac576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6991016107d6565b6014546001600160a01b03163314610d0a576040516354348f0360e01b815260040160405180910390fd5b601c8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b43906020016107d6565b6014546001600160a01b03163314610d6a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610d915760405163d92e233d60e01b815260040160405180910390fd5b601980546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae250906107d6908390611126565b6014546001600160a01b03163314610e07576040516354348f0360e01b815260040160405180910390fd5b62015180811015610e2b57604051633f384aad60e21b815260040160405180910390fd5b601f8190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d9906020016107d6565b6014546001600160a01b03163314610e8b576040516354348f0360e01b815260040160405180910390fd5b601e8190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e7906020016107d6565b6014546001600160a01b03163314610eeb576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610f125760405163d92e233d60e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf906107d6908390611126565b6014546001600160a01b03163314610f88576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff16610fc157604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e906107d6908390611126565b6060600061101e83611025565b9392505050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561107557602002820191906000526020600020905b815481526020019060010190808311611061575b50505050509050919050565b80356001600160a01b038116811461109857600080fd5b919050565b6000602082840312156110af57600080fd5b61101e82611081565b600080604083850312156110cb57600080fd5b6110d483611081565b91506110e260208401611081565b90509250929050565b6000602082840312156110fd57600080fd5b8151801515811461101e57600080fd5b60006020828403121561111f57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b8181101561117b5783516001600160a01b031683529284019291840191600101611156565b5090969550505050505056fea264697066735822122080febc874e1e77874c46e6e52428bf1c5554a932b51c5499835e2bad5a4d86c364736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x234 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x951DC22C GT PUSH2 0x131 JUMPI DUP1 PUSH4 0xCB4BE2BB GT PUSH2 0xB3 JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x599 JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x5AC JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x5BF JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x5EA JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x5F3 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0x613 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0x626 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x639 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0x64C JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x65F JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0x672 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x951DC22C EQ PUSH2 0x4A5 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x4C0 JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x4EB JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x4F4 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x507 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x51A JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x53D JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x550 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x563 JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x586 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5AA6E675 GT PUSH2 0x1BA JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x3E0 JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x3F3 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x3FC JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x405 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x42B JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x447 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x45A JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x46F JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x492 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x2E2 JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x322 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x34D JUMPI DUP1 PUSH4 0x240D2D74 EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x381 JUMPI DUP1 PUSH4 0x4B6C91A7 EQ PUSH2 0x3B4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x264 PUSH2 0x247 CALLDATASIZE PUSH1 0x4 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x264 PUSH2 0x285 CALLDATASIZE PUSH1 0x4 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x2B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0x67B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x264 PUSH2 0x2C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x2F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x315 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26E SWAP2 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x330 CALLDATASIZE PUSH1 0x4 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x7E1 JUMP JUMPDEST PUSH2 0x315 PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x38F CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x26E JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x3C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x315 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH1 0x1C SLOAD DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH1 0x1E SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x413 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0x86D JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x426 CALLDATASIZE PUSH1 0x4 PUSH2 0x110D JUMP JUMPDEST PUSH2 0x925 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x439 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0x985 JUMP JUMPDEST PUSH2 0x264 PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x315 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x462 PUSH2 0xA22 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26E SWAP2 SWAP1 PUSH2 0x113A JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x47D CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x4A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x110D JUMP JUMPDEST PUSH2 0xA33 JUMP JUMPDEST PUSH2 0x462 PUSH2 0xA93 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x4BB CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0xA9F JUMP JUMPDEST PUSH2 0x264 PUSH2 0x4CE CALLDATASIZE PUSH1 0x4 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH1 0x1D SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x502 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x515 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0xC0B JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x528 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x54B CALLDATASIZE PUSH1 0x4 PUSH2 0x110D JUMP JUMPDEST PUSH2 0xC81 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x55E CALLDATASIZE PUSH1 0x4 PUSH2 0x110D JUMP JUMPDEST PUSH2 0xCDF JUMP JUMPDEST PUSH2 0x3A4 PUSH2 0x571 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x19 SLOAD PUSH2 0x315 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x5A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0xD3F JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x5BA CALLDATASIZE PUSH1 0x4 PUSH2 0x110D JUMP JUMPDEST PUSH2 0xDDC JUMP JUMPDEST PUSH2 0x264 PUSH2 0x5CD CALLDATASIZE PUSH1 0x4 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x601 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x621 CALLDATASIZE PUSH1 0x4 PUSH2 0x110D JUMP JUMPDEST PUSH2 0xE60 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x634 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0xEC0 JUMP JUMPDEST PUSH2 0x2B5 PUSH2 0x647 CALLDATASIZE PUSH1 0x4 PUSH2 0x109D JUMP JUMPDEST PUSH2 0xF5D JUMP JUMPDEST PUSH1 0x1A SLOAD PUSH2 0x315 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH2 0x315 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x6CD JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1A SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x72E SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x746 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x75A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x77E SWAP2 SWAP1 PUSH2 0x10EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x80C JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x15 DUP1 SLOAD PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x863 SWAP2 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x898 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x8D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x950 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9B0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x9D7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xA2E PUSH1 0x12 PUSH2 0x1011 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA5E JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP1 PUSH1 0x20 ADD PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xA2E PUSH1 0x0 PUSH2 0x1011 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xACA JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB04 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB82 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xBBB JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC36 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP2 ADD PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD0A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD91 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x19 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE07 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0xE2B JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE8B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xEEB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xF12 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xF88 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xFC1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x7D6 SWAP1 DUP4 SWAP1 PUSH2 0x1126 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x101E DUP4 PUSH2 0x1025 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1075 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1061 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1098 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x101E DUP3 PUSH2 0x1081 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10D4 DUP4 PUSH2 0x1081 JUMP JUMPDEST SWAP2 POP PUSH2 0x10E2 PUSH1 0x20 DUP5 ADD PUSH2 0x1081 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x101E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x111F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x117B JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1156 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP1 INVALID 0xBC DUP8 0x4E 0x1E PUSH24 0x874C46E6E52428BF1C5554A932B51C5499835E2BAD5A4D86 0xC3 PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "125:505:56:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1968:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;2324:25:84;;;2312:2;2297:18;1968:80:29;;;;;;;;1728:76;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2556:364:31;;;;;;:::i;:::-;;:::i;:::-;;880:79:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;:::i;:::-;;;;;;;;;;;;;;362:32:31;;;;;-1:-1:-1;;;;;362:32:31;;;;;;;;;;:::i;2090:78:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;407:111:56:-;;;;;;:::i;:::-;-1:-1:-1;;;;;492:21:56;;;470:7;492:21;;;:14;:21;;;;;;;;407:111;384:50:32;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2151:14:84;;2144:22;2126:41;;2114:2;2099:18;384:50:32;1986:187:84;522:106:56;;;;;;:::i;:::-;-1:-1:-1;;;;;603:20:56;584:4;603:20;;;:13;:20;;;;;;;;;522:106;199:34:28;;;;;-1:-1:-1;;;;;199:34:28;;;667:41:31;;;;;;834:50;;;;;;533:194:32;;;;;;:::i;:::-;;:::i;4195:110:31:-;;;;;;:::i;:::-;;:::i;1788:223::-;;;;;;:::i;:::-;;:::i;925:49::-;;;;;;590:36;;;;;-1:-1:-1;;;;;590:36:31;;;2385:105:29;;;:::i;:::-;;;;;;;:::i;2210:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3140:152:31;;;;;;:::i;:::-;;:::i;2531:111:29:-;;;:::i;999:203:32:-;;;;;;:::i;:::-;;:::i;769:69:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;749:44:31;;;;;;762:202:32;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3973:182:31;;;;;;:::i;:::-;;:::i;2960:140::-;;;;;;:::i;:::-;;:::i;299:49:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;435:37:31;;;;;-1:-1:-1;;;;;435:37:31;;;2286:230;;;;;;:::i;:::-;;:::i;3666:267::-;;;;;;:::i;:::-;;:::i;1846:80:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1105:32:31;;;;;;534:53:29;;;;;;:::i;:::-;;;;;;;;;;;;;;3332:188:31;;;;;;:::i;:::-;;:::i;2051:195::-;;;;;;:::i;:::-;;:::i;1237:211:32:-;;;;;;:::i;:::-;;:::i;513:36:31:-;;;;;-1:-1:-1;;;;;513:36:31;;;268:41:28;;;;;-1:-1:-1;;;;;268:41:28;;;1015:49:31;;;;;;2556:364;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2647:27:31;::::1;2643:53;;2683:13;;-1:-1:-1::0;;;2683:13:31::1;;;;;;;;;;;2643:53;2702:12;:28:::0;;-1:-1:-1;;;;;2702:28:31;;::::1;-1:-1:-1::0;;;;;;2702:28:31;;::::1;::::0;::::1;::::0;;;:12:::1;2736:28:::0;;;:14:::1;:28;::::0;;;;;;:43;;;;::::1;::::0;;::::1;::::0;;;2830:12:::1;::::0;2816:55;;-1:-1:-1;;;2816:55:31;;2830:12;::::1;::::0;2816:40:::1;::::0;:55:::1;::::0;2717:13;;2816:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2785:28:31;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;:86;;-1:-1:-1;;2785:86:31::1;::::0;::::1;;::::0;;;::::1;::::0;;;2882:33;::::1;::::0;::::1;::::0;2785:28;;2882:33:::1;:::i;:::-;;;;;;;;2556:364:::0;:::o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;754:10:::1;:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;533:194:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;4195:110:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4264:3:31::1;:10:::0;;;4285:15:::1;::::0;2324:25:84;;;4285:15:31::1;::::0;2312:2:84;2297:18;4285:15:31::1;2178:177:84::0;1788:223:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1879:27:31;::::1;1875:53;;1915:13;;-1:-1:-1::0;;;1915:13:31::1;;;;;;;;;;;1875:53;1934:12;:28:::0;;-1:-1:-1;;;;;;1934:28:31::1;-1:-1:-1::0;;;;;1934:28:31;::::1;;::::0;;1973:33:::1;::::0;::::1;::::0;::::1;::::0;1934:28;;1973:33:::1;:::i;2385:105:29:-:0;2433:22;2471:14;:5;:12;:14::i;:::-;2463:22;;2385:105;:::o;3140:152:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3223:10:31::1;:24:::0;;;3258:29:::1;::::0;2324:25:84;;;3258:29:31::1;::::0;2312:2:84;2297:18;3258:29:31::1;2178:177:84::0;2531:111:29;2582:22;2620:17;:8;:15;:17::i;999:203:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;762:202::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;3973:182:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4066:15:31::1;:34:::0;;;4111:39:::1;::::0;2324:25:84;;;4111:39:31::1;::::0;2297:18:84;4111:39:31::1;2178:177:84::0;2960:140:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3039:8:31::1;:20:::0;;;3070:25:::1;::::0;2324::84;;;3070::31::1;::::0;2312:2:84;2297:18;3070:25:31::1;2178:177:84::0;2286:230:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2379:28:31;::::1;2375:54;;2416:13;;-1:-1:-1::0;;;2416:13:31::1;;;;;;;;;;;2375:54;2435:13;:30:::0;;-1:-1:-1;;;;;;2435:30:31::1;-1:-1:-1::0;;;;;2435:30:31;::::1;;::::0;;2476:35:::1;::::0;::::1;::::0;::::1;::::0;2435:30;;2476:35:::1;:::i;3666:267::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1341:6:31::1;3765:17;:43;3761:73;;;3817:17;;-1:-1:-1::0;;;3817:17:31::1;;;;;;;;;;;3761:73;3840:16;:36:::0;;;3887:41:::1;::::0;2324:25:84;;;3887:41:31::1;::::0;2312:2:84;2297:18;3887:41:31::1;2178:177:84::0;3332:188:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3427:16:31::1;:36:::0;;;3474:41:::1;::::0;2324:25:84;;;3474:41:31::1;::::0;2312:2:84;2297:18;3474:41:31::1;2178:177:84::0;2051:195:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2134:23:31;::::1;2130:49;;2166:13;;-1:-1:-1::0;;;2166:13:31::1;;;;;;;;;;;2130:49;2185:8;:20:::0;;-1:-1:-1;;;;;;2185:20:31::1;-1:-1:-1::0;;;;;2185:20:31;::::1;;::::0;;2216:25:::1;::::0;::::1;::::0;::::1;::::0;2185:20;;2216:25:::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;9499:257:8:-:0;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;:::-;9590:44;9499:257;-1:-1:-1;;;9499:257:8:o;4986:109::-;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;14:173:84:-;82:20;;-1:-1:-1;;;;;131:31:84;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:277::-;715:6;768:2;756:9;747:7;743:23;739:32;736:52;;;784:1;781;774:12;736:52;816:9;810:16;869:5;862:13;855:21;848:5;845:32;835:60;;891:1;888;881:12;930:180;989:6;1042:2;1030:9;1021:7;1017:23;1013:32;1010:52;;;1058:1;1055;1048:12;1010:52;-1:-1:-1;1081:23:84;;930:180;-1:-1:-1;930:180:84:o;1115:203::-;-1:-1:-1;;;;;1279:32:84;;;;1261:51;;1249:2;1234:18;;1115:203::o;1323:658::-;1494:2;1546:21;;;1616:13;;1519:18;;;1638:22;;;1465:4;;1494:2;1717:15;;;;1691:2;1676:18;;;1465:4;1760:195;1774:6;1771:1;1768:13;1760:195;;;1839:13;;-1:-1:-1;;;;;1835:39:84;1823:52;;1930:15;;;;1895:12;;;;1871:1;1789:9;1760:195;;;-1:-1:-1;1972:3:84;;1323:658;-1:-1:-1;;;;;;1323:658:84:o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "908200",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "52060",
                "addDisputer(address)": "30133",
                "addSlasher(address)": "30177",
                "bondTime()": "2329",
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "disputers(address)": "2753",
                "disputes(address)": "2686",
                "fee()": "2372",
                "firstSeen(address)": "2618",
                "governance()": "2384",
                "hasBonded(address)": "2752",
                "inflationPeriod()": "2526",
                "jobTokenCredits(address,address)": "infinite",
                "jobs()": "infinite",
                "keep3rHelper()": "2559",
                "keep3rV1()": "2495",
                "keep3rV1Proxy()": "2604",
                "keepers()": "infinite",
                "kp3rWethPool()": "2538",
                "liquidityMinimum()": "2351",
                "pendingBonds(address,address)": "infinite",
                "pendingGovernance()": "2581",
                "pendingUnbonds(address,address)": "infinite",
                "removeDisputer(address)": "30255",
                "removeSlasher(address)": "30190",
                "rewardPeriodTime()": "2439",
                "setBondTime(uint256)": "25740",
                "setFee(uint256)": "25652",
                "setGovernance(address)": "27948",
                "setInflationPeriod(uint256)": "25715",
                "setKeep3rHelper(address)": "27983",
                "setKeep3rV1(address)": "28004",
                "setKeep3rV1Proxy(address)": "27872",
                "setKp3rWethPool(address)": "infinite",
                "setLiquidityMinimum(uint256)": "25673",
                "setRewardPeriodTime(uint256)": "25611",
                "setUnbondTime(uint256)": "25784",
                "slashers(address)": "2752",
                "unbondTime()": "2373",
                "viewIsKP3RToken0(address)": "2793",
                "viewLiquidityPool(address)": "2791",
                "workCompleted(address)": "2620"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityMinimum()": "633fb68f",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "rewardPeriodTime()": "768b5d90",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "unbondTime()": "a7d2e784",
              "viewIsKP3RToken0(address)": "4b6c91a7",
              "viewLiquidityPool(address)": "240d2d74",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"viewIsKP3RToken0\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"viewLiquidityPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/Keep3rParametersForTest.sol\":\"Keep3rParametersForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/Keep3rParametersForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../contracts/peripherals/Keep3rParameters.sol';\\n\\ncontract Keep3rParametersForTest is Keep3rParameters {\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) Keep3rParameters(_keep3rHelper, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\\n\\n  function viewLiquidityPool(address _pool) public view returns (address) {\\n    return _liquidityPool[_pool];\\n  }\\n\\n  function viewIsKP3RToken0(address _pool) public view returns (bool) {\\n    return _isKP3RToken0[_pool];\\n  }\\n}\\n\",\"keccak256\":\"0x780fd4888e0ef265746e52eca8260d46beae3803af1a57eb6cc2c541b0010588\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 5368,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "_keepers",
                "offset": 0,
                "slot": "0",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "workCompleted",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "firstSeen",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "disputes",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "bonds",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "hasBonded",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "_jobs",
                "offset": 0,
                "slot": "18",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "governance",
                "offset": 0,
                "slot": "20",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "21",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "slashers",
                "offset": 0,
                "slot": "22",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "disputers",
                "offset": 0,
                "slot": "23",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "25",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "26",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "bondTime",
                "offset": 0,
                "slot": "28",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "unbondTime",
                "offset": 0,
                "slot": "29",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "30",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                "label": "fee",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/for-test/peripherals/Keep3rParametersForTest.sol:Keep3rParametersForTest",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol": {
        "Keep3rJobDisputableForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kph",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "AlreadyDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "Dispute",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashLiquidity",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashToken",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_resolver",
                  "type": "address"
                }
              ],
              "name": "Resolve",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "internalJobLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_tokens",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "internalJobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "internalJobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "internalJobTokens",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_tokens",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "setApprovedLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "setJobLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                }
              ],
              "name": "setJobToken",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "setRevokedLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashTokenFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "dispute(address)": {
                "params": {
                  "_jobOrKeeper": "The address in dispute"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_liquidityCredits": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_periodCredits": "The credits the given job has at the current period"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "resolve(address)": {
                "params": {
                  "_jobOrKeeper": "The address cleared"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity that will be slashed",
                  "_job": "The address being slashed",
                  "_liquidity": "The address of the liquidity that will be slashed"
                }
              },
              "slashTokenFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of the token that will be slashed",
                  "_job": "The address of the job from which the token will be slashed",
                  "_token": "The address of the token that will be slashed"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_credits": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_10502": {
                  "entryPoint": null,
                  "id": 10502,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_18": {
                  "entryPoint": null,
                  "id": 18,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5689": {
                  "entryPoint": null,
                  "id": 5689,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 423,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory": {
                  "entryPoint": 452,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 545,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1152:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "328:332:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "375:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "384:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "387:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "377:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "377:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "377:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "349:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "358:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "345:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "345:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "370:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "341:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "341:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "338:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "400:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "440:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "410:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "410:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "400:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "459:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "503:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "514:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "499:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "499:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "469:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "469:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "459:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "527:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "571:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "582:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "567:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "567:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "537:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "537:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "527:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "595:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "639:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "650:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "635:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "635:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "605:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "605:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "595:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "270:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "281:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "293:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "301:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "309:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "317:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:464:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "743:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "789:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "798:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "801:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "791:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "791:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "791:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "764:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "773:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "760:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "760:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "785:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "756:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "756:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "753:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "814:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "833:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "827:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "827:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "818:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "896:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "905:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "908:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "898:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "898:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "898:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "865:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "886:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "879:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "879:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "872:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "872:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "862:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "855:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "855:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "852:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "921:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "931:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "921:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "709:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "720:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "732:6:84",
                            "type": ""
                          }
                        ],
                        "src": "665:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1048:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1058:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1070:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1081:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1066:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1066:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1058:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1100:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1115:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1131:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1136:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1127:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1127:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1140:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1123:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1123:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1111:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1111:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1093:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1093:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1093:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1017:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1028:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1039:4:84",
                            "type": ""
                          }
                        ],
                        "src": "947:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526203f480601f55621275006020556729a2241af62c000060215562069780602255622cd300602355601e6024553480156200003e57600080fd5b5060405162004866380380620048668339810160408190526200006191620001c4565b6001600055838383833380806200008a5760405162b293ed60e81b815260040160405180910390fd5b601780546001600160a01b03199081166001600160a01b0393841617909155601d80548216888416178155601b80548316888516179055601c80548316878516179055601e8054831686851690811782556000818152600e602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200013557600080fd5b505afa1580156200014a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000170919062000221565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055506200024c95505050505050565b80516001600160a01b0381168114620001bf57600080fd5b919050565b60008060008060808587031215620001db57600080fd5b620001e685620001a7565b9350620001f660208601620001a7565b92506200020660408601620001a7565b91506200021660608601620001a7565b905092959194509250565b6000602082840312156200023457600080fd5b815180151581146200024557600080fd5b9392505050565b61460a806200025c6000396000f3fe608060405234801561001057600080fd5b50600436106103945760003560e01c80638fe204dd116101e1578063cb54694d1161010b578063cb54694d1461092d578063cd22af1b14610940578063d55995fe1461096b578063ddca3f431461097e578063de55351d14610987578063deaf81d4146109b0578063e01f857c146109c3578063e326ac43146109d6578063e89aad28146109f6578063ebbb619414610a09578063ec00cdfc14610a1c578063f0f346b914610a2f578063f11a1d1a14610a42578063f136a09d14610a55578063f25e311b14610a75578063f39c38a014610a88578063f75f9f7b14610a9b578063fc253d2b14610aae578063fe75bc4614610ab757600080fd5b80638fe204dd14610766578063951dc22c1461077957806398e90a0f146107815780639d5c33d8146107aa578063a2145809146107bd578063a39744b5146107d0578063a676f9ff146107fb578063a7d2e7841461081b578063aac6aa9c14610824578063ab033ea914610837578063b0103b1a1461084a578063b23922331461086d578063b440027f14610880578063b600702a146108ab578063b7e77340146108be578063b87fcbff146108d1578063c7ae40d0146108f4578063cacdf93d14610907578063cb4be2bb1461091a57600080fd5b8063594a3a93116102c2578063594a3a93146105e857806359a2255e146105fb5780635aa6e6751461060e5780635ebe23f014610621578063633fb68f1461062a57806364bb43ee1461063357806368a9f19c14610646578063694798e61461065957806369fe0e2d146106845780636cf262bc146106975780636e2a9ca6146106aa57806372da828a146106bd57806375a9f7ff146106d0578063768b5d90146106e35780637b40c913146106ec5780637c8fce23146106ff578063878c723e146107075780638bb6dfa8146107305780638cb22b761461074357600080fd5b8063034d4c611461039957806307b435c2146103bf5780630c620bce146103ea5780630d6a1f87146103ff5780630dc60206146104125780631101eb411461043b57806315006b8214610450578063160e1e311461047b578063165e62e71461048e578063168f92e7146104cb5780631b44555e146104f65780631ef94b911461051657806321040b0114610536578063238efcbc14610561578063274a8db414610569578063280b656c1461059c57806352a4de29146105af57806355ea6c47146105c2578063575288bf146105d5575b600080fd5b6103ac6103a7366004614097565b610aca565b6040519081526020015b60405180910390f35b6103ac6103cd3660046140d1565b601260209081526000928352604080842090915290825290205481565b6103f2610bd0565b6040516103b6919061434a565b6103ac61040d3660046141e9565b610be1565b6103ac610420366004614097565b6001600160a01b03166000908152600b602052604090205490565b61044e610449366004614155565b610ce7565b005b6103ac61045e3660046140d1565b601060209081526000928352604080842090915290825290205481565b61044e610489366004614097565b610e41565b6104a161049c366004614097565b610fa7565b604080518251600690810b825260208085015190910b9082015291810151908201526060016103b6565b6103ac6104d93660046140d1565b600960209081526000928352604080842090915290825290205481565b6103ac610504366004614097565b60056020526000908152604090205481565b601b54610529906001600160a01b031681565b6040516103b691906142c1565b6103ac6105443660046140d1565b601360209081526000928352604080842090915290825290205481565b61044e61136d565b61058c610577366004614097565b601a6020526000908152604090205460ff1681565b60405190151581526020016103b6565b61044e6105aa366004614097565b6113f9565b61044e6105bd366004614155565b611408565b61044e6105d0366004614097565b611656565b61044e6105e3366004614155565b61170a565b61044e6105f63660046140d1565b6119cd565b61044e610609366004614097565b611a72565b601754610529906001600160a01b031681565b6103ac601f5481565b6103ac60215481565b61044e610641366004614097565b611b24565b61044e610654366004614097565b611ba6565b6103ac6106673660046140d1565b602860209081526000928352604080842090915290825290205481565b61044e610692366004614273565b611c5e565b6103ac6106a5366004614097565b611cbe565b61044e6106b8366004614155565b611df4565b61044e6106cb366004614097565b611f43565b6103f26106de366004614097565b611fe0565b6103ac60225481565b601e54610529906001600160a01b031681565b6103f26120d0565b610529610715366004614097565b6001602052600090815260409020546001600160a01b031681565b6103ac61073e366004614097565b6120dc565b61058c610751366004614097565b60146020526000908152604090205460ff1681565b61044e610774366004614273565b61217f565b6103f26121dd565b61052961078f366004614097565b6002602052600090815260409020546001600160a01b031681565b61044e6107b8366004614097565b6121e9565b61044e6107cb36600461410a565b6122a1565b6103ac6107de3660046140d1565b600860209081526000928352604080842090915290825290205481565b6103ac610809366004614097565b60296020526000908152604090205481565b6103ac60205481565b61044e610832366004614097565b612471565b61044e610845366004614097565b612525565b61058c610858366004614097565b60076020526000908152604090205460ff1681565b61044e61087b366004614273565b61259b565b6103ac61088e3660046140d1565b602560209081526000928352604080842090915290825290205481565b61044e6108b9366004614097565b6125fb565b61044e6108cc366004614273565b612820565b61058c6108df366004614097565b60196020526000908152604090205460ff1681565b601c54610529906001600160a01b031681565b61044e6109153660046140d1565b612880565b61044e610928366004614097565b6128a7565b61044e61093b366004614273565b612944565b6103ac61094e3660046140d1565b601160209081526000928352604080842090915290825290205481565b61044e610979366004614196565b6129c8565b6103ac60245481565b6103ac610995366004614097565b6001600160a01b03166000908152600a602052604090205490565b61044e6109be366004614097565b612bff565b61044e6109d13660046140d1565b612c0a565b6103ac6109e4366004614097565b60066020526000908152604090205481565b6103f2610a04366004614097565b612c2c565b61044e610a17366004614273565b612d1c565b61044e610a2a366004614097565b612d7c565b61044e610a3d366004614097565b612e19565b601d54610529906001600160a01b031681565b6103ac610a63366004614097565b602a6020526000908152604090205481565b61044e610a83366004614155565b612ecd565b601854610529906001600160a01b031681565b61044e610aa9366004614097565b613112565b6103ac60235481565b61044e610ac53660046141e9565b6131ca565b600080610ad683611cbe565b6022549091504290610af190610aec90836144b5565b6132ba565b6001600160a01b0385166000908152602960205260409020541115610b95576022546001600160a01b038516600090815260296020526040902054610b3690426144b5565b10610b72576022546001600160a01b038516600090815260296020526040902054610b61919061441a565b610b6b90826144b5565b9050610bab565b6001600160a01b038416600090815260296020526040902054610b6b90826144b5565b610b9e426132ba565b610ba890826144b5565b90505b610bb581836132d4565b610bbe856120dc565b610bc8919061441a565b949350505050565b6060610bdc60266132fe565b905090565b6000610bee602684613312565b15610ce1576000610bfe84610fa7565b90508060400151600014610cdf576001600160a01b0384166000908152600f602052604081205460ff16610c3f578160200151610c3a90614527565b610c45565b81602001515b601d5460225460405163a0d2710760e01b8152929350610cd6926001600160a01b039092169163a0d2710791610c819189918791600401614401565b60206040518083038186803b158015610c9957600080fd5b505afa158015610cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd1919061428c565b613334565b92505050610ce1565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610d2357604051636efb4f4160e11b815260040160405180910390fd5b602054610d30904261441a565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610d7f90849061441a565b90915550610d909050848484613345565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590610dcf5750602154610dcd8286613553565b105b15610ded57604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de85604051610e3291815260200190565b60405180910390a35050505050565b6017546001600160a01b03163314610e6c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610e935760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b90610ef49084906004016142c1565b60206040518083038186803b158015610f0c57600080fd5b505afa158015610f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f449190614215565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa90610f9c9083906142c1565b60405180910390a150565b6040805160608101825260008082526020820181905291810191909152610fcd426132ba565b6001600160a01b0383166000908152602b6020526040902060010154141561104357506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b60008061105760225442610aec91906144b5565b6001600160a01b0385166000908152602b60205260409020600101549091508114156111bb57604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b6110c4426132ba565b6110ce90426144b5565b826000815181106110e1576110e1614590565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d919261113d92919091169086906004016142d5565b60606040518083038186803b15801561115557600080fd5b505afa158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190614230565b600692830b90920b8088529195506111a791839150614465565b600690810b900b6020860152506113449050565b6001600160a01b0384166000908152602b602052604090206001015481111561134457604080516002808252606082018352600092602083019080368337019050509050611208426132ba565b61121290426144b5565b8160008151811061122557611225614590565b602002602001019063ffffffff16908163ffffffff168152505060225461124b426132ba565b61125590426144b5565b61125f919061441a565b8160018151811061127257611272614590565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d91926112ca92169086906004016142d5565b60606040518083038186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a9190614230565b600692830b90920b8088529195509150611335908290614465565b600690810b900b602086015250505b811561135d57611353426132ba565b6040840152611365565b600060408401525b50505b919050565b6018546001600160a01b0316331461139857604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916113ef916142c1565b60405180910390a1565b611404602682613671565b5050565b600260005414156114345760405162461bcd60e51b815260040161142b906143ca565b60405180910390fd5b6002600055611444602683613312565b6114615760405163e0b6aead60e01b815260040160405180910390fd5b61146c601584613312565b61148957604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d602052604090206114ab9083613671565b506114b583613686565b6021546001600160a01b038085166000908152602860209081526040808320938716835292905220546114f3906114ed90849061441a565b84613553565b101561151257604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b845293829020548251918252928101939093528201527fee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c38209060600160405180910390a26115906001600160a01b0383163330846136e4565b6001600160a01b038084166000908152602860209081526040808320938616835292905290812080548392906115c790849061441a565b909155506115da9050610cd18284613553565b6001600160a01b0384166000908152600b60205260408120805490919061160290849061441a565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b336000908152601a602052604090205460ff1661168657604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff166116bf576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b6002600054141561172d5760405162461bcd60e51b815260040161142b906143ca565b600260005561173d601584613312565b61175a57604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b03838116911614156117885760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a08231906117b79030906004016142c1565b60206040518083038186803b1580156117cf57600080fd5b505afa1580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611807919061428c565b905061181e6001600160a01b0384163330856136e4565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161184d91906142c1565b60206040518083038186803b15801561186557600080fd5b505afa158015611879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189d919061428c565b6118a791906144b5565b90506000612710602454836118bc9190614446565b6118c69190614432565b90506118d281836144b5565b6001600160a01b038088166000908152600960209081526040808320938a168352929052908120805490919061190990849061441a565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611946921683613755565b6001600160a01b0386166000908152600c602052604090206119689086613671565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb856040516119b891815260200190565b60405180910390a45050600160005550505050565b6001600160a01b038281166000908152600160205260409020548391163314611a0957604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b038181166000908152600260205260409020548291163314611aae5760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b6017546001600160a01b03163314611b4f576040516354348f0360e01b815260040160405180910390fd5b611b5a602682613774565b611b7757604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e5681604051610f9c91906142c1565b6017546001600160a01b03163314611bd1576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff1615611c0b5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b90610f9c9083906142c1565b6017546001600160a01b03163314611c89576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001610f9c565b6000805b6001600160a01b0383166000908152600d60205260409020611ce390613789565b811015611dee576001600160a01b0383166000908152600d60205260408120611d0c9083613793565b9050611d19602682613312565b15611ddb576000611d2982610fa7565b90508060400151600014611dd9576001600160a01b0382166000908152600f602052604081205460ff16611d6a578160200151611d6590614527565b611d70565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b8152949550611dcb94929093169263a0d2710792610c81928791600401614401565b611dd5908661441a565b9450505b505b5080611de6816144f8565b915050611cc2565b50919050565b3360009081526019602052604090205460ff16611e2457604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16611e5d576040516310cec38560e21b815260040160405180910390fd5b611e68838383613345565b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb92611e9c92909116908590600401614331565b602060405180830381600087803b158015611eb657600080fd5b505af1925050508015611ee6575060408051601f3d908101601f19168201909252611ee391810190614215565b60015b611eef57611ef1565b505b336001600160a01b0316836001600160a01b03167f6e10247c3c094d220ee99436c164b7f38d63b335a20ed817cbefaee4bb02d20e8484604051611f36929190614331565b60405180910390a3505050565b6017546001600160a01b03163314611f6e576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116611f955760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090610f9c9083906142c1565b6001600160a01b0381166000908152600d6020526040902060609061200490613789565b6001600160401b0381111561201b5761201b6145a6565b604051908082528060200260200182016040528015612044578160200160208202803683370190505b50905060005b6001600160a01b0383166000908152600d6020526040902061206b90613789565b811015611dee576001600160a01b0383166000908152600d602052604090206120949082613793565b8282815181106120a6576120a6614590565b6001600160a01b0390921660209283029190910190910152806120c8816144f8565b91505061204a565b6060610bdc60156132fe565b6000806120e883611cbe565b6022546001600160a01b0385166000908152602960205260409020549192509061211290426144b5565b1015610ce1576000811161213e576001600160a01b0383166000908152600a6020526040902054612178565b6001600160a01b0383166000908152600b6020908152604080832054600a9092529091205461216e908390614446565b6121789190614432565b9150611dee565b6017546001600160a01b031633146121aa576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29101610f9c565b6060610bdc60036132fe565b6017546001600160a01b03163314612214576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff161561224e5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f90610f9c9083906142c1565b6001600160a01b0383811660009081526001602052604090205484911633146122dd57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b0382166123045760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038085166000908152601360209081526040808320938716835292905220546123475760405163184c088160e21b815260040160405180910390fd5b6001600160a01b03808516600090815260126020908152604080832093871683529290522054421161238c576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff16156123c6576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590612413908483613755565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca79288628460405161246291815260200190565b60405180910390a45050505050565b6017546001600160a01b0316331461249c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff166124d5576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d02590610f9c9083906142c1565b6017546001600160a01b03163314612550576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610f9c9083906142c1565b6017546001600160a01b031633146125c6576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001610f9c565b6017546001600160a01b03163314612626576040516354348f0360e01b815260040160405180910390fd5b612631602682613671565b61264e5760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561268757600080fd5b505afa15801561269b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bf91906140b4565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b9161271391906004016142c1565b60206040518083038186803b15801561272b57600080fd5b505afa15801561273f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127639190614215565b6001600160a01b0382166000908152600f60205260409020805460ff191691151591909117905561279381610fa7565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b90610f9c9083906142c1565b6017546001600160a01b0316331461284b576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001610f9c565b6001600160a01b0382166000908152600d602052604090206128a29082613671565b505050565b6017546001600160a01b031633146128d2576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166128f95760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090610f9c9083906142c1565b6017546001600160a01b0316331461296f576040516354348f0360e01b815260040160405180910390fd5b6201518081101561299357604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001610f9c565b600260005414156129eb5760405162461bcd60e51b815260040161142b906143ca565b600260009081556001600160a01b03858116825260016020526040909120548591163314612a2c57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054612a5e90603c9061441a565b4211612a7d57604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115612ac35760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615612afd5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290612b349084906144b5565b90915550612b4e90506001600160a01b0385168385613755565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054612b9c576001600160a01b0385166000908152600c60205260409020612b9a9085613774565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051612beb91815260200190565b60405180910390a450506001600055505050565b611404602682613774565b6001600160a01b0382166000908152600c602052604090206128a29082613671565b6001600160a01b0381166000908152600c60205260409020606090612c5090613789565b6001600160401b03811115612c6757612c676145a6565b604051908082528060200260200182016040528015612c90578160200160208202803683370190505b50905060005b6001600160a01b0383166000908152600c60205260409020612cb790613789565b811015611dee576001600160a01b0383166000908152600c60205260409020612ce09082613793565b828281518110612cf257612cf2614590565b6001600160a01b039092166020928302919091019091015280612d14816144f8565b915050612c96565b6017546001600160a01b03163314612d47576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e790602001610f9c565b6017546001600160a01b03163314612da7576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612dce5760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90610f9c9083906142c1565b6017546001600160a01b03163314612e44576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff16612e7d57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e90610f9c9083906142c1565b3360009081526019602052604090205460ff16612efd57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16612f36576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b0383166000908152600c60205260409020612f589083613312565b612f7557604051632eda7a1160e01b815260040160405180910390fd5b6001600160a01b03808416600090815260096020908152604080832093861683529290522054811115612fba5760405162919bed60e01b815260040160405180910390fd5b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb92612fee92909116908590600401614331565b602060405180830381600087803b15801561300857600080fd5b505af1925050508015613038575060408051601f3d908101601f1916820190925261303591810190614215565b60015b61304157613043565b505b6001600160a01b0380841660009081526009602090815260408083209386168352929052908120805483929061307a9084906144b5565b90915550506001600160a01b038084166000908152600960209081526040808320938616835292905220546130cd576001600160a01b0383166000908152600c602052604090206130cb9083613774565b505b336001600160a01b0316836001600160a01b03167f20262b97130b5cb8f80624eed2733df2b05db4a0789b4a3d0157e1d3183331048484604051611f36929190614331565b336000908152601a602052604090205460ff1661314257604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff161561317c576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b6017546001600160a01b031633146131f5576040516354348f0360e01b815260040160405180910390fd5b613200601583613312565b61321d57604051636211d34960e01b815260040160405180910390fd5b61322682613686565b6001600160a01b0382166000908152600a60205260408120805483929061324e90849061441a565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d1926132ae928252602082015260400190565b60405180910390a25050565b6000602254826132ca9190614513565b610ce190836144b5565b6000602254831015611dee576022546132ed8385614446565b6132f79190614432565b9050610ce1565b6060600061330b8361379f565b9392505050565b6001600160a01b0381166000908152600183016020526040812054151561330b565b6000610ce1826022546023546137fb565b600260005414156133685760405162461bcd60e51b815260040161142b906143ca565b600260009081556001600160a01b0384168152600d6020526040902061338e9083613312565b6133aa576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156133f05760405163435b562560e01b815260040160405180910390fd5b6133f9836138a9565b6000613408610cd18385613553565b6001600160a01b0385166000908152600b6020526040902054909150156134be576001600160a01b0384166000908152600b6020908152604080832054600a90925290912054613459908390614446565b6134639190614432565b6001600160a01b0385166000908152600a60205260408120805490919061348b9084906144b5565b90915550506001600160a01b0384166000908152600b6020526040812080548392906134b89084906144b5565b90915550505b6001600160a01b038085166000908152602860209081526040808320938716835292905290812080548492906134f59084906144b5565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054613548576001600160a01b0384166000908152600d602052604090206135469084613774565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610ce1576001600160a01b0382166000908152600f602052604081205460ff166135c5576001600160a01b0383166000908152602b60205260409020546135c090600160381b900460060b614527565b6135e9565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d27107916136219188918691600401614401565b60206040518083038186803b15801561363957600080fd5b505afa15801561364d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc8919061428c565b600061330b836001600160a01b0384166138ce565b61368f8161391d565b5061369981613af3565b6001600160a01b0381166000908152600a6020908152604080832054600b909252909120546136c89190613b81565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b038085166024830152831660448201526064810182905261374f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613b97565b50505050565b6128a28363a9059cbb60e01b8484604051602401613718929190614331565b600061330b836001600160a01b038416613c69565b6000610ce1825490565b600061330b8383613d5c565b6060816000018054806020026020016040519081016040528092919081815260200182805480156137ef57602002820191906000526020600020905b8154815260200190600101908083116137db575b50505050509050919050565b600080806000198587098587029250828110838203039150508060001415613835576000841161382a57600080fd5b50829004905061330b565b80841161384157600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6138b281613d86565b6001600160a01b039091166000908152600b6020526040902055565b600081815260018301602052604081205461391557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ce1565b506000610ce1565b6000613928426132ba565b6001600160a01b03831660009081526029602052604090205410156113685761395860225442610aec91906144b5565b6001600160a01b038316600090815260296020526040902054116139ce5761397f826138a9565b6001600160a01b0382166000908152600b6020908152604080832054600a909252909120556139ad426132ba565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b0383166000908152602960205260409020546139f490426144b5565b10613a5057613a02826138a9565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460299092528220805491929091613a4190849061441a565b90915550600191506113689050565b613a59426132ba565b6001600160a01b0383166000908152602a60205260409020541015611368576001600160a01b0382166000908152600b6020526040902054613a9a836138a9565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291613aca91614446565b613ad49190614432565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260296020526040902054613b3890613b1a90426144b5565b6001600160a01b0383166000908152600b60205260409020546132d4565b6001600160a01b0382166000908152600a602052604081208054909190613b6090849061441a565b90915550506001600160a01b03166000908152602960205260409020429055565b6000818310613b90578161330b565b5090919050565b6000613bec826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613f6a9092919063ffffffff16565b8051909150156128a25780806020019051810190613c0a9190614215565b6128a25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161142b565b60008181526001830160205260408120548015613d52576000613c8d6001836144b5565b8554909150600090613ca1906001906144b5565b9050818114613d06576000866000018281548110613cc157613cc1614590565b9060005260206000200154905080876000018481548110613ce457613ce4614590565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613d1757613d1761457a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ce1565b6000915050610ce1565b6000826000018281548110613d7357613d73614590565b9060005260206000200154905092915050565b6000613d91426132ba565b601e546001600160a01b03166000908152602b602052604090206001015414613e2857601e54613dc9906001600160a01b0316610fa7565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d60205260409020613e4c90613789565b811015611dee576001600160a01b0383166000908152600d60205260408120613e759083613793565b9050613e82602682613312565b15613f5757613e90426132ba565b6001600160a01b0382166000908152602b602052604090206001015414613f1657613eba81610fa7565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b03808516600090815260286020908152604080832093851683529290522054613f4a90610cd19083613553565b613f54908461441a565b92505b5080613f62816144f8565b915050613e2b565b6060610bc8848460008585843b613fc35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161142b565b600080866001600160a01b03168587604051613fdf91906142a5565b60006040518083038185875af1925050503d806000811461401c576040519150601f19603f3d011682016040523d82523d6000602084013e614021565b606091505b509150915061403182828661403c565b979650505050505050565b6060831561404b57508161330b565b82511561405b5782518084602001fd5b8160405162461bcd60e51b815260040161142b9190614397565b8051801515811461136857600080fd5b8051600681900b811461136857600080fd5b6000602082840312156140a957600080fd5b813561330b816145bc565b6000602082840312156140c657600080fd5b815161330b816145bc565b600080604083850312156140e457600080fd5b82356140ef816145bc565b915060208301356140ff816145bc565b809150509250929050565b60008060006060848603121561411f57600080fd5b833561412a816145bc565b9250602084013561413a816145bc565b9150604084013561414a816145bc565b809150509250925092565b60008060006060848603121561416a57600080fd5b8335614175816145bc565b92506020840135614185816145bc565b929592945050506040919091013590565b600080600080608085870312156141ac57600080fd5b84356141b7816145bc565b935060208501356141c7816145bc565b92506040850135915060608501356141de816145bc565b939692955090935050565b600080604083850312156141fc57600080fd5b8235614207816145bc565b946020939093013593505050565b60006020828403121561422757600080fd5b61330b82614075565b60008060006060848603121561424557600080fd5b61424e84614085565b925061425c60208501614085565b915061426a60408501614075565b90509250925092565b60006020828403121561428557600080fd5b5035919050565b60006020828403121561429e57600080fd5b5051919050565b600082516142b78184602087016144cc565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b8181101561432457845163ffffffff1683529383019391830191600101614302565b5090979650505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561438b5783516001600160a01b031683529284019291840191600101614366565b50909695505050505050565b60208152600082518060208401526143b68160408501602087016144cc565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b6000821982111561442d5761442d61454e565b500190565b60008261444157614441614564565b500490565b60008160001904831182151516156144605761446061454e565b500290565b60008160060b8360060b6000811281667fffffffffffff19018312811516156144905761449061454e565b81667fffffffffffff0183138116156144ab576144ab61454e565b5090039392505050565b6000828210156144c7576144c761454e565b500390565b60005b838110156144e75781810151838201526020016144cf565b8381111561374f5750506000910152565b600060001982141561450c5761450c61454e565b5060010190565b60008261452257614522614564565b500690565b60008160060b667fffffffffffff198114156145455761454561454e565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146145d157600080fd5b5056fea2646970667358221220911d3e94d8d4f6238b4bb85c1d0e467849df8b763d2c4a650bf62ec1b71c1c6064736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x3F480 PUSH1 0x1F SSTORE PUSH3 0x127500 PUSH1 0x20 SSTORE PUSH8 0x29A2241AF62C0000 PUSH1 0x21 SSTORE PUSH3 0x69780 PUSH1 0x22 SSTORE PUSH3 0x2CD300 PUSH1 0x23 SSTORE PUSH1 0x1E PUSH1 0x24 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x4866 CODESIZE SUB DUP1 PUSH3 0x4866 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x61 SWAP2 PUSH3 0x1C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE DUP4 DUP4 DUP4 DUP4 CALLER DUP1 DUP1 PUSH3 0x8A JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1D DUP1 SLOAD DUP3 AND DUP9 DUP5 AND OR DUP2 SSTORE PUSH1 0x1B DUP1 SLOAD DUP4 AND DUP9 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1C DUP1 SLOAD DUP4 AND DUP8 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1E DUP1 SLOAD DUP4 AND DUP7 DUP6 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP6 AND SWAP1 SWAP2 OR SWAP1 SWAP4 SSTORE SWAP1 SLOAD SWAP1 SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x696A437B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x14A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x170 SWAP2 SWAP1 PUSH3 0x221 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x24C SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E6 DUP6 PUSH3 0x1A7 JUMP JUMPDEST SWAP4 POP PUSH3 0x1F6 PUSH1 0x20 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP3 POP PUSH3 0x206 PUSH1 0x40 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP2 POP PUSH3 0x216 PUSH1 0x60 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x460A DUP1 PUSH3 0x25C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x394 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8FE204DD GT PUSH2 0x1E1 JUMPI DUP1 PUSH4 0xCB54694D GT PUSH2 0x10B JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x92D JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x940 JUMPI DUP1 PUSH4 0xD55995FE EQ PUSH2 0x96B JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x97E JUMPI DUP1 PUSH4 0xDE55351D EQ PUSH2 0x987 JUMPI DUP1 PUSH4 0xDEAF81D4 EQ PUSH2 0x9B0 JUMPI DUP1 PUSH4 0xE01F857C EQ PUSH2 0x9C3 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x9D6 JUMPI DUP1 PUSH4 0xE89AAD28 EQ PUSH2 0x9F6 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0xA09 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0xA1C JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0xA2F JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0xA42 JUMPI DUP1 PUSH4 0xF136A09D EQ PUSH2 0xA55 JUMPI DUP1 PUSH4 0xF25E311B EQ PUSH2 0xA75 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0xA88 JUMPI DUP1 PUSH4 0xF75F9F7B EQ PUSH2 0xA9B JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0xAAE JUMPI DUP1 PUSH4 0xFE75BC46 EQ PUSH2 0xAB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x766 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x779 JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x781 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x7AA JUMPI DUP1 PUSH4 0xA2145809 EQ PUSH2 0x7BD JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x7D0 JUMPI DUP1 PUSH4 0xA676F9FF EQ PUSH2 0x7FB JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x81B JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x824 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x837 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x84A JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x86D JUMPI DUP1 PUSH4 0xB440027F EQ PUSH2 0x880 JUMPI DUP1 PUSH4 0xB600702A EQ PUSH2 0x8AB JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x8BE JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x8D1 JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x8F4 JUMPI DUP1 PUSH4 0xCACDF93D EQ PUSH2 0x907 JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x91A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x594A3A93 GT PUSH2 0x2C2 JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x5E8 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x5FB JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x60E JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x621 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x62A JUMPI DUP1 PUSH4 0x64BB43EE EQ PUSH2 0x633 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x646 JUMPI DUP1 PUSH4 0x694798E6 EQ PUSH2 0x659 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x684 JUMPI DUP1 PUSH4 0x6CF262BC EQ PUSH2 0x697 JUMPI DUP1 PUSH4 0x6E2A9CA6 EQ PUSH2 0x6AA JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x6BD JUMPI DUP1 PUSH4 0x75A9F7FF EQ PUSH2 0x6D0 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x6EC JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x6FF JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x707 JUMPI DUP1 PUSH4 0x8BB6DFA8 EQ PUSH2 0x730 JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x743 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34D4C61 EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0xC620BCE EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0xD6A1F87 EQ PUSH2 0x3FF JUMPI DUP1 PUSH4 0xDC60206 EQ PUSH2 0x412 JUMPI DUP1 PUSH4 0x1101EB41 EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x450 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x47B JUMPI DUP1 PUSH4 0x165E62E7 EQ PUSH2 0x48E JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x536 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x561 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x569 JUMPI DUP1 PUSH4 0x280B656C EQ PUSH2 0x59C JUMPI DUP1 PUSH4 0x52A4DE29 EQ PUSH2 0x5AF JUMPI DUP1 PUSH4 0x55EA6C47 EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0x575288BF EQ PUSH2 0x5D5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3AC PUSH2 0x3A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0xACA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3AC PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0xBD0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B6 SWAP2 SWAP1 PUSH2 0x434A JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x40D CALLDATASIZE PUSH1 0x4 PUSH2 0x41E9 JUMP JUMPDEST PUSH2 0xBE1 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x420 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x449 CALLDATASIZE PUSH1 0x4 PUSH2 0x4155 JUMP JUMPDEST PUSH2 0xCE7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3AC PUSH2 0x45E CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x489 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0xE41 JUMP JUMPDEST PUSH2 0x4A1 PUSH2 0x49C CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0xFA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND DUP3 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 SIGNEXTEND SWAP1 DUP3 ADD MSTORE SWAP2 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x504 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x529 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B6 SWAP2 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x544 CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x136D JUMP JUMPDEST PUSH2 0x58C PUSH2 0x577 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x5AA CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x13F9 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x5BD CALLDATASIZE PUSH1 0x4 PUSH2 0x4155 JUMP JUMPDEST PUSH2 0x1408 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x5D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1656 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x5E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4155 JUMP JUMPDEST PUSH2 0x170A JUMP JUMPDEST PUSH2 0x44E PUSH2 0x5F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH2 0x19CD JUMP JUMPDEST PUSH2 0x44E PUSH2 0x609 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1A72 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x529 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x641 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1B24 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x654 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1BA6 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x667 CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x692 CALLDATASIZE PUSH1 0x4 PUSH2 0x4273 JUMP JUMPDEST PUSH2 0x1C5E JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x6A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1CBE JUMP JUMPDEST PUSH2 0x44E PUSH2 0x6B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4155 JUMP JUMPDEST PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x6CB CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1F43 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0x6DE CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1FE0 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x529 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0x20D0 JUMP JUMPDEST PUSH2 0x529 PUSH2 0x715 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x73E CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x20DC JUMP JUMPDEST PUSH2 0x58C PUSH2 0x751 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x774 CALLDATASIZE PUSH1 0x4 PUSH2 0x4273 JUMP JUMPDEST PUSH2 0x217F JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0x21DD JUMP JUMPDEST PUSH2 0x529 PUSH2 0x78F CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x7B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x21E9 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x7CB CALLDATASIZE PUSH1 0x4 PUSH2 0x410A JUMP JUMPDEST PUSH2 0x22A1 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x7DE CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x809 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x832 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x2471 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x845 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x2525 JUMP JUMPDEST PUSH2 0x58C PUSH2 0x858 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x87B CALLDATASIZE PUSH1 0x4 PUSH2 0x4273 JUMP JUMPDEST PUSH2 0x259B JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x88E CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x8B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x25FB JUMP JUMPDEST PUSH2 0x44E PUSH2 0x8CC CALLDATASIZE PUSH1 0x4 PUSH2 0x4273 JUMP JUMPDEST PUSH2 0x2820 JUMP JUMPDEST PUSH2 0x58C PUSH2 0x8DF CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x529 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x915 CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH2 0x2880 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x928 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x28A7 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x93B CALLDATASIZE PUSH1 0x4 PUSH2 0x4273 JUMP JUMPDEST PUSH2 0x2944 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x94E CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x979 CALLDATASIZE PUSH1 0x4 PUSH2 0x4196 JUMP JUMPDEST PUSH2 0x29C8 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x995 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x9BE CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x2BFF JUMP JUMPDEST PUSH2 0x44E PUSH2 0x9D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH2 0x2C0A JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x9E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0xA04 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x2C2C JUMP JUMPDEST PUSH2 0x44E PUSH2 0xA17 CALLDATASIZE PUSH1 0x4 PUSH2 0x4273 JUMP JUMPDEST PUSH2 0x2D1C JUMP JUMPDEST PUSH2 0x44E PUSH2 0xA2A CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x2D7C JUMP JUMPDEST PUSH2 0x44E PUSH2 0xA3D CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x2E19 JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x529 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0xA63 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0xA83 CALLDATASIZE PUSH1 0x4 PUSH2 0x4155 JUMP JUMPDEST PUSH2 0x2ECD JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x529 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0xAA9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x3112 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0xAC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x41E9 JUMP JUMPDEST PUSH2 0x31CA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xAD6 DUP4 PUSH2 0x1CBE JUMP JUMPDEST PUSH1 0x22 SLOAD SWAP1 SWAP2 POP TIMESTAMP SWAP1 PUSH2 0xAF1 SWAP1 PUSH2 0xAEC SWAP1 DUP4 PUSH2 0x44B5 JUMP JUMPDEST PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO PUSH2 0xB95 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xB36 SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST LT PUSH2 0xB72 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xB61 SWAP2 SWAP1 PUSH2 0x441A JUMP JUMPDEST PUSH2 0xB6B SWAP1 DUP3 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 POP PUSH2 0xBAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xB6B SWAP1 DUP3 PUSH2 0x44B5 JUMP JUMPDEST PUSH2 0xB9E TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH2 0xBA8 SWAP1 DUP3 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0xBB5 DUP2 DUP4 PUSH2 0x32D4 JUMP JUMPDEST PUSH2 0xBBE DUP6 PUSH2 0x20DC JUMP JUMPDEST PUSH2 0xBC8 SWAP2 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xBDC PUSH1 0x26 PUSH2 0x32FE JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBEE PUSH1 0x26 DUP5 PUSH2 0x3312 JUMP JUMPDEST ISZERO PUSH2 0xCE1 JUMPI PUSH1 0x0 PUSH2 0xBFE DUP5 PUSH2 0xFA7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0xCDF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xC3F JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xC3A SWAP1 PUSH2 0x4527 JUMP JUMPDEST PUSH2 0xC45 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH2 0xCD6 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0xC81 SWAP2 DUP10 SWAP2 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x4401 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCAD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCD1 SWAP2 SWAP1 PUSH2 0x428C JUMP JUMPDEST PUSH2 0x3334 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xCE1 JUMP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0xD23 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 SLOAD PUSH2 0xD30 SWAP1 TIMESTAMP PUSH2 0x441A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0xD7F SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0xD90 SWAP1 POP DUP5 DUP5 DUP5 PUSH2 0x3345 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xDCF JUMPI POP PUSH1 0x21 SLOAD PUSH2 0xDCD DUP3 DUP7 PUSH2 0x3553 JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0xDED JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE DUP6 PUSH1 0x40 MLOAD PUSH2 0xE32 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE6C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xE93 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0xEF4 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF44 SWAP2 SWAP1 PUSH2 0x4215 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0xFCD TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ ISZERO PUSH2 0x1043 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1057 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xAEC SWAP2 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 SWAP2 POP DUP2 EQ ISZERO PUSH2 0x11BB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x6 SIGNEXTEND PUSH2 0x10C4 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH2 0x10CE SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x10E1 JUMPI PUSH2 0x10E1 PUSH2 0x4590 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD SWAP3 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP2 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x113D SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x42D5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1169 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x118D SWAP2 SWAP1 PUSH2 0x4230 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP PUSH2 0x11A7 SWAP2 DUP4 SWAP2 POP PUSH2 0x4465 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP PUSH2 0x1344 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 GT ISZERO PUSH2 0x1344 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x1208 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH2 0x1212 SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1225 JUMPI PUSH2 0x1225 PUSH2 0x4590 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x22 SLOAD PUSH2 0x124B TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH2 0x1255 SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST PUSH2 0x125F SWAP2 SWAP1 PUSH2 0x441A JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x1272 JUMPI PUSH2 0x1272 PUSH2 0x4590 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP3 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x12CA SWAP3 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x42D5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x131A SWAP2 SWAP1 PUSH2 0x4230 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP SWAP2 POP PUSH2 0x1335 SWAP1 DUP3 SWAP1 PUSH2 0x4465 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x135D JUMPI PUSH2 0x1353 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1365 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP5 ADD MSTORE JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1398 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x13EF SWAP2 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x1404 PUSH1 0x26 DUP3 PUSH2 0x3671 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x1434 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x142B SWAP1 PUSH2 0x43CA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1444 PUSH1 0x26 DUP4 PUSH2 0x3312 JUMP JUMPDEST PUSH2 0x1461 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE0B6AEAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x146C PUSH1 0x15 DUP5 PUSH2 0x3312 JUMP JUMPDEST PUSH2 0x1489 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x14AB SWAP1 DUP4 PUSH2 0x3671 JUMP JUMPDEST POP PUSH2 0x14B5 DUP4 PUSH2 0x3686 JUMP JUMPDEST PUSH1 0x21 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x14F3 SWAP1 PUSH2 0x14ED SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST DUP5 PUSH2 0x3553 JUMP JUMPDEST LT ISZERO PUSH2 0x1512 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB DUP5 MSTORE SWAP4 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE SWAP3 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP3 ADD MSTORE PUSH32 0xEE3F0DABA9837D1AB0597ACF34328550E4832D02E24E467825E7C2DD318C3820 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x1590 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x36E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x15C7 SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x15DA SWAP1 POP PUSH2 0xCD1 DUP3 DUP5 PUSH2 0x3553 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1602 SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 SWAP1 DUP7 AND SWAP1 PUSH32 0x4E186BC75A2220191B826BAFF3EE63C3E970E94E58A9007FF94C9A7B8E6EBB3F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1686 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x16BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0xE02B2375D8FB4AEF3E5BC5D53BFFCF70B6F185C5C93E69DCBE8B6CFC58E837E2 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x172D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x142B SWAP1 PUSH2 0x43CA JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x173D PUSH1 0x15 DUP5 PUSH2 0x3312 JUMP JUMPDEST PUSH2 0x175A JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1788 JUMPI PUSH1 0x40 MLOAD PUSH3 0x822D97 PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x17B7 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17E3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1807 SWAP2 SWAP1 PUSH2 0x428C JUMP JUMPDEST SWAP1 POP PUSH2 0x181E PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x36E4 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x184D SWAP2 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1879 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x189D SWAP2 SWAP1 PUSH2 0x428C JUMP JUMPDEST PUSH2 0x18A7 SWAP2 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2710 PUSH1 0x24 SLOAD DUP4 PUSH2 0x18BC SWAP2 SWAP1 PUSH2 0x4446 JUMP JUMPDEST PUSH2 0x18C6 SWAP2 SWAP1 PUSH2 0x4432 JUMP JUMPDEST SWAP1 POP PUSH2 0x18D2 DUP2 DUP4 PUSH2 0x44B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1909 SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x17 SLOAD PUSH2 0x1946 SWAP3 AND DUP4 PUSH2 0x3755 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1968 SWAP1 DUP7 PUSH2 0x3671 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEC1A37D4A331A5059081E0FB5DA1735E7890900CD215A4FB1E9F2779FD7B83EB DUP6 PUSH1 0x40 MLOAD PUSH2 0x19B8 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x1A09 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x1AAE JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1B4F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1B5A PUSH1 0x26 DUP3 PUSH2 0x3774 JUMP JUMPDEST PUSH2 0x1B77 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8D08B1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x51199D699BDFD516FA88DD0D2F8487C40C147B4867ACAA23ADC8D4DF6B098E56 DUP2 PUSH1 0x40 MLOAD PUSH2 0xF9C SWAP2 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1BD1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1C0B JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1C89 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1CE3 SWAP1 PUSH2 0x3789 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1DEE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1D0C SWAP1 DUP4 PUSH2 0x3793 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D19 PUSH1 0x26 DUP3 PUSH2 0x3312 JUMP JUMPDEST ISZERO PUSH2 0x1DDB JUMPI PUSH1 0x0 PUSH2 0x1D29 DUP3 PUSH2 0xFA7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x1DD9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1D6A JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x1D65 SWAP1 PUSH2 0x4527 JUMP JUMPDEST PUSH2 0x1D70 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SLOAD PUSH1 0x22 SLOAD SWAP2 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH2 0x1DCB SWAP5 SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0xA0D27107 SWAP3 PUSH2 0xC81 SWAP3 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x4401 JUMP JUMPDEST PUSH2 0x1DD5 SWAP1 DUP7 PUSH2 0x441A JUMP JUMPDEST SWAP5 POP POP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x1DE6 DUP2 PUSH2 0x44F8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1CC2 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1E24 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1E5D JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1E68 DUP4 DUP4 DUP4 PUSH2 0x3345 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH2 0x1E9C SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x4331 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1EB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1EE6 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1EE3 SWAP2 DUP2 ADD SWAP1 PUSH2 0x4215 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1EEF JUMPI PUSH2 0x1EF1 JUMP JUMPDEST POP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6E10247C3C094D220EE99436C164B7F38D63B335A20ED817CBEFAEE4BB02D20E DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1F36 SWAP3 SWAP2 SWAP1 PUSH2 0x4331 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1F6E JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1F95 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 SWAP1 PUSH2 0x2004 SWAP1 PUSH2 0x3789 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x201B JUMPI PUSH2 0x201B PUSH2 0x45A6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2044 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x206B SWAP1 PUSH2 0x3789 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1DEE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2094 SWAP1 DUP3 PUSH2 0x3793 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x20A6 JUMPI PUSH2 0x20A6 PUSH2 0x4590 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE DUP1 PUSH2 0x20C8 DUP2 PUSH2 0x44F8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x204A JUMP JUMPDEST PUSH1 0x60 PUSH2 0xBDC PUSH1 0x15 PUSH2 0x32FE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x20E8 DUP4 PUSH2 0x1CBE JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2112 SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST LT ISZERO PUSH2 0xCE1 JUMPI PUSH1 0x0 DUP2 GT PUSH2 0x213E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2178 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x216E SWAP1 DUP4 SWAP1 PUSH2 0x4446 JUMP JUMPDEST PUSH2 0x2178 SWAP2 SWAP1 PUSH2 0x4432 JUMP JUMPDEST SWAP2 POP PUSH2 0x1DEE JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x21AA JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x60 PUSH2 0xBDC PUSH1 0x3 PUSH2 0x32FE JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2214 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x224E JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x22DD JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2304 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2347 JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x238C JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x23C6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x12 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE SWAP1 PUSH2 0x2413 SWAP1 DUP5 DUP4 PUSH2 0x3755 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFDB7893BF11F50C621E59CC7F1CF540E94295CB27CA869EC7ED7618CA7928862 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2462 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x249C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x24D5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2550 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x25C6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2626 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2631 PUSH1 0x26 DUP3 PUSH2 0x3671 JUMP JUMPDEST PUSH2 0x264E JUMPI PUSH1 0x40 MLOAD PUSH4 0xF25E6B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2687 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x269B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26BF SWAP2 SWAP1 PUSH2 0x40B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 DUP4 AND SWAP4 DUP5 OR SWAP1 SSTORE PUSH1 0x1D SLOAD SWAP1 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0x696A437B SWAP2 PUSH2 0x2713 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x272B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x273F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2763 SWAP2 SWAP1 PUSH2 0x4215 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2793 DUP2 PUSH2 0xFA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 DUP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xABFA8DB4D238FA78BF4E15FCC91328DD35F3978F200E2857A56BB719732B7B0B SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x284B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x28A2 SWAP1 DUP3 PUSH2 0x3671 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x28D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x28F9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x296F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x2993 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x29EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x142B SWAP1 PUSH2 0x43CA JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 AND CALLER EQ PUSH2 0x2A2C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2A5E SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x441A JUMP JUMPDEST TIMESTAMP GT PUSH2 0x2A7D JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E0B4075 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP4 GT ISZERO PUSH2 0x2AC3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24AE82D PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2AFD JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x2B34 SWAP1 DUP5 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x2B4E SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP4 DUP6 PUSH2 0x3755 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2B9C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2B9A SWAP1 DUP6 PUSH2 0x3774 JUMP JUMPDEST POP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x53E982DD9EC088D634C74C98FBBC161F808B4B6469A26C657120B9A31CB34BFE DUP7 PUSH1 0x40 MLOAD PUSH2 0x2BEB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x1404 PUSH1 0x26 DUP3 PUSH2 0x3774 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x28A2 SWAP1 DUP3 PUSH2 0x3671 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 SWAP1 PUSH2 0x2C50 SWAP1 PUSH2 0x3789 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2C67 JUMPI PUSH2 0x2C67 PUSH2 0x45A6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2C90 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2CB7 SWAP1 PUSH2 0x3789 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1DEE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2CE0 SWAP1 DUP3 PUSH2 0x3793 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2CF2 JUMPI PUSH2 0x2CF2 PUSH2 0x4590 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE DUP1 PUSH2 0x2D14 DUP2 PUSH2 0x44F8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2C96 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2D47 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2DA7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2DCE JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2E44 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2E7D JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2EFD JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2F36 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2F58 SWAP1 DUP4 PUSH2 0x3312 JUMP JUMPDEST PUSH2 0x2F75 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EDA7A11 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x2FBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x919BED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH2 0x2FEE SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x4331 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3008 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x3038 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x3035 SWAP2 DUP2 ADD SWAP1 PUSH2 0x4215 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x3041 JUMPI PUSH2 0x3043 JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x307A SWAP1 DUP5 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x30CD JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x30CB SWAP1 DUP4 PUSH2 0x3774 JUMP JUMPDEST POP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x20262B97130B5CB8F80624EED2733DF2B05DB4A0789B4A3D0157E1D318333104 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1F36 SWAP3 SWAP2 SWAP1 PUSH2 0x4331 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3142 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x317C JUMPI PUSH1 0x40 MLOAD PUSH4 0x4EE891B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x70125A1C0F5202217AAE14EC399ABFAAA13C2FD98A91D43BD3A897DD4751E80 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x31F5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3200 PUSH1 0x15 DUP4 PUSH2 0x3312 JUMP JUMPDEST PUSH2 0x321D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3226 DUP3 PUSH2 0x3686 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x324E SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x5ABCF5031FDBD3BADB9D1E09094208DE329AEE72730E87650F346584205D23D1 SWAP3 PUSH2 0x32AE SWAP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP3 PUSH2 0x32CA SWAP2 SWAP1 PUSH2 0x4513 JUMP JUMPDEST PUSH2 0xCE1 SWAP1 DUP4 PUSH2 0x44B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP4 LT ISZERO PUSH2 0x1DEE JUMPI PUSH1 0x22 SLOAD PUSH2 0x32ED DUP4 DUP6 PUSH2 0x4446 JUMP JUMPDEST PUSH2 0x32F7 SWAP2 SWAP1 PUSH2 0x4432 JUMP JUMPDEST SWAP1 POP PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x330B DUP4 PUSH2 0x379F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x330B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCE1 DUP3 PUSH1 0x22 SLOAD PUSH1 0x23 SLOAD PUSH2 0x37FB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x3368 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x142B SWAP1 PUSH2 0x43CA JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x338E SWAP1 DUP4 PUSH2 0x3312 JUMP JUMPDEST PUSH2 0x33AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x41CFA5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x33F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x435B5625 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x33F9 DUP4 PUSH2 0x38A9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3408 PUSH2 0xCD1 DUP4 DUP6 PUSH2 0x3553 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x34BE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x3459 SWAP1 DUP4 SWAP1 PUSH2 0x4446 JUMP JUMPDEST PUSH2 0x3463 SWAP2 SWAP1 PUSH2 0x4432 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x348B SWAP1 DUP5 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x34B8 SWAP1 DUP5 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x34F5 SWAP1 DUP5 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3548 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3546 SWAP1 DUP5 PUSH2 0x3774 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0xCE1 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x35C5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x35C0 SWAP1 PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND PUSH2 0x4527 JUMP JUMPDEST PUSH2 0x35E9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x3621 SWAP2 DUP9 SWAP2 DUP7 SWAP2 PUSH1 0x4 ADD PUSH2 0x4401 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3639 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x364D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBC8 SWAP2 SWAP1 PUSH2 0x428C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x330B DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x38CE JUMP JUMPDEST PUSH2 0x368F DUP2 PUSH2 0x391D JUMP JUMPDEST POP PUSH2 0x3699 DUP2 PUSH2 0x3AF3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x36C8 SWAP2 SWAP1 PUSH2 0x3B81 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x374F SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x3B97 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x28A2 DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x3718 SWAP3 SWAP2 SWAP1 PUSH2 0x4331 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x330B DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x3C69 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCE1 DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x330B DUP4 DUP4 PUSH2 0x3D5C JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x37EF JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x37DB JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x3835 JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x382A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x330B JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x3841 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x38B2 DUP2 PUSH2 0x3D86 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x3915 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xCE1 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3928 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1368 JUMPI PUSH2 0x3958 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xAEC SWAP2 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT PUSH2 0x39CE JUMPI PUSH2 0x397F DUP3 PUSH2 0x38A9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x39AD TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x39F4 SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST LT PUSH2 0x3A50 JUMPI PUSH2 0x3A02 DUP3 PUSH2 0x38A9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SSTORE PUSH1 0x22 SLOAD PUSH1 0x29 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x3A41 SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x1 SWAP2 POP PUSH2 0x1368 SWAP1 POP JUMP JUMPDEST PUSH2 0x3A59 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1368 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3A9A DUP4 PUSH2 0x38A9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP3 SWAP2 PUSH2 0x3ACA SWAP2 PUSH2 0x4446 JUMP JUMPDEST PUSH2 0x3AD4 SWAP2 SWAP1 PUSH2 0x4432 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3B38 SWAP1 PUSH2 0x3B1A SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x32D4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x3B60 SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x3B90 JUMPI DUP2 PUSH2 0x330B JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BEC DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3F6A SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x28A2 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3C0A SWAP2 SWAP1 PUSH2 0x4215 JUMP JUMPDEST PUSH2 0x28A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x142B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x3D52 JUMPI PUSH1 0x0 PUSH2 0x3C8D PUSH1 0x1 DUP4 PUSH2 0x44B5 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x3CA1 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x3D06 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x3CC1 JUMPI PUSH2 0x3CC1 PUSH2 0x4590 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x3CE4 JUMPI PUSH2 0x3CE4 PUSH2 0x4590 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x3D17 JUMPI PUSH2 0x3D17 PUSH2 0x457A JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x3D73 JUMPI PUSH2 0x3D73 PUSH2 0x4590 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D91 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x3E28 JUMPI PUSH1 0x1E SLOAD PUSH2 0x3DC9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFA7 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3E4C SWAP1 PUSH2 0x3789 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1DEE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x3E75 SWAP1 DUP4 PUSH2 0x3793 JUMP JUMPDEST SWAP1 POP PUSH2 0x3E82 PUSH1 0x26 DUP3 PUSH2 0x3312 JUMP JUMPDEST ISZERO PUSH2 0x3F57 JUMPI PUSH2 0x3E90 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x3F16 JUMPI PUSH2 0x3EBA DUP2 PUSH2 0xFA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3F4A SWAP1 PUSH2 0xCD1 SWAP1 DUP4 PUSH2 0x3553 JUMP JUMPDEST PUSH2 0x3F54 SWAP1 DUP5 PUSH2 0x441A JUMP JUMPDEST SWAP3 POP JUMPDEST POP DUP1 PUSH2 0x3F62 DUP2 PUSH2 0x44F8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x3E2B JUMP JUMPDEST PUSH1 0x60 PUSH2 0xBC8 DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 DUP5 EXTCODESIZE PUSH2 0x3FC3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x142B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x3FDF SWAP2 SWAP1 PUSH2 0x42A5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x401C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4021 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x4031 DUP3 DUP3 DUP7 PUSH2 0x403C JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x404B JUMPI POP DUP2 PUSH2 0x330B JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x405B JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x142B SWAP2 SWAP1 PUSH2 0x4397 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x6 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x1368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x330B DUP2 PUSH2 0x45BC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x330B DUP2 PUSH2 0x45BC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x40E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x40EF DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x40FF DUP2 PUSH2 0x45BC JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x411F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x412A DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x413A DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x414A DUP2 PUSH2 0x45BC JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x416A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4175 DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4185 DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x41AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x41B7 DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x41C7 DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x41DE DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x41FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4207 DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x330B DUP3 PUSH2 0x4075 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x424E DUP5 PUSH2 0x4085 JUMP JUMPDEST SWAP3 POP PUSH2 0x425C PUSH1 0x20 DUP6 ADD PUSH2 0x4085 JUMP JUMPDEST SWAP2 POP PUSH2 0x426A PUSH1 0x40 DUP6 ADD PUSH2 0x4075 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x429E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x42B7 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x44CC JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 DUP3 ADD SWAP2 SWAP1 PUSH1 0x60 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4324 JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4302 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x438B JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4366 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x43B6 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x44CC JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x6 SWAP2 SWAP1 SWAP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x442D JUMPI PUSH2 0x442D PUSH2 0x454E JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4441 JUMPI PUSH2 0x4441 PUSH2 0x4564 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x4460 JUMPI PUSH2 0x4460 PUSH2 0x454E JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x4490 JUMPI PUSH2 0x4490 PUSH2 0x454E JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x44AB JUMPI PUSH2 0x44AB PUSH2 0x454E JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x44C7 JUMPI PUSH2 0x44C7 PUSH2 0x454E JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x44E7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x44CF JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x374F JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x450C JUMPI PUSH2 0x450C PUSH2 0x454E JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4522 JUMPI PUSH2 0x4522 PUSH2 0x4564 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x4545 JUMPI PUSH2 0x4545 PUSH2 0x454E JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x45D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 SAR RETURNDATACOPY SWAP5 0xD8 0xD4 0xF6 0x23 DUP12 0x4B 0xB8 0x5C SAR 0xE CHAINID PUSH25 0x49DF8B763D2C4A650BF62EC1B71C1C6064736F6C6343000807 STOP CALLER ",
              "sourceMap": "136:1592:57:-:0;;;702:6:31;667:41;;786:7;749:44;;877:7;834:50;;968:6;925:49;;1057:7;1015:49;;1135:2;1105:32;;252:203:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1637:1:0;1742:7;:22;381:4:57;387:9;398:14;414:13;441:10;;357:25:28;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;;;-1:-1:-1;;;;;422:24:28;;;;;;;1479:12:31;:28;;;;;;;;;;1513:8;:20;;;;;;;;;;1539:13;:30;;;;;;;;;;1575:12;:28;;;;;;;;;;;;-1:-1:-1;1609:28:31;;;:14;:28;;;;;;;:43;;;;;;;;;;;1703:12;;1730;;1689:54;;-1:-1:-1;;;1689:54:31;;1730:12;;;1689:54;;;1093:51:84;1703:12:31;;;;-1:-1:-1;1689:40:31;;1066:18:84;;1689:54:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1658:28:31;;;;;;;;:13;:28;;;;;:85;;-1:-1:-1;;1658:85:31;;;;;;;;;;-1:-1:-1;136:1592:57;;-1:-1:-1;;;;;;136:1592:57;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:464::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;469:49;514:2;503:9;499:18;469:49;:::i;:::-;459:59;;537:49;582:2;571:9;567:18;537:49;:::i;:::-;527:59;;605:49;650:2;639:9;635:18;605:49;:::i;:::-;595:59;;196:464;;;;;;;:::o;665:277::-;732:6;785:2;773:9;764:7;760:23;756:32;753:52;;;801:1;798;791:12;753:52;833:9;827:16;886:5;879:13;872:21;865:5;862:32;852:60;;908:1;905;898:12;852:60;931:5;665:277;-1:-1:-1;;;665:277:84:o;947:203::-;136:1592:57;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_add_1372": {
                  "entryPoint": 14542,
                  "id": 1372,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_at_1506": {
                  "entryPoint": 15708,
                  "id": 1506,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_calculateJobPeriodCredits_7702": {
                  "entryPoint": 15750,
                  "id": 7702,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_callOptionalReturn_911": {
                  "entryPoint": 15255,
                  "id": 911,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_contains_1475": {
                  "entryPoint": null,
                  "id": 1475,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_getReward_7863": {
                  "entryPoint": 13108,
                  "id": 7863,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_length_1489": {
                  "entryPoint": null,
                  "id": 1489,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_period_7847": {
                  "entryPoint": 12986,
                  "id": 7847,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_phase_7831": {
                  "entryPoint": 13012,
                  "id": 7831,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_quoteLiquidity_7909": {
                  "entryPoint": 13651,
                  "id": 7909,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_remove_1456": {
                  "entryPoint": 15465,
                  "id": 1456,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_rewardJobCredits_7597": {
                  "entryPoint": 15091,
                  "id": 7597,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_settleJobAccountance_7938": {
                  "entryPoint": 13958,
                  "id": 7938,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_unbondLiquidityFromJob_7802": {
                  "entryPoint": 13125,
                  "id": 7802,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_updateJobCreditsIfNeeded_7567": {
                  "entryPoint": 14621,
                  "id": 7567,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_updateJobPeriod_7612": {
                  "entryPoint": 14505,
                  "id": 7612,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_values_1520": {
                  "entryPoint": 14239,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 4973,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@acceptJobOwnership_8373": {
                  "entryPoint": 6770,
                  "id": 8373,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 8681,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addLiquidityToJob_7283": {
                  "entryPoint": 5128,
                  "id": 7283,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 7078,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addTokenCreditsToJob_6417": {
                  "entryPoint": 5898,
                  "id": 6417,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@add_1658": {
                  "entryPoint": 13937,
                  "id": 1658,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@approveLiquidity_7148": {
                  "entryPoint": 9723,
                  "id": 7148,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@approvedLiquidities_6581": {
                  "entryPoint": 3024,
                  "id": 6581,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@at_1754": {
                  "entryPoint": 14227,
                  "id": 1754,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@bondTime_5611": {
                  "entryPoint": null,
                  "id": 5611,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@changeJobOwnership_8336": {
                  "entryPoint": 6605,
                  "id": 8336,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@contains_1712": {
                  "entryPoint": 13074,
                  "id": 1712,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@dispute_5547": {
                  "entryPoint": 12562,
                  "id": 5547,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_5636": {
                  "entryPoint": null,
                  "id": 5636,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@forceLiquidityCreditsToJob_7094": {
                  "entryPoint": 12746,
                  "id": 7094,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@functionCallWithValue_1073": {
                  "entryPoint": null,
                  "id": 1073,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@functionCall_1003": {
                  "entryPoint": 16234,
                  "id": 1003,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@inflationPeriod_5631": {
                  "entryPoint": null,
                  "id": 5631,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@internalJobLiquidities_10678": {
                  "entryPoint": 8160,
                  "id": 10678,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@internalJobLiquidityCredits_10570": {
                  "entryPoint": null,
                  "id": 10570,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@internalJobPeriodCredits_10584": {
                  "entryPoint": null,
                  "id": 10584,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@internalJobTokens_10631": {
                  "entryPoint": 11308,
                  "id": 10631,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@isContract_932": {
                  "entryPoint": null,
                  "id": 932,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobLiquidityCredits_6715": {
                  "entryPoint": 8412,
                  "id": 6715,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobOwner_8303": {
                  "entryPoint": null,
                  "id": 8303,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPendingOwner_8309": {
                  "entryPoint": null,
                  "id": 8309,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPeriodCredits_6663": {
                  "entryPoint": 7358,
                  "id": 6663,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobTokenCreditsAddedAt_6297": {
                  "entryPoint": null,
                  "id": 6297,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 8400,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keep3rHelper_5602": {
                  "entryPoint": null,
                  "id": 5602,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1Proxy_5598": {
                  "entryPoint": null,
                  "id": 5598,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1_5594": {
                  "entryPoint": null,
                  "id": 5594,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keepers_5506": {
                  "entryPoint": 8669,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@kp3rWethPool_5606": {
                  "entryPoint": null,
                  "id": 5606,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@length_1727": {
                  "entryPoint": 14217,
                  "id": 1727,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@liquidityAmount_6548": {
                  "entryPoint": null,
                  "id": 6548,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@liquidityMinimum_5621": {
                  "entryPoint": null,
                  "id": 5621,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@min_1270": {
                  "entryPoint": 15233,
                  "id": 1270,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@mulDiv_4263": {
                  "entryPoint": 14331,
                  "id": 4263,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@observeLiquidity_7053": {
                  "entryPoint": 4007,
                  "id": 7053,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@quoteLiquidity_6849": {
                  "entryPoint": 3041,
                  "id": 6849,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@removeDisputer_6072": {
                  "entryPoint": 11801,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 9329,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@remove_1685": {
                  "entryPoint": 14196,
                  "id": 1685,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@resolve_5577": {
                  "entryPoint": 5718,
                  "id": 5577,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@revokeLiquidity_7171": {
                  "entryPoint": 6948,
                  "id": 7171,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@rewardPeriodTime_5626": {
                  "entryPoint": null,
                  "id": 5626,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@rewardedAt_6554": {
                  "entryPoint": null,
                  "id": 6554,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@safeTransferFrom_745": {
                  "entryPoint": 14052,
                  "id": 745,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@safeTransfer_719": {
                  "entryPoint": 14165,
                  "id": 719,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@setApprovedLiquidity_10544": {
                  "entryPoint": 5113,
                  "id": 10544,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setBondTime_5836": {
                  "entryPoint": 10272,
                  "id": 5836,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setFee_5933": {
                  "entryPoint": 7262,
                  "id": 5933,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 9509,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setInflationPeriod_5915": {
                  "entryPoint": 9627,
                  "id": 5915,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setJobLiquidity_10517": {
                  "entryPoint": 10368,
                  "id": 10517,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@setJobToken_10532": {
                  "entryPoint": 11274,
                  "id": 10532,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@setKeep3rHelper_5717": {
                  "entryPoint": 8003,
                  "id": 5717,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1Proxy_5773": {
                  "entryPoint": 10407,
                  "id": 5773,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1_5745": {
                  "entryPoint": 11644,
                  "id": 5745,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_5818": {
                  "entryPoint": 3649,
                  "id": 5818,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setLiquidityMinimum_5872": {
                  "entryPoint": 11548,
                  "id": 5872,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRevokedLiquidity_10556": {
                  "entryPoint": 11263,
                  "id": 10556,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRewardPeriodTime_5897": {
                  "entryPoint": 10564,
                  "id": 5897,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setUnbondTime_5854": {
                  "entryPoint": 8575,
                  "id": 5854,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@slashLiquidityFromJob_6258": {
                  "entryPoint": 7668,
                  "id": 6258,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@slashTokenFromJob_6210": {
                  "entryPoint": 11981,
                  "id": 6210,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@totalJobCredits_6795": {
                  "entryPoint": 2762,
                  "id": 6795,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@unbondLiquidityFromJob_7351": {
                  "entryPoint": 3303,
                  "id": 7351,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@unbondTime_5616": {
                  "entryPoint": null,
                  "id": 5616,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 13054,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@verifyCallResult_1208": {
                  "entryPoint": 16444,
                  "id": 1208,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@withdrawLiquidityFromJob_7443": {
                  "entryPoint": 8865,
                  "id": 7443,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@withdrawTokenCreditsFromJob_6507": {
                  "entryPoint": 10696,
                  "id": 6507,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@workedAt_6560": {
                  "entryPoint": null,
                  "id": 6560,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_bool_fromMemory": {
                  "entryPoint": 16501,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_int56_fromMemory": {
                  "entryPoint": 16517,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 16535,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 16564,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 16593,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_address": {
                  "entryPoint": 16650,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256": {
                  "entryPoint": 16725,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_address": {
                  "entryPoint": 16790,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 16873,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 16917,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_int56t_int56t_bool_fromMemory": {
                  "entryPoint": 16944,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 17011,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256_fromMemory": {
                  "entryPoint": 17036,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 17061,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 17089,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 17109,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": 17201,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 17226,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 17303,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 17354,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed": {
                  "entryPoint": 17409,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 17434,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 17458,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 17478,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_int56": {
                  "entryPoint": 17509,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 17589,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 17612,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "increment_t_uint256": {
                  "entryPoint": 17656,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mod_t_uint256": {
                  "entryPoint": 17683,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "negate_t_int56": {
                  "entryPoint": 17703,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 17742,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x12": {
                  "entryPoint": 17764,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x31": {
                  "entryPoint": 17786,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x32": {
                  "entryPoint": 17808,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": 17830,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_address": {
                  "entryPoint": 17852,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:12726:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "71:107:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "81:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "96:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "90:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "90:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "81:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "156:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "165:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "168:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "158:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "158:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "158:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "146:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "139:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "139:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "132:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "132:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "122:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "122:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "115:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "115:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "112:60:84"
                            }
                          ]
                        },
                        "name": "abi_decode_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "50:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "61:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "241:106:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "251:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "266:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "260:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "260:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "251:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "325:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "334:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "337:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "327:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "327:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "327:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "295:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "313:1:84",
                                            "type": "",
                                            "value": "6"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "316:5:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "302:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "302:20:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "292:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "292:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "285:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "285:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "282:59:84"
                            }
                          ]
                        },
                        "name": "abi_decode_int56_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "220:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "231:5:84",
                            "type": ""
                          }
                        ],
                        "src": "183:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "422:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "468:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "477:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "480:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "470:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "470:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "470:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "443:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "452:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "439:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "439:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "464:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "435:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "435:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "432:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "493:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "519:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "506:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "506:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "497:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "563:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "538:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "538:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "538:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "578:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "588:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "578:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "388:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "399:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "411:6:84",
                            "type": ""
                          }
                        ],
                        "src": "352:247:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "685:170:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "731:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "740:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "743:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "733:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "733:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "733:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "706:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "715:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "702:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "702:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "727:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "698:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "698:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "695:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "756:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "775:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "769:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "769:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "760:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "819:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "794:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "794:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "794:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "834:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "844:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "834:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "651:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "662:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "674:6:84",
                            "type": ""
                          }
                        ],
                        "src": "604:251:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "947:301:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "993:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1002:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1005:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "995:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "995:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "995:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "968:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "977:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "964:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "964:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "989:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "960:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "960:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "957:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1018:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1044:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1031:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1031:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1022:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1088:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1063:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1063:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1063:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1103:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1113:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1103:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1127:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1159:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1170:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1155:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1155:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1142:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1142:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1131:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1208:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1183:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1183:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1183:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1225:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1235:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1225:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "905:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "916:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "928:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "936:6:84",
                            "type": ""
                          }
                        ],
                        "src": "860:388:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1357:425:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1403:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1412:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1415:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1405:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1405:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1405:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1378:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1387:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1374:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1374:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1399:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1370:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1370:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1367:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1428:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1454:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1441:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1441:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1432:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1498:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1473:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1473:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1473:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1513:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1523:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1513:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1537:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1569:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1580:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1565:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1565:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1552:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1552:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1541:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1618:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1593:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1593:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1593:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1635:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1645:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1635:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1661:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1693:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1704:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1689:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1689:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1676:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1676:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1665:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1742:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1717:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1717:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1717:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1759:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "1769:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1759:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1307:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1318:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1330:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1338:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1346:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1253:529:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1891:352:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1937:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1946:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1949:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1939:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1939:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1939:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1912:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1921:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1908:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1908:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1933:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1904:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1904:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1901:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1962:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1988:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1975:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1975:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1966:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2032:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2007:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2007:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2007:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2047:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2057:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2047:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2071:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2103:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2114:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2099:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2099:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2086:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2086:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2075:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2152:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2127:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2127:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2127:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2169:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "2179:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2169:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2195:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2222:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2233:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2218:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2218:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2205:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2205:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2195:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1841:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1852:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1864:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1872:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1880:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1787:456:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2369:477:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2416:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2425:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2428:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2418:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2418:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2418:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2390:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2399:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2386:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2386:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2411:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2382:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2382:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2379:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2441:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2467:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2454:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2454:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2445:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2511:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2486:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2486:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2486:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2526:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2536:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2526:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2550:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2582:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2593:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2578:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2578:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2565:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2565:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2554:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2631:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2606:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2606:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2606:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2648:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "2658:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2648:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2674:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2701:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2712:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2697:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2697:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2684:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2684:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2674:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2725:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2757:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2768:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2753:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2753:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2740:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2740:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2729:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2806:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2781:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2781:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2781:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2823:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "2833:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "2823:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2311:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2322:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2334:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2342:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2350:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2358:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2248:598:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2938:228:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2984:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2993:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2996:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2986:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2986:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2986:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2959:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2968:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2955:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2955:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2980:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2951:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2951:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2948:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3009:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3035:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3022:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3022:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3013:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3079:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3054:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3054:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3054:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3094:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3104:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3094:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3118:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3145:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3156:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3141:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3141:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3128:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3128:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3118:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2896:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2907:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2919:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2927:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2851:315:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3249:124:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3295:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3304:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3307:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3297:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3297:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3297:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3270:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3279:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3266:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3266:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3291:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3262:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3262:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3259:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3320:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3357:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3330:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3330:37:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3320:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3215:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3226:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3238:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3171:202:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3486:256:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3532:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3541:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3544:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3534:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3534:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3534:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3507:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3516:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3503:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3503:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3528:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3499:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3499:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3496:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3557:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3595:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_int56_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3567:27:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3567:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3557:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3614:57:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3656:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3667:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3652:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3652:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_int56_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3624:27:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3624:47:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3614:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3680:56:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3721:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3732:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3717:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3717:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3690:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3690:46:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3680:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int56t_int56t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3436:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3447:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3459:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3467:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3475:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3378:364:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3817:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3863:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3872:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3875:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3865:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3865:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3865:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3838:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3847:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3834:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3834:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3859:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3830:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3830:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3827:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3888:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3911:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3898:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3898:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3888:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3783:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3794:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3806:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3747:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4013:103:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4059:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4068:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4071:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4061:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4061:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4061:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4034:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4043:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4030:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4030:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4055:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4026:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4026:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4023:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4084:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4100:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4094:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4094:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4084:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3979:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3990:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4002:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3932:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4258:137:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4268:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4288:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4282:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4282:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "4272:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4330:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4338:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4326:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4326:17:84"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4345:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4350:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4304:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4304:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4304:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4366:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4377:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4382:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4373:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4373:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "4366:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "4234:3:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4239:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "4250:3:84",
                            "type": ""
                          }
                        ],
                        "src": "4121:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4501:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4511:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4523:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4534:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4519:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4519:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4511:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4553:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4568:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4584:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4589:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "4580:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4580:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4593:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "4576:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4576:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4564:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4564:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4546:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4546:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4546:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4470:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4481:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4492:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4400:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4765:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4775:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4787:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4798:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4783:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4783:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4775:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4810:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4828:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4833:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "4824:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4824:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4837:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "4820:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4820:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4814:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4855:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4870:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4878:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4866:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4866:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4848:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4848:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4848:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4902:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4913:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4898:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4898:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4922:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4930:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4918:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4918:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4891:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4891:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4891:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4954:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4965:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4950:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4950:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "4970:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4943:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4943:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4943:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4718:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4729:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4737:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4745:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4756:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4608:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5165:567:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5175:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5193:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5204:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5189:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5189:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5179:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5223:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5238:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5254:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5259:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "5250:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5250:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5263:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "5246:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5246:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5234:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5234:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5216:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5216:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5216:51:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5276:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5286:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5280:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5308:9:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5319:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5304:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5304:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5324:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5297:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5297:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5297:30:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5336:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "5347:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "5340:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5362:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5382:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5376:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5376:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "5366:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5405:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5413:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5398:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5398:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5398:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5429:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5440:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5451:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5436:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5436:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "5429:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5463:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5481:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5489:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5477:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5477:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "5467:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5501:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5510:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "5505:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5569:137:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "5590:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5605:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "5599:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "5599:13:84"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5614:10:84",
                                              "type": "",
                                              "value": "0xffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "5595:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5595:30:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5583:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5583:43:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5583:43:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5639:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "5650:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "5655:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5646:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5646:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5639:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5671:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "5685:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "5693:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5681:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5681:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5671:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "5531:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5534:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5528:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5528:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "5542:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5544:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "5553:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5556:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5549:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5549:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "5544:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "5524:3:84",
                                "statements": []
                              },
                              "src": "5520:186:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5715:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "5723:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5715:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5126:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5137:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5145:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5156:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4988:744:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5866:145:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5876:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5888:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5899:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5884:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5884:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5876:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5918:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5933:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5949:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5954:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "5945:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5945:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5958:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "5941:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5941:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5929:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5929:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5911:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5911:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5911:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5982:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5993:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5978:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5978:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5998:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5971:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5971:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5971:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5827:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5838:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5846:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5857:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5737:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6167:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6177:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6187:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6181:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6198:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6216:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6227:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6212:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6212:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6202:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6246:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6257:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6239:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6239:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6239:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6269:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "6280:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "6273:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6295:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6315:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6309:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6309:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6299:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6338:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6346:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6331:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6331:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6331:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6362:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6373:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6384:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6369:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6369:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "6362:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6396:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6414:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6422:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6410:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6410:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "6400:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6434:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6443:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6438:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6502:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "6523:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6538:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "6532:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6532:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "6555:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "6560:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "6551:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "6551:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "6564:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "6547:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6547:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "6528:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6528:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6516:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6516:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6516:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6581:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "6592:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "6597:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6588:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6588:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6581:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6613:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "6627:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "6635:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6623:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6623:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6613:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6464:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6467:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6461:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6461:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "6475:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6477:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "6486:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6489:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6482:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6482:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "6477:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6457:3:84",
                                "statements": []
                              },
                              "src": "6453:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6657:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "6665:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6657:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6136:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6147:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6158:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6016:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6774:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6784:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6796:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6807:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6792:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6792:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6784:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6826:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "6851:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "6844:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6844:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "6837:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6837:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6819:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6819:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6819:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6743:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6754:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6765:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6679:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6992:262:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7009:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7020:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7002:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7002:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7002:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7032:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7052:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7046:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7046:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "7036:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7079:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7090:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7075:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7075:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7095:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7068:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7068:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7068:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7137:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7145:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7133:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7133:15:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7154:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7165:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7150:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7150:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7170:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "7111:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7111:66:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7111:66:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7186:62:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7202:9:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "7221:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7229:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "7217:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7217:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7238:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "7234:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7234:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "7213:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7213:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7198:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7198:45:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7245:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7194:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7194:54:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7186:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6961:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6972:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6983:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6871:383:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7433:228:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7450:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7461:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7443:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7443:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7443:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7484:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7495:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7480:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7480:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7500:2:84",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7473:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7473:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7473:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7523:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7534:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7519:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7519:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7539:34:84",
                                    "type": "",
                                    "value": "Address: insufficient balance fo"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7512:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7512:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7512:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7594:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7605:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7590:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7590:18:84"
                                  },
                                  {
                                    "hexValue": "722063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7610:8:84",
                                    "type": "",
                                    "value": "r call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7583:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7583:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7583:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7628:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7640:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7651:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7636:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7636:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7628:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7410:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7424:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7259:402:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7840:179:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7857:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7868:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7850:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7850:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7850:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7891:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7902:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7887:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7887:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7907:2:84",
                                    "type": "",
                                    "value": "29"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7880:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7880:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7880:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7930:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7941:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7926:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7926:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7946:31:84",
                                    "type": "",
                                    "value": "Address: call to non-contract"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7919:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7919:59:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7919:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7987:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7999:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8010:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7995:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7995:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7987:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7817:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7831:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7666:353:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8198:232:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8215:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8226:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8208:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8208:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8208:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8249:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8260:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8245:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8245:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8265:2:84",
                                    "type": "",
                                    "value": "42"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8238:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8238:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8238:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8288:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8299:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8284:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8284:18:84"
                                  },
                                  {
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8304:34:84",
                                    "type": "",
                                    "value": "SafeERC20: ERC20 operation did n"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8277:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8277:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8277:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8359:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8370:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8355:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8355:18:84"
                                  },
                                  {
                                    "hexValue": "6f742073756363656564",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8375:12:84",
                                    "type": "",
                                    "value": "ot succeed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8348:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8348:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8348:40:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8397:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8409:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8420:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8405:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8405:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8397:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8175:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8189:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8024:406:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8609:181:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8626:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8637:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8619:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8619:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8619:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8660:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8671:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8656:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8656:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8676:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8649:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8649:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8649:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8699:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8710:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8695:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8695:18:84"
                                  },
                                  {
                                    "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8715:33:84",
                                    "type": "",
                                    "value": "ReentrancyGuard: reentrant call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8688:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8688:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8688:61:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8758:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8770:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8781:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8766:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8766:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8758:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8586:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8600:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8435:355:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8952:239:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8962:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8974:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8985:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8970:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8970:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8962:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9004:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9026:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "9035:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "9029:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9029:13:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9015:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9015:28:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8997:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8997:47:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8997:47:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9064:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9075:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9060:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9060:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9093:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "9106:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9114:4:84",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "9102:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9102:17:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "9096:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9096:24:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9082:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9082:39:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9053:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9053:69:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9053:69:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9142:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9153:4:84",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9138:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9138:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "9170:6:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9178:4:84",
                                            "type": "",
                                            "value": "0x40"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "9166:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9166:17:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "9160:5:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9160:24:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9131:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9131:54:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9131:54:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8921:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8932:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8943:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8795:396:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9297:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9307:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9319:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9330:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9315:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9315:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9307:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9349:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9360:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9342:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9342:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9342:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9266:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9277:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9288:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9196:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9531:177:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9541:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9553:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9564:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9549:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9549:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9541:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9583:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9594:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9576:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9576:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9576:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9621:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9632:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9617:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9617:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9648:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9651:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9637:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9637:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9610:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9610:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9610:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9679:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9690:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9675:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9675:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "9695:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9668:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9668:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9668:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9484:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "9495:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9503:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9511:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9522:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9378:330:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9842:119:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9852:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9864:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9875:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9860:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9860:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9852:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9894:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9905:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9887:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9887:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9887:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9932:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9943:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9928:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9928:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9948:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9921:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9921:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9921:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9803:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9814:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9822:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9833:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9713:248:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10123:162:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10133:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10145:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10156:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10141:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10141:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10133:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10175:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "10186:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10168:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10168:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10168:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10213:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10224:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10209:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10209:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10229:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10202:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10202:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10202:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10256:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10267:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10252:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10252:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "10272:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10245:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10245:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10245:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10076:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "10087:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "10095:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10103:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10114:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9966:319:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10338:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10365:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10367:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10367:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10367:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10354:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "10361:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "10357:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10357:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10351:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10351:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10348:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10396:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10407:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10410:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10403:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10403:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "10396:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10321:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10324:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "10330:3:84",
                            "type": ""
                          }
                        ],
                        "src": "10290:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10469:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10492:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "10494:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10494:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10494:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10489:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10482:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10482:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10479:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10523:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10532:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10535:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "10528:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10528:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "10523:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10454:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10457:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "10463:1:84",
                            "type": ""
                          }
                        ],
                        "src": "10423:120:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10600:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10659:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10661:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10661:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10661:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "10631:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "10624:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10624:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "10617:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10617:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "10639:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10650:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "10646:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "10646:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "10654:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "10642:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10642:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10636:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10636:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "10613:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10613:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10610:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10690:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10705:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10708:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "10701:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10701:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "10690:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10579:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10582:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "10588:7:84",
                            "type": ""
                          }
                        ],
                        "src": "10548:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10768:312:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10778:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10800:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10803:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "10789:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10789:16:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10782:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10814:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10836:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10839:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "10825:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10825:16:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10818:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10850:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10864:3:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10869:1:84",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10860:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10860:11:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10854:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10942:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10944:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10944:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10944:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10894:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "10887:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10887:10:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10903:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10916:16:84",
                                                "type": "",
                                                "value": "0x7fffffffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "10912:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "10912:21:84"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "10935:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10908:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10908:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10899:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10899:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "10883:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10883:58:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10880:84:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11022:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11024:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11024:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11024:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10980:2:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10988:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10997:16:84",
                                            "type": "",
                                            "value": "0x7fffffffffffff"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "11015:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10993:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10993:26:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sgt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10984:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10984:36:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "10976:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10976:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10973:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11053:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11065:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11070:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "11061:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11061:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "11053:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10750:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10753:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "10759:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10721:359:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11134:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11156:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11158:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11158:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11158:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11150:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11153:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11147:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11147:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11144:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11187:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11199:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11202:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "11195:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11195:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "11187:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "11116:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "11119:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "11125:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11085:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11268:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11278:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11287:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "11282:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11347:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "11372:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "11377:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "11368:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11368:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11391:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11396:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "11387:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "11387:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "11381:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11381:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11361:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11361:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11361:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "11308:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "11311:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11305:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11305:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "11319:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "11321:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "11330:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11333:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "11326:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11326:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "11321:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "11301:3:84",
                                "statements": []
                              },
                              "src": "11297:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11436:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "11449:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "11454:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "11445:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11445:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11463:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11438:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11438:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11438:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "11425:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "11428:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11422:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11422:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11419:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "11246:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "11251:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "11256:6:84",
                            "type": ""
                          }
                        ],
                        "src": "11215:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11525:88:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11556:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11558:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11558:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11558:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "11541:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11552:1:84",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "11548:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11548:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "11538:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11538:17:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11535:43:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11587:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "11598:5:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11605:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11594:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11594:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "11587:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "increment_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "11507:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "11517:3:84",
                            "type": ""
                          }
                        ],
                        "src": "11478:135:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11656:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11679:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "11681:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11681:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11681:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11676:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "11669:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11669:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11666:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11710:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11719:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11722:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "11715:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11715:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "11710:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "11641:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "11644:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "11650:1:84",
                            "type": ""
                          }
                        ],
                        "src": "11618:112:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11777:151:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11787:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11813:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "11816:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "11802:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11802:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11791:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11869:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11871:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11871:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11871:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11837:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11850:16:84",
                                        "type": "",
                                        "value": "0x7fffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "11846:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11846:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "11834:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11834:34:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11831:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11900:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11911:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11914:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "11907:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11907:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "11900:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "11759:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "11769:3:84",
                            "type": ""
                          }
                        ],
                        "src": "11735:193:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11965:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11982:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11989:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11994:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11985:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11985:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11975:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11975:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11975:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12022:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12025:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12015:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12015:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12015:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12046:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12049:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12039:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12039:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12039:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "11933:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12097:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12114:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12121:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12126:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12117:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12117:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12107:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12107:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12107:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12154:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12157:4:84",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12147:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12147:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12147:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12178:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12181:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12171:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12171:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12171:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "12065:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12229:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12246:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12253:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12258:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12249:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12249:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12239:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12239:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12239:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12286:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12289:4:84",
                                    "type": "",
                                    "value": "0x31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12279:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12279:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12279:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12310:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12313:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12303:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12303:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12303:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x31",
                        "nodeType": "YulFunctionDefinition",
                        "src": "12197:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12361:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12378:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12385:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12390:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12381:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12381:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12371:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12371:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12371:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12418:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12421:4:84",
                                    "type": "",
                                    "value": "0x32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12411:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12411:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12411:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12442:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12445:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12435:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12435:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12435:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x32",
                        "nodeType": "YulFunctionDefinition",
                        "src": "12329:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12493:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12510:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12517:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12522:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12513:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12513:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12503:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12503:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12503:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12550:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12553:4:84",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12543:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12543:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12543:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12574:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12577:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12567:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12567:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12567:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "12461:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12638:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12702:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "12711:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "12714:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "12704:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12704:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12704:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "12661:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "12672:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "12687:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "12692:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12683:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "12683:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12696:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "12679:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "12679:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "12668:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12668:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "12658:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12658:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "12651:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12651:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12648:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "12627:5:84",
                            "type": ""
                          }
                        ],
                        "src": "12593:131:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_bool_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_int56_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, signextend(6, value))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let value_2 := calldataload(add(headStart, 96))\n        validator_revert_address(value_2)\n        value3 := value_2\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_bool_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_int56t_int56t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_int56_fromMemory(headStart)\n        value1 := abi_decode_int56_fromMemory(add(headStart, 32))\n        value2 := abi_decode_bool_fromMemory(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let pos := tail_1\n        let length := mload(value1)\n        mstore(tail_1, length)\n        pos := add(headStart, 96)\n        let srcPtr := add(value1, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, signextend(6, mload(value0)))\n        mstore(add(headStart, 0x20), signextend(6, mload(add(value0, 0x20))))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), signextend(6, value1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_int56(x, y) -> diff\n    {\n        let x_1 := signextend(6, x)\n        let y_1 := signextend(6, y)\n        let _1 := slt(y_1, 0)\n        if and(iszero(_1), slt(x_1, add(not(0x7fffffffffffff), y_1))) { panic_error_0x11() }\n        if and(_1, sgt(x_1, add(0x7fffffffffffff, y_1))) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function negate_t_int56(value) -> ret\n    {\n        let value_1 := signextend(6, value)\n        if eq(value_1, not(0x7fffffffffffff)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106103945760003560e01c80638fe204dd116101e1578063cb54694d1161010b578063cb54694d1461092d578063cd22af1b14610940578063d55995fe1461096b578063ddca3f431461097e578063de55351d14610987578063deaf81d4146109b0578063e01f857c146109c3578063e326ac43146109d6578063e89aad28146109f6578063ebbb619414610a09578063ec00cdfc14610a1c578063f0f346b914610a2f578063f11a1d1a14610a42578063f136a09d14610a55578063f25e311b14610a75578063f39c38a014610a88578063f75f9f7b14610a9b578063fc253d2b14610aae578063fe75bc4614610ab757600080fd5b80638fe204dd14610766578063951dc22c1461077957806398e90a0f146107815780639d5c33d8146107aa578063a2145809146107bd578063a39744b5146107d0578063a676f9ff146107fb578063a7d2e7841461081b578063aac6aa9c14610824578063ab033ea914610837578063b0103b1a1461084a578063b23922331461086d578063b440027f14610880578063b600702a146108ab578063b7e77340146108be578063b87fcbff146108d1578063c7ae40d0146108f4578063cacdf93d14610907578063cb4be2bb1461091a57600080fd5b8063594a3a93116102c2578063594a3a93146105e857806359a2255e146105fb5780635aa6e6751461060e5780635ebe23f014610621578063633fb68f1461062a57806364bb43ee1461063357806368a9f19c14610646578063694798e61461065957806369fe0e2d146106845780636cf262bc146106975780636e2a9ca6146106aa57806372da828a146106bd57806375a9f7ff146106d0578063768b5d90146106e35780637b40c913146106ec5780637c8fce23146106ff578063878c723e146107075780638bb6dfa8146107305780638cb22b761461074357600080fd5b8063034d4c611461039957806307b435c2146103bf5780630c620bce146103ea5780630d6a1f87146103ff5780630dc60206146104125780631101eb411461043b57806315006b8214610450578063160e1e311461047b578063165e62e71461048e578063168f92e7146104cb5780631b44555e146104f65780631ef94b911461051657806321040b0114610536578063238efcbc14610561578063274a8db414610569578063280b656c1461059c57806352a4de29146105af57806355ea6c47146105c2578063575288bf146105d5575b600080fd5b6103ac6103a7366004614097565b610aca565b6040519081526020015b60405180910390f35b6103ac6103cd3660046140d1565b601260209081526000928352604080842090915290825290205481565b6103f2610bd0565b6040516103b6919061434a565b6103ac61040d3660046141e9565b610be1565b6103ac610420366004614097565b6001600160a01b03166000908152600b602052604090205490565b61044e610449366004614155565b610ce7565b005b6103ac61045e3660046140d1565b601060209081526000928352604080842090915290825290205481565b61044e610489366004614097565b610e41565b6104a161049c366004614097565b610fa7565b604080518251600690810b825260208085015190910b9082015291810151908201526060016103b6565b6103ac6104d93660046140d1565b600960209081526000928352604080842090915290825290205481565b6103ac610504366004614097565b60056020526000908152604090205481565b601b54610529906001600160a01b031681565b6040516103b691906142c1565b6103ac6105443660046140d1565b601360209081526000928352604080842090915290825290205481565b61044e61136d565b61058c610577366004614097565b601a6020526000908152604090205460ff1681565b60405190151581526020016103b6565b61044e6105aa366004614097565b6113f9565b61044e6105bd366004614155565b611408565b61044e6105d0366004614097565b611656565b61044e6105e3366004614155565b61170a565b61044e6105f63660046140d1565b6119cd565b61044e610609366004614097565b611a72565b601754610529906001600160a01b031681565b6103ac601f5481565b6103ac60215481565b61044e610641366004614097565b611b24565b61044e610654366004614097565b611ba6565b6103ac6106673660046140d1565b602860209081526000928352604080842090915290825290205481565b61044e610692366004614273565b611c5e565b6103ac6106a5366004614097565b611cbe565b61044e6106b8366004614155565b611df4565b61044e6106cb366004614097565b611f43565b6103f26106de366004614097565b611fe0565b6103ac60225481565b601e54610529906001600160a01b031681565b6103f26120d0565b610529610715366004614097565b6001602052600090815260409020546001600160a01b031681565b6103ac61073e366004614097565b6120dc565b61058c610751366004614097565b60146020526000908152604090205460ff1681565b61044e610774366004614273565b61217f565b6103f26121dd565b61052961078f366004614097565b6002602052600090815260409020546001600160a01b031681565b61044e6107b8366004614097565b6121e9565b61044e6107cb36600461410a565b6122a1565b6103ac6107de3660046140d1565b600860209081526000928352604080842090915290825290205481565b6103ac610809366004614097565b60296020526000908152604090205481565b6103ac60205481565b61044e610832366004614097565b612471565b61044e610845366004614097565b612525565b61058c610858366004614097565b60076020526000908152604090205460ff1681565b61044e61087b366004614273565b61259b565b6103ac61088e3660046140d1565b602560209081526000928352604080842090915290825290205481565b61044e6108b9366004614097565b6125fb565b61044e6108cc366004614273565b612820565b61058c6108df366004614097565b60196020526000908152604090205460ff1681565b601c54610529906001600160a01b031681565b61044e6109153660046140d1565b612880565b61044e610928366004614097565b6128a7565b61044e61093b366004614273565b612944565b6103ac61094e3660046140d1565b601160209081526000928352604080842090915290825290205481565b61044e610979366004614196565b6129c8565b6103ac60245481565b6103ac610995366004614097565b6001600160a01b03166000908152600a602052604090205490565b61044e6109be366004614097565b612bff565b61044e6109d13660046140d1565b612c0a565b6103ac6109e4366004614097565b60066020526000908152604090205481565b6103f2610a04366004614097565b612c2c565b61044e610a17366004614273565b612d1c565b61044e610a2a366004614097565b612d7c565b61044e610a3d366004614097565b612e19565b601d54610529906001600160a01b031681565b6103ac610a63366004614097565b602a6020526000908152604090205481565b61044e610a83366004614155565b612ecd565b601854610529906001600160a01b031681565b61044e610aa9366004614097565b613112565b6103ac60235481565b61044e610ac53660046141e9565b6131ca565b600080610ad683611cbe565b6022549091504290610af190610aec90836144b5565b6132ba565b6001600160a01b0385166000908152602960205260409020541115610b95576022546001600160a01b038516600090815260296020526040902054610b3690426144b5565b10610b72576022546001600160a01b038516600090815260296020526040902054610b61919061441a565b610b6b90826144b5565b9050610bab565b6001600160a01b038416600090815260296020526040902054610b6b90826144b5565b610b9e426132ba565b610ba890826144b5565b90505b610bb581836132d4565b610bbe856120dc565b610bc8919061441a565b949350505050565b6060610bdc60266132fe565b905090565b6000610bee602684613312565b15610ce1576000610bfe84610fa7565b90508060400151600014610cdf576001600160a01b0384166000908152600f602052604081205460ff16610c3f578160200151610c3a90614527565b610c45565b81602001515b601d5460225460405163a0d2710760e01b8152929350610cd6926001600160a01b039092169163a0d2710791610c819189918791600401614401565b60206040518083038186803b158015610c9957600080fd5b505afa158015610cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd1919061428c565b613334565b92505050610ce1565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610d2357604051636efb4f4160e11b815260040160405180910390fd5b602054610d30904261441a565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610d7f90849061441a565b90915550610d909050848484613345565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590610dcf5750602154610dcd8286613553565b105b15610ded57604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de85604051610e3291815260200190565b60405180910390a35050505050565b6017546001600160a01b03163314610e6c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610e935760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b90610ef49084906004016142c1565b60206040518083038186803b158015610f0c57600080fd5b505afa158015610f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f449190614215565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa90610f9c9083906142c1565b60405180910390a150565b6040805160608101825260008082526020820181905291810191909152610fcd426132ba565b6001600160a01b0383166000908152602b6020526040902060010154141561104357506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b60008061105760225442610aec91906144b5565b6001600160a01b0385166000908152602b60205260409020600101549091508114156111bb57604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b6110c4426132ba565b6110ce90426144b5565b826000815181106110e1576110e1614590565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d919261113d92919091169086906004016142d5565b60606040518083038186803b15801561115557600080fd5b505afa158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190614230565b600692830b90920b8088529195506111a791839150614465565b600690810b900b6020860152506113449050565b6001600160a01b0384166000908152602b602052604090206001015481111561134457604080516002808252606082018352600092602083019080368337019050509050611208426132ba565b61121290426144b5565b8160008151811061122557611225614590565b602002602001019063ffffffff16908163ffffffff168152505060225461124b426132ba565b61125590426144b5565b61125f919061441a565b8160018151811061127257611272614590565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d91926112ca92169086906004016142d5565b60606040518083038186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a9190614230565b600692830b90920b8088529195509150611335908290614465565b600690810b900b602086015250505b811561135d57611353426132ba565b6040840152611365565b600060408401525b50505b919050565b6018546001600160a01b0316331461139857604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916113ef916142c1565b60405180910390a1565b611404602682613671565b5050565b600260005414156114345760405162461bcd60e51b815260040161142b906143ca565b60405180910390fd5b6002600055611444602683613312565b6114615760405163e0b6aead60e01b815260040160405180910390fd5b61146c601584613312565b61148957604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d602052604090206114ab9083613671565b506114b583613686565b6021546001600160a01b038085166000908152602860209081526040808320938716835292905220546114f3906114ed90849061441a565b84613553565b101561151257604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b845293829020548251918252928101939093528201527fee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c38209060600160405180910390a26115906001600160a01b0383163330846136e4565b6001600160a01b038084166000908152602860209081526040808320938616835292905290812080548392906115c790849061441a565b909155506115da9050610cd18284613553565b6001600160a01b0384166000908152600b60205260408120805490919061160290849061441a565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b336000908152601a602052604090205460ff1661168657604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff166116bf576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b6002600054141561172d5760405162461bcd60e51b815260040161142b906143ca565b600260005561173d601584613312565b61175a57604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b03838116911614156117885760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a08231906117b79030906004016142c1565b60206040518083038186803b1580156117cf57600080fd5b505afa1580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611807919061428c565b905061181e6001600160a01b0384163330856136e4565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161184d91906142c1565b60206040518083038186803b15801561186557600080fd5b505afa158015611879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189d919061428c565b6118a791906144b5565b90506000612710602454836118bc9190614446565b6118c69190614432565b90506118d281836144b5565b6001600160a01b038088166000908152600960209081526040808320938a168352929052908120805490919061190990849061441a565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611946921683613755565b6001600160a01b0386166000908152600c602052604090206119689086613671565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb856040516119b891815260200190565b60405180910390a45050600160005550505050565b6001600160a01b038281166000908152600160205260409020548391163314611a0957604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b038181166000908152600260205260409020548291163314611aae5760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b6017546001600160a01b03163314611b4f576040516354348f0360e01b815260040160405180910390fd5b611b5a602682613774565b611b7757604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e5681604051610f9c91906142c1565b6017546001600160a01b03163314611bd1576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff1615611c0b5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b90610f9c9083906142c1565b6017546001600160a01b03163314611c89576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001610f9c565b6000805b6001600160a01b0383166000908152600d60205260409020611ce390613789565b811015611dee576001600160a01b0383166000908152600d60205260408120611d0c9083613793565b9050611d19602682613312565b15611ddb576000611d2982610fa7565b90508060400151600014611dd9576001600160a01b0382166000908152600f602052604081205460ff16611d6a578160200151611d6590614527565b611d70565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b8152949550611dcb94929093169263a0d2710792610c81928791600401614401565b611dd5908661441a565b9450505b505b5080611de6816144f8565b915050611cc2565b50919050565b3360009081526019602052604090205460ff16611e2457604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16611e5d576040516310cec38560e21b815260040160405180910390fd5b611e68838383613345565b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb92611e9c92909116908590600401614331565b602060405180830381600087803b158015611eb657600080fd5b505af1925050508015611ee6575060408051601f3d908101601f19168201909252611ee391810190614215565b60015b611eef57611ef1565b505b336001600160a01b0316836001600160a01b03167f6e10247c3c094d220ee99436c164b7f38d63b335a20ed817cbefaee4bb02d20e8484604051611f36929190614331565b60405180910390a3505050565b6017546001600160a01b03163314611f6e576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116611f955760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090610f9c9083906142c1565b6001600160a01b0381166000908152600d6020526040902060609061200490613789565b6001600160401b0381111561201b5761201b6145a6565b604051908082528060200260200182016040528015612044578160200160208202803683370190505b50905060005b6001600160a01b0383166000908152600d6020526040902061206b90613789565b811015611dee576001600160a01b0383166000908152600d602052604090206120949082613793565b8282815181106120a6576120a6614590565b6001600160a01b0390921660209283029190910190910152806120c8816144f8565b91505061204a565b6060610bdc60156132fe565b6000806120e883611cbe565b6022546001600160a01b0385166000908152602960205260409020549192509061211290426144b5565b1015610ce1576000811161213e576001600160a01b0383166000908152600a6020526040902054612178565b6001600160a01b0383166000908152600b6020908152604080832054600a9092529091205461216e908390614446565b6121789190614432565b9150611dee565b6017546001600160a01b031633146121aa576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29101610f9c565b6060610bdc60036132fe565b6017546001600160a01b03163314612214576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff161561224e5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f90610f9c9083906142c1565b6001600160a01b0383811660009081526001602052604090205484911633146122dd57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b0382166123045760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038085166000908152601360209081526040808320938716835292905220546123475760405163184c088160e21b815260040160405180910390fd5b6001600160a01b03808516600090815260126020908152604080832093871683529290522054421161238c576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff16156123c6576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590612413908483613755565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca79288628460405161246291815260200190565b60405180910390a45050505050565b6017546001600160a01b0316331461249c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff166124d5576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d02590610f9c9083906142c1565b6017546001600160a01b03163314612550576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610f9c9083906142c1565b6017546001600160a01b031633146125c6576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001610f9c565b6017546001600160a01b03163314612626576040516354348f0360e01b815260040160405180910390fd5b612631602682613671565b61264e5760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561268757600080fd5b505afa15801561269b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bf91906140b4565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b9161271391906004016142c1565b60206040518083038186803b15801561272b57600080fd5b505afa15801561273f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127639190614215565b6001600160a01b0382166000908152600f60205260409020805460ff191691151591909117905561279381610fa7565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b90610f9c9083906142c1565b6017546001600160a01b0316331461284b576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001610f9c565b6001600160a01b0382166000908152600d602052604090206128a29082613671565b505050565b6017546001600160a01b031633146128d2576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166128f95760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090610f9c9083906142c1565b6017546001600160a01b0316331461296f576040516354348f0360e01b815260040160405180910390fd5b6201518081101561299357604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001610f9c565b600260005414156129eb5760405162461bcd60e51b815260040161142b906143ca565b600260009081556001600160a01b03858116825260016020526040909120548591163314612a2c57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054612a5e90603c9061441a565b4211612a7d57604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115612ac35760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615612afd5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290612b349084906144b5565b90915550612b4e90506001600160a01b0385168385613755565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054612b9c576001600160a01b0385166000908152600c60205260409020612b9a9085613774565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051612beb91815260200190565b60405180910390a450506001600055505050565b611404602682613774565b6001600160a01b0382166000908152600c602052604090206128a29082613671565b6001600160a01b0381166000908152600c60205260409020606090612c5090613789565b6001600160401b03811115612c6757612c676145a6565b604051908082528060200260200182016040528015612c90578160200160208202803683370190505b50905060005b6001600160a01b0383166000908152600c60205260409020612cb790613789565b811015611dee576001600160a01b0383166000908152600c60205260409020612ce09082613793565b828281518110612cf257612cf2614590565b6001600160a01b039092166020928302919091019091015280612d14816144f8565b915050612c96565b6017546001600160a01b03163314612d47576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e790602001610f9c565b6017546001600160a01b03163314612da7576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612dce5760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90610f9c9083906142c1565b6017546001600160a01b03163314612e44576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff16612e7d57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e90610f9c9083906142c1565b3360009081526019602052604090205460ff16612efd57604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16612f36576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b0383166000908152600c60205260409020612f589083613312565b612f7557604051632eda7a1160e01b815260040160405180910390fd5b6001600160a01b03808416600090815260096020908152604080832093861683529290522054811115612fba5760405162919bed60e01b815260040160405180910390fd5b60175460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb92612fee92909116908590600401614331565b602060405180830381600087803b15801561300857600080fd5b505af1925050508015613038575060408051601f3d908101601f1916820190925261303591810190614215565b60015b61304157613043565b505b6001600160a01b0380841660009081526009602090815260408083209386168352929052908120805483929061307a9084906144b5565b90915550506001600160a01b038084166000908152600960209081526040808320938616835292905220546130cd576001600160a01b0383166000908152600c602052604090206130cb9083613774565b505b336001600160a01b0316836001600160a01b03167f20262b97130b5cb8f80624eed2733df2b05db4a0789b4a3d0157e1d3183331048484604051611f36929190614331565b336000908152601a602052604090205460ff1661314257604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff161561317c576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b6017546001600160a01b031633146131f5576040516354348f0360e01b815260040160405180910390fd5b613200601583613312565b61321d57604051636211d34960e01b815260040160405180910390fd5b61322682613686565b6001600160a01b0382166000908152600a60205260408120805483929061324e90849061441a565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d1926132ae928252602082015260400190565b60405180910390a25050565b6000602254826132ca9190614513565b610ce190836144b5565b6000602254831015611dee576022546132ed8385614446565b6132f79190614432565b9050610ce1565b6060600061330b8361379f565b9392505050565b6001600160a01b0381166000908152600183016020526040812054151561330b565b6000610ce1826022546023546137fb565b600260005414156133685760405162461bcd60e51b815260040161142b906143ca565b600260009081556001600160a01b0384168152600d6020526040902061338e9083613312565b6133aa576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156133f05760405163435b562560e01b815260040160405180910390fd5b6133f9836138a9565b6000613408610cd18385613553565b6001600160a01b0385166000908152600b6020526040902054909150156134be576001600160a01b0384166000908152600b6020908152604080832054600a90925290912054613459908390614446565b6134639190614432565b6001600160a01b0385166000908152600a60205260408120805490919061348b9084906144b5565b90915550506001600160a01b0384166000908152600b6020526040812080548392906134b89084906144b5565b90915550505b6001600160a01b038085166000908152602860209081526040808320938716835292905290812080548492906134f59084906144b5565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054613548576001600160a01b0384166000908152600d602052604090206135469084613774565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610ce1576001600160a01b0382166000908152600f602052604081205460ff166135c5576001600160a01b0383166000908152602b60205260409020546135c090600160381b900460060b614527565b6135e9565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d27107916136219188918691600401614401565b60206040518083038186803b15801561363957600080fd5b505afa15801561364d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc8919061428c565b600061330b836001600160a01b0384166138ce565b61368f8161391d565b5061369981613af3565b6001600160a01b0381166000908152600a6020908152604080832054600b909252909120546136c89190613b81565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b038085166024830152831660448201526064810182905261374f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613b97565b50505050565b6128a28363a9059cbb60e01b8484604051602401613718929190614331565b600061330b836001600160a01b038416613c69565b6000610ce1825490565b600061330b8383613d5c565b6060816000018054806020026020016040519081016040528092919081815260200182805480156137ef57602002820191906000526020600020905b8154815260200190600101908083116137db575b50505050509050919050565b600080806000198587098587029250828110838203039150508060001415613835576000841161382a57600080fd5b50829004905061330b565b80841161384157600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6138b281613d86565b6001600160a01b039091166000908152600b6020526040902055565b600081815260018301602052604081205461391557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ce1565b506000610ce1565b6000613928426132ba565b6001600160a01b03831660009081526029602052604090205410156113685761395860225442610aec91906144b5565b6001600160a01b038316600090815260296020526040902054116139ce5761397f826138a9565b6001600160a01b0382166000908152600b6020908152604080832054600a909252909120556139ad426132ba565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b0383166000908152602960205260409020546139f490426144b5565b10613a5057613a02826138a9565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460299092528220805491929091613a4190849061441a565b90915550600191506113689050565b613a59426132ba565b6001600160a01b0383166000908152602a60205260409020541015611368576001600160a01b0382166000908152600b6020526040902054613a9a836138a9565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291613aca91614446565b613ad49190614432565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260296020526040902054613b3890613b1a90426144b5565b6001600160a01b0383166000908152600b60205260409020546132d4565b6001600160a01b0382166000908152600a602052604081208054909190613b6090849061441a565b90915550506001600160a01b03166000908152602960205260409020429055565b6000818310613b90578161330b565b5090919050565b6000613bec826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613f6a9092919063ffffffff16565b8051909150156128a25780806020019051810190613c0a9190614215565b6128a25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161142b565b60008181526001830160205260408120548015613d52576000613c8d6001836144b5565b8554909150600090613ca1906001906144b5565b9050818114613d06576000866000018281548110613cc157613cc1614590565b9060005260206000200154905080876000018481548110613ce457613ce4614590565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613d1757613d1761457a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ce1565b6000915050610ce1565b6000826000018281548110613d7357613d73614590565b9060005260206000200154905092915050565b6000613d91426132ba565b601e546001600160a01b03166000908152602b602052604090206001015414613e2857601e54613dc9906001600160a01b0316610fa7565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d60205260409020613e4c90613789565b811015611dee576001600160a01b0383166000908152600d60205260408120613e759083613793565b9050613e82602682613312565b15613f5757613e90426132ba565b6001600160a01b0382166000908152602b602052604090206001015414613f1657613eba81610fa7565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b03808516600090815260286020908152604080832093851683529290522054613f4a90610cd19083613553565b613f54908461441a565b92505b5080613f62816144f8565b915050613e2b565b6060610bc8848460008585843b613fc35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161142b565b600080866001600160a01b03168587604051613fdf91906142a5565b60006040518083038185875af1925050503d806000811461401c576040519150601f19603f3d011682016040523d82523d6000602084013e614021565b606091505b509150915061403182828661403c565b979650505050505050565b6060831561404b57508161330b565b82511561405b5782518084602001fd5b8160405162461bcd60e51b815260040161142b9190614397565b8051801515811461136857600080fd5b8051600681900b811461136857600080fd5b6000602082840312156140a957600080fd5b813561330b816145bc565b6000602082840312156140c657600080fd5b815161330b816145bc565b600080604083850312156140e457600080fd5b82356140ef816145bc565b915060208301356140ff816145bc565b809150509250929050565b60008060006060848603121561411f57600080fd5b833561412a816145bc565b9250602084013561413a816145bc565b9150604084013561414a816145bc565b809150509250925092565b60008060006060848603121561416a57600080fd5b8335614175816145bc565b92506020840135614185816145bc565b929592945050506040919091013590565b600080600080608085870312156141ac57600080fd5b84356141b7816145bc565b935060208501356141c7816145bc565b92506040850135915060608501356141de816145bc565b939692955090935050565b600080604083850312156141fc57600080fd5b8235614207816145bc565b946020939093013593505050565b60006020828403121561422757600080fd5b61330b82614075565b60008060006060848603121561424557600080fd5b61424e84614085565b925061425c60208501614085565b915061426a60408501614075565b90509250925092565b60006020828403121561428557600080fd5b5035919050565b60006020828403121561429e57600080fd5b5051919050565b600082516142b78184602087016144cc565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b8181101561432457845163ffffffff1683529383019391830191600101614302565b5090979650505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561438b5783516001600160a01b031683529284019291840191600101614366565b50909695505050505050565b60208152600082518060208401526143b68160408501602087016144cc565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b6000821982111561442d5761442d61454e565b500190565b60008261444157614441614564565b500490565b60008160001904831182151516156144605761446061454e565b500290565b60008160060b8360060b6000811281667fffffffffffff19018312811516156144905761449061454e565b81667fffffffffffff0183138116156144ab576144ab61454e565b5090039392505050565b6000828210156144c7576144c761454e565b500390565b60005b838110156144e75781810151838201526020016144cf565b8381111561374f5750506000910152565b600060001982141561450c5761450c61454e565b5060010190565b60008261452257614522614564565b500690565b60008160060b667fffffffffffff198114156145455761454561454e565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146145d157600080fd5b5056fea2646970667358221220911d3e94d8d4f6238b4bb85c1d0e467849df8b763d2c4a650bf62ec1b71c1c6064736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x394 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8FE204DD GT PUSH2 0x1E1 JUMPI DUP1 PUSH4 0xCB54694D GT PUSH2 0x10B JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x92D JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x940 JUMPI DUP1 PUSH4 0xD55995FE EQ PUSH2 0x96B JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x97E JUMPI DUP1 PUSH4 0xDE55351D EQ PUSH2 0x987 JUMPI DUP1 PUSH4 0xDEAF81D4 EQ PUSH2 0x9B0 JUMPI DUP1 PUSH4 0xE01F857C EQ PUSH2 0x9C3 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x9D6 JUMPI DUP1 PUSH4 0xE89AAD28 EQ PUSH2 0x9F6 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0xA09 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0xA1C JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0xA2F JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0xA42 JUMPI DUP1 PUSH4 0xF136A09D EQ PUSH2 0xA55 JUMPI DUP1 PUSH4 0xF25E311B EQ PUSH2 0xA75 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0xA88 JUMPI DUP1 PUSH4 0xF75F9F7B EQ PUSH2 0xA9B JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0xAAE JUMPI DUP1 PUSH4 0xFE75BC46 EQ PUSH2 0xAB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x766 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x779 JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x781 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x7AA JUMPI DUP1 PUSH4 0xA2145809 EQ PUSH2 0x7BD JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x7D0 JUMPI DUP1 PUSH4 0xA676F9FF EQ PUSH2 0x7FB JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x81B JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x824 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x837 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x84A JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x86D JUMPI DUP1 PUSH4 0xB440027F EQ PUSH2 0x880 JUMPI DUP1 PUSH4 0xB600702A EQ PUSH2 0x8AB JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x8BE JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x8D1 JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x8F4 JUMPI DUP1 PUSH4 0xCACDF93D EQ PUSH2 0x907 JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x91A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x594A3A93 GT PUSH2 0x2C2 JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x5E8 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x5FB JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x60E JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x621 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x62A JUMPI DUP1 PUSH4 0x64BB43EE EQ PUSH2 0x633 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x646 JUMPI DUP1 PUSH4 0x694798E6 EQ PUSH2 0x659 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x684 JUMPI DUP1 PUSH4 0x6CF262BC EQ PUSH2 0x697 JUMPI DUP1 PUSH4 0x6E2A9CA6 EQ PUSH2 0x6AA JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x6BD JUMPI DUP1 PUSH4 0x75A9F7FF EQ PUSH2 0x6D0 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x6EC JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x6FF JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x707 JUMPI DUP1 PUSH4 0x8BB6DFA8 EQ PUSH2 0x730 JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x743 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34D4C61 EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0xC620BCE EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0xD6A1F87 EQ PUSH2 0x3FF JUMPI DUP1 PUSH4 0xDC60206 EQ PUSH2 0x412 JUMPI DUP1 PUSH4 0x1101EB41 EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x450 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x47B JUMPI DUP1 PUSH4 0x165E62E7 EQ PUSH2 0x48E JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x536 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x561 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x569 JUMPI DUP1 PUSH4 0x280B656C EQ PUSH2 0x59C JUMPI DUP1 PUSH4 0x52A4DE29 EQ PUSH2 0x5AF JUMPI DUP1 PUSH4 0x55EA6C47 EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0x575288BF EQ PUSH2 0x5D5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3AC PUSH2 0x3A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0xACA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3AC PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0xBD0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B6 SWAP2 SWAP1 PUSH2 0x434A JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x40D CALLDATASIZE PUSH1 0x4 PUSH2 0x41E9 JUMP JUMPDEST PUSH2 0xBE1 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x420 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x449 CALLDATASIZE PUSH1 0x4 PUSH2 0x4155 JUMP JUMPDEST PUSH2 0xCE7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3AC PUSH2 0x45E CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x489 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0xE41 JUMP JUMPDEST PUSH2 0x4A1 PUSH2 0x49C CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0xFA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND DUP3 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 SIGNEXTEND SWAP1 DUP3 ADD MSTORE SWAP2 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x504 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x529 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B6 SWAP2 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x544 CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x136D JUMP JUMPDEST PUSH2 0x58C PUSH2 0x577 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x5AA CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x13F9 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x5BD CALLDATASIZE PUSH1 0x4 PUSH2 0x4155 JUMP JUMPDEST PUSH2 0x1408 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x5D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1656 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x5E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4155 JUMP JUMPDEST PUSH2 0x170A JUMP JUMPDEST PUSH2 0x44E PUSH2 0x5F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH2 0x19CD JUMP JUMPDEST PUSH2 0x44E PUSH2 0x609 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1A72 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x529 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x641 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1B24 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x654 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1BA6 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x667 CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x692 CALLDATASIZE PUSH1 0x4 PUSH2 0x4273 JUMP JUMPDEST PUSH2 0x1C5E JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x6A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1CBE JUMP JUMPDEST PUSH2 0x44E PUSH2 0x6B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4155 JUMP JUMPDEST PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x6CB CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1F43 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0x6DE CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x1FE0 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x529 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0x20D0 JUMP JUMPDEST PUSH2 0x529 PUSH2 0x715 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x73E CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x20DC JUMP JUMPDEST PUSH2 0x58C PUSH2 0x751 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x774 CALLDATASIZE PUSH1 0x4 PUSH2 0x4273 JUMP JUMPDEST PUSH2 0x217F JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0x21DD JUMP JUMPDEST PUSH2 0x529 PUSH2 0x78F CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x7B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x21E9 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x7CB CALLDATASIZE PUSH1 0x4 PUSH2 0x410A JUMP JUMPDEST PUSH2 0x22A1 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x7DE CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x809 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x832 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x2471 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x845 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x2525 JUMP JUMPDEST PUSH2 0x58C PUSH2 0x858 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x87B CALLDATASIZE PUSH1 0x4 PUSH2 0x4273 JUMP JUMPDEST PUSH2 0x259B JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x88E CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x8B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x25FB JUMP JUMPDEST PUSH2 0x44E PUSH2 0x8CC CALLDATASIZE PUSH1 0x4 PUSH2 0x4273 JUMP JUMPDEST PUSH2 0x2820 JUMP JUMPDEST PUSH2 0x58C PUSH2 0x8DF CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x529 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x915 CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH2 0x2880 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x928 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x28A7 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x93B CALLDATASIZE PUSH1 0x4 PUSH2 0x4273 JUMP JUMPDEST PUSH2 0x2944 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x94E CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x979 CALLDATASIZE PUSH1 0x4 PUSH2 0x4196 JUMP JUMPDEST PUSH2 0x29C8 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x995 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x44E PUSH2 0x9BE CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x2BFF JUMP JUMPDEST PUSH2 0x44E PUSH2 0x9D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x40D1 JUMP JUMPDEST PUSH2 0x2C0A JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x9E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0xA04 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x2C2C JUMP JUMPDEST PUSH2 0x44E PUSH2 0xA17 CALLDATASIZE PUSH1 0x4 PUSH2 0x4273 JUMP JUMPDEST PUSH2 0x2D1C JUMP JUMPDEST PUSH2 0x44E PUSH2 0xA2A CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x2D7C JUMP JUMPDEST PUSH2 0x44E PUSH2 0xA3D CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x2E19 JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x529 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0xA63 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0xA83 CALLDATASIZE PUSH1 0x4 PUSH2 0x4155 JUMP JUMPDEST PUSH2 0x2ECD JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x529 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0xAA9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4097 JUMP JUMPDEST PUSH2 0x3112 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x44E PUSH2 0xAC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x41E9 JUMP JUMPDEST PUSH2 0x31CA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xAD6 DUP4 PUSH2 0x1CBE JUMP JUMPDEST PUSH1 0x22 SLOAD SWAP1 SWAP2 POP TIMESTAMP SWAP1 PUSH2 0xAF1 SWAP1 PUSH2 0xAEC SWAP1 DUP4 PUSH2 0x44B5 JUMP JUMPDEST PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO PUSH2 0xB95 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xB36 SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST LT PUSH2 0xB72 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xB61 SWAP2 SWAP1 PUSH2 0x441A JUMP JUMPDEST PUSH2 0xB6B SWAP1 DUP3 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 POP PUSH2 0xBAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xB6B SWAP1 DUP3 PUSH2 0x44B5 JUMP JUMPDEST PUSH2 0xB9E TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH2 0xBA8 SWAP1 DUP3 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0xBB5 DUP2 DUP4 PUSH2 0x32D4 JUMP JUMPDEST PUSH2 0xBBE DUP6 PUSH2 0x20DC JUMP JUMPDEST PUSH2 0xBC8 SWAP2 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xBDC PUSH1 0x26 PUSH2 0x32FE JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBEE PUSH1 0x26 DUP5 PUSH2 0x3312 JUMP JUMPDEST ISZERO PUSH2 0xCE1 JUMPI PUSH1 0x0 PUSH2 0xBFE DUP5 PUSH2 0xFA7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0xCDF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xC3F JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xC3A SWAP1 PUSH2 0x4527 JUMP JUMPDEST PUSH2 0xC45 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH2 0xCD6 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0xC81 SWAP2 DUP10 SWAP2 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x4401 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCAD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCD1 SWAP2 SWAP1 PUSH2 0x428C JUMP JUMPDEST PUSH2 0x3334 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xCE1 JUMP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0xD23 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 SLOAD PUSH2 0xD30 SWAP1 TIMESTAMP PUSH2 0x441A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0xD7F SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0xD90 SWAP1 POP DUP5 DUP5 DUP5 PUSH2 0x3345 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xDCF JUMPI POP PUSH1 0x21 SLOAD PUSH2 0xDCD DUP3 DUP7 PUSH2 0x3553 JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0xDED JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE DUP6 PUSH1 0x40 MLOAD PUSH2 0xE32 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE6C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xE93 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0xEF4 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF44 SWAP2 SWAP1 PUSH2 0x4215 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0xFCD TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ ISZERO PUSH2 0x1043 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1057 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xAEC SWAP2 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 SWAP2 POP DUP2 EQ ISZERO PUSH2 0x11BB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x6 SIGNEXTEND PUSH2 0x10C4 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH2 0x10CE SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x10E1 JUMPI PUSH2 0x10E1 PUSH2 0x4590 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD SWAP3 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP2 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x113D SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x42D5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1169 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x118D SWAP2 SWAP1 PUSH2 0x4230 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP PUSH2 0x11A7 SWAP2 DUP4 SWAP2 POP PUSH2 0x4465 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP PUSH2 0x1344 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 GT ISZERO PUSH2 0x1344 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x1208 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH2 0x1212 SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1225 JUMPI PUSH2 0x1225 PUSH2 0x4590 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x22 SLOAD PUSH2 0x124B TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH2 0x1255 SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST PUSH2 0x125F SWAP2 SWAP1 PUSH2 0x441A JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x1272 JUMPI PUSH2 0x1272 PUSH2 0x4590 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP3 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x12CA SWAP3 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x42D5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x131A SWAP2 SWAP1 PUSH2 0x4230 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP SWAP2 POP PUSH2 0x1335 SWAP1 DUP3 SWAP1 PUSH2 0x4465 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x135D JUMPI PUSH2 0x1353 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1365 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP5 ADD MSTORE JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1398 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x13EF SWAP2 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x1404 PUSH1 0x26 DUP3 PUSH2 0x3671 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x1434 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x142B SWAP1 PUSH2 0x43CA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1444 PUSH1 0x26 DUP4 PUSH2 0x3312 JUMP JUMPDEST PUSH2 0x1461 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE0B6AEAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x146C PUSH1 0x15 DUP5 PUSH2 0x3312 JUMP JUMPDEST PUSH2 0x1489 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x14AB SWAP1 DUP4 PUSH2 0x3671 JUMP JUMPDEST POP PUSH2 0x14B5 DUP4 PUSH2 0x3686 JUMP JUMPDEST PUSH1 0x21 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x14F3 SWAP1 PUSH2 0x14ED SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST DUP5 PUSH2 0x3553 JUMP JUMPDEST LT ISZERO PUSH2 0x1512 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB DUP5 MSTORE SWAP4 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE SWAP3 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP3 ADD MSTORE PUSH32 0xEE3F0DABA9837D1AB0597ACF34328550E4832D02E24E467825E7C2DD318C3820 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x1590 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x36E4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x15C7 SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x15DA SWAP1 POP PUSH2 0xCD1 DUP3 DUP5 PUSH2 0x3553 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1602 SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 SWAP1 DUP7 AND SWAP1 PUSH32 0x4E186BC75A2220191B826BAFF3EE63C3E970E94E58A9007FF94C9A7B8E6EBB3F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1686 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x16BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0xE02B2375D8FB4AEF3E5BC5D53BFFCF70B6F185C5C93E69DCBE8B6CFC58E837E2 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x172D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x142B SWAP1 PUSH2 0x43CA JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x173D PUSH1 0x15 DUP5 PUSH2 0x3312 JUMP JUMPDEST PUSH2 0x175A JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1788 JUMPI PUSH1 0x40 MLOAD PUSH3 0x822D97 PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x17B7 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17E3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1807 SWAP2 SWAP1 PUSH2 0x428C JUMP JUMPDEST SWAP1 POP PUSH2 0x181E PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x36E4 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x184D SWAP2 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1879 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x189D SWAP2 SWAP1 PUSH2 0x428C JUMP JUMPDEST PUSH2 0x18A7 SWAP2 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2710 PUSH1 0x24 SLOAD DUP4 PUSH2 0x18BC SWAP2 SWAP1 PUSH2 0x4446 JUMP JUMPDEST PUSH2 0x18C6 SWAP2 SWAP1 PUSH2 0x4432 JUMP JUMPDEST SWAP1 POP PUSH2 0x18D2 DUP2 DUP4 PUSH2 0x44B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1909 SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x17 SLOAD PUSH2 0x1946 SWAP3 AND DUP4 PUSH2 0x3755 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1968 SWAP1 DUP7 PUSH2 0x3671 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEC1A37D4A331A5059081E0FB5DA1735E7890900CD215A4FB1E9F2779FD7B83EB DUP6 PUSH1 0x40 MLOAD PUSH2 0x19B8 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x1A09 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x1AAE JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1B4F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1B5A PUSH1 0x26 DUP3 PUSH2 0x3774 JUMP JUMPDEST PUSH2 0x1B77 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8D08B1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x51199D699BDFD516FA88DD0D2F8487C40C147B4867ACAA23ADC8D4DF6B098E56 DUP2 PUSH1 0x40 MLOAD PUSH2 0xF9C SWAP2 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1BD1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1C0B JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1C89 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1CE3 SWAP1 PUSH2 0x3789 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1DEE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1D0C SWAP1 DUP4 PUSH2 0x3793 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D19 PUSH1 0x26 DUP3 PUSH2 0x3312 JUMP JUMPDEST ISZERO PUSH2 0x1DDB JUMPI PUSH1 0x0 PUSH2 0x1D29 DUP3 PUSH2 0xFA7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x1DD9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1D6A JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x1D65 SWAP1 PUSH2 0x4527 JUMP JUMPDEST PUSH2 0x1D70 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SLOAD PUSH1 0x22 SLOAD SWAP2 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH2 0x1DCB SWAP5 SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0xA0D27107 SWAP3 PUSH2 0xC81 SWAP3 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x4401 JUMP JUMPDEST PUSH2 0x1DD5 SWAP1 DUP7 PUSH2 0x441A JUMP JUMPDEST SWAP5 POP POP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x1DE6 DUP2 PUSH2 0x44F8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1CC2 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1E24 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1E5D JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1E68 DUP4 DUP4 DUP4 PUSH2 0x3345 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH2 0x1E9C SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x4331 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1EB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1EE6 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1EE3 SWAP2 DUP2 ADD SWAP1 PUSH2 0x4215 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1EEF JUMPI PUSH2 0x1EF1 JUMP JUMPDEST POP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x6E10247C3C094D220EE99436C164B7F38D63B335A20ED817CBEFAEE4BB02D20E DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1F36 SWAP3 SWAP2 SWAP1 PUSH2 0x4331 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1F6E JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1F95 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 SWAP1 PUSH2 0x2004 SWAP1 PUSH2 0x3789 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x201B JUMPI PUSH2 0x201B PUSH2 0x45A6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2044 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x206B SWAP1 PUSH2 0x3789 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1DEE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2094 SWAP1 DUP3 PUSH2 0x3793 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x20A6 JUMPI PUSH2 0x20A6 PUSH2 0x4590 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE DUP1 PUSH2 0x20C8 DUP2 PUSH2 0x44F8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x204A JUMP JUMPDEST PUSH1 0x60 PUSH2 0xBDC PUSH1 0x15 PUSH2 0x32FE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x20E8 DUP4 PUSH2 0x1CBE JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2112 SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST LT ISZERO PUSH2 0xCE1 JUMPI PUSH1 0x0 DUP2 GT PUSH2 0x213E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2178 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x216E SWAP1 DUP4 SWAP1 PUSH2 0x4446 JUMP JUMPDEST PUSH2 0x2178 SWAP2 SWAP1 PUSH2 0x4432 JUMP JUMPDEST SWAP2 POP PUSH2 0x1DEE JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x21AA JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x60 PUSH2 0xBDC PUSH1 0x3 PUSH2 0x32FE JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2214 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x224E JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x22DD JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2304 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2347 JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x238C JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x23C6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x12 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE SWAP1 PUSH2 0x2413 SWAP1 DUP5 DUP4 PUSH2 0x3755 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFDB7893BF11F50C621E59CC7F1CF540E94295CB27CA869EC7ED7618CA7928862 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2462 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x249C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x24D5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2550 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x25C6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2626 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2631 PUSH1 0x26 DUP3 PUSH2 0x3671 JUMP JUMPDEST PUSH2 0x264E JUMPI PUSH1 0x40 MLOAD PUSH4 0xF25E6B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2687 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x269B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26BF SWAP2 SWAP1 PUSH2 0x40B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 DUP4 AND SWAP4 DUP5 OR SWAP1 SSTORE PUSH1 0x1D SLOAD SWAP1 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0x696A437B SWAP2 PUSH2 0x2713 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x272B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x273F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2763 SWAP2 SWAP1 PUSH2 0x4215 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2793 DUP2 PUSH2 0xFA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 DUP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xABFA8DB4D238FA78BF4E15FCC91328DD35F3978F200E2857A56BB719732B7B0B SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x284B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x28A2 SWAP1 DUP3 PUSH2 0x3671 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x28D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x28F9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x296F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x2993 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x29EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x142B SWAP1 PUSH2 0x43CA JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 AND CALLER EQ PUSH2 0x2A2C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2A5E SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x441A JUMP JUMPDEST TIMESTAMP GT PUSH2 0x2A7D JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E0B4075 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP4 GT ISZERO PUSH2 0x2AC3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24AE82D PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2AFD JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x2B34 SWAP1 DUP5 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x2B4E SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP4 DUP6 PUSH2 0x3755 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2B9C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2B9A SWAP1 DUP6 PUSH2 0x3774 JUMP JUMPDEST POP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x53E982DD9EC088D634C74C98FBBC161F808B4B6469A26C657120B9A31CB34BFE DUP7 PUSH1 0x40 MLOAD PUSH2 0x2BEB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x1404 PUSH1 0x26 DUP3 PUSH2 0x3774 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x28A2 SWAP1 DUP3 PUSH2 0x3671 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 SWAP1 PUSH2 0x2C50 SWAP1 PUSH2 0x3789 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2C67 JUMPI PUSH2 0x2C67 PUSH2 0x45A6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2C90 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2CB7 SWAP1 PUSH2 0x3789 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1DEE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2CE0 SWAP1 DUP3 PUSH2 0x3793 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2CF2 JUMPI PUSH2 0x2CF2 PUSH2 0x4590 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE DUP1 PUSH2 0x2D14 DUP2 PUSH2 0x44F8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2C96 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2D47 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0xF9C JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2DA7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2DCE JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2E44 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2E7D JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0xF9C SWAP1 DUP4 SWAP1 PUSH2 0x42C1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2EFD JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2F36 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2F58 SWAP1 DUP4 PUSH2 0x3312 JUMP JUMPDEST PUSH2 0x2F75 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EDA7A11 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x2FBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x919BED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 PUSH4 0xA9059CBB SWAP3 PUSH2 0x2FEE SWAP3 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x4331 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3008 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x3038 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x3035 SWAP2 DUP2 ADD SWAP1 PUSH2 0x4215 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x3041 JUMPI PUSH2 0x3043 JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x307A SWAP1 DUP5 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x30CD JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x30CB SWAP1 DUP4 PUSH2 0x3774 JUMP JUMPDEST POP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x20262B97130B5CB8F80624EED2733DF2B05DB4A0789B4A3D0157E1D318333104 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1F36 SWAP3 SWAP2 SWAP1 PUSH2 0x4331 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3142 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x317C JUMPI PUSH1 0x40 MLOAD PUSH4 0x4EE891B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x70125A1C0F5202217AAE14EC399ABFAAA13C2FD98A91D43BD3A897DD4751E80 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x31F5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3200 PUSH1 0x15 DUP4 PUSH2 0x3312 JUMP JUMPDEST PUSH2 0x321D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3226 DUP3 PUSH2 0x3686 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x324E SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x5ABCF5031FDBD3BADB9D1E09094208DE329AEE72730E87650F346584205D23D1 SWAP3 PUSH2 0x32AE SWAP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP3 PUSH2 0x32CA SWAP2 SWAP1 PUSH2 0x4513 JUMP JUMPDEST PUSH2 0xCE1 SWAP1 DUP4 PUSH2 0x44B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP4 LT ISZERO PUSH2 0x1DEE JUMPI PUSH1 0x22 SLOAD PUSH2 0x32ED DUP4 DUP6 PUSH2 0x4446 JUMP JUMPDEST PUSH2 0x32F7 SWAP2 SWAP1 PUSH2 0x4432 JUMP JUMPDEST SWAP1 POP PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x330B DUP4 PUSH2 0x379F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x330B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCE1 DUP3 PUSH1 0x22 SLOAD PUSH1 0x23 SLOAD PUSH2 0x37FB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x3368 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x142B SWAP1 PUSH2 0x43CA JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x338E SWAP1 DUP4 PUSH2 0x3312 JUMP JUMPDEST PUSH2 0x33AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x41CFA5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x33F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x435B5625 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x33F9 DUP4 PUSH2 0x38A9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3408 PUSH2 0xCD1 DUP4 DUP6 PUSH2 0x3553 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x34BE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x3459 SWAP1 DUP4 SWAP1 PUSH2 0x4446 JUMP JUMPDEST PUSH2 0x3463 SWAP2 SWAP1 PUSH2 0x4432 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x348B SWAP1 DUP5 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x34B8 SWAP1 DUP5 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x34F5 SWAP1 DUP5 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3548 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3546 SWAP1 DUP5 PUSH2 0x3774 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0xCE1 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x35C5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x35C0 SWAP1 PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND PUSH2 0x4527 JUMP JUMPDEST PUSH2 0x35E9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x3621 SWAP2 DUP9 SWAP2 DUP7 SWAP2 PUSH1 0x4 ADD PUSH2 0x4401 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3639 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x364D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBC8 SWAP2 SWAP1 PUSH2 0x428C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x330B DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x38CE JUMP JUMPDEST PUSH2 0x368F DUP2 PUSH2 0x391D JUMP JUMPDEST POP PUSH2 0x3699 DUP2 PUSH2 0x3AF3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x36C8 SWAP2 SWAP1 PUSH2 0x3B81 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x374F SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x3B97 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x28A2 DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x3718 SWAP3 SWAP2 SWAP1 PUSH2 0x4331 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x330B DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x3C69 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCE1 DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x330B DUP4 DUP4 PUSH2 0x3D5C JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x37EF JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x37DB JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x3835 JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x382A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x330B JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x3841 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x38B2 DUP2 PUSH2 0x3D86 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x3915 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xCE1 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3928 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1368 JUMPI PUSH2 0x3958 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xAEC SWAP2 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT PUSH2 0x39CE JUMPI PUSH2 0x397F DUP3 PUSH2 0x38A9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x39AD TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x39F4 SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST LT PUSH2 0x3A50 JUMPI PUSH2 0x3A02 DUP3 PUSH2 0x38A9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SSTORE PUSH1 0x22 SLOAD PUSH1 0x29 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x3A41 SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x1 SWAP2 POP PUSH2 0x1368 SWAP1 POP JUMP JUMPDEST PUSH2 0x3A59 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1368 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3A9A DUP4 PUSH2 0x38A9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP3 SWAP2 PUSH2 0x3ACA SWAP2 PUSH2 0x4446 JUMP JUMPDEST PUSH2 0x3AD4 SWAP2 SWAP1 PUSH2 0x4432 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3B38 SWAP1 PUSH2 0x3B1A SWAP1 TIMESTAMP PUSH2 0x44B5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x32D4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x3B60 SWAP1 DUP5 SWAP1 PUSH2 0x441A JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x3B90 JUMPI DUP2 PUSH2 0x330B JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BEC DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3F6A SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x28A2 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3C0A SWAP2 SWAP1 PUSH2 0x4215 JUMP JUMPDEST PUSH2 0x28A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x142B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x3D52 JUMPI PUSH1 0x0 PUSH2 0x3C8D PUSH1 0x1 DUP4 PUSH2 0x44B5 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x3CA1 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x44B5 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x3D06 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x3CC1 JUMPI PUSH2 0x3CC1 PUSH2 0x4590 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x3CE4 JUMPI PUSH2 0x3CE4 PUSH2 0x4590 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x3D17 JUMPI PUSH2 0x3D17 PUSH2 0x457A JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0xCE1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x3D73 JUMPI PUSH2 0x3D73 PUSH2 0x4590 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D91 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x3E28 JUMPI PUSH1 0x1E SLOAD PUSH2 0x3DC9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFA7 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3E4C SWAP1 PUSH2 0x3789 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1DEE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x3E75 SWAP1 DUP4 PUSH2 0x3793 JUMP JUMPDEST SWAP1 POP PUSH2 0x3E82 PUSH1 0x26 DUP3 PUSH2 0x3312 JUMP JUMPDEST ISZERO PUSH2 0x3F57 JUMPI PUSH2 0x3E90 TIMESTAMP PUSH2 0x32BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x3F16 JUMPI PUSH2 0x3EBA DUP2 PUSH2 0xFA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3F4A SWAP1 PUSH2 0xCD1 SWAP1 DUP4 PUSH2 0x3553 JUMP JUMPDEST PUSH2 0x3F54 SWAP1 DUP5 PUSH2 0x441A JUMP JUMPDEST SWAP3 POP JUMPDEST POP DUP1 PUSH2 0x3F62 DUP2 PUSH2 0x44F8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x3E2B JUMP JUMPDEST PUSH1 0x60 PUSH2 0xBC8 DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 DUP5 EXTCODESIZE PUSH2 0x3FC3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x142B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x3FDF SWAP2 SWAP1 PUSH2 0x42A5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x401C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4021 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x4031 DUP3 DUP3 DUP7 PUSH2 0x403C JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x404B JUMPI POP DUP2 PUSH2 0x330B JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x405B JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x142B SWAP2 SWAP1 PUSH2 0x4397 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x6 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x1368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x330B DUP2 PUSH2 0x45BC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x330B DUP2 PUSH2 0x45BC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x40E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x40EF DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x40FF DUP2 PUSH2 0x45BC JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x411F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x412A DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x413A DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x414A DUP2 PUSH2 0x45BC JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x416A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4175 DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4185 DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x41AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x41B7 DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x41C7 DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x41DE DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x41FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4207 DUP2 PUSH2 0x45BC JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x330B DUP3 PUSH2 0x4075 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x424E DUP5 PUSH2 0x4085 JUMP JUMPDEST SWAP3 POP PUSH2 0x425C PUSH1 0x20 DUP6 ADD PUSH2 0x4085 JUMP JUMPDEST SWAP2 POP PUSH2 0x426A PUSH1 0x40 DUP6 ADD PUSH2 0x4075 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x429E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x42B7 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x44CC JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 DUP3 ADD SWAP2 SWAP1 PUSH1 0x60 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4324 JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4302 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x438B JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4366 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x43B6 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x44CC JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x6 SWAP2 SWAP1 SWAP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x442D JUMPI PUSH2 0x442D PUSH2 0x454E JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4441 JUMPI PUSH2 0x4441 PUSH2 0x4564 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x4460 JUMPI PUSH2 0x4460 PUSH2 0x454E JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x4490 JUMPI PUSH2 0x4490 PUSH2 0x454E JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x44AB JUMPI PUSH2 0x44AB PUSH2 0x454E JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x44C7 JUMPI PUSH2 0x44C7 PUSH2 0x454E JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x44E7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x44CF JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x374F JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x450C JUMPI PUSH2 0x450C PUSH2 0x454E JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4522 JUMPI PUSH2 0x4522 PUSH2 0x4564 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x4545 JUMPI PUSH2 0x4545 PUSH2 0x454E JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x45D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 SAR RETURNDATACOPY SWAP5 0xD8 0xD4 0xF6 0x23 DUP12 0x4B 0xB8 0x5C SAR 0xE CHAINID PUSH25 0x49DF8B763D2C4A650BF62EC1B71C1C6064736F6C6343000807 STOP CALLER ",
              "sourceMap": "136:1592:57:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3206:848:35;;;;;;:::i;:::-;;:::i;:::-;;;9342:25:84;;;9330:2;9315:18;3206:848:35;;;;;;;;1968:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1402:135:35;;;:::i;:::-;;;;;;;:::i;4104:514::-;;;;;;:::i;:::-;;:::i;1048:134:57:-;;;;;;:::i;:::-;-1:-1:-1;;;;;1154:23:57;1119:16;1154:23;;;:17;:23;;;;;;;1048:134;8401:573:35;;;;;;:::i;:::-;;:::i;:::-;;1728:76:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2556:364:31;;;;;;:::i;:::-;;:::i;4668:1632:35:-;;;;;;:::i;:::-;;:::i;:::-;;;;9029:13:84;;9026:1;9015:28;;;8997:47;;9114:4;9102:17;;;9096:24;9082:39;;;9060:20;;;9053:69;9166:17;;;9160:24;9138:20;;;9131:54;8985:2;8970:18;4668:1632:35;8795:396:84;880:79:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;:::i;:::-;;;;;;;;;;;;;;362:32:31;;;;;-1:-1:-1;;;;;362:32:31;;;;;;;;;;:::i;2090:78:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;384:50:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6844:14:84;;6837:22;6819:41;;6807:2;6792:18;384:50:32;6679:187:84;682:106:57;;;;;;:::i;:::-;;:::i;7478:873:35:-;;;;;;:::i;:::-;;:::i;568:210:30:-;;;;;;:::i;:::-;;:::i;973:834:34:-;;;;;;:::i;:::-;;:::i;423:204:38:-;;;;;;:::i;:::-;;:::i;669:279::-;;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;-1:-1:-1;;;;;199:34:28;;;667:41:31;;;;;;834:50;;;;;;7219:209:35;;;;;;:::i;:::-;;:::i;533:194:32:-;;;;;;:::i;:::-;;:::i;945:79:35:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4195:110:31;;;;;;:::i;:::-;;:::i;1587:691:35:-;;;;;;:::i;:::-;;:::i;1075:373:33:-;;;;;;:::i;:::-;;:::i;1788:223:31:-;;;;;;:::i;:::-;;:::i;1448:278:57:-;;;;;;:::i;:::-;;:::i;925:49:31:-;;;;;;590:36;;;;;-1:-1:-1;;;;;590:36:31;;;2385:105:29;;;:::i;226:52:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;226:52:38;;;2328:828:35;;;;;;:::i;:::-;;:::i;2210:50:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3140:152:31;;;;;;:::i;:::-;;:::i;2531:111:29:-;;;:::i;321:59:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;321:59:38;;;999:203:32;;;;;;:::i;:::-;;:::i;9024:681:35:-;;;;;;:::i;:::-;;:::i;769:69:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1075:54:35;;;;;;:::i;:::-;;;;;;;;;;;;;;749:44:31;;;;;;762:202:32;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3973:182:31;;;;;;:::i;:::-;;:::i;838:86:34:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6736:433:35;;;;;;:::i;:::-;;:::i;2960:140:31:-;;;;;;:::i;:::-;;:::i;299:49:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;435:37:31;;;;;-1:-1:-1;;;;;435:37:31;;;459:116:57;;;;;;:::i;:::-;;:::i;2286:230:31:-;;;;;;:::i;:::-;;:::i;3666:267::-;;;;;;:::i;:::-;;:::i;1846:80:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1855:695:34;;;;;;:::i;:::-;;:::i;1105:32:31:-;;;;;;904:140:57;;;;;;:::i;:::-;-1:-1:-1;;;;;1013:26:57;978:16;1013:26;;;:20;:26;;;;;;;904:140;792:108;;;;;;:::i;:::-;;:::i;579:99::-;;;;;;:::i;:::-;;:::i;534:53:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;1186:258:57;;;;;;:::i;:::-;;:::i;3332:188:31:-;;;;;;:::i;:::-;;:::i;2051:195::-;;;;;;:::i;:::-;;:::i;1237:211:32:-;;;;;;:::i;:::-;;:::i;513:36:31:-;;;;;-1:-1:-1;;;;;513:36:31;;;1180:52:35;;;;;;:::i;:::-;;;;;;;;;;;;;;444:588:33;;;;;;:::i;:::-;;:::i;268:41:28:-;;;;;-1:-1:-1;;;;;268:41:28;;;316:212:30;;;;;;:::i;:::-;;:::i;1015:49:31:-;;;;;;6364:322:35;;;;;;:::i;:::-;;:::i;3206:848::-;3277:16;3301:22;3326;3343:4;3326:16;:22::i;:::-;3446:16;;3301:47;;-1:-1:-1;3374:15:35;;3420:43;;3428:34;;3374:15;3428:34;:::i;:::-;3420:7;:43::i;:::-;-1:-1:-1;;;;;3401:16:35;;;;;;:10;:16;;;;;;:62;3396:576;;;3566:16;;-1:-1:-1;;;;;3545:16:35;;;;;;:10;:16;;;;;;3527:34;;:15;:34;:::i;:::-;3526:56;3522:324;;3704:16;;-1:-1:-1;;;;;3685:16:35;;;;;;:10;:16;;;;;;:35;;3704:16;3685:35;:::i;:::-;3671:50;;;;:::i;:::-;;;3396:576;;3522:324;-1:-1:-1;;;;;3821:16:35;;;;;;:10;:16;;;;;;3808:29;;;;:::i;3396:576::-;3941:24;3949:15;3941:7;:24::i;:::-;3928:37;;;;:::i;:::-;;;3396:576;4016:33;4023:9;4034:14;4016:6;:33::i;:::-;3988:25;4008:4;3988:19;:25::i;:::-;:61;;;;:::i;:::-;3977:72;3206:848;-1:-1:-1;;;;3206:848:35:o;1402:135::-;1465:22;1503:29;:20;:27;:29::i;:::-;1495:37;;1402:135;:::o;4104:514::-;4197:22;4231:41;:20;4261:10;4231:29;:41::i;:::-;4227:387;;;4282:27;4312:28;4329:10;4312:16;:28::i;:::-;4282:58;;4352:10;:17;;;4373:1;4352:22;4348:260;;-1:-1:-1;;;;;4410:25:35;;4386:21;4410:25;;;:13;:25;;;;;;;;:74;;4463:10;:21;;;4462:22;;;:::i;:::-;4410:74;;;4438:10;:21;;;4410:74;4526:12;;4581:16;;4512:86;;-1:-1:-1;;;4512:86:35;;4386:98;;-1:-1:-1;4501:98:35;;-1:-1:-1;;;;;4526:12:35;;;;4512:42;;:86;;4555:7;;4386:98;;4512:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:10;:98::i;:::-;4494:105;;;;;;4348:260;4274:340;4227:387;4104:514;;;;:::o;8401:573::-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;8598:10:35::1;::::0;8580:28:::1;::::0;:15:::1;:28;:::i;:::-;-1:-1:-1::0;;;;;8543:22:35;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;:34;;::::1;::::0;;;;;;;;;:65;;;;8614:20;;;:14:::1;:20:::0;;;;;:32;;;;;;;;;:43;;8650:7;;8543:22;8614:43:::1;::::0;8650:7;;8614:43:::1;:::i;:::-;::::0;;;-1:-1:-1;8663:50:35::1;::::0;-1:-1:-1;8687:4:35;8693:10;8705:7;8663:23:::1;:50::i;:::-;-1:-1:-1::0;;;;;8750:21:35;;::::1;8720:27;8750:21:::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;8793:23;;;;;:94:::1;;;8871:16;;8820:48;8836:19;8857:10;8820:15;:48::i;:::-;:67;8793:94;8789:132;;;8896:25;;-1:-1:-1::0;;;8896:25:35::1;;;;;;;;;;;8789:132;8949:10;-1:-1:-1::0;;;;;8933:36:35::1;8943:4;-1:-1:-1::0;;;;;8933:36:35::1;;8961:7;8933:36;;;;9342:25:84::0;;9330:2;9315:18;;9196:177;8933:36:35::1;;;;;;;;8537:437;8401:573:::0;;;;:::o;2556:364:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2647:27:31;::::1;2643:53;;2683:13;;-1:-1:-1::0;;;2683:13:31::1;;;;;;;;;;;2643:53;2702:12;:28:::0;;-1:-1:-1;;;;;2702:28:31;;::::1;-1:-1:-1::0;;;;;;2702:28:31;;::::1;::::0;::::1;::::0;;;:12:::1;2736:28:::0;;;:14:::1;:28;::::0;;;;;;:43;;;;::::1;::::0;;::::1;::::0;;;2830:12:::1;::::0;2816:55;;-1:-1:-1;;;2816:55:31;;2830:12;::::1;::::0;2816:40:::1;::::0;:55:::1;::::0;2717:13;;2816:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2785:28:31;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;:86;;-1:-1:-1;;2785:86:31::1;::::0;::::1;;::::0;;;::::1;::::0;;;2882:33;::::1;::::0;::::1;::::0;2785:28;;2882:33:::1;:::i;:::-;;;;;;;;2556:364:::0;:::o;4668:1632:35:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;4819:24:35;4827:15;4819:7;:24::i;:::-;-1:-1:-1;;;;;4791:17:35;;;;;;:5;:17;;;;;:24;;;:52;4787:1509;;;-1:-1:-1;;;;;;4924:17:35;;;;;:5;:17;;;;;;;;;4911:30;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4911:30:35;;;;;;;;;;;;;;;;;;;;;;;;;;;4668:1632::o;4787:1509::-;4962:12;4982:18;5003:43;5029:16;;5011:15;:34;;;;:::i;5003:43::-;-1:-1:-1;;;;;5059:17:35;;;;;;:5;:17;;;;;:24;;;4982:64;;-1:-1:-1;5059:38:35;;5055:1103;;;5220:15;;;5233:1;5220:15;;;;;;;;;5190:27;;5220:15;;;;;;;;;-1:-1:-1;;;;;;;;5266:17:35;;5245:18;5266:17;;;:5;:17;;;;;:25;5190:45;;-1:-1:-1;5266:25:35;;5344:24;5352:15;5344:7;:24::i;:::-;5326:42;;:15;:42;:::i;:::-;5302:11;5314:1;5302:14;;;;;;;;:::i;:::-;:67;;;;:14;;;;;;;;;;:67;5428:12;;-1:-1:-1;;;;;5450:26:35;;;5428:12;5450:26;;;:14;:26;;;;;;;;;5414:76;;-1:-1:-1;;;5414:76:35;;5428:12;;;;5414:35;;:76;;5450:26;;;;;5478:11;;5414:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5380:110;;;;;;;;;;;;-1:-1:-1;5525:33:35;;5546:12;;-1:-1:-1;5525:33:35;:::i;:::-;5501:57;;;;;;:21;;;:57;-1:-1:-1;5055:1103:35;;-1:-1:-1;5055:1103:35;;-1:-1:-1;;;;;5577:17:35;;;;;;:5;:17;;;;;:24;;;:37;-1:-1:-1;5573:585:35;;;5719:15;;;5732:1;5719:15;;;;;;;;5689:27;;5719:15;;;;;;;;;;-1:-1:-1;5719:15:35;5689:45;;5787:24;5795:15;5787:7;:24::i;:::-;5769:42;;:15;:42;:::i;:::-;5745:11;5757:1;5745:14;;;;;;;;:::i;:::-;;;;;;:67;;;;;;;;;;;5891:16;;5864:24;5872:15;5864:7;:24::i;:::-;5846:42;;:15;:42;:::i;:::-;:61;;;;:::i;:::-;5822:11;5834:1;5822:14;;;;;;;;:::i;:::-;:86;;;;:14;;;;;;;;;;:86;6015:12;;-1:-1:-1;;;;;6037:26:35;;;5919:22;6037:26;;;:14;:26;;;;;;;;6001:76;;-1:-1:-1;;;6001:76:35;;6015:12;;;;6001:35;;:76;;6037:26;;6065:11;;6001:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5951:126;;;;;;;;;;;;-1:-1:-1;5951:126:35;-1:-1:-1;6112:37:35;;5951:126;;6112:37;:::i;:::-;6088:61;;;;;;:21;;;:61;-1:-1:-1;;5573:585:35;6169:7;6165:125;;;6208:24;6216:15;6208:7;:24::i;:::-;6188:17;;;:44;6165:125;;;6257:24;6264:17;;;6257:24;6165:125;4954:1342;;4787:1509;4668:1632;;;:::o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;754:10:::1;:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;682:106:57:-;747:36;:20;772:10;747:24;:36::i;:::-;;682:106;:::o;7478:873:35:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;;;;;;;;;1680:1;2389:7;:18;7614:41:35::1;:20;7644:10:::0;7614:29:::1;:41::i;:::-;7609:80;;7664:25;;-1:-1:-1::0;;;7664:25:35::1;;;;;;;;;;;7609:80;7700:20;:5;7715:4:::0;7700:14:::1;:20::i;:::-;7695:50;;7729:16;;-1:-1:-1::0;;;7729:16:35::1;;;;;;;;;;;7695:50;-1:-1:-1::0;;;;;7752:21:35;::::1;;::::0;;;:15:::1;:21;::::0;;;;:37:::1;::::0;7778:10;7752:25:::1;:37::i;:::-;;7796:27;7818:4;7796:21;:27::i;:::-;7909:16;::::0;-1:-1:-1;;;;;7850:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;7834:72:::1;::::0;7850:43:::1;::::0;7886:7;;7850:43:::1;:::i;:::-;7895:10;7834:15;:72::i;:::-;:91;7830:129;;;7934:25;;-1:-1:-1::0;;;7934:25:35::1;;;;;;;;;;;7830:129;-1:-1:-1::0;;;;;7971:99:35;::::1;8000:16;::::0;;;:10:::1;:16;::::0;;;;;;;;8018:20:::1;:26:::0;;;;;;8046:17:::1;:23:::0;;;;;;;7971:99;;10168:25:84;;;10209:18;;;10202:34;;;;10252:18;;10245:34;7971:99:35::1;::::0;10156:2:84;10141:18;7971:99:35::1;;;;;;;8077:71;-1:-1:-1::0;;;;;8077:35:35;::::1;8113:10;8133:4;8140:7:::0;8077:35:::1;:71::i;:::-;-1:-1:-1::0;;;;;8154:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:44;;8191:7;;8154:21;:44:::1;::::0;8191:7;;8154:44:::1;:::i;:::-;::::0;;;-1:-1:-1;8231:48:35::1;::::0;-1:-1:-1;8242:36:35::1;8258:7:::0;8267:10;8242:15:::1;:36::i;8231:48::-;-1:-1:-1::0;;;;;8204:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;:75;;:23;;;:75:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;8290:56:35::1;::::0;9342:25:84;;;8326:10:35::1;::::0;-1:-1:-1;;;;;8290:56:35;;::::1;::::0;;;::::1;::::0;::::1;::::0;9330:2:84;9315:18;8290:56:35::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;7478:873:35:o;568:210:30:-;1778:10:32;1768:21;;;;:9;:21;;;;;;;;1763:49;;1798:14;;-1:-1:-1;;;1798:14:32;;;;;;;;;;;1763:49;-1:-1:-1;;;;;649:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;::::1;;644:49;;680:13;;-1:-1:-1::0;;;680:13:30::1;;;;;;;;;;;644:49;-1:-1:-1::0;;;;;699:22:30;::::1;724:5;699:22:::0;;;:8:::1;:22;::::0;;;;;:30;;-1:-1:-1;;699:30:30::1;::::0;;740:33;762:10:::1;::::0;699:22;740:33:::1;::::0;::::1;568:210:::0;:::o;973:834:34:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;1108:20:34::1;:5;1123:4:::0;1108:14:::1;:20::i;:::-;1103:50;;1137:16;;-1:-1:-1::0;;;1137:16:34::1;;;;;;;;;;;1103:50;1229:8;::::0;-1:-1:-1;;;;;1219:18:34;;::::1;1229:8:::0;::::1;1219:18;1215:47;;;1246:16;;-1:-1:-1::0;;;1246:16:34::1;;;;;;;;;;;1215:47;1286:39;::::0;-1:-1:-1;;;1286:39:34;;1268:15:::1;::::0;-1:-1:-1;;;;;1286:24:34;::::1;::::0;::::1;::::0;:39:::1;::::0;1319:4:::1;::::0;1286:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1268:57:::0;-1:-1:-1;1331:67:34::1;-1:-1:-1::0;;;;;1331:31:34;::::1;1363:10;1383:4;1390:7:::0;1331:31:::1;:67::i;:::-;1404:17;1466:7;1431:6;-1:-1:-1::0;;;;;1424:24:34::1;;1457:4;1424:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;;:::i;:::-;1404:69;;1479:17;1238:6:31;1512:3:34;;1500:9;:15;;;;:::i;:::-;1499:25;;;;:::i;:::-;1479:45:::0;-1:-1:-1;1563:21:34::1;1479:45:::0;1563:9;:21:::1;:::i;:::-;-1:-1:-1::0;;;;;1530:21:34;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;;:54;;:29;;:21;:54:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;1590:28:34;;::::1;;::::0;;;:22:::1;:28;::::0;;;;;;;:36;;::::1;::::0;;;;;;;;1629:15:::1;1590:54:::0;;1678:10:::1;::::0;1650:50:::1;::::0;1678:10:::1;1690:9:::0;1650:27:::1;:50::i;:::-;-1:-1:-1::0;;;;;1706:16:34;::::1;;::::0;;;:10:::1;:16;::::0;;;;:28:::1;::::0;1727:6;1706:20:::1;:28::i;:::-;;1780:10;-1:-1:-1::0;;;;;1746:56:34::1;1772:6;-1:-1:-1::0;;;;;1746:56:34::1;1766:4;-1:-1:-1::0;;;;;1746:56:34::1;;1792:9;1746:56;;;;9342:25:84::0;;9330:2;9315:18;;9196:177;1746:56:34::1;;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;;;973:834:34:o;423:204:38:-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;527:21:38;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;-1:-1:-1;;;;;;527:33:38::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;596:14:38;;;;;;;571:51;;527:33;;596:14:::1;::::0;527:21;571:51:::1;::::0;::::1;423:204:::0;;;:::o;669:279::-;-1:-1:-1;;;;;1132:21:38;;;;;;;:15;:21;;;;;;;;;1118:10;:35;1114:69;;1162:21;;-1:-1:-1;;;1162:21:38;;;;;;;;;;;1114:69;-1:-1:-1;;;;;786:14:38;;::::1;761:22;786:14:::0;;;:8:::1;:14;::::0;;;;;;;;;824:15:::1;:21:::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;;807:38:38;;::::1;::::0;;;::::1;::::0;;;851:28;;;;::::1;::::0;;891:52;786:14;::::1;::::0;;;;910:10:::1;::::0;891:52:::1;::::0;761:22;891:52:::1;755:193;669:279:::0;;:::o;7219:209:35:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;7308:39:35::1;:20;7336:10:::0;7308:27:::1;:39::i;:::-;7303:78;;7356:25;;-1:-1:-1::0;;;7356:25:35::1;;;;;;;;;;;7303:78;7392:31;7412:10;7392:31;;;;;;:::i;533:194:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;4195:110:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4264:3:31::1;:10:::0;;;4285:15:::1;::::0;9342:25:84;;;4285:15:31::1;::::0;9330:2:84;9315:18;4285:15:31::1;9196:177:84::0;1587:691:35;1657:22;1692:9;1687:587;-1:-1:-1;;;;;1707:21:35;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;1703:1;:34;1687:587;;;-1:-1:-1;;;;;1773:21:35;;1752:18;1773:21;;;:15;:21;;;;;:27;;1798:1;1773:24;:27::i;:::-;1752:48;-1:-1:-1;1812:41:35;:20;1752:48;1812:29;:41::i;:::-;1808:460;;;1865:27;1895:28;1912:10;1895:16;:28::i;:::-;1865:58;;1937:10;:17;;;1958:1;1937:22;1933:327;;-1:-1:-1;;;;;1997:25:35;;1973:21;1997:25;;;:13;:25;;;;;;;;:74;;2050:10;:21;;;2049:22;;;:::i;:::-;1997:74;;;2025:10;:21;;;1997:74;2139:12;;-1:-1:-1;;;;;2168:21:35;;;2139:12;2168:21;;;:15;:21;;;;;;;;:33;;;;;;;;;;;;;2220:16;;2125:112;;-1:-1:-1;;;2125:112:35;;1973:98;;-1:-1:-1;2101:148:35;;2139:12;;;;;2125:42;;:112;;1973:98;;2125:112;;;:::i;2101:148::-;2083:166;;;;:::i;:::-;;;1961:299;1933:327;1855:413;1808:460;-1:-1:-1;1739:3:35;;;;:::i;:::-;;;;1687:587;;;;1587:691;;;:::o;1075:373:33:-;1589:10:32;1580:20;;;;:8;:20;;;;;;;;1575:47;;1609:13;;-1:-1:-1;;;1609:13:32;;;;;;;;;;;1575:47;-1:-1:-1;;;;;1214:14:33;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;1209:41;;1237:13;;-1:-1:-1::0;;;1237:13:33::1;;;;;;;;;;;1209:41;1257:50;1281:4;1287:10;1299:7;1257:23;:50::i;:::-;1345:10;::::0;1317:48:::1;::::0;-1:-1:-1;;;1317:48:33;;-1:-1:-1;;;;;1317:27:33;;::::1;::::0;::::1;::::0;:48:::1;::::0;1345:10;;::::1;::::0;1357:7;;1317:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;1317:48:33::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;1317:48:33::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;1313:64;;;;;;;1423:10;-1:-1:-1::0;;;;;1387:56:33::1;1405:4;-1:-1:-1::0;;;;;1387:56:33::1;;1411:10;1435:7;1387:56;;;;;;;:::i;:::-;;;;;;;;1075:373:::0;;;:::o;1788:223:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1879:27:31;::::1;1875:53;;1915:13;;-1:-1:-1::0;;;1915:13:31::1;;;;;;;;;;;1875:53;1934:12;:28:::0;;-1:-1:-1;;;;;;1934:28:31::1;-1:-1:-1::0;;;;;1934:28:31;::::1;;::::0;;1973:33:::1;::::0;::::1;::::0;::::1;::::0;1934:28;;1973:33:::1;:::i;1448:278:57:-:0;-1:-1:-1;;;;;1573:21:57;;;;;;:15;:21;;;;;1517:24;;1573:30;;:28;:30::i;:::-;-1:-1:-1;;;;;1559:45:57;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1559:45:57;;1549:55;;1615:9;1610:112;-1:-1:-1;;;;;1630:21:57;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;1626:1;:34;1610:112;;;-1:-1:-1;;;;;1688:21:57;;;;;;:15;:21;;;;;:27;;1713:1;1688:24;:27::i;:::-;1675:7;1683:1;1675:10;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1675:40:57;;;:10;;;;;;;;;;;:40;1662:3;;;;:::i;:::-;;;;1610:112;;2385:105:29;2433:22;2471:14;:5;:12;:14::i;2328:828:35:-;2401:25;2434:22;2459;2476:4;2459:16;:22::i;:::-;2588:16;;-1:-1:-1;;;;;2568:16:35;;;;;;:10;:16;;;;;;2434:47;;-1:-1:-1;2588:16:35;2550:34;;:15;:34;:::i;:::-;2549:55;2545:607;;;2729:1;2712:14;:18;:220;;-1:-1:-1;;;;;2906:26:35;;;;;;:20;:26;;;;;;2712:220;;;-1:-1:-1;;;;;2789:23:35;;;;;;:17;:23;;;;;;;;;2742:20;:26;;;;;;;:43;;2771:14;;2742:43;:::i;:::-;2741:71;;;;:::i;:::-;2692:240;;2545:607;;3140:152:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3223:10:31::1;:24:::0;;;3258:29:::1;::::0;9342:25:84;;;3258:29:31::1;::::0;9315:18:84;3258:29:31::1;9196:177:84::0;2531:111:29;2582:22;2620:17;:8;:15;:17::i;999:203:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;9024:681:35:-:0;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;9174:23:35;::::1;9170:49;;9206:13;;-1:-1:-1::0;;;9206:13:35::1;;;;;;;;;;;9170:49;-1:-1:-1::0;;;;;9229:20:35;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;;;;;;9225:69:::1;;9275:19;;-1:-1:-1::0;;;9275:19:35::1;;;;;;;;;;;9225:69;-1:-1:-1::0;;;;;9304:22:35;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;:34;;::::1;::::0;;;;;;;9342:15:::1;-1:-1:-1::0;9300:81:35::1;;9366:15;;-1:-1:-1::0;;;9366:15:35::1;;;;;;;;;;;9300:81;-1:-1:-1::0;;;;;9391:14:35;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;9387:37;;;9414:10;;-1:-1:-1::0;;;9414:10:35::1;;;;;;;;;;;9387:37;-1:-1:-1::0;;;;;9449:20:35;;::::1;9431:15;9449:20:::0;;;:14:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;;;;;;;;;;9488:39;;;;9540:22;;;:16:::1;:22:::0;;;;;:34;;;;;;;;9533:41;9449:32;9581:51:::1;::::0;9613:9;9449:32;9581:31:::1;:51::i;:::-;9681:9;-1:-1:-1::0;;;;;9643:57:35::1;9669:10;-1:-1:-1::0;;;;;9643:57:35::1;9663:4;-1:-1:-1::0;;;;;9643:57:35::1;;9692:7;9643:57;;;;9342:25:84::0;;9330:2;9315:18;;9196:177;9643:57:35::1;;;;;;;;9164:541;9024:681:::0;;;;:::o;762:202:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;3973:182:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4066:15:31::1;:34:::0;;;4111:39:::1;::::0;9342:25:84;;;4111:39:31::1;::::0;9330:2:84;9315:18;4111:39:31::1;9196:177:84::0;6736:433:35;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;6834:36:35::1;:20;6859:10:::0;6834:24:::1;:36::i;:::-;6829:73;;6879:23;;-1:-1:-1::0;;;6879:23:35::1;;;;;;;;;;;6829:73;6950:10;-1:-1:-1::0;;;;;6937:29:35::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6908:26:35;;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;:60;;-1:-1:-1;;;;;;6908:60:35::1;::::0;;::::1;::::0;;::::1;::::0;;7016:12:::1;::::0;7002:68;;-1:-1:-1;;;7002:68:35;;7016:12;::::1;::::0;7002:40:::1;::::0;:68:::1;::::0;6908:60;7002:68:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6974:25:35;::::1;;::::0;;;:13:::1;:25;::::0;;;;:96;;-1:-1:-1;;6974:96:35::1;::::0;::::1;;::::0;;;::::1;::::0;;7096:28:::1;6974:25:::0;7096:16:::1;:28::i;:::-;-1:-1:-1::0;;;;;7076:17:35;::::1;;::::0;;;:5:::1;:17;::::0;;;;;;;;:48;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;;7076:48:35::1;-1:-1:-1::0;;;;;;7076:48:35;;;;;;::::1;;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;7135:29;::::1;::::0;::::1;::::0;7082:10;;7135:29:::1;:::i;2960:140:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3039:8:31::1;:20:::0;;;3070:25:::1;::::0;9342::84;;;3070::31::1;::::0;9330:2:84;9315:18;3070:25:31::1;9196:177:84::0;459:116:57;-1:-1:-1;;;;;533:21:57;;;;;;:15;:21;;;;;:37;;559:10;533:25;:37::i;:::-;;459:116;;:::o;2286:230:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2379:28:31;::::1;2375:54;;2416:13;;-1:-1:-1::0;;;2416:13:31::1;;;;;;;;;;;2375:54;2435:13;:30:::0;;-1:-1:-1;;;;;;2435:30:31::1;-1:-1:-1::0;;;;;2435:30:31;::::1;;::::0;;2476:35:::1;::::0;::::1;::::0;::::1;::::0;2435:30;;2476:35:::1;:::i;3666:267::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1341:6:31::1;3765:17;:43;3761:73;;;3817:17;;-1:-1:-1::0;;;3817:17:31::1;;;;;;;;;;;3761:73;3840:16;:36:::0;;;3887:41:::1;::::0;9342:25:84;;;3887:41:31::1;::::0;9330:2:84;9315:18;3887:41:31::1;9196:177:84::0;1855:695:34;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;-1:-1:-1;;;;;1012:14:38;;::::1;::::0;;:8:::1;:14;::::0;;;;;;;;::::1;998:10;:28;994:55;;1035:14;;-1:-1:-1::0;;;1035:14:38::1;;;;;;;;;;;994:55;-1:-1:-1::0;;;;;2057:28:34;;::::2;;::::0;;;:22:::2;:28;::::0;;;;;;;:36;;::::2;::::0;;;;;;;:64:::2;::::0;780:9:::2;::::0;2057:64:::2;:::i;:::-;2038:15;:83;2034:119;;2130:23;;-1:-1:-1::0;;;2130:23:34::2;;;;;;;;;;;2034:119;-1:-1:-1::0;;;;;2163:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;:39;-1:-1:-1;2159:81:34::2;;;2211:29;;-1:-1:-1::0;;;2211:29:34::2;;;;;;;;;;;2159:81;-1:-1:-1::0;;;;;2250:14:34;::::2;;::::0;;;:8:::2;:14;::::0;;;;;::::2;;2246:40;;;2273:13;;-1:-1:-1::0;;;2273:13:34::2;;;;;;;;;;;2246:40;-1:-1:-1::0;;;;;2293:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;;:40;;2326:7;;2293:21;:40:::2;::::0;2326:7;;2293:40:::2;:::i;:::-;::::0;;;-1:-1:-1;2339:47:34::2;::::0;-1:-1:-1;;;;;;2339:27:34;::::2;2367:9:::0;2378:7;2339:27:::2;:47::i;:::-;-1:-1:-1::0;;;;;2397:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;2393:86:::2;;-1:-1:-1::0;;;;;2441:16:34;::::2;;::::0;;;:10:::2;:16;::::0;;;;:31:::2;::::0;2465:6;2441:23:::2;:31::i;:::-;;2393:86;2526:9;-1:-1:-1::0;;;;;2490:55:34::2;2518:6;-1:-1:-1::0;;;;;2490:55:34::2;2512:4;-1:-1:-1::0;;;;;2490:55:34::2;;2537:7;2490:55;;;;9342:25:84::0;;9330:2;9315:18;;9196:177;2490:55:34::2;;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;;1855:695:34:o;792:108:57:-;856:39;:20;884:10;856:27;:39::i;579:99::-;-1:-1:-1;;;;;645:16:57;;;;;;:10;:16;;;;;:28;;666:6;645:20;:28::i;1186:258::-;-1:-1:-1;;;;;1306:16:57;;;;;;:10;:16;;;;;1250:24;;1306:25;;:23;:25::i;:::-;-1:-1:-1;;;;;1292:40:57;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1292:40:57;;1282:50;;1343:9;1338:102;-1:-1:-1;;;;;1358:16:57;;;;;;:10;:16;;;;;:25;;:23;:25::i;:::-;1354:1;:29;1338:102;;;-1:-1:-1;;;;;1411:16:57;;;;;;:10;:16;;;;;:22;;1431:1;1411:19;:22::i;:::-;1398:7;1406:1;1398:10;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1398:35:57;;;:10;;;;;;;;;;;:35;1385:3;;;;:::i;:::-;;;;1338:102;;3332:188:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3427:16:31::1;:36:::0;;;3474:41:::1;::::0;9342:25:84;;;3474:41:31::1;::::0;9330:2:84;9315:18;3474:41:31::1;9196:177:84::0;2051:195:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2134:23:31;::::1;2130:49;;2166:13;;-1:-1:-1::0;;;2166:13:31::1;;;;;;;;;;;2130:49;2185:8;:20:::0;;-1:-1:-1;;;;;;2185:20:31::1;-1:-1:-1::0;;;;;2185:20:31;::::1;;::::0;;2216:25:::1;::::0;::::1;::::0;::::1;::::0;2185:20;;2216:25:::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;444:588:33:-:0;1589:10:32;1580:20;;;;:8;:20;;;;;;;;1575:47;;1609:13;;-1:-1:-1;;;1609:13:32;;;;;;;;;;;1575:47;-1:-1:-1;;;;;575:14:33;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;570:41;;598:13;;-1:-1:-1::0;;;598:13:33::1;;;;;;;;;;;570:41;-1:-1:-1::0;;;;;622:16:33;::::1;;::::0;;;:10:::1;:16;::::0;;;;:33:::1;::::0;648:6;622:25:::1;:33::i;:::-;617:67;;664:20;;-1:-1:-1::0;;;664:20:33::1;;;;;;;;;;;617:67;-1:-1:-1::0;;;;;694:21:33;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:39;-1:-1:-1;690:74:33::1;;;742:22;;-1:-1:-1::0;;;742:22:33::1;;;;;;;;;;;690:74;799:10;::::0;775:44:::1;::::0;-1:-1:-1;;;775:44:33;;-1:-1:-1;;;;;775:23:33;;::::1;::::0;::::1;::::0;:44:::1;::::0;799:10;;::::1;::::0;811:7;;775:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;775:44:33::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;775:44:33::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;771:60;;;;;;;-1:-1:-1::0;;;;;836:21:33;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;;:40;;869:7;;836:21;:40:::1;::::0;869:7;;836:40:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;886:21:33;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;882:86:::1;;-1:-1:-1::0;;;;;930:16:33;::::1;;::::0;;;:10:::1;:16;::::0;;;;:31:::1;::::0;954:6;930:23:::1;:31::i;:::-;;882:86;1007:10;-1:-1:-1::0;;;;;979:48:33::1;993:4;-1:-1:-1::0;;;;;979:48:33::1;;999:6;1019:7;979:48;;;;;;;:::i;316:212:30:-:0;1778:10:32;1768:21;;;;:9;:21;;;;;;;;1763:49;;1798:14;;-1:-1:-1;;;1798:14:32;;;;;;;;;;;1763:49;-1:-1:-1;;;;;396:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;::::1;;392:52;;;427:17;;-1:-1:-1::0;;;427:17:30::1;;;;;;;;;;;392:52;-1:-1:-1::0;;;;;450:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;:29;;-1:-1:-1;;450:29:30::1;475:4;450:29;::::0;;490:33;512:10:::1;::::0;450:22;490:33:::1;::::0;::::1;316:212:::0;:::o;6364:322:35:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;6475:20:35::1;:5;6490:4:::0;6475:14:::1;:20::i;:::-;6470:50;;6504:16;;-1:-1:-1::0;;;6504:16:35::1;;;;;;;;;;;6470:50;6526:27;6548:4;6526:21;:27::i;:::-;-1:-1:-1::0;;;;;6559:26:35;::::1;;::::0;;;:20:::1;:26;::::0;;;;:37;;6589:7;;6559:26;:37:::1;::::0;6589:7;;6559:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;6607:74:35;::::1;6636:16;::::0;;;:10:::1;:16;::::0;;;;;;;;6654:20:::1;:26:::0;;;;;;;;6607:74;;::::1;::::0;::::1;::::0;9887:25:84;;9943:2;9928:18;;9921:34;9875:2;9860:18;;9713:248;6607:74:35::1;;;;;;;;6364:322:::0;;:::o;14272:148::-;14332:24;14398:16;;14385:10;:29;;;;:::i;:::-;14371:44;;:10;:44;:::i;13953:243::-;14034:15;14075:16;;14061:11;:30;14057:134;;;14141:16;;14112:25;14126:11;14112;:25;:::i;:::-;14111:46;;;;:::i;:::-;14101:56;;14057:134;;9499:257:8;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;:::-;9590:44;9499:257;-1:-1:-1;;;9499:257:8:o;8100:165::-;-1:-1:-1;;;;;8233:23:8;;8180:4;3767:19;;;:12;;;:19;;;;;;:24;;8203:55;3671:127;14499:163:35;14563:16;14594:63;14610:11;14623:16;;14641:15;;14594;:63::i;12794:1028::-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;-1:-1:-1;;;;;12927:21:35;::::1;::::0;;:15:::1;:21;::::0;;;;:42:::1;::::0;12958:10;12927:30:::1;:42::i;:::-;12922:80;;12978:24;;-1:-1:-1::0;;;12978:24:35::1;;;;;;;;;;;12922:80;-1:-1:-1::0;;;;;13012:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;:43;-1:-1:-1;13008:82:35::1;;;13064:26;;-1:-1:-1::0;;;13064:26:35::1;;;;;;;;;;;13008:82;13145:22;13162:4;13145:16;:22::i;:::-;13173:30;13206:48;13217:36;13233:7;13242:10;13217:15;:36::i;13206:48::-;-1:-1:-1::0;;;;;13337:23:35;::::1;13363:1;13337:23:::0;;;:17:::1;:23;::::0;;;;;13173:81;;-1:-1:-1;13337:27:35;13333:330:::1;;-1:-1:-1::0;;;;;13576:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;;13521:20:::1;:26:::0;;;;;;;:51:::1;::::0;13550:22;;13521:51:::1;:::i;:::-;13520:79;;;;:::i;:::-;-1:-1:-1::0;;;;;13490:26:35;::::1;;::::0;;;:20:::1;:26;::::0;;;;:109;;:26;;;:109:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;13607:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;:49;;13634:22;;13607:23;:49:::1;::::0;13634:22;;13607:49:::1;:::i;:::-;::::0;;;-1:-1:-1;;13333:330:35::1;-1:-1:-1::0;;;;;13669:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:44;;13706:7;;13669:21;:44:::1;::::0;13706:7;;13669:44:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;13723:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;13719:99:::1;;-1:-1:-1::0;;;;;13771:21:35;::::1;;::::0;;;:15:::1;:21;::::0;;;;:40:::1;::::0;13800:10;13771:28:::1;:40::i;:::-;;13719:99;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;12794:1028:35:o;14740:384::-;-1:-1:-1;;;;;14859:17:35;;14833:14;14859:17;;;:5;:17;;;;;:24;;;:29;14855:265;;-1:-1:-1;;;;;14922:25:35;;14898:21;14922:25;;;:13;:25;;;;;;;;:88;;-1:-1:-1;;;;;14982:17:35;;;;;;:5;:17;;;;;:28;14981:29;;-1:-1:-1;;;14982:28:35;;;;14981:29;:::i;:::-;14922:88;;;-1:-1:-1;;;;;14950:17:35;;;;;;:5;:17;;;;;:28;-1:-1:-1;;;14950:28:35;;;;14922:88;15041:12;;15096:16;;15027:86;;-1:-1:-1;;;15027:86:35;;14898:112;;-1:-1:-1;;;;;;15041:12:35;;;;15027:42;;:86;;15070:7;;14898:112;;15027:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7545:150:8:-;7615:4;7638:50;7643:3;-1:-1:-1;;;;;7663:23:8;;7638:4;:50::i;15273:229:35:-;15341:31;15367:4;15341:25;:31::i;:::-;;15378:23;15396:4;15378:17;:23::i;:::-;-1:-1:-1;;;;;15445:26:35;;;;;;:20;:26;;;;;;;;;15473:17;:23;;;;;;;15436:61;;15445:26;15436:8;:61::i;:::-;-1:-1:-1;;;;;15407:26:35;;;;;;;:20;:26;;;;;:90;15273:229::o;845:241:4:-;1010:68;;-1:-1:-1;;;;;4866:15:84;;;1010:68:4;;;4848:34:84;4918:15;;4898:18;;;4891:43;4950:18;;;4943:34;;;983:96:4;;1003:5;;-1:-1:-1;;;1033:27:4;4783:18:84;;1010:68:4;;;;-1:-1:-1;;1010:68:4;;;;;;;;;;;;;;-1:-1:-1;;;;;1010:68:4;-1:-1:-1;;;;;;1010:68:4;;;;;;;;;;983:19;:96::i;:::-;845:241;;;;:::o;634:205::-;746:86;766:5;796:23;;;821:2;825:5;773:58;;;;;;;;;:::i;7863:156:8:-;7936:4;7959:53;7967:3;-1:-1:-1;;;;;7987:23:8;;7959:7;:53::i;8346:115::-;8409:7;8435:19;8443:3;3961:18;;3879:107;8803:156;8877:7;8927:22;8931:3;8943:5;8927:3;:22::i;4986:109::-;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;735:3600:23:-;833:14;;;-1:-1:-1;;1336:1:23;1333;1326:20;1371:1;1368;1364:9;1355:18;;1418:5;1414:2;1411:13;1403:5;1399:2;1395:14;1391:34;1382:43;;;1501:5;1510:1;1501:10;1497:155;;;1545:1;1531:11;:15;1523:24;;;;;;-1:-1:-1;1588:23:23;;;;-1:-1:-1;1630:13:23;;1497:155;1773:5;1759:11;:19;1751:28;;;;;;2044:17;2114:11;2111:1;2108;2101:25;3338:1;3319;2473;2458:12;;:16;;2457:32;;2575:22;;;;3319:15;;;3318:21;;3557:17;;;3553:21;;3546:28;3613:17;;;3609:21;;3602:28;3670:17;;;3666:21;;3659:28;3727:17;;;3723:21;;3716:28;3784:17;;;3780:21;;3773:28;3842:17;;;3838:21;;;3831:28;2442:12;2923;;;2919:23;;;2915:31;;;2233:20;;;2222:32;;;2970:12;;;;2272:21;;2693:16;;;;2961:21;;;;4292:11;;735:3600;-1:-1:-1;;;;735:3600:23:o;11656:118:35:-;11737:32;11764:4;11737:26;:32::i;:::-;-1:-1:-1;;;;;11711:23:35;;;;;;;:17;:23;;;;;:58;11656:118::o;1630:404:8:-;1693:4;3767:19;;;:12;;;:19;;;;;;1709:319;;-1:-1:-1;1751:23:8;;;;;;;;:11;:23;;;;;;;;;;;;;1931:18;;1909:19;;;:12;;;:19;;;;;;:40;;;;1963:11;;1709:319;-1:-1:-1;2012:5:8;2005:12;;9829:1303:35;9896:14;9941:24;9949:15;9941:7;:24::i;:::-;-1:-1:-1;;;;;9922:16:35;;;;;;:10;:16;;;;;;:43;9918:1210;;;10070:43;10096:16;;10078:15;:34;;;;:::i;10070:43::-;-1:-1:-1;;;;;10050:16:35;;;;;;:10;:16;;;;;;:63;10046:1076;;10214:22;10231:4;10214:16;:22::i;:::-;-1:-1:-1;;;;;10275:23:35;;;;;;:17;:23;;;;;;;;;10246:20;:26;;;;;;:52;10327:24;10335:15;10327:7;:24::i;:::-;-1:-1:-1;;;;;10308:16:35;;;;;;:10;:16;;;;;:43;-1:-1:-1;10373:4:35;4668:1632;;;:::o;10046:1076::-;10436:16;;-1:-1:-1;;;;;10415:16:35;;;;;;:10;:16;;;;;;10397:34;;:15;:34;:::i;:::-;10396:56;10392:730;;10544:22;10561:4;10544:16;:22::i;:::-;-1:-1:-1;;;;;10605:23:35;;;;;;:17;:23;;;;;;;;;10576:20;:26;;;;;:52;10658:16;;10638:10;:16;;;;;:36;;10658:16;;10638;;:36;;10658:16;;10638:36;:::i;:::-;;;;-1:-1:-1;10696:4:35;;-1:-1:-1;10392:730:35;;-1:-1:-1;10392:730:35;;10736:24;10744:15;10736:7;:24::i;:::-;-1:-1:-1;;;;;10719:14:35;;;;;;:8;:14;;;;;;:41;10715:407;;;-1:-1:-1;;;;;10885:23:35;;10853:29;10885:23;;;:17;:23;;;;;;10918:22;10903:4;10918:16;:22::i;:::-;-1:-1:-1;;;;;11009:23:35;;;;;;:17;:23;;;;;;;;;10980:20;:26;;;;;;;11036:21;;10980:52;;;:::i;:::-;10979:78;;;;:::i;:::-;-1:-1:-1;;;;;10950:26:35;;;;;;:20;:26;;;;;:107;-1:-1:-1;9829:1303:35;;;:::o;11196:400::-;-1:-1:-1;;;;;11509:16:35;;;;;;:10;:16;;;;;;11484:67;;11491:34;;:15;:34;:::i;:::-;-1:-1:-1;;;;;11527:23:35;;;;;;:17;:23;;;;;;11484:6;:67::i;:::-;-1:-1:-1;;;;;11454:26:35;;;;;;:20;:26;;;;;:97;;:26;;;:97;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11557:16:35;;;;;:10;:16;;;;;11576:15;11557:34;;11196:400::o;391:104:7:-;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:7;;391:104;-1:-1:-1;391:104:7:o;3140:706:4:-;3559:23;3585:69;3613:4;3585:69;;;;;;;;;;;;;;;;;3593:5;-1:-1:-1;;;;;3585:27:4;;;:69;;;;;:::i;:::-;3668:17;;3559:95;;-1:-1:-1;3668:21:4;3664:176;;3763:10;3752:30;;;;;;;;;;;;:::i;:::-;3744:85;;;;-1:-1:-1;;;3744:85:4;;8226:2:84;3744:85:4;;;8208:21:84;8265:2;8245:18;;;8238:30;8304:34;8284:18;;;8277:62;-1:-1:-1;;;8355:18:84;;;8348:40;8405:19;;3744:85:4;8024:406:84;2202:1388:8;2268:4;2405:19;;;:12;;;:19;;;;;;2439:15;;2435:1149;;2808:21;2832:14;2845:1;2832:10;:14;:::i;:::-;2880:18;;2808:38;;-1:-1:-1;2860:17:8;;2880:22;;2901:1;;2880:22;:::i;:::-;2860:42;;2934:13;2921:9;:26;2917:398;;2967:17;2987:3;:11;;2999:9;2987:22;;;;;;;;:::i;:::-;;;;;;;;;2967:42;;3138:9;3109:3;:11;;3121:13;3109:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3221:23;;;:12;;;:23;;;;;:36;;;2917:398;3393:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3485:3;:12;;:19;3498:5;3485:19;;;;;;;;;;;3478:26;;;3526:4;3519:11;;;;;;;2435:1149;3568:5;3561:12;;;;;4328:118;4395:7;4421:3;:11;;4433:5;4421:18;;;;;;;;:::i;:::-;;;;;;;;;4414:25;;4328:118;;;;:::o;11943:753:35:-;12011:22;12075:24;12083:15;12075:7;:24::i;:::-;12051:12;;-1:-1:-1;;;;;12051:12:35;12045:19;;;;:5;:19;;;;;12051:12;12045:26;;:54;12041:170;;12191:12;;12174:30;;-1:-1:-1;;;;;12191:12:35;12174:16;:30::i;:::-;12158:12;;-1:-1:-1;;;;;12158:12:35;12152:19;;;;:5;:19;;;;;;;;;:52;;;;;;;;;;;;;;;;-1:-1:-1;;;12152:52:35;-1:-1:-1;;;;;;12152:52:35;;;;;;;;;;;;;;;;;;12158:12;12152:52;;;;;12041:170;12222:9;12217:475;-1:-1:-1;;;;;12237:21:35;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;12233:1;:34;12217:475;;;-1:-1:-1;;;;;12303:21:35;;12282:18;12303:21;;;:15;:21;;;;;:27;;12328:1;12303:24;:27::i;:::-;12282:48;-1:-1:-1;12342:41:35;:20;12282:48;12342:29;:41::i;:::-;12338:348;;;12427:24;12435:15;12427:7;:24::i;:::-;-1:-1:-1;;;;;12399:17:35;;;;;;:5;:17;;;;;:24;;;:52;12395:181;;12537:28;12554:10;12537:16;:28::i;:::-;-1:-1:-1;;;;;12517:17:35;;;;;;:5;:17;;;;;;;;;:48;;;;;;;;;;;;;;;;-1:-1:-1;;;12517:48:35;-1:-1:-1;;;;;;12517:48:35;;;;;;;;;;;;;;;;;;;;;;;12395:181;-1:-1:-1;;;;;12630:21:35;;;;;;;:15;:21;;;;;;;;:33;;;;;;;;;;12603:74;;12614:62;;12652:10;12614:15;:62::i;12603:74::-;12585:92;;;;:::i;:::-;;;12338:348;-1:-1:-1;12269:3:35;;;;:::i;:::-;;;;12217:475;;3461:223:5;3594:12;3625:52;3647:6;3655:4;3661:1;3664:12;3594;1034:20;;4828:60;;;;-1:-1:-1;;;4828:60:5;;7868:2:84;4828:60:5;;;7850:21:84;7907:2;7887:18;;;7880:30;7946:31;7926:18;;;7919:59;7995:18;;4828:60:5;7666:353:84;4828:60:5;4900:12;4914:23;4941:6;-1:-1:-1;;;;;4941:11:5;4960:5;4967:4;4941:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4899:73;;;;4989:51;5006:7;5015:10;5027:12;4989:16;:51::i;:::-;4982:58;4548:499;-1:-1:-1;;;;;;;4548:499:5:o;7161:692::-;7307:12;7335:7;7331:516;;;-1:-1:-1;7365:10:5;7358:17;;7331:516;7476:17;;:21;7472:365;;7670:10;7664:17;7730:15;7717:10;7713:2;7709:19;7702:44;7472:365;7809:12;7802:20;;-1:-1:-1;;;7802:20:5;;;;;;;;:::i;14:164:84:-;90:13;;139;;132:21;122:32;;112:60;;168:1;165;158:12;183:164;260:13;;313:1;302:20;;;292:31;;282:59;;337:1;334;327:12;352:247;411:6;464:2;452:9;443:7;439:23;435:32;432:52;;;480:1;477;470:12;432:52;519:9;506:23;538:31;563:5;538:31;:::i;604:251::-;674:6;727:2;715:9;706:7;702:23;698:32;695:52;;;743:1;740;733:12;695:52;775:9;769:16;794:31;819:5;794:31;:::i;860:388::-;928:6;936;989:2;977:9;968:7;964:23;960:32;957:52;;;1005:1;1002;995:12;957:52;1044:9;1031:23;1063:31;1088:5;1063:31;:::i;:::-;1113:5;-1:-1:-1;1170:2:84;1155:18;;1142:32;1183:33;1142:32;1183:33;:::i;:::-;1235:7;1225:17;;;860:388;;;;;:::o;1253:529::-;1330:6;1338;1346;1399:2;1387:9;1378:7;1374:23;1370:32;1367:52;;;1415:1;1412;1405:12;1367:52;1454:9;1441:23;1473:31;1498:5;1473:31;:::i;:::-;1523:5;-1:-1:-1;1580:2:84;1565:18;;1552:32;1593:33;1552:32;1593:33;:::i;:::-;1645:7;-1:-1:-1;1704:2:84;1689:18;;1676:32;1717:33;1676:32;1717:33;:::i;:::-;1769:7;1759:17;;;1253:529;;;;;:::o;1787:456::-;1864:6;1872;1880;1933:2;1921:9;1912:7;1908:23;1904:32;1901:52;;;1949:1;1946;1939:12;1901:52;1988:9;1975:23;2007:31;2032:5;2007:31;:::i;:::-;2057:5;-1:-1:-1;2114:2:84;2099:18;;2086:32;2127:33;2086:32;2127:33;:::i;:::-;1787:456;;2179:7;;-1:-1:-1;;;2233:2:84;2218:18;;;;2205:32;;1787:456::o;2248:598::-;2334:6;2342;2350;2358;2411:3;2399:9;2390:7;2386:23;2382:33;2379:53;;;2428:1;2425;2418:12;2379:53;2467:9;2454:23;2486:31;2511:5;2486:31;:::i;:::-;2536:5;-1:-1:-1;2593:2:84;2578:18;;2565:32;2606:33;2565:32;2606:33;:::i;:::-;2658:7;-1:-1:-1;2712:2:84;2697:18;;2684:32;;-1:-1:-1;2768:2:84;2753:18;;2740:32;2781:33;2740:32;2781:33;:::i;:::-;2248:598;;;;-1:-1:-1;2248:598:84;;-1:-1:-1;;2248:598:84:o;2851:315::-;2919:6;2927;2980:2;2968:9;2959:7;2955:23;2951:32;2948:52;;;2996:1;2993;2986:12;2948:52;3035:9;3022:23;3054:31;3079:5;3054:31;:::i;:::-;3104:5;3156:2;3141:18;;;;3128:32;;-1:-1:-1;;;2851:315:84:o;3171:202::-;3238:6;3291:2;3279:9;3270:7;3266:23;3262:32;3259:52;;;3307:1;3304;3297:12;3259:52;3330:37;3357:9;3330:37;:::i;3378:364::-;3459:6;3467;3475;3528:2;3516:9;3507:7;3503:23;3499:32;3496:52;;;3544:1;3541;3534:12;3496:52;3567:38;3595:9;3567:38;:::i;:::-;3557:48;;3624:47;3667:2;3656:9;3652:18;3624:47;:::i;:::-;3614:57;;3690:46;3732:2;3721:9;3717:18;3690:46;:::i;:::-;3680:56;;3378:364;;;;;:::o;3747:180::-;3806:6;3859:2;3847:9;3838:7;3834:23;3830:32;3827:52;;;3875:1;3872;3865:12;3827:52;-1:-1:-1;3898:23:84;;3747:180;-1:-1:-1;3747:180:84:o;3932:184::-;4002:6;4055:2;4043:9;4034:7;4030:23;4026:32;4023:52;;;4071:1;4068;4061:12;4023:52;-1:-1:-1;4094:16:84;;3932:184;-1:-1:-1;3932:184:84:o;4121:274::-;4250:3;4288:6;4282:13;4304:53;4350:6;4345:3;4338:4;4330:6;4326:17;4304:53;:::i;:::-;4373:16;;;;;4121:274;-1:-1:-1;;4121:274:84:o;4400:203::-;-1:-1:-1;;;;;4564:32:84;;;;4546:51;;4534:2;4519:18;;4400:203::o;4988:744::-;-1:-1:-1;;;;;5234:32:84;;5216:51;;5204:2;5286;5304:18;;;5297:30;;;5376:13;;5189:18;;;5398:22;;;5156:4;;5477:15;;;;5286:2;5451;5436:18;;;5156:4;5520:186;5534:6;5531:1;5528:13;5520:186;;;5599:13;;5614:10;5595:30;5583:43;;5681:15;;;;5646:12;;;;5556:1;5549:9;5520:186;;;-1:-1:-1;5723:3:84;;4988:744;-1:-1:-1;;;;;;;4988:744:84:o;5737:274::-;-1:-1:-1;;;;;5929:32:84;;;;5911:51;;5993:2;5978:18;;5971:34;5899:2;5884:18;;5737:274::o;6016:658::-;6187:2;6239:21;;;6309:13;;6212:18;;;6331:22;;;6158:4;;6187:2;6410:15;;;;6384:2;6369:18;;;6158:4;6453:195;6467:6;6464:1;6461:13;6453:195;;;6532:13;;-1:-1:-1;;;;;6528:39:84;6516:52;;6623:15;;;;6588:12;;;;6564:1;6482:9;6453:195;;;-1:-1:-1;6665:3:84;;6016:658;-1:-1:-1;;;;;;6016:658:84:o;6871:383::-;7020:2;7009:9;7002:21;6983:4;7052:6;7046:13;7095:6;7090:2;7079:9;7075:18;7068:34;7111:66;7170:6;7165:2;7154:9;7150:18;7145:2;7137:6;7133:15;7111:66;:::i;:::-;7238:2;7217:15;-1:-1:-1;;7213:29:84;7198:45;;;;7245:2;7194:54;;6871:383;-1:-1:-1;;6871:383:84:o;8435:355::-;8637:2;8619:21;;;8676:2;8656:18;;;8649:30;8715:33;8710:2;8695:18;;8688:61;8781:2;8766:18;;8435:355::o;9378:330::-;9576:25;;;9648:1;9637:21;;;;9632:2;9617:18;;9610:49;9690:2;9675:18;;9668:34;9564:2;9549:18;;9378:330::o;10290:128::-;10330:3;10361:1;10357:6;10354:1;10351:13;10348:39;;;10367:18;;:::i;:::-;-1:-1:-1;10403:9:84;;10290:128::o;10423:120::-;10463:1;10489;10479:35;;10494:18;;:::i;:::-;-1:-1:-1;10528:9:84;;10423:120::o;10548:168::-;10588:7;10654:1;10650;10646:6;10642:14;10639:1;10636:21;10631:1;10624:9;10617:17;10613:45;10610:71;;;10661:18;;:::i;:::-;-1:-1:-1;10701:9:84;;10548:168::o;10721:359::-;10759:4;10803:1;10800;10789:16;10839:1;10836;10825:16;10869:1;10864:3;10860:11;10935:3;10916:16;10912:21;10908:31;10903:3;10899:41;10894:2;10887:10;10883:58;10880:84;;;10944:18;;:::i;:::-;11015:3;10997:16;10993:26;10988:3;10984:36;10980:2;10976:45;10973:71;;;11024:18;;:::i;:::-;-1:-1:-1;11061:13:84;;;10721:359;-1:-1:-1;;;10721:359:84:o;11085:125::-;11125:4;11153:1;11150;11147:8;11144:34;;;11158:18;;:::i;:::-;-1:-1:-1;11195:9:84;;11085:125::o;11215:258::-;11287:1;11297:113;11311:6;11308:1;11305:13;11297:113;;;11387:11;;;11381:18;11368:11;;;11361:39;11333:2;11326:10;11297:113;;;11428:6;11425:1;11422:13;11419:48;;;-1:-1:-1;;11463:1:84;11445:16;;11438:27;11215:258::o;11478:135::-;11517:3;-1:-1:-1;;11538:17:84;;11535:43;;;11558:18;;:::i;:::-;-1:-1:-1;11605:1:84;11594:13;;11478:135::o;11618:112::-;11650:1;11676;11666:35;;11681:18;;:::i;:::-;-1:-1:-1;11715:9:84;;11618:112::o;11735:193::-;11769:3;11816:5;11813:1;11802:20;11850:16;11846:21;11837:7;11834:34;11831:60;;;11871:18;;:::i;:::-;11911:1;11907:15;;11735:193;-1:-1:-1;;11735:193:84:o;11933:127::-;11994:10;11989:3;11985:20;11982:1;11975:31;12025:4;12022:1;12015:15;12049:4;12046:1;12039:15;12065:127;12126:10;12121:3;12117:20;12114:1;12107:31;12157:4;12154:1;12147:15;12181:4;12178:1;12171:15;12197:127;12258:10;12253:3;12249:20;12246:1;12239:31;12289:4;12286:1;12279:15;12313:4;12310:1;12303:15;12329:127;12390:10;12385:3;12381:20;12378:1;12371:31;12421:4;12418:1;12411:15;12445:4;12442:1;12435:15;12461:127;12522:10;12517:3;12513:20;12510:1;12503:31;12553:4;12550:1;12543:15;12577:4;12574:1;12567:15;12593:131;-1:-1:-1;;;;;12668:31:84;;12658:42;;12648:70;;12714:1;12711;12704:12;12648:70;12593:131;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "3586000",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "52192",
                "acceptJobOwnership(address)": "55212",
                "addDisputer(address)": "30171",
                "addLiquidityToJob(address,address,uint256)": "infinite",
                "addSlasher(address)": "30237",
                "addTokenCreditsToJob(address,address,uint256)": "infinite",
                "approveLiquidity(address)": "infinite",
                "approvedLiquidities()": "infinite",
                "bondTime()": "2373",
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "changeJobOwnership(address,address)": "infinite",
                "dispute(address)": "30907",
                "disputers(address)": "2857",
                "disputes(address)": "2768",
                "fee()": "2372",
                "firstSeen(address)": "2678",
                "forceLiquidityCreditsToJob(address,uint256)": "infinite",
                "governance()": "2428",
                "hasBonded(address)": "2944",
                "inflationPeriod()": "2680",
                "internalJobLiquidities(address)": "infinite",
                "internalJobLiquidityCredits(address)": "2630",
                "internalJobPeriodCredits(address)": "2632",
                "internalJobTokens(address)": "infinite",
                "jobLiquidityCredits(address)": "infinite",
                "jobOwner(address)": "2951",
                "jobPendingOwner(address)": "2643",
                "jobPeriodCredits(address)": "infinite",
                "jobTokenCredits(address,address)": "infinite",
                "jobTokenCreditsAddedAt(address,address)": "infinite",
                "jobs()": "infinite",
                "keep3rHelper()": "2647",
                "keep3rV1()": "2627",
                "keep3rV1Proxy()": "2736",
                "keepers()": "infinite",
                "kp3rWethPool()": "2692",
                "liquidityAmount(address,address)": "infinite",
                "liquidityMinimum()": "2395",
                "observeLiquidity(address)": "infinite",
                "pendingBonds(address,address)": "infinite",
                "pendingGovernance()": "2713",
                "pendingUnbonds(address,address)": "infinite",
                "quoteLiquidity(address,uint256)": "infinite",
                "removeDisputer(address)": "30337",
                "removeSlasher(address)": "30272",
                "resolve(address)": "30922",
                "revokeLiquidity(address)": "infinite",
                "rewardPeriodTime()": "2593",
                "rewardedAt(address)": "2657",
                "setApprovedLiquidity(address)": "infinite",
                "setBondTime(uint256)": "25872",
                "setFee(uint256)": "25740",
                "setGovernance(address)": "28030",
                "setInflationPeriod(uint256)": "25806",
                "setJobLiquidity(address,address)": "infinite",
                "setJobToken(address,address)": "infinite",
                "setKeep3rHelper(address)": "28109",
                "setKeep3rV1(address)": "28086",
                "setKeep3rV1Proxy(address)": "28263",
                "setKp3rWethPool(address)": "infinite",
                "setLiquidityMinimum(uint256)": "25761",
                "setRevokedLiquidity(address)": "infinite",
                "setRewardPeriodTime(uint256)": "25589",
                "setUnbondTime(uint256)": "25561",
                "slashLiquidityFromJob(address,address,uint256)": "infinite",
                "slashTokenFromJob(address,address,uint256)": "infinite",
                "slashers(address)": "2878",
                "totalJobCredits(address)": "infinite",
                "unbondLiquidityFromJob(address,address,uint256)": "infinite",
                "unbondTime()": "2461",
                "withdrawLiquidityFromJob(address,address,address)": "infinite",
                "withdrawTokenCreditsFromJob(address,address,uint256,address)": "infinite",
                "workCompleted(address)": "2746",
                "workedAt(address)": "2810"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addSlasher(address)": "68a9f19c",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "dispute(address)": "f75f9f7b",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "internalJobLiquidities(address)": "75a9f7ff",
              "internalJobLiquidityCredits(address)": "de55351d",
              "internalJobPeriodCredits(address)": "0dc60206",
              "internalJobTokens(address)": "e89aad28",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityAmount(address,address)": "694798e6",
              "liquidityMinimum()": "633fb68f",
              "observeLiquidity(address)": "165e62e7",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "resolve(address)": "55ea6c47",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardPeriodTime()": "768b5d90",
              "rewardedAt(address)": "a676f9ff",
              "setApprovedLiquidity(address)": "280b656c",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setJobLiquidity(address,address)": "cacdf93d",
              "setJobToken(address,address)": "e01f857c",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRevokedLiquidity(address)": "deaf81d4",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashLiquidityFromJob(address,address,uint256)": "6e2a9ca6",
              "slashTokenFromJob(address,address,uint256)": "f25e311b",
              "slashers(address)": "b87fcbff",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "unbondTime()": "a7d2e784",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workCompleted(address)": "1b44555e",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kph\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"Dispute\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"Resolve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"internalJobLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"internalJobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"internalJobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"internalJobTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"setApprovedLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"setJobLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"setJobToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"setRevokedLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashTokenFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"dispute(address)\":{\"params\":{\"_jobOrKeeper\":\"The address in dispute\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_liquidityCredits\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_periodCredits\":\"The credits the given job has at the current period\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"resolve(address)\":{\"params\":{\"_jobOrKeeper\":\"The address cleared\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"slashLiquidityFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity that will be slashed\",\"_job\":\"The address being slashed\",\"_liquidity\":\"The address of the liquidity that will be slashed\"}},\"slashTokenFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of the token that will be slashed\",\"_job\":\"The address of the job from which the token will be slashed\",\"_token\":\"The address of the token that will be slashed\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_credits\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyDisputed()\":[{\"notice\":\"Throws when a job or keeper is already disputed\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobTokenInsufficient()\":[{\"notice\":\"Throws when someone tries to slash more tokens than the job has\"}],\"JobTokenUnexistent()\":[{\"notice\":\"Throws when the token trying to be slashed doesn't exist\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"NotDisputed()\":[{\"notice\":\"Throws when a job or keeper is not disputed and someone tries to resolve the dispute\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Dispute(address,address)\":{\"notice\":\"Emitted when a keeper or a job is disputed\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"JobSlashLiquidity(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\"},\"JobSlashToken(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashTokenFromJob is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"Resolve(address,address)\":{\"notice\":\"Emitted when a dispute is resolved\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"dispute(address)\":{\"notice\":\"Allows governance to create a dispute for a given keeper/job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"resolve(address)\":{\"notice\":\"Allows governance to resolve a dispute on a keeper/job\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or a slasher to slash liquidity from a job\"},\"slashTokenFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or slasher to slash a job specific token\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol\":\"Keep3rJobDisputableForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rParameters.sol';\\nimport './Keep3rRoles.sol';\\nimport '../../interfaces/peripherals/IKeep3rDisputable.sol';\\n\\nabstract contract Keep3rDisputable is IKeep3rDisputable, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rDisputable\\n  function dispute(address _jobOrKeeper) external override onlyDisputer {\\n    if (disputes[_jobOrKeeper]) revert AlreadyDisputed();\\n    disputes[_jobOrKeeper] = true;\\n    emit Dispute(_jobOrKeeper, msg.sender);\\n  }\\n\\n  /// @inheritdoc IKeep3rDisputable\\n  function resolve(address _jobOrKeeper) external override onlyDisputer {\\n    if (!disputes[_jobOrKeeper]) revert NotDisputed();\\n    disputes[_jobOrKeeper] = false;\\n    emit Resolve(_jobOrKeeper, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x941e9ba02b2ad3975edc444cd771ef1e5386051553632140f882258ea7e4d4bc\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobFundableCredits.sol';\\nimport './Keep3rJobFundableLiquidity.sol';\\nimport '../Keep3rDisputable.sol';\\n\\nabstract contract Keep3rJobDisputable is IKeep3rJobDisputable, Keep3rDisputable, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rJobDisputable\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override onlySlasher {\\n    if (!disputes[_job]) revert NotDisputed();\\n    if (!_jobTokens[_job].contains(_token)) revert JobTokenUnexistent();\\n    if (jobTokenCredits[_job][_token] < _amount) revert JobTokenInsufficient();\\n\\n    try IERC20(_token).transfer(governance, _amount) {} catch {}\\n    jobTokenCredits[_job][_token] -= _amount;\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit JobSlashToken(_job, _token, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobDisputable\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlySlasher {\\n    if (!disputes[_job]) revert NotDisputed();\\n\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n    try IERC20(_liquidity).transfer(governance, _amount) {} catch {}\\n    emit JobSlashLiquidity(_job, _liquidity, msg.sender, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0x86cdbf44dfa46c6b6e184e48e11cb8571e26cf50c793b6b07227c29e743da397\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableCredits is IKeep3rJobFundableCredits, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice Cooldown between withdrawals\\n  uint256 internal constant _WITHDRAW_TOKENS_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  mapping(address => mapping(address => uint256)) public override jobTokenCreditsAddedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    // KP3R shouldn't be used for direct token payments\\n    if (_token == keep3rV1) revert TokenUnallowed();\\n    uint256 _before = IERC20(_token).balanceOf(address(this));\\n    IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\\n    uint256 _received = IERC20(_token).balanceOf(address(this)) - _before;\\n    uint256 _tokenFee = (_received * fee) / _BASE;\\n    jobTokenCredits[_job][_token] += _received - _tokenFee;\\n    jobTokenCreditsAddedAt[_job][_token] = block.timestamp;\\n    IERC20(_token).safeTransfer(governance, _tokenFee);\\n    _jobTokens[_job].add(_token);\\n\\n    emit TokenCreditAddition(_job, _token, msg.sender, _received);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external override nonReentrant onlyJobOwner(_job) {\\n    if (block.timestamp <= jobTokenCreditsAddedAt[_job][_token] + _WITHDRAW_TOKENS_COOLDOWN) revert JobTokenCreditsLocked();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientJobTokenCredits();\\n    if (disputes[_job]) revert JobDisputed();\\n\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_receiver, _amount);\\n\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit TokenCreditWithdrawal(_job, _token, _receiver, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0xb600d18903a008a1ca03743de7cef8330c2d5e66db52c900822551a4be75f7a5\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/IPairManager.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '../../libraries/FullMath.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableLiquidity is IKeep3rJobFundableLiquidity, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice List of liquidities that are accepted in the system\\n  EnumerableSet.AddressSet internal _approvedLiquidities;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => mapping(address => uint256)) public override liquidityAmount;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override rewardedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override workedAt;\\n\\n  /// @notice Tracks an address and returns its TickCache\\n  mapping(address => TickCache) internal _tick;\\n\\n  // Views\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approvedLiquidities() external view override returns (address[] memory _list) {\\n    _list = _approvedLiquidities.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobPeriodCredits(address _job) public view override returns (uint256 _periodCredits) {\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        TickCache memory _tickCache = observeLiquidity(_liquidity);\\n        if (_tickCache.period != 0) {\\n          int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n          _periodCredits += _getReward(\\n            IKeep3rHelper(keep3rHelper).getKP3RsAtTick(liquidityAmount[_job][_liquidity], _tickDifference, rewardPeriodTime)\\n          );\\n        }\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobLiquidityCredits(address _job) public view override returns (uint256 _liquidityCredits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n\\n    // If the job was rewarded in the past 1 period time\\n    if ((block.timestamp - rewardedAt[_job]) < rewardPeriodTime) {\\n      // If the job has period credits, update minted job credits to new twap\\n      _liquidityCredits = _periodCredits > 0\\n        ? (_jobLiquidityCredits[_job] * _periodCredits) / _jobPeriodCredits[_job] // If the job has period credits, return remaining job credits updated to new twap\\n        : _jobLiquidityCredits[_job]; // If not, return remaining credits, forced credits should not be updated\\n    } else {\\n      // Else return a full period worth of credits if current credits have expired\\n      _liquidityCredits = _periodCredits;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function totalJobCredits(address _job) external view override returns (uint256 _credits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n    uint256 _cooldown = block.timestamp;\\n\\n    if ((rewardedAt[_job] > _period(block.timestamp - rewardPeriodTime))) {\\n      // Will calculate cooldown if it outdated\\n      if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will calculate cooldown from last reward reference in this period\\n        _cooldown -= (rewardedAt[_job] + rewardPeriodTime);\\n      } else {\\n        // Will calculate cooldown from last reward timestamp\\n        _cooldown -= rewardedAt[_job];\\n      }\\n    } else {\\n      // Will calculate cooldown from period start if expired\\n      _cooldown -= _period(block.timestamp);\\n    }\\n    _credits = jobLiquidityCredits(_job) + _phase(_cooldown, _periodCredits);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view override returns (uint256 _periodCredits) {\\n    if (_approvedLiquidities.contains(_liquidity)) {\\n      TickCache memory _tickCache = observeLiquidity(_liquidity);\\n      if (_tickCache.period != 0) {\\n        int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n        return _getReward(IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime));\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function observeLiquidity(address _liquidity) public view virtual override returns (TickCache memory _tickCache) {\\n    if (_tick[_liquidity].period == _period(block.timestamp)) {\\n      // Will return cached twaps if liquidity is updated\\n      _tickCache = _tick[_liquidity];\\n    } else {\\n      bool success;\\n      uint256 lastPeriod = _period(block.timestamp - rewardPeriodTime);\\n\\n      if (_tick[_liquidity].period == lastPeriod) {\\n        // Will only ask for current period accumulator if liquidity is outdated\\n        uint32[] memory _secondsAgo = new uint32[](1);\\n        int56 previousTick = _tick[_liquidity].current;\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n\\n        (_tickCache.current, , success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - previousTick;\\n      } else if (_tick[_liquidity].period < lastPeriod) {\\n        // Will ask for 2 accumulators if liquidity is expired\\n        uint32[] memory _secondsAgo = new uint32[](2);\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n        _secondsAgo[1] = uint32(block.timestamp - _period(block.timestamp) + rewardPeriodTime);\\n\\n        int56 _tickCumulative2;\\n        (_tickCache.current, _tickCumulative2, success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - _tickCumulative2;\\n      }\\n      if (success) {\\n        _tickCache.period = _period(block.timestamp);\\n      } else {\\n        delete _tickCache.period;\\n      }\\n    }\\n  }\\n\\n  // Methods\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external override onlyGovernance {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    _settleJobAccountance(_job);\\n    _jobLiquidityCredits[_job] += _amount;\\n    emit LiquidityCreditsForced(_job, rewardedAt[_job], _jobLiquidityCredits[_job]);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approveLiquidity(address _liquidity) external virtual override onlyGovernance {\\n    if (!_approvedLiquidities.add(_liquidity)) revert LiquidityPairApproved();\\n    _liquidityPool[_liquidity] = IPairManager(_liquidity).pool();\\n    _isKP3RToken0[_liquidity] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_liquidityPool[_liquidity]);\\n    _tick[_liquidity] = observeLiquidity(_liquidity);\\n    emit LiquidityApproval(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function revokeLiquidity(address _liquidity) external override onlyGovernance {\\n    if (!_approvedLiquidities.remove(_liquidity)) revert LiquidityPairUnexistent();\\n    emit LiquidityRevocation(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_approvedLiquidities.contains(_liquidity)) revert LiquidityPairUnapproved();\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n\\n    _jobLiquidities[_job].add(_liquidity);\\n\\n    _settleJobAccountance(_job);\\n\\n    if (_quoteLiquidity(liquidityAmount[_job][_liquidity] + _amount, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n    IERC20(_liquidity).safeTransferFrom(msg.sender, address(this), _amount);\\n    liquidityAmount[_job][_liquidity] += _amount;\\n    _jobPeriodCredits[_job] += _getReward(_quoteLiquidity(_amount, _liquidity));\\n    emit LiquidityAddition(_job, _liquidity, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlyJobOwner(_job) {\\n    canWithdrawAfter[_job][_liquidity] = block.timestamp + unbondTime;\\n    pendingUnbonds[_job][_liquidity] += _amount;\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n\\n    uint256 _remainingLiquidity = liquidityAmount[_job][_liquidity];\\n    if (_remainingLiquidity > 0 && _quoteLiquidity(_remainingLiquidity, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit Unbonding(_job, _liquidity, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external override onlyJobOwner(_job) {\\n    if (_receiver == address(0)) revert ZeroAddress();\\n    if (pendingUnbonds[_job][_liquidity] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[_job][_liquidity] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[_job]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[_job][_liquidity];\\n\\n    delete pendingUnbonds[_job][_liquidity];\\n    delete canWithdrawAfter[_job][_liquidity];\\n\\n    IERC20(_liquidity).safeTransfer(_receiver, _amount);\\n    emit LiquidityWithdrawal(_job, _liquidity, _receiver, _amount);\\n  }\\n\\n  // Internal functions\\n\\n  /// @notice Updates or rewards job liquidity credits depending on time since last job reward\\n  function _updateJobCreditsIfNeeded(address _job) internal returns (bool _rewarded) {\\n    if (rewardedAt[_job] < _period(block.timestamp)) {\\n      // Will exit function if job has been rewarded in current period\\n      if (rewardedAt[_job] <= _period(block.timestamp - rewardPeriodTime)) {\\n        // Will reset job to period syncronicity if a full period passed without rewards\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] = _period(block.timestamp);\\n        _rewarded = true;\\n      } else if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will reset job's syncronicity if last reward was more than epoch ago\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] += rewardPeriodTime;\\n        _rewarded = true;\\n      } else if (workedAt[_job] < _period(block.timestamp)) {\\n        // First keeper on period has to update job accountance to current twaps\\n        uint256 previousPeriodCredits = _jobPeriodCredits[_job];\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = (_jobLiquidityCredits[_job] * _jobPeriodCredits[_job]) / previousPeriodCredits;\\n        // Updating job accountance does not reward job\\n      }\\n    }\\n  }\\n\\n  /// @notice Only called if _jobLiquidityCredits < payment\\n  function _rewardJobCredits(address _job) internal {\\n    /// @notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)\\n    /* WARNING: this allows to top up _jobLiquidityCredits to a max of 1.99 but have to spend at least 1 */\\n    _jobLiquidityCredits[_job] += _phase(block.timestamp - rewardedAt[_job], _jobPeriodCredits[_job]);\\n    rewardedAt[_job] = block.timestamp;\\n  }\\n\\n  /// @notice Updates accountance for _jobPeriodCredits\\n  function _updateJobPeriod(address _job) internal {\\n    _jobPeriodCredits[_job] = _calculateJobPeriodCredits(_job);\\n  }\\n\\n  /// @notice Quotes the outdated job liquidities and calculates _periodCredits\\n  /// @dev This function is also responsible for keeping the KP3R/WETH quote updated\\n  function _calculateJobPeriodCredits(address _job) internal returns (uint256 _periodCredits) {\\n    if (_tick[kp3rWethPool].period != _period(block.timestamp)) {\\n      // Updates KP3R/WETH quote if needed\\n      _tick[kp3rWethPool] = observeLiquidity(kp3rWethPool);\\n    }\\n\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        if (_tick[_liquidity].period != _period(block.timestamp)) {\\n          // Updates liquidity cache only if needed\\n          _tick[_liquidity] = observeLiquidity(_liquidity);\\n        }\\n        _periodCredits += _getReward(_quoteLiquidity(liquidityAmount[_job][_liquidity], _liquidity));\\n      }\\n    }\\n  }\\n\\n  /// @notice Updates job accountance calculating the impact of the unbonded liquidity amount\\n  function _unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) internal nonReentrant {\\n    if (!_jobLiquidities[_job].contains(_liquidity)) revert JobLiquidityUnexistent();\\n    if (liquidityAmount[_job][_liquidity] < _amount) revert JobLiquidityInsufficient();\\n\\n    // Ensures current twaps in job liquidities\\n    _updateJobPeriod(_job);\\n    uint256 _periodCreditsToRemove = _getReward(_quoteLiquidity(_amount, _liquidity));\\n\\n    // A liquidity can be revoked causing a job to have 0 periodCredits\\n    if (_jobPeriodCredits[_job] > 0) {\\n      // Removes a % correspondant to a full rewardPeriodTime for the liquidity withdrawn vs all of the liquidities\\n      _jobLiquidityCredits[_job] -= (_jobLiquidityCredits[_job] * _periodCreditsToRemove) / _jobPeriodCredits[_job];\\n      _jobPeriodCredits[_job] -= _periodCreditsToRemove;\\n    }\\n\\n    liquidityAmount[_job][_liquidity] -= _amount;\\n    if (liquidityAmount[_job][_liquidity] == 0) {\\n      _jobLiquidities[_job].remove(_liquidity);\\n    }\\n  }\\n\\n  /// @notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed\\n  function _phase(uint256 _timePassed, uint256 _multiplier) internal view returns (uint256 _result) {\\n    if (_timePassed < rewardPeriodTime) {\\n      _result = (_timePassed * _multiplier) / rewardPeriodTime;\\n    } else _result = _multiplier;\\n  }\\n\\n  /// @notice Returns the start of the period of the provided timestamp\\n  function _period(uint256 _timestamp) internal view returns (uint256 _periodTimestamp) {\\n    return _timestamp - (_timestamp % rewardPeriodTime);\\n  }\\n\\n  /// @notice Calculates relation between rewardPeriod and inflationPeriod\\n  function _getReward(uint256 _baseAmount) internal view returns (uint256 _credits) {\\n    return FullMath.mulDiv(_baseAmount, rewardPeriodTime, inflationPeriod);\\n  }\\n\\n  /// @notice Returns underlying KP3R amount for a given liquidity amount\\n  function _quoteLiquidity(uint256 _amount, address _liquidity) internal view virtual returns (uint256 _quote) {\\n    if (_tick[_liquidity].period != 0) {\\n      int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tick[_liquidity].difference : -_tick[_liquidity].difference;\\n      _quote = IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime);\\n    }\\n  }\\n\\n  /// @notice Updates job credits to current quotes and rewards job's pending minted credits\\n  /// @dev Ensures a maximum of 1 period of credits\\n  function _settleJobAccountance(address _job) internal virtual {\\n    _updateJobCreditsIfNeeded(_job);\\n    _rewardJobCredits(_job);\\n    _jobLiquidityCredits[_job] = Math.min(_jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n  }\\n}\\n\",\"keccak256\":\"0x7747b2a0ee0c4e3322e92a3e1fc0f6f03be63942bc398009726b58f8c9f79cf0\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../contracts/peripherals/jobs/Keep3rJobDisputable.sol';\\n\\ncontract Keep3rJobDisputableForTest is Keep3rJobDisputable {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  constructor(\\n    address _kph,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) Keep3rParameters(_kph, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\\n\\n  function setJobLiquidity(address _job, address _liquidity) external {\\n    _jobLiquidities[_job].add(_liquidity);\\n  }\\n\\n  function setJobToken(address _job, address _token) external {\\n    _jobTokens[_job].add(_token);\\n  }\\n\\n  function setApprovedLiquidity(address _liquidity) external {\\n    _approvedLiquidities.add(_liquidity);\\n  }\\n\\n  function setRevokedLiquidity(address _liquidity) external {\\n    _approvedLiquidities.remove(_liquidity);\\n  }\\n\\n  function internalJobLiquidityCredits(address _job) external view returns (uint256 _credits) {\\n    _credits = _jobLiquidityCredits[_job];\\n  }\\n\\n  function internalJobPeriodCredits(address _job) external view returns (uint256 _credits) {\\n    _credits = _jobPeriodCredits[_job];\\n  }\\n\\n  function internalJobTokens(address _job) external view returns (address[] memory _tokens) {\\n    _tokens = new address[](_jobTokens[_job].length());\\n    for (uint256 i; i < _jobTokens[_job].length(); i++) {\\n      _tokens[i] = _jobTokens[_job].at(i);\\n    }\\n  }\\n\\n  function internalJobLiquidities(address _job) external view returns (address[] memory _tokens) {\\n    _tokens = new address[](_jobLiquidities[_job].length());\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      _tokens[i] = _jobLiquidities[_job].at(i);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x67b8484bdb78971ac833d6893a36b50a96811cfcfc14121804ad4b666ad65bf6\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Creates/resolves disputes for jobs or keepers\\n///         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\\n///         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\\ninterface IKeep3rDisputable {\\n  /// @notice Emitted when a keeper or a job is disputed\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _disputer The user that called the function and disputed the keeper\\n  event Dispute(address indexed _jobOrKeeper, address indexed _disputer);\\n\\n  /// @notice Emitted when a dispute is resolved\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _resolver The user that called the function and resolved the dispute\\n  event Resolve(address indexed _jobOrKeeper, address indexed _resolver);\\n\\n  /// @notice Throws when a job or keeper is already disputed\\n  error AlreadyDisputed();\\n\\n  /// @notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute\\n  error NotDisputed();\\n\\n  /// @notice Allows governance to create a dispute for a given keeper/job\\n  /// @param _jobOrKeeper The address in dispute\\n  function dispute(address _jobOrKeeper) external;\\n\\n  /// @notice Allows governance to resolve a dispute on a keeper/job\\n  /// @param _jobOrKeeper The address cleared\\n  function resolve(address _jobOrKeeper) external;\\n}\\n\",\"keccak256\":\"0x002b9b4c75e62d48d74b6447649d39eb5c1e128d2523bb11e08e9cd3e27b1f70\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6297,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "jobTokenCreditsAddedAt",
                "offset": 0,
                "slot": "37",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6540,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "_approvedLiquidities",
                "offset": 0,
                "slot": "38",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 6548,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "liquidityAmount",
                "offset": 0,
                "slot": "40",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6554,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "rewardedAt",
                "offset": 0,
                "slot": "41",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6560,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "workedAt",
                "offset": 0,
                "slot": "42",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6566,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                "label": "_tick",
                "offset": 0,
                "slot": "43",
                "type": "t_mapping(t_address,t_struct(TickCache)13178_storage)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_int56": {
                "encoding": "inplace",
                "label": "int56",
                "numberOfBytes": "7"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_struct(TickCache)13178_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)",
                "numberOfBytes": "32",
                "value": "t_struct(TickCache)13178_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(TickCache)13178_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rJobFundableLiquidity.TickCache",
                "members": [
                  {
                    "astId": 13173,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                    "label": "current",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13175,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                    "label": "difference",
                    "offset": 7,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13177,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol:Keep3rJobDisputableForTest",
                    "label": "period",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyDisputed()": [
                {
                  "notice": "Throws when a job or keeper is already disputed"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobTokenInsufficient()": [
                {
                  "notice": "Throws when someone tries to slash more tokens than the job has"
                }
              ],
              "JobTokenUnexistent()": [
                {
                  "notice": "Throws when the token trying to be slashed doesn't exist"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "NotDisputed()": [
                {
                  "notice": "Throws when a job or keeper is not disputed and someone tries to resolve the dispute"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Dispute(address,address)": {
                "notice": "Emitted when a keeper or a job is disputed"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "JobSlashLiquidity(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called"
              },
              "JobSlashToken(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashTokenFromJob is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "Resolve(address,address)": {
                "notice": "Emitted when a dispute is resolved"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "dispute(address)": {
                "notice": "Allows governance to create a dispute for a given keeper/job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "resolve(address)": {
                "notice": "Allows governance to resolve a dispute on a keeper/job"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "notice": "Allows governance or a slasher to slash liquidity from a job"
              },
              "slashTokenFromJob(address,address,uint256)": {
                "notice": "Allows governance or slasher to slash a job specific token"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol": {
        "Keep3rJobFundableCreditsForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kph",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                }
              ],
              "name": "isJobToken",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_contains",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_jobOwner",
                  "type": "address"
                }
              ],
              "name": "setJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                }
              ],
              "name": "setJobToken",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_10710": {
                  "entryPoint": null,
                  "id": 10710,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_18": {
                  "entryPoint": null,
                  "id": 18,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5689": {
                  "entryPoint": null,
                  "id": 5689,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 423,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory": {
                  "entryPoint": 452,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 545,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1152:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "328:332:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "375:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "384:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "387:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "377:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "377:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "377:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "349:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "358:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "345:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "345:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "370:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "341:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "341:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "338:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "400:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "440:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "410:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "410:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "400:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "459:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "503:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "514:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "499:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "499:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "469:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "469:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "459:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "527:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "571:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "582:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "567:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "567:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "537:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "537:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "527:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "595:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "639:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "650:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "635:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "635:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "605:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "605:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "595:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "270:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "281:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "293:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "301:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "309:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "317:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:464:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "743:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "789:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "798:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "801:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "791:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "791:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "791:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "764:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "773:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "760:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "760:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "785:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "756:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "756:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "753:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "814:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "833:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "827:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "827:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "818:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "896:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "905:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "908:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "898:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "898:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "898:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "865:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "886:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "879:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "879:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "872:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "872:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "862:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "855:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "855:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "852:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "921:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "931:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "921:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "709:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "720:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "732:6:84",
                            "type": ""
                          }
                        ],
                        "src": "665:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1048:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1058:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1070:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1081:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1066:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1066:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1058:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1100:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1115:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1131:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1136:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1127:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1127:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1140:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1123:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1123:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1111:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1111:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1093:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1093:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1093:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1017:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1028:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1039:4:84",
                            "type": ""
                          }
                        ],
                        "src": "947:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526203f480601f55621275006020556729a2241af62c000060215562069780602255622cd300602355601e6024553480156200003e57600080fd5b506040516200227d3803806200227d8339810160408190526200006191620001c4565b6001600055838383833380806200008a5760405162b293ed60e81b815260040160405180910390fd5b601780546001600160a01b03199081166001600160a01b0393841617909155601d80548216888416178155601b80548316888516179055601c80548316878516179055601e8054831686851690811782556000818152600e602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200013557600080fd5b505afa1580156200014a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000170919062000221565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055506200024c95505050505050565b80516001600160a01b0381168114620001bf57600080fd5b919050565b60008060008060808587031215620001db57600080fd5b620001e685620001a7565b9350620001f660208601620001a7565b92506200020660408601620001a7565b91506200021660608601620001a7565b905092959194509250565b6000602082840312156200023457600080fd5b815180151581146200024557600080fd5b9392505050565b612021806200025c6000396000f3fe608060405234801561001057600080fd5b506004361061028c5760003560e01c806398e90a0f1161015d578063cb54694d116100c9578063cb54694d14610675578063cd22af1b14610688578063d55995fe146106b3578063ddca3f43146106c6578063e01f857c146106cf578063e326ac43146106e2578063ebbb619414610702578063ec00cdfc14610715578063f0f346b914610728578063f11a1d1a1461073b578063f39c38a01461074e578063f4b5cd3b14610761578063fc253d2b1461077457600080fd5b806398e90a0f146105225780639d5c33d81461054b578063a39744b51461055e578063a7d2e78414610589578063aac6aa9c14610592578063ab033ea9146105a5578063b0103b1a146105b8578063b2392233146105db578063b440027f146105ee578063b7e7734014610619578063b87fcbff1461062c578063c7ae40d01461064f578063cb4be2bb1461066257600080fd5b80635ebe23f0116101fc5780635ebe23f01461042c578063633fb68f1461043557806363f2e2f51461043e57806368a9f19c1461045157806369fe0e2d1461046457806372da828a14610477578063768b5d901461048a5780637b40c913146104935780637c8fce23146104a6578063878c723e146104bb5780638cb22b76146104e45780638fe204dd14610507578063951dc22c1461051a57600080fd5b806307b435c21461029157806315006b82146102cf578063160e1e31146102fa578063168f92e71461030f5780631b44555e1461033a5780631ef94b911461035a57806321040b011461037a578063238efcbc146103a5578063274a8db4146103ad578063575288bf146103e0578063594a3a93146103f357806359a2255e146104065780635aa6e67514610419575b600080fd5b6102bc61029f366004611d16565b601260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6102bc6102dd366004611d16565b601060209081526000928352604080842090915290825290205481565b61030d610308366004611cfb565b61077d565b005b6102bc61031d366004611d16565b600960209081526000928352604080842090915290825290205481565b6102bc610348366004611cfb565b60056020526000908152604090205481565b601b5461036d906001600160a01b031681565b6040516102c69190611e42565b6102bc610388366004611d16565b601360209081526000928352604080842090915290825290205481565b61030d6108e3565b6103d06103bb366004611cfb565b601a6020526000908152604090205460ff1681565b60405190151581526020016102c6565b61030d6103ee366004611d49565b61096f565b61030d610401366004611d16565b610c3b565b61030d610414366004611cfb565b610ce0565b60175461036d906001600160a01b031681565b6102bc601f5481565b6102bc60215481565b6103d061044c366004611d16565b610d92565b61030d61045f366004611cfb565b610dbb565b61030d610472366004611df4565b610e73565b61030d610485366004611cfb565b610ed3565b6102bc60225481565b601e5461036d906001600160a01b031681565b6104ae610f70565b6040516102c69190611e56565b61036d6104c9366004611cfb565b6001602052600090815260409020546001600160a01b031681565b6103d06104f2366004611cfb565b60146020526000908152604090205460ff1681565b61030d610515366004611df4565b610f81565b6104ae610fdf565b61036d610530366004611cfb565b6002602052600090815260409020546001600160a01b031681565b61030d610559366004611cfb565b610feb565b6102bc61056c366004611d16565b600860209081526000928352604080842090915290825290205481565b6102bc60205481565b61030d6105a0366004611cfb565b6110a3565b61030d6105b3366004611cfb565b611157565b6103d06105c6366004611cfb565b60076020526000908152604090205460ff1681565b61030d6105e9366004611df4565b6111cd565b6102bc6105fc366004611d16565b602560209081526000928352604080842090915290825290205481565b61030d610627366004611df4565b61122d565b6103d061063a366004611cfb565b60196020526000908152604090205460ff1681565b601c5461036d906001600160a01b031681565b61030d610670366004611cfb565b61128d565b61030d610683366004611df4565b61132a565b6102bc610696366004611d16565b601160209081526000928352604080842090915290825290205481565b61030d6106c1366004611d85565b6113ae565b6102bc60245481565b61030d6106dd366004611d16565b6115e5565b6102bc6106f0366004611cfb565b60066020526000908152604090205481565b61030d610710366004611df4565b61160c565b61030d610723366004611cfb565b61166c565b61030d610736366004611cfb565b611709565b601d5461036d906001600160a01b031681565b60185461036d906001600160a01b031681565b61030d61076f366004611d16565b6117bd565b6102bc60235481565b6017546001600160a01b031633146107a8576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166107cf5760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b90610830908490600401611e42565b60206040518083038186803b15801561084857600080fd5b505afa15801561085c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108809190611dd2565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa906108d8908390611e42565b60405180910390a150565b6018546001600160a01b0316331461090e57604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161096591611e42565b60405180910390a1565b6002600054141561099b5760405162461bcd60e51b815260040161099290611ed6565b60405180910390fd5b60026000556109ab6015846117f7565b6109c857604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b03838116911614156109f65760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190610a25903090600401611e42565b60206040518083038186803b158015610a3d57600080fd5b505afa158015610a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a759190611e0d565b9050610a8c6001600160a01b03841633308561181f565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610abb9190611e42565b60206040518083038186803b158015610ad357600080fd5b505afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b9190611e0d565b610b159190611f66565b9050600061271060245483610b2a9190611f47565b610b349190611f25565b9050610b408183611f66565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190610b77908490611f0d565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754610bb4921683611890565b6001600160a01b0386166000908152600c60205260409020610bd690866118c0565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb85604051610c2691815260200190565b60405180910390a45050600160005550505050565b6001600160a01b038281166000908152600160205260409020548391163314610c7757604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b038181166000908152600260205260409020548291163314610d1c5760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b6001600160a01b0382166000908152600c60205260408120610db490836117f7565b9392505050565b6017546001600160a01b03163314610de6576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff1615610e205760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b906108d8908390611e42565b6017546001600160a01b03163314610e9e576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d906020016108d8565b6017546001600160a01b03163314610efe576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610f255760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b0906108d8908390611e42565b6060610f7c60156118d5565b905090565b6017546001600160a01b03163314610fac576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee291016108d8565b6060610f7c60036118d5565b6017546001600160a01b03163314611016576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff16156110505760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f906108d8908390611e42565b6017546001600160a01b031633146110ce576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16611107576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d025906108d8908390611e42565b6017546001600160a01b03163314611182576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906108d8908390611e42565b6017546001600160a01b031633146111f8576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb69906020016108d8565b6017546001600160a01b03163314611258576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b43906020016108d8565b6017546001600160a01b031633146112b8576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166112df5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae250906108d8908390611e42565b6017546001600160a01b03163314611355576040516354348f0360e01b815260040160405180910390fd5b6201518081101561137957604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d9906020016108d8565b600260005414156113d15760405162461bcd60e51b815260040161099290611ed6565b600260009081556001600160a01b0385811682526001602052604090912054859116331461141257604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b0380861660009081526025602090815260408083209388168352929052205461144490603c90611f0d565b421161146357604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b038086166000908152600960209081526040808320938816835292905220548311156114a95760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff16156114e35760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b0380861660009081526009602090815260408083209388168352929052908120805485929061151a908490611f66565b9091555061153490506001600160a01b0385168385611890565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054611582576001600160a01b0385166000908152600c6020526040902061158090856118e2565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe866040516115d191815260200190565b60405180910390a450506001600055505050565b6001600160a01b0382166000908152600c6020526040902061160790826118c0565b505050565b6017546001600160a01b03163314611637576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e7906020016108d8565b6017546001600160a01b03163314611697576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166116be5760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf906108d8908390611e42565b6017546001600160a01b03163314611734576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661176d57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e906108d8908390611e42565b6117c86015836118c0565b506001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6001600160a01b03811660009081526001830160205260408120541515610db4565b92915050565b6040516001600160a01b038085166024830152831660448201526064810182905261188a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526118f7565b50505050565b6040516001600160a01b03831660248201526044810182905261160790849063a9059cbb60e01b90606401611853565b6000610db4836001600160a01b0384166119c9565b60606000610db483611a18565b6000610db4836001600160a01b038416611a74565b600061194c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b679092919063ffffffff16565b805190915015611607578080602001905181019061196a9190611dd2565b6116075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610992565b6000818152600183016020526040812054611a1057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611819565b506000611819565b606081600001805480602002602001604051908101604052809291908181526020018280548015611a6857602002820191906000526020600020905b815481526020019060010190808311611a54575b50505050509050919050565b60008181526001830160205260408120548015611b5d576000611a98600183611f66565b8554909150600090611aac90600190611f66565b9050818114611b11576000866000018281548110611acc57611acc611fd5565b9060005260206000200154905080876000018481548110611aef57611aef611fd5565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611b2257611b22611fbf565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611819565b6000915050611819565b6060611b768484600085611b7e565b949350505050565b606082471015611bdf5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610992565b843b611c2d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610992565b600080866001600160a01b03168587604051611c499190611e26565b60006040518083038185875af1925050503d8060008114611c86576040519150601f19603f3d011682016040523d82523d6000602084013e611c8b565b606091505b5091509150611c9b828286611ca6565b979650505050505050565b60608315611cb5575081610db4565b825115611cc55782518084602001fd5b8160405162461bcd60e51b81526004016109929190611ea3565b80356001600160a01b0381168114611cf657600080fd5b919050565b600060208284031215611d0d57600080fd5b610db482611cdf565b60008060408385031215611d2957600080fd5b611d3283611cdf565b9150611d4060208401611cdf565b90509250929050565b600080600060608486031215611d5e57600080fd5b611d6784611cdf565b9250611d7560208501611cdf565b9150604084013590509250925092565b60008060008060808587031215611d9b57600080fd5b611da485611cdf565b9350611db260208601611cdf565b925060408501359150611dc760608601611cdf565b905092959194509250565b600060208284031215611de457600080fd5b81518015158114610db457600080fd5b600060208284031215611e0657600080fd5b5035919050565b600060208284031215611e1f57600080fd5b5051919050565b60008251611e38818460208701611f7d565b9190910192915050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015611e975783516001600160a01b031683529284019291840191600101611e72565b50909695505050505050565b6020815260008251806020840152611ec2816040850160208701611f7d565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115611f2057611f20611fa9565b500190565b600082611f4257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611f6157611f61611fa9565b500290565b600082821015611f7857611f78611fa9565b500390565b60005b83811015611f98578181015183820152602001611f80565b8381111561188a5750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea26469706673582212200cf8ca9a7d86dd925c1315a9b201506e52382127bc9203bcc3407a48328b417964736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x3F480 PUSH1 0x1F SSTORE PUSH3 0x127500 PUSH1 0x20 SSTORE PUSH8 0x29A2241AF62C0000 PUSH1 0x21 SSTORE PUSH3 0x69780 PUSH1 0x22 SSTORE PUSH3 0x2CD300 PUSH1 0x23 SSTORE PUSH1 0x1E PUSH1 0x24 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x227D CODESIZE SUB DUP1 PUSH3 0x227D DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x61 SWAP2 PUSH3 0x1C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE DUP4 DUP4 DUP4 DUP4 CALLER DUP1 DUP1 PUSH3 0x8A JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1D DUP1 SLOAD DUP3 AND DUP9 DUP5 AND OR DUP2 SSTORE PUSH1 0x1B DUP1 SLOAD DUP4 AND DUP9 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1C DUP1 SLOAD DUP4 AND DUP8 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1E DUP1 SLOAD DUP4 AND DUP7 DUP6 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP6 AND SWAP1 SWAP2 OR SWAP1 SWAP4 SSTORE SWAP1 SLOAD SWAP1 SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x696A437B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x14A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x170 SWAP2 SWAP1 PUSH3 0x221 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x24C SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E6 DUP6 PUSH3 0x1A7 JUMP JUMPDEST SWAP4 POP PUSH3 0x1F6 PUSH1 0x20 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP3 POP PUSH3 0x206 PUSH1 0x40 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP2 POP PUSH3 0x216 PUSH1 0x60 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2021 DUP1 PUSH3 0x25C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x28C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x98E90A0F GT PUSH2 0x15D JUMPI DUP1 PUSH4 0xCB54694D GT PUSH2 0xC9 JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x675 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x688 JUMPI DUP1 PUSH4 0xD55995FE EQ PUSH2 0x6B3 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x6C6 JUMPI DUP1 PUSH4 0xE01F857C EQ PUSH2 0x6CF JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x6E2 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0x702 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0x715 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x728 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0x73B JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x74E JUMPI DUP1 PUSH4 0xF4B5CD3B EQ PUSH2 0x761 JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0x774 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x54B JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x55E JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x589 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x592 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x5A5 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x5B8 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x5DB JUMPI DUP1 PUSH4 0xB440027F EQ PUSH2 0x5EE JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x62C JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x64F JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x662 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5EBE23F0 GT PUSH2 0x1FC JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x42C JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x435 JUMPI DUP1 PUSH4 0x63F2E2F5 EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x451 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x464 JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x477 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x48A JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x493 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x4A6 JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x4E4 JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x507 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x51A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x291 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x30F JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x33A JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x35A JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x37A JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x3AD JUMPI DUP1 PUSH4 0x575288BF EQ PUSH2 0x3E0 JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x3F3 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x406 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x419 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2BC PUSH2 0x29F CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2BC PUSH2 0x2DD CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x308 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0x77D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2BC PUSH2 0x31D CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2BC PUSH2 0x348 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x36D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2C6 SWAP2 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH2 0x2BC PUSH2 0x388 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x8E3 JUMP JUMPDEST PUSH2 0x3D0 PUSH2 0x3BB CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2C6 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x3EE CALLDATASIZE PUSH1 0x4 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x96F JUMP JUMPDEST PUSH2 0x30D PUSH2 0x401 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH2 0xC3B JUMP JUMPDEST PUSH2 0x30D PUSH2 0x414 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0xCE0 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x36D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2BC PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2BC PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D0 PUSH2 0x44C CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH2 0xD92 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0xDBB JUMP JUMPDEST PUSH2 0x30D PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0xE73 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x485 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0xED3 JUMP JUMPDEST PUSH2 0x2BC PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x36D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x4AE PUSH2 0xF70 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2C6 SWAP2 SWAP1 PUSH2 0x1E56 JUMP JUMPDEST PUSH2 0x36D PUSH2 0x4C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3D0 PUSH2 0x4F2 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x515 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0xF81 JUMP JUMPDEST PUSH2 0x4AE PUSH2 0xFDF JUMP JUMPDEST PUSH2 0x36D PUSH2 0x530 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x559 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0xFEB JUMP JUMPDEST PUSH2 0x2BC PUSH2 0x56C CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2BC PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x5A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0x10A3 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x5B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0x1157 JUMP JUMPDEST PUSH2 0x3D0 PUSH2 0x5C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x5E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0x11CD JUMP JUMPDEST PUSH2 0x2BC PUSH2 0x5FC CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x627 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0x122D JUMP JUMPDEST PUSH2 0x3D0 PUSH2 0x63A CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x36D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x670 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0x128D JUMP JUMPDEST PUSH2 0x30D PUSH2 0x683 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0x132A JUMP JUMPDEST PUSH2 0x2BC PUSH2 0x696 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x6C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D85 JUMP JUMPDEST PUSH2 0x13AE JUMP JUMPDEST PUSH2 0x2BC PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x6DD CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH2 0x15E5 JUMP JUMPDEST PUSH2 0x2BC PUSH2 0x6F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x710 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0x160C JUMP JUMPDEST PUSH2 0x30D PUSH2 0x723 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0x166C JUMP JUMPDEST PUSH2 0x30D PUSH2 0x736 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0x1709 JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x36D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x36D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x76F CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH2 0x17BD JUMP JUMPDEST PUSH2 0x2BC PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7A8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7CF JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x830 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x848 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x85C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x880 SWAP2 SWAP1 PUSH2 0x1DD2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x90E JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x965 SWAP2 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x99B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x992 SWAP1 PUSH2 0x1ED6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x9AB PUSH1 0x15 DUP5 PUSH2 0x17F7 JUMP JUMPDEST PUSH2 0x9C8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x9F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x822D97 PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xA25 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA51 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA75 SWAP2 SWAP1 PUSH2 0x1E0D JUMP JUMPDEST SWAP1 POP PUSH2 0xA8C PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x181F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xABB SWAP2 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0B SWAP2 SWAP1 PUSH2 0x1E0D JUMP JUMPDEST PUSH2 0xB15 SWAP2 SWAP1 PUSH2 0x1F66 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2710 PUSH1 0x24 SLOAD DUP4 PUSH2 0xB2A SWAP2 SWAP1 PUSH2 0x1F47 JUMP JUMPDEST PUSH2 0xB34 SWAP2 SWAP1 PUSH2 0x1F25 JUMP JUMPDEST SWAP1 POP PUSH2 0xB40 DUP2 DUP4 PUSH2 0x1F66 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0xB77 SWAP1 DUP5 SWAP1 PUSH2 0x1F0D JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x17 SLOAD PUSH2 0xBB4 SWAP3 AND DUP4 PUSH2 0x1890 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xBD6 SWAP1 DUP7 PUSH2 0x18C0 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEC1A37D4A331A5059081E0FB5DA1735E7890900CD215A4FB1E9F2779FD7B83EB DUP6 PUSH1 0x40 MLOAD PUSH2 0xC26 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0xC77 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0xD1C JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0xDB4 SWAP1 DUP4 PUSH2 0x17F7 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xDE6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xE20 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE9E JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x8D8 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xEFE JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xF25 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xF7C PUSH1 0x15 PUSH2 0x18D5 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xFAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0x8D8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xF7C PUSH1 0x3 PUSH2 0x18D5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1016 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1050 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1107 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1182 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x11F8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x8D8 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1258 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x8D8 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12B8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x12DF JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1355 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x1379 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0x8D8 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x992 SWAP1 PUSH2 0x1ED6 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 AND CALLER EQ PUSH2 0x1412 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1444 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x1F0D JUMP JUMPDEST TIMESTAMP GT PUSH2 0x1463 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E0B4075 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP4 GT ISZERO PUSH2 0x14A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24AE82D PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x14E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x151A SWAP1 DUP5 SWAP1 PUSH2 0x1F66 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1534 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP4 DUP6 PUSH2 0x1890 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1582 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1580 SWAP1 DUP6 PUSH2 0x18E2 JUMP JUMPDEST POP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x53E982DD9EC088D634C74C98FBBC161F808B4B6469A26C657120B9A31CB34BFE DUP7 PUSH1 0x40 MLOAD PUSH2 0x15D1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1607 SWAP1 DUP3 PUSH2 0x18C0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1637 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x8D8 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1697 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x16BE JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1734 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x176D JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH2 0x17C8 PUSH1 0x15 DUP4 PUSH2 0x18C0 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0xDB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x188A SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x18F7 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1607 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x1853 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x19C9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xDB4 DUP4 PUSH2 0x1A18 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1A74 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x194C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B67 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1607 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x196A SWAP2 SWAP1 PUSH2 0x1DD2 JUMP JUMPDEST PUSH2 0x1607 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x992 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1A10 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1819 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1819 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1A68 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1A54 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1B5D JUMPI PUSH1 0x0 PUSH2 0x1A98 PUSH1 0x1 DUP4 PUSH2 0x1F66 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x1AAC SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x1F66 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x1B11 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1ACC JUMPI PUSH2 0x1ACC PUSH2 0x1FD5 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1AEF JUMPI PUSH2 0x1AEF PUSH2 0x1FD5 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x1B22 JUMPI PUSH2 0x1B22 PUSH2 0x1FBF JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0x1819 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x1819 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1B76 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1B7E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1BDF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x992 JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x1C2D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x992 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1C49 SWAP2 SWAP1 PUSH2 0x1E26 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1C86 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1C9B DUP3 DUP3 DUP7 PUSH2 0x1CA6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1CB5 JUMPI POP DUP2 PUSH2 0xDB4 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x1CC5 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x992 SWAP2 SWAP1 PUSH2 0x1EA3 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1CF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDB4 DUP3 PUSH2 0x1CDF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D32 DUP4 PUSH2 0x1CDF JUMP JUMPDEST SWAP2 POP PUSH2 0x1D40 PUSH1 0x20 DUP5 ADD PUSH2 0x1CDF JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1D5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D67 DUP5 PUSH2 0x1CDF JUMP JUMPDEST SWAP3 POP PUSH2 0x1D75 PUSH1 0x20 DUP6 ADD PUSH2 0x1CDF JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1D9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DA4 DUP6 PUSH2 0x1CDF JUMP JUMPDEST SWAP4 POP PUSH2 0x1DB2 PUSH1 0x20 DUP7 ADD PUSH2 0x1CDF JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH2 0x1DC7 PUSH1 0x60 DUP7 ADD PUSH2 0x1CDF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1DE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xDB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1E38 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1F7D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E97 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1E72 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1EC2 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1F7D JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1F20 JUMPI PUSH2 0x1F20 PUSH2 0x1FA9 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1F42 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1F61 JUMPI PUSH2 0x1F61 PUSH2 0x1FA9 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1F78 JUMPI PUSH2 0x1F78 PUSH2 0x1FA9 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F98 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F80 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x188A JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC 0xF8 0xCA SWAP11 PUSH30 0x86DD925C1315A9B201506E52382127BC9203BCC3407A48328B417964736F PUSH13 0x63430008070033000000000000 ",
              "sourceMap": "141:703:58:-:0;;;702:6:31;667:41;;786:7;749:44;;877:7;834:50;;968:6;925:49;;1057:7;1015:49;;1135:2;1105:32;;267:203:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1637:1:0;1742:7;:22;396:4:58;402:9;413:14;429:13;456:10;;357:25:28;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;;;-1:-1:-1;;;;;422:24:28;;;;;;;1479:12:31;:28;;;;;;;;;;1513:8;:20;;;;;;;;;;1539:13;:30;;;;;;;;;;1575:12;:28;;;;;;;;;;;;-1:-1:-1;1609:28:31;;;:14;:28;;;;;;;:43;;;;;;;;;;;1703:12;;1730;;1689:54;;-1:-1:-1;;;1689:54:31;;1730:12;;;1689:54;;;1093:51:84;1703:12:31;;;;-1:-1:-1;1689:40:31;;1066:18:84;;1689:54:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1658:28:31;;;;;;;;:13;:28;;;;;:85;;-1:-1:-1;;1658:85:31;;;;;;;;;;-1:-1:-1;141:703:58;;-1:-1:-1;;;;;;141:703:58;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:464::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;469:49;514:2;503:9;499:18;469:49;:::i;:::-;459:59;;537:49;582:2;571:9;567:18;537:49;:::i;:::-;527:59;;605:49;650:2;639:9;635:18;605:49;:::i;:::-;595:59;;196:464;;;;;;;:::o;665:277::-;732:6;785:2;773:9;764:7;760:23;756:32;753:52;;;801:1;798;791:12;753:52;833:9;827:16;886:5;879:13;872:21;865:5;862:32;852:60;;908:1;905;898:12;852:60;931:5;665:277;-1:-1:-1;;;665:277:84:o;947:203::-;141:703:58;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_add_1372": {
                  "entryPoint": 6601,
                  "id": 1372,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_callOptionalReturn_911": {
                  "entryPoint": 6391,
                  "id": 911,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_contains_1475": {
                  "entryPoint": null,
                  "id": 1475,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_remove_1456": {
                  "entryPoint": 6772,
                  "id": 1456,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_values_1520": {
                  "entryPoint": 6680,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 2275,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@acceptJobOwnership_8373": {
                  "entryPoint": 3296,
                  "id": 8373,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 4075,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 3515,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addTokenCreditsToJob_6417": {
                  "entryPoint": 2415,
                  "id": 6417,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@add_1658": {
                  "entryPoint": 6336,
                  "id": 1658,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@bondTime_5611": {
                  "entryPoint": null,
                  "id": 5611,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@changeJobOwnership_8336": {
                  "entryPoint": 3131,
                  "id": 8336,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@contains_1712": {
                  "entryPoint": 6135,
                  "id": 1712,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_5636": {
                  "entryPoint": null,
                  "id": 5636,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@functionCallWithValue_1073": {
                  "entryPoint": 7038,
                  "id": 1073,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@functionCall_1003": {
                  "entryPoint": 7015,
                  "id": 1003,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@inflationPeriod_5631": {
                  "entryPoint": null,
                  "id": 5631,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@isContract_932": {
                  "entryPoint": null,
                  "id": 932,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@isJobToken_10764": {
                  "entryPoint": 3474,
                  "id": 10764,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@jobOwner_8303": {
                  "entryPoint": null,
                  "id": 8303,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPendingOwner_8309": {
                  "entryPoint": null,
                  "id": 8309,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobTokenCreditsAddedAt_6297": {
                  "entryPoint": null,
                  "id": 6297,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 3952,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keep3rHelper_5602": {
                  "entryPoint": null,
                  "id": 5602,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1Proxy_5598": {
                  "entryPoint": null,
                  "id": 5598,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1_5594": {
                  "entryPoint": null,
                  "id": 5594,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keepers_5506": {
                  "entryPoint": 4063,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@kp3rWethPool_5606": {
                  "entryPoint": null,
                  "id": 5606,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@liquidityMinimum_5621": {
                  "entryPoint": null,
                  "id": 5621,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@removeDisputer_6072": {
                  "entryPoint": 5897,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 4259,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@remove_1685": {
                  "entryPoint": 6370,
                  "id": 1685,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@rewardPeriodTime_5626": {
                  "entryPoint": null,
                  "id": 5626,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@safeTransferFrom_745": {
                  "entryPoint": 6175,
                  "id": 745,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@safeTransfer_719": {
                  "entryPoint": 6288,
                  "id": 719,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@setBondTime_5836": {
                  "entryPoint": 4653,
                  "id": 5836,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setFee_5933": {
                  "entryPoint": 3699,
                  "id": 5933,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 4439,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setInflationPeriod_5915": {
                  "entryPoint": 4557,
                  "id": 5915,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setJobToken_10745": {
                  "entryPoint": 5605,
                  "id": 10745,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@setJob_10730": {
                  "entryPoint": 6077,
                  "id": 10730,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@setKeep3rHelper_5717": {
                  "entryPoint": 3795,
                  "id": 5717,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1Proxy_5773": {
                  "entryPoint": 4749,
                  "id": 5773,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1_5745": {
                  "entryPoint": 5740,
                  "id": 5745,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_5818": {
                  "entryPoint": 1917,
                  "id": 5818,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setLiquidityMinimum_5872": {
                  "entryPoint": 5644,
                  "id": 5872,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRewardPeriodTime_5897": {
                  "entryPoint": 4906,
                  "id": 5897,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setUnbondTime_5854": {
                  "entryPoint": 3969,
                  "id": 5854,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@unbondTime_5616": {
                  "entryPoint": null,
                  "id": 5616,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 6357,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@verifyCallResult_1208": {
                  "entryPoint": 7334,
                  "id": 1208,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@withdrawTokenCreditsFromJob_6507": {
                  "entryPoint": 5038,
                  "id": 6507,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_address": {
                  "entryPoint": 7391,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 7419,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 7446,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_uint256": {
                  "entryPoint": 7497,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_address": {
                  "entryPoint": 7557,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 7634,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 7668,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256_fromMemory": {
                  "entryPoint": 7693,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 7718,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 7746,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 7766,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 7843,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 7894,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 7949,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 7973,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 8007,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 8038,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 8061,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "panic_error_0x11": {
                  "entryPoint": 8105,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x31": {
                  "entryPoint": 8127,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x32": {
                  "entryPoint": 8149,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:7466:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "111:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "262:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "308:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "317:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "320:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "310:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "310:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "310:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "292:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "279:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "275:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "272:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "333:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "362:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "333:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "228:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "239:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "251:6:84",
                            "type": ""
                          }
                        ],
                        "src": "192:186:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "470:173:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "516:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "525:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "528:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "518:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "518:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "518:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "491:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "500:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "487:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "487:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "512:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "480:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "541:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "570:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "551:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "551:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "541:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "589:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "622:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "633:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "618:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "618:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "599:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "599:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "589:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "428:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "439:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "451:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "459:6:84",
                            "type": ""
                          }
                        ],
                        "src": "383:260:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "752:224:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "798:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "807:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "810:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "800:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "800:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "800:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "773:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "782:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "769:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "769:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "794:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "765:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "765:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "762:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "823:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "852:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "833:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "833:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "823:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "871:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "904:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "915:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "900:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "900:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "881:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "881:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "871:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "928:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "955:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "966:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "951:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "951:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "938:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "938:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "928:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "702:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "713:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "725:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "733:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "741:6:84",
                            "type": ""
                          }
                        ],
                        "src": "648:328:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1102:282:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1149:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1158:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1161:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1151:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1151:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1151:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1123:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1132:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1119:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1119:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1144:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1115:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1115:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1112:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1174:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1203:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1184:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1184:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1174:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1222:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1255:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1266:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1251:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1251:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1232:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1232:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1222:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1279:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1306:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1317:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1302:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1302:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1289:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1289:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1279:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1330:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1363:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1374:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1359:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1359:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1340:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1340:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "1330:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1044:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1055:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1067:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1075:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1083:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "1091:6:84",
                            "type": ""
                          }
                        ],
                        "src": "981:403:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1467:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1513:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1522:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1525:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1515:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1515:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1515:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1488:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1497:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1484:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1484:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1509:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1480:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1480:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1477:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1538:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1557:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1551:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1551:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1542:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1620:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1629:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1632:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1622:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1622:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1622:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1589:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "1610:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "1603:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1603:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "1596:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1596:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1586:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1586:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1579:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1579:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1576:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1645:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1655:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1645:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1433:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1444:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1456:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1389:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1741:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1787:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1796:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1799:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1789:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1789:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1789:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1762:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1771:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1758:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1758:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1783:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1754:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1754:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1751:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1812:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1835:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1822:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1822:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1812:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1707:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1718:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1730:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1671:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1937:103:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1983:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1992:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1995:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1985:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1985:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1985:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1958:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1967:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1954:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1954:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1979:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1950:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1950:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1947:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2008:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2024:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2018:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2018:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2008:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1903:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1914:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1926:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1856:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2182:137:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2192:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2212:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2206:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2206:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "2196:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2254:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2262:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2250:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2250:17:84"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2269:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2274:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2228:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2228:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2228:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2290:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2301:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2306:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2297:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2297:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "2290:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "2158:3:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2163:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "2174:3:84",
                            "type": ""
                          }
                        ],
                        "src": "2045:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2425:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2435:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2447:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2458:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2443:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2443:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2435:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2477:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2492:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2508:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2513:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "2504:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2504:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2517:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "2500:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2500:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2488:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2488:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2470:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2470:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2470:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2394:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2405:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2416:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2324:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2689:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2699:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2711:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2722:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2707:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2707:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2699:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2734:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2752:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2757:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "2748:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2748:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2761:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "2744:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2744:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2738:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2779:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2794:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2802:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2790:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2790:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2772:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2772:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2772:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2826:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2837:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2822:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2822:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2846:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2854:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2842:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2842:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2815:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2815:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2815:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2878:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2889:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2874:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2874:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2894:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2867:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2867:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2867:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2642:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2653:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2661:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2669:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2680:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2532:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3041:145:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3051:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3063:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3074:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3059:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3059:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3051:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3093:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "3108:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3124:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3129:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "3120:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3120:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3133:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "3116:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3116:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "3104:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3104:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3086:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3086:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3086:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3157:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3168:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3153:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3153:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3173:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3146:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3146:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3146:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3002:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3013:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3021:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3032:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2912:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3342:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3352:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3362:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3356:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3373:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3391:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3402:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3387:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3387:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3377:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3421:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3432:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3414:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3414:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3414:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3444:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "3455:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "3448:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3470:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3490:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3484:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3484:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "3474:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3513:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3521:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3506:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3506:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3506:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3537:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3548:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3559:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3544:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3544:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "3537:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3571:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3589:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3597:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3585:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3585:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "3575:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3609:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3618:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "3613:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3677:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "3698:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3713:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "3707:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "3707:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "3730:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "3735:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3726:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "3726:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "3739:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "3722:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "3722:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "3703:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3703:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3691:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3691:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3691:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3756:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "3767:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3772:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3763:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3763:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3756:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3788:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "3802:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3810:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3798:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3798:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "3788:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "3639:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3642:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3636:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3636:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "3650:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3652:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "3661:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3664:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3657:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3657:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "3652:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "3632:3:84",
                                "statements": []
                              },
                              "src": "3628:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3832:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "3840:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3832:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3311:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3322:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3333:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3191:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3949:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3959:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3971:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3982:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3967:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3967:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3959:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4001:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "4026:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "4019:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4019:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "4012:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4012:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3994:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3994:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3994:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3918:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3929:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3940:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3854:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4167:262:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4184:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4195:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4177:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4177:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4177:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4207:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4227:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4221:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4221:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "4211:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4254:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4265:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4250:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4250:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4270:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4243:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4243:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4243:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4312:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4320:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4308:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4308:15:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4329:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4340:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4325:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4325:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4345:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4286:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4286:66:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4286:66:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4361:62:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4377:9:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "4396:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4404:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "4392:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4392:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4413:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "4409:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4409:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "4388:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4388:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4373:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4373:45:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4420:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4369:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4369:54:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4361:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4136:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4147:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4158:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4046:383:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4608:228:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4625:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4636:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4618:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4618:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4618:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4659:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4670:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4655:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4655:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4675:2:84",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4648:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4648:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4648:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4698:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4709:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4694:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4694:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4714:34:84",
                                    "type": "",
                                    "value": "Address: insufficient balance fo"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4687:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4687:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4687:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4769:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4780:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4765:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4765:18:84"
                                  },
                                  {
                                    "hexValue": "722063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4785:8:84",
                                    "type": "",
                                    "value": "r call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4758:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4758:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4758:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4803:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4815:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4826:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4811:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4811:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4803:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4585:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4599:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4434:402:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5015:179:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5032:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5043:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5025:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5025:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5025:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5066:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5077:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5062:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5062:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5082:2:84",
                                    "type": "",
                                    "value": "29"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5055:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5055:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5055:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5105:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5116:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5101:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5101:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5121:31:84",
                                    "type": "",
                                    "value": "Address: call to non-contract"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5094:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5094:59:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5094:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5162:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5174:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5185:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5170:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5170:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5162:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4992:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5006:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4841:353:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5373:232:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5390:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5401:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5383:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5383:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5383:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5424:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5435:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5420:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5420:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5440:2:84",
                                    "type": "",
                                    "value": "42"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5413:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5413:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5413:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5463:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5474:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5459:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5459:18:84"
                                  },
                                  {
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5479:34:84",
                                    "type": "",
                                    "value": "SafeERC20: ERC20 operation did n"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5452:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5452:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5452:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5534:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5545:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5530:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5530:18:84"
                                  },
                                  {
                                    "hexValue": "6f742073756363656564",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5550:12:84",
                                    "type": "",
                                    "value": "ot succeed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5523:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5523:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5523:40:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5572:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5584:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5595:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5580:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5580:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5572:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5350:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5364:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5199:406:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5784:181:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5801:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5812:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5794:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5794:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5794:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5835:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5846:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5831:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5831:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5851:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5824:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5824:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5824:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5874:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5885:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5870:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5870:18:84"
                                  },
                                  {
                                    "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5890:33:84",
                                    "type": "",
                                    "value": "ReentrancyGuard: reentrant call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5863:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5863:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5863:61:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5933:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5945:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5956:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5941:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5941:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5933:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5761:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5775:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5610:355:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6071:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6081:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6093:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6104:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6089:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6089:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6081:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6123:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6134:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6116:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6116:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6116:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6040:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6051:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6062:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5970:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6200:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6227:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "6229:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6229:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6229:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6216:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "6223:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "6219:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6219:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6213:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6213:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6210:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6258:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6269:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6272:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6265:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6265:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "6258:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "6183:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "6186:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "6192:3:84",
                            "type": ""
                          }
                        ],
                        "src": "6152:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6331:171:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6362:111:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6383:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "6390:3:84",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "6395:10:84",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "6386:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6386:20:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6376:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6376:31:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6376:31:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6427:1:84",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6430:4:84",
                                          "type": "",
                                          "value": "0x12"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6420:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6420:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6420:15:84"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6455:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6458:4:84",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6448:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6448:15:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6448:15:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6351:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6344:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6344:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6341:132:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6482:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6491:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6494:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "6487:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6487:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6482:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "6316:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "6319:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "6325:1:84",
                            "type": ""
                          }
                        ],
                        "src": "6285:217:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6559:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6618:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "6620:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6620:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6620:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "6590:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "6583:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6583:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "6576:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6576:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "6598:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6609:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "6605:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6605:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "6613:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "6601:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6601:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "6595:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6595:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "6572:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6572:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6569:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6649:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6664:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6667:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "6660:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6660:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "6649:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "6538:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "6541:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "6547:7:84",
                            "type": ""
                          }
                        ],
                        "src": "6507:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6729:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6751:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "6753:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6753:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6753:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6745:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6748:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6742:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6742:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6739:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6782:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6794:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6797:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "6790:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6790:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "6782:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "6711:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "6714:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "6720:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6680:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6863:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6873:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6882:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6877:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6942:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "6967:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "6972:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "6963:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6963:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6986:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6991:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "6982:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6982:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "6976:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6976:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6956:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6956:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6956:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6903:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6906:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6900:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6900:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "6914:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6916:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "6925:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6928:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6921:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6921:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "6916:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6896:3:84",
                                "statements": []
                              },
                              "src": "6892:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7031:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "7044:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "7049:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "7040:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7040:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7058:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7033:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7033:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7033:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "7020:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7023:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7017:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7017:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "7014:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "6841:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "6846:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "6851:6:84",
                            "type": ""
                          }
                        ],
                        "src": "6810:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7105:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7122:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7129:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7134:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7125:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7125:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7115:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7115:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7115:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7162:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7165:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7155:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7155:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7155:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7186:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7189:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "7179:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7179:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7179:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "7073:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7237:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7254:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7261:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7266:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7257:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7257:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7247:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7247:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7247:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7294:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7297:4:84",
                                    "type": "",
                                    "value": "0x31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7287:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7287:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7287:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7318:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7321:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "7311:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7311:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7311:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x31",
                        "nodeType": "YulFunctionDefinition",
                        "src": "7205:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7369:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7386:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7393:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7398:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7389:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7389:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7379:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7379:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7379:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7426:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7429:4:84",
                                    "type": "",
                                    "value": "0x32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7419:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7419:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7419:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7450:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7453:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "7443:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7443:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7443:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x32",
                        "nodeType": "YulFunctionDefinition",
                        "src": "7337:127:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := abi_decode_address(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061028c5760003560e01c806398e90a0f1161015d578063cb54694d116100c9578063cb54694d14610675578063cd22af1b14610688578063d55995fe146106b3578063ddca3f43146106c6578063e01f857c146106cf578063e326ac43146106e2578063ebbb619414610702578063ec00cdfc14610715578063f0f346b914610728578063f11a1d1a1461073b578063f39c38a01461074e578063f4b5cd3b14610761578063fc253d2b1461077457600080fd5b806398e90a0f146105225780639d5c33d81461054b578063a39744b51461055e578063a7d2e78414610589578063aac6aa9c14610592578063ab033ea9146105a5578063b0103b1a146105b8578063b2392233146105db578063b440027f146105ee578063b7e7734014610619578063b87fcbff1461062c578063c7ae40d01461064f578063cb4be2bb1461066257600080fd5b80635ebe23f0116101fc5780635ebe23f01461042c578063633fb68f1461043557806363f2e2f51461043e57806368a9f19c1461045157806369fe0e2d1461046457806372da828a14610477578063768b5d901461048a5780637b40c913146104935780637c8fce23146104a6578063878c723e146104bb5780638cb22b76146104e45780638fe204dd14610507578063951dc22c1461051a57600080fd5b806307b435c21461029157806315006b82146102cf578063160e1e31146102fa578063168f92e71461030f5780631b44555e1461033a5780631ef94b911461035a57806321040b011461037a578063238efcbc146103a5578063274a8db4146103ad578063575288bf146103e0578063594a3a93146103f357806359a2255e146104065780635aa6e67514610419575b600080fd5b6102bc61029f366004611d16565b601260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6102bc6102dd366004611d16565b601060209081526000928352604080842090915290825290205481565b61030d610308366004611cfb565b61077d565b005b6102bc61031d366004611d16565b600960209081526000928352604080842090915290825290205481565b6102bc610348366004611cfb565b60056020526000908152604090205481565b601b5461036d906001600160a01b031681565b6040516102c69190611e42565b6102bc610388366004611d16565b601360209081526000928352604080842090915290825290205481565b61030d6108e3565b6103d06103bb366004611cfb565b601a6020526000908152604090205460ff1681565b60405190151581526020016102c6565b61030d6103ee366004611d49565b61096f565b61030d610401366004611d16565b610c3b565b61030d610414366004611cfb565b610ce0565b60175461036d906001600160a01b031681565b6102bc601f5481565b6102bc60215481565b6103d061044c366004611d16565b610d92565b61030d61045f366004611cfb565b610dbb565b61030d610472366004611df4565b610e73565b61030d610485366004611cfb565b610ed3565b6102bc60225481565b601e5461036d906001600160a01b031681565b6104ae610f70565b6040516102c69190611e56565b61036d6104c9366004611cfb565b6001602052600090815260409020546001600160a01b031681565b6103d06104f2366004611cfb565b60146020526000908152604090205460ff1681565b61030d610515366004611df4565b610f81565b6104ae610fdf565b61036d610530366004611cfb565b6002602052600090815260409020546001600160a01b031681565b61030d610559366004611cfb565b610feb565b6102bc61056c366004611d16565b600860209081526000928352604080842090915290825290205481565b6102bc60205481565b61030d6105a0366004611cfb565b6110a3565b61030d6105b3366004611cfb565b611157565b6103d06105c6366004611cfb565b60076020526000908152604090205460ff1681565b61030d6105e9366004611df4565b6111cd565b6102bc6105fc366004611d16565b602560209081526000928352604080842090915290825290205481565b61030d610627366004611df4565b61122d565b6103d061063a366004611cfb565b60196020526000908152604090205460ff1681565b601c5461036d906001600160a01b031681565b61030d610670366004611cfb565b61128d565b61030d610683366004611df4565b61132a565b6102bc610696366004611d16565b601160209081526000928352604080842090915290825290205481565b61030d6106c1366004611d85565b6113ae565b6102bc60245481565b61030d6106dd366004611d16565b6115e5565b6102bc6106f0366004611cfb565b60066020526000908152604090205481565b61030d610710366004611df4565b61160c565b61030d610723366004611cfb565b61166c565b61030d610736366004611cfb565b611709565b601d5461036d906001600160a01b031681565b60185461036d906001600160a01b031681565b61030d61076f366004611d16565b6117bd565b6102bc60235481565b6017546001600160a01b031633146107a8576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166107cf5760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b90610830908490600401611e42565b60206040518083038186803b15801561084857600080fd5b505afa15801561085c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108809190611dd2565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa906108d8908390611e42565b60405180910390a150565b6018546001600160a01b0316331461090e57604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161096591611e42565b60405180910390a1565b6002600054141561099b5760405162461bcd60e51b815260040161099290611ed6565b60405180910390fd5b60026000556109ab6015846117f7565b6109c857604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b03838116911614156109f65760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190610a25903090600401611e42565b60206040518083038186803b158015610a3d57600080fd5b505afa158015610a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a759190611e0d565b9050610a8c6001600160a01b03841633308561181f565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610abb9190611e42565b60206040518083038186803b158015610ad357600080fd5b505afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b9190611e0d565b610b159190611f66565b9050600061271060245483610b2a9190611f47565b610b349190611f25565b9050610b408183611f66565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190610b77908490611f0d565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754610bb4921683611890565b6001600160a01b0386166000908152600c60205260409020610bd690866118c0565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb85604051610c2691815260200190565b60405180910390a45050600160005550505050565b6001600160a01b038281166000908152600160205260409020548391163314610c7757604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b038181166000908152600260205260409020548291163314610d1c5760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b6001600160a01b0382166000908152600c60205260408120610db490836117f7565b9392505050565b6017546001600160a01b03163314610de6576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff1615610e205760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b906108d8908390611e42565b6017546001600160a01b03163314610e9e576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d906020016108d8565b6017546001600160a01b03163314610efe576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610f255760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b0906108d8908390611e42565b6060610f7c60156118d5565b905090565b6017546001600160a01b03163314610fac576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee291016108d8565b6060610f7c60036118d5565b6017546001600160a01b03163314611016576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff16156110505760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f906108d8908390611e42565b6017546001600160a01b031633146110ce576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16611107576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d025906108d8908390611e42565b6017546001600160a01b03163314611182576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906108d8908390611e42565b6017546001600160a01b031633146111f8576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb69906020016108d8565b6017546001600160a01b03163314611258576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b43906020016108d8565b6017546001600160a01b031633146112b8576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166112df5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae250906108d8908390611e42565b6017546001600160a01b03163314611355576040516354348f0360e01b815260040160405180910390fd5b6201518081101561137957604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d9906020016108d8565b600260005414156113d15760405162461bcd60e51b815260040161099290611ed6565b600260009081556001600160a01b0385811682526001602052604090912054859116331461141257604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b0380861660009081526025602090815260408083209388168352929052205461144490603c90611f0d565b421161146357604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b038086166000908152600960209081526040808320938816835292905220548311156114a95760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff16156114e35760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b0380861660009081526009602090815260408083209388168352929052908120805485929061151a908490611f66565b9091555061153490506001600160a01b0385168385611890565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054611582576001600160a01b0385166000908152600c6020526040902061158090856118e2565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe866040516115d191815260200190565b60405180910390a450506001600055505050565b6001600160a01b0382166000908152600c6020526040902061160790826118c0565b505050565b6017546001600160a01b03163314611637576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e7906020016108d8565b6017546001600160a01b03163314611697576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166116be5760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf906108d8908390611e42565b6017546001600160a01b03163314611734576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661176d57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e906108d8908390611e42565b6117c86015836118c0565b506001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6001600160a01b03811660009081526001830160205260408120541515610db4565b92915050565b6040516001600160a01b038085166024830152831660448201526064810182905261188a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526118f7565b50505050565b6040516001600160a01b03831660248201526044810182905261160790849063a9059cbb60e01b90606401611853565b6000610db4836001600160a01b0384166119c9565b60606000610db483611a18565b6000610db4836001600160a01b038416611a74565b600061194c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b679092919063ffffffff16565b805190915015611607578080602001905181019061196a9190611dd2565b6116075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610992565b6000818152600183016020526040812054611a1057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611819565b506000611819565b606081600001805480602002602001604051908101604052809291908181526020018280548015611a6857602002820191906000526020600020905b815481526020019060010190808311611a54575b50505050509050919050565b60008181526001830160205260408120548015611b5d576000611a98600183611f66565b8554909150600090611aac90600190611f66565b9050818114611b11576000866000018281548110611acc57611acc611fd5565b9060005260206000200154905080876000018481548110611aef57611aef611fd5565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611b2257611b22611fbf565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611819565b6000915050611819565b6060611b768484600085611b7e565b949350505050565b606082471015611bdf5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610992565b843b611c2d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610992565b600080866001600160a01b03168587604051611c499190611e26565b60006040518083038185875af1925050503d8060008114611c86576040519150601f19603f3d011682016040523d82523d6000602084013e611c8b565b606091505b5091509150611c9b828286611ca6565b979650505050505050565b60608315611cb5575081610db4565b825115611cc55782518084602001fd5b8160405162461bcd60e51b81526004016109929190611ea3565b80356001600160a01b0381168114611cf657600080fd5b919050565b600060208284031215611d0d57600080fd5b610db482611cdf565b60008060408385031215611d2957600080fd5b611d3283611cdf565b9150611d4060208401611cdf565b90509250929050565b600080600060608486031215611d5e57600080fd5b611d6784611cdf565b9250611d7560208501611cdf565b9150604084013590509250925092565b60008060008060808587031215611d9b57600080fd5b611da485611cdf565b9350611db260208601611cdf565b925060408501359150611dc760608601611cdf565b905092959194509250565b600060208284031215611de457600080fd5b81518015158114610db457600080fd5b600060208284031215611e0657600080fd5b5035919050565b600060208284031215611e1f57600080fd5b5051919050565b60008251611e38818460208701611f7d565b9190910192915050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015611e975783516001600160a01b031683529284019291840191600101611e72565b50909695505050505050565b6020815260008251806020840152611ec2816040850160208701611f7d565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115611f2057611f20611fa9565b500190565b600082611f4257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611f6157611f61611fa9565b500290565b600082821015611f7857611f78611fa9565b500390565b60005b83811015611f98578181015183820152602001611f80565b8381111561188a5750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea26469706673582212200cf8ca9a7d86dd925c1315a9b201506e52382127bc9203bcc3407a48328b417964736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x28C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x98E90A0F GT PUSH2 0x15D JUMPI DUP1 PUSH4 0xCB54694D GT PUSH2 0xC9 JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x675 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x688 JUMPI DUP1 PUSH4 0xD55995FE EQ PUSH2 0x6B3 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x6C6 JUMPI DUP1 PUSH4 0xE01F857C EQ PUSH2 0x6CF JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x6E2 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0x702 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0x715 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x728 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0x73B JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x74E JUMPI DUP1 PUSH4 0xF4B5CD3B EQ PUSH2 0x761 JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0x774 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x54B JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x55E JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x589 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x592 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x5A5 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x5B8 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x5DB JUMPI DUP1 PUSH4 0xB440027F EQ PUSH2 0x5EE JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x62C JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x64F JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x662 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5EBE23F0 GT PUSH2 0x1FC JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x42C JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x435 JUMPI DUP1 PUSH4 0x63F2E2F5 EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x451 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x464 JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x477 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x48A JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x493 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x4A6 JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x4E4 JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x507 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x51A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x291 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x30F JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x33A JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x35A JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x37A JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x3AD JUMPI DUP1 PUSH4 0x575288BF EQ PUSH2 0x3E0 JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x3F3 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x406 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x419 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2BC PUSH2 0x29F CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2BC PUSH2 0x2DD CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x308 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0x77D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2BC PUSH2 0x31D CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2BC PUSH2 0x348 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x36D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2C6 SWAP2 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH2 0x2BC PUSH2 0x388 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x8E3 JUMP JUMPDEST PUSH2 0x3D0 PUSH2 0x3BB CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2C6 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x3EE CALLDATASIZE PUSH1 0x4 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x96F JUMP JUMPDEST PUSH2 0x30D PUSH2 0x401 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH2 0xC3B JUMP JUMPDEST PUSH2 0x30D PUSH2 0x414 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0xCE0 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x36D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2BC PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2BC PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D0 PUSH2 0x44C CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH2 0xD92 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0xDBB JUMP JUMPDEST PUSH2 0x30D PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0xE73 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x485 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0xED3 JUMP JUMPDEST PUSH2 0x2BC PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x36D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x4AE PUSH2 0xF70 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2C6 SWAP2 SWAP1 PUSH2 0x1E56 JUMP JUMPDEST PUSH2 0x36D PUSH2 0x4C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3D0 PUSH2 0x4F2 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x515 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0xF81 JUMP JUMPDEST PUSH2 0x4AE PUSH2 0xFDF JUMP JUMPDEST PUSH2 0x36D PUSH2 0x530 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x559 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0xFEB JUMP JUMPDEST PUSH2 0x2BC PUSH2 0x56C CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2BC PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x5A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0x10A3 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x5B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0x1157 JUMP JUMPDEST PUSH2 0x3D0 PUSH2 0x5C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x5E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0x11CD JUMP JUMPDEST PUSH2 0x2BC PUSH2 0x5FC CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x627 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0x122D JUMP JUMPDEST PUSH2 0x3D0 PUSH2 0x63A CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x36D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x670 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0x128D JUMP JUMPDEST PUSH2 0x30D PUSH2 0x683 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0x132A JUMP JUMPDEST PUSH2 0x2BC PUSH2 0x696 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x6C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D85 JUMP JUMPDEST PUSH2 0x13AE JUMP JUMPDEST PUSH2 0x2BC PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x6DD CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH2 0x15E5 JUMP JUMPDEST PUSH2 0x2BC PUSH2 0x6F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x710 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DF4 JUMP JUMPDEST PUSH2 0x160C JUMP JUMPDEST PUSH2 0x30D PUSH2 0x723 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0x166C JUMP JUMPDEST PUSH2 0x30D PUSH2 0x736 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CFB JUMP JUMPDEST PUSH2 0x1709 JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x36D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x36D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x30D PUSH2 0x76F CALLDATASIZE PUSH1 0x4 PUSH2 0x1D16 JUMP JUMPDEST PUSH2 0x17BD JUMP JUMPDEST PUSH2 0x2BC PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7A8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7CF JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x830 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x848 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x85C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x880 SWAP2 SWAP1 PUSH2 0x1DD2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x90E JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x965 SWAP2 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x99B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x992 SWAP1 PUSH2 0x1ED6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x9AB PUSH1 0x15 DUP5 PUSH2 0x17F7 JUMP JUMPDEST PUSH2 0x9C8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x9F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x822D97 PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xA25 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA51 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA75 SWAP2 SWAP1 PUSH2 0x1E0D JUMP JUMPDEST SWAP1 POP PUSH2 0xA8C PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x181F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xABB SWAP2 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0B SWAP2 SWAP1 PUSH2 0x1E0D JUMP JUMPDEST PUSH2 0xB15 SWAP2 SWAP1 PUSH2 0x1F66 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2710 PUSH1 0x24 SLOAD DUP4 PUSH2 0xB2A SWAP2 SWAP1 PUSH2 0x1F47 JUMP JUMPDEST PUSH2 0xB34 SWAP2 SWAP1 PUSH2 0x1F25 JUMP JUMPDEST SWAP1 POP PUSH2 0xB40 DUP2 DUP4 PUSH2 0x1F66 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0xB77 SWAP1 DUP5 SWAP1 PUSH2 0x1F0D JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x17 SLOAD PUSH2 0xBB4 SWAP3 AND DUP4 PUSH2 0x1890 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xBD6 SWAP1 DUP7 PUSH2 0x18C0 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEC1A37D4A331A5059081E0FB5DA1735E7890900CD215A4FB1E9F2779FD7B83EB DUP6 PUSH1 0x40 MLOAD PUSH2 0xC26 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0xC77 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0xD1C JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0xDB4 SWAP1 DUP4 PUSH2 0x17F7 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xDE6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xE20 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE9E JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x8D8 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xEFE JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xF25 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xF7C PUSH1 0x15 PUSH2 0x18D5 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xFAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0x8D8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xF7C PUSH1 0x3 PUSH2 0x18D5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1016 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1050 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1107 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1182 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x11F8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x8D8 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1258 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x8D8 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12B8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x12DF JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1355 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x1379 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0x8D8 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x992 SWAP1 PUSH2 0x1ED6 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 AND CALLER EQ PUSH2 0x1412 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1444 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x1F0D JUMP JUMPDEST TIMESTAMP GT PUSH2 0x1463 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E0B4075 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP4 GT ISZERO PUSH2 0x14A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24AE82D PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x14E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x151A SWAP1 DUP5 SWAP1 PUSH2 0x1F66 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1534 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP4 DUP6 PUSH2 0x1890 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1582 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1580 SWAP1 DUP6 PUSH2 0x18E2 JUMP JUMPDEST POP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x53E982DD9EC088D634C74C98FBBC161F808B4B6469A26C657120B9A31CB34BFE DUP7 PUSH1 0x40 MLOAD PUSH2 0x15D1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1607 SWAP1 DUP3 PUSH2 0x18C0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1637 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x8D8 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1697 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x16BE JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1734 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x176D JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x8D8 SWAP1 DUP4 SWAP1 PUSH2 0x1E42 JUMP JUMPDEST PUSH2 0x17C8 PUSH1 0x15 DUP4 PUSH2 0x18C0 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0xDB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x188A SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x18F7 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1607 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x1853 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x19C9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xDB4 DUP4 PUSH2 0x1A18 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1A74 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x194C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B67 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1607 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x196A SWAP2 SWAP1 PUSH2 0x1DD2 JUMP JUMPDEST PUSH2 0x1607 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x992 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1A10 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1819 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1819 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1A68 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1A54 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1B5D JUMPI PUSH1 0x0 PUSH2 0x1A98 PUSH1 0x1 DUP4 PUSH2 0x1F66 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x1AAC SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x1F66 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x1B11 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1ACC JUMPI PUSH2 0x1ACC PUSH2 0x1FD5 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1AEF JUMPI PUSH2 0x1AEF PUSH2 0x1FD5 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x1B22 JUMPI PUSH2 0x1B22 PUSH2 0x1FBF JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0x1819 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x1819 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1B76 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1B7E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1BDF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x992 JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x1C2D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x992 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1C49 SWAP2 SWAP1 PUSH2 0x1E26 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1C86 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1C9B DUP3 DUP3 DUP7 PUSH2 0x1CA6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1CB5 JUMPI POP DUP2 PUSH2 0xDB4 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x1CC5 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x992 SWAP2 SWAP1 PUSH2 0x1EA3 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1CF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDB4 DUP3 PUSH2 0x1CDF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D32 DUP4 PUSH2 0x1CDF JUMP JUMPDEST SWAP2 POP PUSH2 0x1D40 PUSH1 0x20 DUP5 ADD PUSH2 0x1CDF JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1D5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D67 DUP5 PUSH2 0x1CDF JUMP JUMPDEST SWAP3 POP PUSH2 0x1D75 PUSH1 0x20 DUP6 ADD PUSH2 0x1CDF JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1D9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DA4 DUP6 PUSH2 0x1CDF JUMP JUMPDEST SWAP4 POP PUSH2 0x1DB2 PUSH1 0x20 DUP7 ADD PUSH2 0x1CDF JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH2 0x1DC7 PUSH1 0x60 DUP7 ADD PUSH2 0x1CDF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1DE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xDB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1E38 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1F7D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E97 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1E72 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1EC2 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1F7D JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1F20 JUMPI PUSH2 0x1F20 PUSH2 0x1FA9 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1F42 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1F61 JUMPI PUSH2 0x1F61 PUSH2 0x1FA9 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1F78 JUMPI PUSH2 0x1F78 PUSH2 0x1FA9 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F98 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F80 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x188A JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC 0xF8 0xCA SWAP11 PUSH30 0x86DD925C1315A9B201506E52382127BC9203BCC3407A48328B417964736F PUSH13 0x63430008070033000000000000 ",
              "sourceMap": "141:703:58:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1968:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6116:25:84;;;6104:2;6089:18;1968:80:29;;;;;;;;1728:76;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2556:364:31;;;;;;:::i;:::-;;:::i;:::-;;880:79:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;:::i;:::-;;;;;;;;;;;;;;362:32:31;;;;;-1:-1:-1;;;;;362:32:31;;;;;;;;;;:::i;2090:78:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;384:50:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4019:14:84;;4012:22;3994:41;;3982:2;3967:18;384:50:32;3854:187:84;973:834:34;;;;;;:::i;:::-;;:::i;423:204:38:-;;;;;;:::i;:::-;;:::i;669:279::-;;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;-1:-1:-1;;;;;199:34:28;;;667:41:31;;;;;;834:50;;;;;;697:145:58;;;;;;:::i;:::-;;:::i;533:194:32:-;;;;;;:::i;:::-;;:::i;4195:110:31:-;;;;;;:::i;:::-;;:::i;1788:223::-;;;;;;:::i;:::-;;:::i;925:49::-;;;;;;590:36;;;;;-1:-1:-1;;;;;590:36:31;;;2385:105:29;;;:::i;:::-;;;;;;;:::i;226:52:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;226:52:38;;;2210:50:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3140:152:31;;;;;;:::i;:::-;;:::i;2531:111:29:-;;;:::i;321:59:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;321:59:38;;;999:203:32;;;;;;:::i;:::-;;:::i;769:69:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;749:44:31;;;;;;762:202:32;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3973:182:31;;;;;;:::i;:::-;;:::i;838:86:34:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2960:140:31;;;;;;:::i;:::-;;:::i;299:49:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;435:37:31;;;;;-1:-1:-1;;;;;435:37:31;;;2286:230;;;;;;:::i;:::-;;:::i;3666:267::-;;;;;;:::i;:::-;;:::i;1846:80:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1855:695:34;;;;;;:::i;:::-;;:::i;1105:32:31:-;;;;;;594:99:58;;;;;;:::i;:::-;;:::i;534:53:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;3332:188:31;;;;;;:::i;:::-;;:::i;2051:195::-;;;;;;:::i;:::-;;:::i;1237:211:32:-;;;;;;:::i;:::-;;:::i;513:36:31:-;;;;;-1:-1:-1;;;;;513:36:31;;;268:41:28;;;;;-1:-1:-1;;;;;268:41:28;;;474:116:58;;;;;;:::i;:::-;;:::i;1015:49:31:-;;;;;;2556:364;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2647:27:31;::::1;2643:53;;2683:13;;-1:-1:-1::0;;;2683:13:31::1;;;;;;;;;;;2643:53;2702:12;:28:::0;;-1:-1:-1;;;;;2702:28:31;;::::1;-1:-1:-1::0;;;;;;2702:28:31;;::::1;::::0;::::1;::::0;;;:12:::1;2736:28:::0;;;:14:::1;:28;::::0;;;;;;:43;;;;::::1;::::0;;::::1;::::0;;;2830:12:::1;::::0;2816:55;;-1:-1:-1;;;2816:55:31;;2830:12;::::1;::::0;2816:40:::1;::::0;:55:::1;::::0;2717:13;;2816:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2785:28:31;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;:86;;-1:-1:-1;;2785:86:31::1;::::0;::::1;;::::0;;;::::1;::::0;;;2882:33;::::1;::::0;::::1;::::0;2785:28;;2882:33:::1;:::i;:::-;;;;;;;;2556:364:::0;:::o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;754:10:::1;:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;973:834:34:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;;;;;;;;;1680:1;2389:7;:18;1108:20:34::1;:5;1123:4:::0;1108:14:::1;:20::i;:::-;1103:50;;1137:16;;-1:-1:-1::0;;;1137:16:34::1;;;;;;;;;;;1103:50;1229:8;::::0;-1:-1:-1;;;;;1219:18:34;;::::1;1229:8:::0;::::1;1219:18;1215:47;;;1246:16;;-1:-1:-1::0;;;1246:16:34::1;;;;;;;;;;;1215:47;1286:39;::::0;-1:-1:-1;;;1286:39:34;;1268:15:::1;::::0;-1:-1:-1;;;;;1286:24:34;::::1;::::0;::::1;::::0;:39:::1;::::0;1319:4:::1;::::0;1286:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1268:57:::0;-1:-1:-1;1331:67:34::1;-1:-1:-1::0;;;;;1331:31:34;::::1;1363:10;1383:4;1390:7:::0;1331:31:::1;:67::i;:::-;1404:17;1466:7;1431:6;-1:-1:-1::0;;;;;1424:24:34::1;;1457:4;1424:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;;:::i;:::-;1404:69;;1479:17;1238:6:31;1512:3:34;;1500:9;:15;;;;:::i;:::-;1499:25;;;;:::i;:::-;1479:45:::0;-1:-1:-1;1563:21:34::1;1479:45:::0;1563:9;:21:::1;:::i;:::-;-1:-1:-1::0;;;;;1530:21:34;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;;:54;;:29;;:21;:54:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;1590:28:34;;::::1;;::::0;;;:22:::1;:28;::::0;;;;;;;:36;;::::1;::::0;;;;;;;;1629:15:::1;1590:54:::0;;1678:10:::1;::::0;1650:50:::1;::::0;1678:10:::1;1690:9:::0;1650:27:::1;:50::i;:::-;-1:-1:-1::0;;;;;1706:16:34;::::1;;::::0;;;:10:::1;:16;::::0;;;;:28:::1;::::0;1727:6;1706:20:::1;:28::i;:::-;;1780:10;-1:-1:-1::0;;;;;1746:56:34::1;1772:6;-1:-1:-1::0;;;;;1746:56:34::1;1766:4;-1:-1:-1::0;;;;;1746:56:34::1;;1792:9;1746:56;;;;6116:25:84::0;;6104:2;6089:18;;5970:177;1746:56:34::1;;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;;;973:834:34:o;423:204:38:-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;527:21:38;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;-1:-1:-1;;;;;;527:33:38::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;596:14:38;;;;;;;571:51;;527:33;;596:14:::1;::::0;527:21;571:51:::1;::::0;::::1;423:204:::0;;;:::o;669:279::-;-1:-1:-1;;;;;1132:21:38;;;;;;;:15;:21;;;;;;;;;1118:10;:35;1114:69;;1162:21;;-1:-1:-1;;;1162:21:38;;;;;;;;;;;1114:69;-1:-1:-1;;;;;786:14:38;;::::1;761:22;786:14:::0;;;:8:::1;:14;::::0;;;;;;;;;824:15:::1;:21:::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;;807:38:38;;::::1;::::0;;;::::1;::::0;;;851:28;;;;::::1;::::0;;891:52;786:14;::::1;::::0;;;;910:10:::1;::::0;891:52:::1;::::0;761:22;891:52:::1;755:193;669:279:::0;;:::o;697:145:58:-;-1:-1:-1;;;;;804:16:58;;770:14;804:16;;;:10;:16;;;;;:33;;830:6;804:25;:33::i;:::-;792:45;697:145;-1:-1:-1;;;697:145:58:o;533:194:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;4195:110:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4264:3:31::1;:10:::0;;;4285:15:::1;::::0;6116:25:84;;;4285:15:31::1;::::0;6104:2:84;6089:18;4285:15:31::1;5970:177:84::0;1788:223:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1879:27:31;::::1;1875:53;;1915:13;;-1:-1:-1::0;;;1915:13:31::1;;;;;;;;;;;1875:53;1934:12;:28:::0;;-1:-1:-1;;;;;;1934:28:31::1;-1:-1:-1::0;;;;;1934:28:31;::::1;;::::0;;1973:33:::1;::::0;::::1;::::0;::::1;::::0;1934:28;;1973:33:::1;:::i;2385:105:29:-:0;2433:22;2471:14;:5;:12;:14::i;:::-;2463:22;;2385:105;:::o;3140:152:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3223:10:31::1;:24:::0;;;3258:29:::1;::::0;6116:25:84;;;3258:29:31::1;::::0;6089:18:84;3258:29:31::1;5970:177:84::0;2531:111:29;2582:22;2620:17;:8;:15;:17::i;999:203:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;762:202::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;3973:182:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4066:15:31::1;:34:::0;;;4111:39:::1;::::0;6116:25:84;;;4111:39:31::1;::::0;6104:2:84;6089:18;4111:39:31::1;5970:177:84::0;2960:140:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3039:8:31::1;:20:::0;;;3070:25:::1;::::0;6116::84;;;3070::31::1;::::0;6104:2:84;6089:18;3070:25:31::1;5970:177:84::0;2286:230:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2379:28:31;::::1;2375:54;;2416:13;;-1:-1:-1::0;;;2416:13:31::1;;;;;;;;;;;2375:54;2435:13;:30:::0;;-1:-1:-1;;;;;;2435:30:31::1;-1:-1:-1::0;;;;;2435:30:31;::::1;;::::0;;2476:35:::1;::::0;::::1;::::0;::::1;::::0;2435:30;;2476:35:::1;:::i;3666:267::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1341:6:31::1;3765:17;:43;3761:73;;;3817:17;;-1:-1:-1::0;;;3817:17:31::1;;;;;;;;;;;3761:73;3840:16;:36:::0;;;3887:41:::1;::::0;6116:25:84;;;3887:41:31::1;::::0;6104:2:84;6089:18;3887:41:31::1;5970:177:84::0;1855:695:34;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;-1:-1:-1;;;;;1012:14:38;;::::1;::::0;;:8:::1;:14;::::0;;;;;;;;::::1;998:10;:28;994:55;;1035:14;;-1:-1:-1::0;;;1035:14:38::1;;;;;;;;;;;994:55;-1:-1:-1::0;;;;;2057:28:34;;::::2;;::::0;;;:22:::2;:28;::::0;;;;;;;:36;;::::2;::::0;;;;;;;:64:::2;::::0;780:9:::2;::::0;2057:64:::2;:::i;:::-;2038:15;:83;2034:119;;2130:23;;-1:-1:-1::0;;;2130:23:34::2;;;;;;;;;;;2034:119;-1:-1:-1::0;;;;;2163:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;:39;-1:-1:-1;2159:81:34::2;;;2211:29;;-1:-1:-1::0;;;2211:29:34::2;;;;;;;;;;;2159:81;-1:-1:-1::0;;;;;2250:14:34;::::2;;::::0;;;:8:::2;:14;::::0;;;;;::::2;;2246:40;;;2273:13;;-1:-1:-1::0;;;2273:13:34::2;;;;;;;;;;;2246:40;-1:-1:-1::0;;;;;2293:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;;:40;;2326:7;;2293:21;:40:::2;::::0;2326:7;;2293:40:::2;:::i;:::-;::::0;;;-1:-1:-1;2339:47:34::2;::::0;-1:-1:-1;;;;;;2339:27:34;::::2;2367:9:::0;2378:7;2339:27:::2;:47::i;:::-;-1:-1:-1::0;;;;;2397:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;2393:86:::2;;-1:-1:-1::0;;;;;2441:16:34;::::2;;::::0;;;:10:::2;:16;::::0;;;;:31:::2;::::0;2465:6;2441:23:::2;:31::i;:::-;;2393:86;2526:9;-1:-1:-1::0;;;;;2490:55:34::2;2518:6;-1:-1:-1::0;;;;;2490:55:34::2;2512:4;-1:-1:-1::0;;;;;2490:55:34::2;;2537:7;2490:55;;;;6116:25:84::0;;6104:2;6089:18;;5970:177;2490:55:34::2;;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;;1855:695:34:o;594:99:58:-;-1:-1:-1;;;;;660:16:58;;;;;;:10;:16;;;;;:28;;681:6;660:20;:28::i;:::-;;594:99;;:::o;3332:188:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3427:16:31::1;:36:::0;;;3474:41:::1;::::0;6116:25:84;;;3474:41:31::1;::::0;6104:2:84;6089:18;3474:41:31::1;5970:177:84::0;2051:195:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2134:23:31;::::1;2130:49;;2166:13;;-1:-1:-1::0;;;2166:13:31::1;;;;;;;;;;;2130:49;2185:8;:20:::0;;-1:-1:-1;;;;;;2185:20:31::1;-1:-1:-1::0;;;;;2185:20:31;::::1;;::::0;;2216:25:::1;::::0;::::1;::::0;::::1;::::0;2185:20;;2216:25:::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;474:116:58:-:0;538:15;:5;548:4;538:9;:15::i;:::-;-1:-1:-1;;;;;;559:14:58;;;;;;;:8;:14;;;;;:26;;-1:-1:-1;;;;;;559:26:58;;;;;;;;474:116::o;8100:165:8:-;-1:-1:-1;;;;;8233:23:8;;8180:4;3767:19;;;:12;;;:19;;;;;;:24;;8203:55;3671:127;8100:165;;;;;:::o;845:241:4:-;1010:68;;-1:-1:-1;;;;;2790:15:84;;;1010:68:4;;;2772:34:84;2842:15;;2822:18;;;2815:43;2874:18;;;2867:34;;;983:96:4;;1003:5;;-1:-1:-1;;;1033:27:4;2707:18:84;;1010:68:4;;;;-1:-1:-1;;1010:68:4;;;;;;;;;;;;;;-1:-1:-1;;;;;1010:68:4;-1:-1:-1;;;;;;1010:68:4;;;;;;;;;;983:19;:96::i;:::-;845:241;;;;:::o;634:205::-;773:58;;-1:-1:-1;;;;;3104:32:84;;773:58:4;;;3086:51:84;3153:18;;;3146:34;;;746:86:4;;766:5;;-1:-1:-1;;;796:23:4;3059:18:84;;773:58:4;2912:274:84;7545:150:8;7615:4;7638:50;7643:3;-1:-1:-1;;;;;7663:23:8;;7638:4;:50::i;9499:257::-;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;7863:156::-;7936:4;7959:53;7967:3;-1:-1:-1;;;;;7987:23:8;;7959:7;:53::i;3140:706:4:-;3559:23;3585:69;3613:4;3585:69;;;;;;;;;;;;;;;;;3593:5;-1:-1:-1;;;;;3585:27:4;;;:69;;;;;:::i;:::-;3668:17;;3559:95;;-1:-1:-1;3668:21:4;3664:176;;3763:10;3752:30;;;;;;;;;;;;:::i;:::-;3744:85;;;;-1:-1:-1;;;3744:85:4;;5401:2:84;3744:85:4;;;5383:21:84;5440:2;5420:18;;;5413:30;5479:34;5459:18;;;5452:62;-1:-1:-1;;;5530:18:84;;;5523:40;5580:19;;3744:85:4;5199:406:84;1630:404:8;1693:4;3767:19;;;:12;;;:19;;;;;;1709:319;;-1:-1:-1;1751:23:8;;;;;;;;:11;:23;;;;;;;;;;;;;1931:18;;1909:19;;;:12;;;:19;;;;;;:40;;;;1963:11;;1709:319;-1:-1:-1;2012:5:8;2005:12;;4986:109;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;2202:1388::-;2268:4;2405:19;;;:12;;;:19;;;;;;2439:15;;2435:1149;;2808:21;2832:14;2845:1;2832:10;:14;:::i;:::-;2880:18;;2808:38;;-1:-1:-1;2860:17:8;;2880:22;;2901:1;;2880:22;:::i;:::-;2860:42;;2934:13;2921:9;:26;2917:398;;2967:17;2987:3;:11;;2999:9;2987:22;;;;;;;;:::i;:::-;;;;;;;;;2967:42;;3138:9;3109:3;:11;;3121:13;3109:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3221:23;;;:12;;;:23;;;;;:36;;;2917:398;3393:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3485:3;:12;;:19;3498:5;3485:19;;;;;;;;;;;3478:26;;;3526:4;3519:11;;;;;;;2435:1149;3568:5;3561:12;;;;;3461:223:5;3594:12;3625:52;3647:6;3655:4;3661:1;3664:12;3625:21;:52::i;:::-;3618:59;3461:223;-1:-1:-1;;;;3461:223:5:o;4548:499::-;4713:12;4770:5;4745:21;:30;;4737:81;;;;-1:-1:-1;;;4737:81:5;;4636:2:84;4737:81:5;;;4618:21:84;4675:2;4655:18;;;4648:30;4714:34;4694:18;;;4687:62;-1:-1:-1;;;4765:18:84;;;4758:36;4811:19;;4737:81:5;4434:402:84;4737:81:5;1034:20;;4828:60;;;;-1:-1:-1;;;4828:60:5;;5043:2:84;4828:60:5;;;5025:21:84;5082:2;5062:18;;;5055:30;5121:31;5101:18;;;5094:59;5170:18;;4828:60:5;4841:353:84;4828:60:5;4900:12;4914:23;4941:6;-1:-1:-1;;;;;4941:11:5;4960:5;4967:4;4941:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4899:73;;;;4989:51;5006:7;5015:10;5027:12;4989:16;:51::i;:::-;4982:58;4548:499;-1:-1:-1;;;;;;;4548:499:5:o;7161:692::-;7307:12;7335:7;7331:516;;;-1:-1:-1;7365:10:5;7358:17;;7331:516;7476:17;;:21;7472:365;;7670:10;7664:17;7730:15;7717:10;7713:2;7709:19;7702:44;7472:365;7809:12;7802:20;;-1:-1:-1;;;7802:20:5;;;;;;;;:::i;14:173:84:-;82:20;;-1:-1:-1;;;;;131:31:84;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:403::-;1067:6;1075;1083;1091;1144:3;1132:9;1123:7;1119:23;1115:33;1112:53;;;1161:1;1158;1151:12;1112:53;1184:29;1203:9;1184:29;:::i;:::-;1174:39;;1232:38;1266:2;1255:9;1251:18;1232:38;:::i;:::-;1222:48;;1317:2;1306:9;1302:18;1289:32;1279:42;;1340:38;1374:2;1363:9;1359:18;1340:38;:::i;:::-;1330:48;;981:403;;;;;;;:::o;1389:277::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1557:9;1551:16;1610:5;1603:13;1596:21;1589:5;1586:32;1576:60;;1632:1;1629;1622:12;1671:180;1730:6;1783:2;1771:9;1762:7;1758:23;1754:32;1751:52;;;1799:1;1796;1789:12;1751:52;-1:-1:-1;1822:23:84;;1671:180;-1:-1:-1;1671:180:84:o;1856:184::-;1926:6;1979:2;1967:9;1958:7;1954:23;1950:32;1947:52;;;1995:1;1992;1985:12;1947:52;-1:-1:-1;2018:16:84;;1856:184;-1:-1:-1;1856:184:84:o;2045:274::-;2174:3;2212:6;2206:13;2228:53;2274:6;2269:3;2262:4;2254:6;2250:17;2228:53;:::i;:::-;2297:16;;;;;2045:274;-1:-1:-1;;2045:274:84:o;2324:203::-;-1:-1:-1;;;;;2488:32:84;;;;2470:51;;2458:2;2443:18;;2324:203::o;3191:658::-;3362:2;3414:21;;;3484:13;;3387:18;;;3506:22;;;3333:4;;3362:2;3585:15;;;;3559:2;3544:18;;;3333:4;3628:195;3642:6;3639:1;3636:13;3628:195;;;3707:13;;-1:-1:-1;;;;;3703:39:84;3691:52;;3798:15;;;;3763:12;;;;3739:1;3657:9;3628:195;;;-1:-1:-1;3840:3:84;;3191:658;-1:-1:-1;;;;;;3191:658:84:o;4046:383::-;4195:2;4184:9;4177:21;4158:4;4227:6;4221:13;4270:6;4265:2;4254:9;4250:18;4243:34;4286:66;4345:6;4340:2;4329:9;4325:18;4320:2;4312:6;4308:15;4286:66;:::i;:::-;4413:2;4392:15;-1:-1:-1;;4388:29:84;4373:45;;;;4420:2;4369:54;;4046:383;-1:-1:-1;;4046:383:84:o;5610:355::-;5812:2;5794:21;;;5851:2;5831:18;;;5824:30;5890:33;5885:2;5870:18;;5863:61;5956:2;5941:18;;5610:355::o;6152:128::-;6192:3;6223:1;6219:6;6216:1;6213:13;6210:39;;;6229:18;;:::i;:::-;-1:-1:-1;6265:9:84;;6152:128::o;6285:217::-;6325:1;6351;6341:132;;6395:10;6390:3;6386:20;6383:1;6376:31;6430:4;6427:1;6420:15;6458:4;6455:1;6448:15;6341:132;-1:-1:-1;6487:9:84;;6285:217::o;6507:168::-;6547:7;6613:1;6609;6605:6;6601:14;6598:1;6595:21;6590:1;6583:9;6576:17;6572:45;6569:71;;;6620:18;;:::i;:::-;-1:-1:-1;6660:9:84;;6507:168::o;6680:125::-;6720:4;6748:1;6745;6742:8;6739:34;;;6753:18;;:::i;:::-;-1:-1:-1;6790:9:84;;6680:125::o;6810:258::-;6882:1;6892:113;6906:6;6903:1;6900:13;6892:113;;;6982:11;;;6976:18;6963:11;;;6956:39;6928:2;6921:10;6892:113;;;7023:6;7020:1;7017:13;7014:48;;;-1:-1:-1;;7058:1:84;7040:16;;7033:27;6810:258::o;7073:127::-;7134:10;7129:3;7125:20;7122:1;7115:31;7165:4;7162:1;7155:15;7189:4;7186:1;7179:15;7205:127;7266:10;7261:3;7257:20;7254:1;7247:31;7297:4;7294:1;7287:15;7321:4;7318:1;7311:15;7337:127;7398:10;7393:3;7389:20;7386:1;7379:31;7429:4;7426:1;7419:15;7453:4;7450:1;7443:15"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1645000",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "52060",
                "acceptJobOwnership(address)": "55439",
                "addDisputer(address)": "30133",
                "addSlasher(address)": "30177",
                "addTokenCreditsToJob(address,address,uint256)": "infinite",
                "bondTime()": "2307",
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "changeJobOwnership(address,address)": "infinite",
                "disputers(address)": "2731",
                "disputes(address)": "2686",
                "fee()": "2372",
                "firstSeen(address)": "2640",
                "governance()": "2649",
                "hasBonded(address)": "2774",
                "inflationPeriod()": "2570",
                "isJobToken(address,address)": "infinite",
                "jobOwner(address)": "2803",
                "jobPendingOwner(address)": "2605",
                "jobTokenCredits(address,address)": "infinite",
                "jobTokenCreditsAddedAt(address,address)": "infinite",
                "jobs()": "infinite",
                "keep3rHelper()": "2581",
                "keep3rV1()": "2495",
                "keep3rV1Proxy()": "2626",
                "keepers()": "infinite",
                "kp3rWethPool()": "2538",
                "liquidityMinimum()": "2329",
                "pendingBonds(address,address)": "infinite",
                "pendingGovernance()": "2603",
                "pendingUnbonds(address,address)": "infinite",
                "removeDisputer(address)": "30277",
                "removeSlasher(address)": "30190",
                "rewardPeriodTime()": "2439",
                "setBondTime(uint256)": "25762",
                "setFee(uint256)": "25652",
                "setGovernance(address)": "27948",
                "setInflationPeriod(uint256)": "25718",
                "setJob(address,address)": "infinite",
                "setJobToken(address,address)": "infinite",
                "setKeep3rHelper(address)": "27983",
                "setKeep3rV1(address)": "28026",
                "setKeep3rV1Proxy(address)": "28137",
                "setKp3rWethPool(address)": "infinite",
                "setLiquidityMinimum(uint256)": "25695",
                "setRewardPeriodTime(uint256)": "25589",
                "setUnbondTime(uint256)": "25803",
                "slashers(address)": "2774",
                "unbondTime()": "2373",
                "withdrawTokenCreditsFromJob(address,address,uint256,address)": "infinite",
                "workCompleted(address)": "2620"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "isJobToken(address,address)": "63f2e2f5",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityMinimum()": "633fb68f",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "rewardPeriodTime()": "768b5d90",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setJob(address,address)": "f4b5cd3b",
              "setJobToken(address,address)": "e01f857c",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "unbondTime()": "a7d2e784",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kph\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"isJobToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_contains\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_jobOwner\",\"type\":\"address\"}],\"name\":\"setJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"setJobToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol\":\"Keep3rJobFundableCreditsForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableCredits is IKeep3rJobFundableCredits, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice Cooldown between withdrawals\\n  uint256 internal constant _WITHDRAW_TOKENS_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  mapping(address => mapping(address => uint256)) public override jobTokenCreditsAddedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    // KP3R shouldn't be used for direct token payments\\n    if (_token == keep3rV1) revert TokenUnallowed();\\n    uint256 _before = IERC20(_token).balanceOf(address(this));\\n    IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\\n    uint256 _received = IERC20(_token).balanceOf(address(this)) - _before;\\n    uint256 _tokenFee = (_received * fee) / _BASE;\\n    jobTokenCredits[_job][_token] += _received - _tokenFee;\\n    jobTokenCreditsAddedAt[_job][_token] = block.timestamp;\\n    IERC20(_token).safeTransfer(governance, _tokenFee);\\n    _jobTokens[_job].add(_token);\\n\\n    emit TokenCreditAddition(_job, _token, msg.sender, _received);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external override nonReentrant onlyJobOwner(_job) {\\n    if (block.timestamp <= jobTokenCreditsAddedAt[_job][_token] + _WITHDRAW_TOKENS_COOLDOWN) revert JobTokenCreditsLocked();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientJobTokenCredits();\\n    if (disputes[_job]) revert JobDisputed();\\n\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_receiver, _amount);\\n\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit TokenCreditWithdrawal(_job, _token, _receiver, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0xb600d18903a008a1ca03743de7cef8330c2d5e66db52c900822551a4be75f7a5\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../contracts/peripherals/jobs/Keep3rJobFundableCredits.sol';\\n\\ncontract Keep3rJobFundableCreditsForTest is Keep3rJobFundableCredits {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  constructor(\\n    address _kph,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) Keep3rParameters(_kph, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\\n\\n  function setJob(address _job, address _jobOwner) external {\\n    _jobs.add(_job);\\n    jobOwner[_job] = _jobOwner;\\n  }\\n\\n  function setJobToken(address _job, address _token) external {\\n    _jobTokens[_job].add(_token);\\n  }\\n\\n  function isJobToken(address _job, address _token) external view returns (bool _contains) {\\n    _contains = _jobTokens[_job].contains(_token);\\n  }\\n}\\n\",\"keccak256\":\"0x352057ef887bcb3da079bb374b2e7238db77c301dea820021470fecb7e17a0f4\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6297,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                "label": "jobTokenCreditsAddedAt",
                "offset": 0,
                "slot": "37",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol:Keep3rJobFundableCreditsForTest",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol": {
        "Keep3rJobFundableLiquidityForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kph",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "internalJobLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "internalSettleJobAccountance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "setApprovedLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "setJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "setJobLiquidity",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "setRevokedLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "viewTickCache",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "viewTickOrder",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_liquidityCredits": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_periodCredits": "The credits the given job has at the current period"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_credits": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_10796": {
                  "entryPoint": null,
                  "id": 10796,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_18": {
                  "entryPoint": null,
                  "id": 18,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5689": {
                  "entryPoint": null,
                  "id": 5689,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 423,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory": {
                  "entryPoint": 452,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 545,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1152:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "328:332:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "375:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "384:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "387:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "377:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "377:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "377:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "349:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "358:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "345:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "345:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "370:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "341:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "341:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "338:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "400:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "440:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "410:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "410:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "400:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "459:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "503:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "514:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "499:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "499:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "469:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "469:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "459:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "527:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "571:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "582:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "567:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "567:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "537:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "537:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "527:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "595:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "639:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "650:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "635:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "635:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "605:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "605:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "595:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "270:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "281:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "293:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "301:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "309:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "317:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:464:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "743:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "789:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "798:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "801:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "791:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "791:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "791:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "764:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "773:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "760:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "760:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "785:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "756:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "756:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "753:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "814:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "833:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "827:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "827:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "818:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "896:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "905:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "908:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "898:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "898:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "898:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "865:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "886:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "879:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "879:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "872:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "872:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "862:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "855:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "855:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "852:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "921:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "931:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "921:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "709:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "720:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "732:6:84",
                            "type": ""
                          }
                        ],
                        "src": "665:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1048:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1058:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1070:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1081:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1066:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1066:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1058:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1100:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1115:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1131:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1136:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1127:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1127:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1140:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1123:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1123:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1111:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1111:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1093:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1093:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1093:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1017:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1028:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1039:4:84",
                            "type": ""
                          }
                        ],
                        "src": "947:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526203f480601f55621275006020556729a2241af62c000060215562069780602255622cd300602355601e6024553480156200003e57600080fd5b5060405162003b9b38038062003b9b8339810160408190526200006191620001c4565b6001600055838383833380806200008a5760405162b293ed60e81b815260040160405180910390fd5b601780546001600160a01b03199081166001600160a01b0393841617909155601d80548216888416178155601b80548316888516179055601c80548316878516179055601e8054831686851690811782556000818152600e602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200013557600080fd5b505afa1580156200014a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000170919062000221565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055506200024c95505050505050565b80516001600160a01b0381168114620001bf57600080fd5b919050565b60008060008060808587031215620001db57600080fd5b620001e685620001a7565b9350620001f660208601620001a7565b92506200020660408601620001a7565b91506200021660608601620001a7565b905092959194509250565b6000602082840312156200023457600080fd5b815180151581146200024557600080fd5b9392505050565b61393f806200025c6000396000f3fe608060405234801561001057600080fd5b50600436106103475760003560e01c80638bb6dfa8116101c0578063b87fcbff11610100578063b87fcbff14610849578063c7ae40d01461086c578063cacdf93d1461087f578063cb4be2bb14610892578063cb54694d146108a5578063cd22af1b146108b8578063ddca3f43146108e3578063deaf81d4146108ec578063e326ac43146108ff578063e485dc0e1461091f578063ebbb619414610932578063ec00cdfc14610945578063f0f346b914610958578063f11a1d1a1461096b578063f136a09d1461097e578063f39c38a01461099e578063fc253d2b146109b1578063fe75bc46146109ba57600080fd5b80638bb6dfa8146106c05780638cb22b76146106d35780638fe204dd146106f6578063951dc22c1461070957806398e90a0f146107115780639d5c33d81461073a578063a21458091461074d578063a39744b514610760578063a662031b1461078b578063a676f9ff1461079e578063a7d2e784146107be578063aac6aa9c146107c7578063ab033ea9146107da578063b0103b1a146107ed578063b239223314610810578063b600702a14610823578063b7e773401461083657600080fd5b806352a4de291161028b57806352a4de2914610578578063594a3a931461058b57806359a2255e1461059e5780635aa6e675146105b15780635ebe23f0146105c4578063633fb68f146105cd57806364bb43ee146105d657806368a9f19c146105e9578063694798e6146105fc57806369fe0e2d146106275780636cf262bc1461063a57806372da828a1461064d57806375a9f7ff14610660578063768b5d90146106735780637b40c9131461067c5780637c8fce231461068f578063878c723e1461069757600080fd5b8063034d4c611461034c57806307b435c2146103725780630c620bce1461039d5780630d6a1f87146103b25780631101eb41146103c557806315006b82146103da578063160e1e3114610405578063165e62e714610418578063168f92e7146104555780631b44555e146104805780631ef94b91146104a057806321040b01146104c0578063238efcbc146104eb578063274a8db4146104f3578063280b656c146105265780633e525d2014610539578063454c50311461054c575b600080fd5b61035f61035a366004613451565b6109cd565b6040519081526020015b60405180910390f35b61035f61038036600461348b565b601260209081526000928352604080842090915290825290205481565b6103a5610ad3565b6040516103699190613698565b61035f6103c0366004613550565b610ae4565b6103d86103d336600461350f565b610bea565b005b61035f6103e836600461348b565b601060209081526000928352604080842090915290825290205481565b6103d8610413366004613451565b610d44565b61042b610426366004613451565b610eaa565b604080518251600690810b825260208085015190910b908201529181015190820152606001610369565b61035f61046336600461348b565b600960209081526000928352604080842090915290825290205481565b61035f61048e366004613451565b60056020526000908152604090205481565b601b546104b3906001600160a01b031681565b6040516103699190613628565b61035f6104ce36600461348b565b601360209081526000928352604080842090915290825290205481565b6103d861125b565b610516610501366004613451565b601a6020526000908152604090205460ff1681565b6040519015158152602001610369565b6103d8610534366004613451565b6112e7565b6103d8610547366004613451565b6112f6565b61051661055a366004613451565b6001600160a01b03166000908152600f602052604090205460ff1690565b6103d861058636600461350f565b611302565b6103d861059936600461348b565b611550565b6103d86105ac366004613451565b6115f5565b6017546104b3906001600160a01b031681565b61035f601f5481565b61035f60215481565b6103d86105e4366004613451565b6116a7565b6103d86105f7366004613451565b611729565b61035f61060a36600461348b565b602760209081526000928352604080842090915290825290205481565b6103d86106353660046135da565b6117e1565b61035f610648366004613451565b611841565b6103d861065b366004613451565b611977565b6103a561066e366004613451565b611a14565b61035f60225481565b601e546104b3906001600160a01b031681565b6103a5611a38565b6104b36106a5366004613451565b6001602052600090815260409020546001600160a01b031681565b61035f6106ce366004613451565b611a44565b6105166106e1366004613451565b60146020526000908152604090205460ff1681565b6103d86107043660046135da565b611ae7565b6103a5611b45565b6104b361071f366004613451565b6002602052600090815260409020546001600160a01b031681565b6103d8610748366004613451565b611b51565b6103d861075b3660046134c4565b611c09565b61035f61076e36600461348b565b600860209081526000928352604080842090915290825290205481565b6103d8610799366004613451565b611dd9565b61035f6107ac366004613451565b60286020526000908152604090205481565b61035f60205481565b6103d86107d5366004613451565b611de4565b6103d86107e8366004613451565b611e98565b6105166107fb366004613451565b60076020526000908152604090205460ff1681565b6103d861081e3660046135da565b611f0e565b6103d8610831366004613451565b611f6e565b6103d86108443660046135da565b612193565b610516610857366004613451565b60196020526000908152604090205460ff1681565b601c546104b3906001600160a01b031681565b61051661088d36600461348b565b6121f3565b6103d86108a0366004613451565b61221c565b6103d86108b33660046135da565b6122b9565b61035f6108c636600461348b565b601160209081526000928352604080842090915290825290205481565b61035f60245481565b6103d86108fa366004613451565b61233d565b61035f61090d366004613451565b60066020526000908152604090205481565b61042b61092d366004613451565b612348565b6103d86109403660046135da565b6123a4565b6103d8610953366004613451565b612404565b6103d8610966366004613451565b6124a1565b601d546104b3906001600160a01b031681565b61035f61098c366004613451565b60296020526000908152604090205481565b6018546104b3906001600160a01b031681565b61035f60235481565b6103d86109c8366004613550565b612555565b6000806109d983611841565b60225490915042906109f4906109ef9083613803565b612645565b6001600160a01b0385166000908152602860205260409020541115610a98576022546001600160a01b038516600090815260286020526040902054610a399042613803565b10610a75576022546001600160a01b038516600090815260286020526040902054610a649190613768565b610a6e9082613803565b9050610aae565b6001600160a01b038416600090815260286020526040902054610a6e9082613803565b610aa142612645565b610aab9082613803565b90505b610ab8818361265f565b610ac185611a44565b610acb9190613768565b949350505050565b6060610adf6025612689565b905090565b6000610af1602584612696565b15610be4576000610b0184610eaa565b90508060400151600014610be2576001600160a01b0384166000908152600f602052604081205460ff16610b42578160200151610b3d90613875565b610b48565b81602001515b601d5460225460405163a0d2710760e01b8152929350610bd9926001600160a01b039092169163a0d2710791610b84918991879160040161374f565b60206040518083038186803b158015610b9c57600080fd5b505afa158015610bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd491906135f3565b6126b8565b92505050610be4565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610c2657604051636efb4f4160e11b815260040160405180910390fd5b602054610c339042613768565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610c82908490613768565b90915550610c9390508484846126c9565b6001600160a01b038085166000908152602760209081526040808320938716835292905220548015801590610cd25750602154610cd082866128d7565b105b15610cf057604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de85604051610d3591815260200190565b60405180910390a35050505050565b6017546001600160a01b03163314610d6f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610d965760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b90610df7908490600401613628565b60206040518083038186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e47919061357c565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa90610e9f908390613628565b60405180910390a150565b610eb261340f565b610ebb42612645565b6001600160a01b0383166000908152602a60205260409020600101541415610f3157506001600160a01b03166000908152602a602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b600080610f45602254426109ef9190613803565b6001600160a01b0385166000908152602a60205260409020600101549091508114156110a957604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602a602052604090205490915060060b610fb242612645565b610fbc9042613803565b82600081518110610fcf57610fcf6138de565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d919261102b929190911690869060040161363c565b60606040518083038186803b15801561104357600080fd5b505afa158015611057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107b9190613597565b600692830b90920b808852919550611095918391506137b3565b600690810b900b6020860152506112329050565b6001600160a01b0384166000908152602a6020526040902060010154811115611232576040805160028082526060820183526000926020830190803683370190505090506110f642612645565b6111009042613803565b81600081518110611113576111136138de565b602002602001019063ffffffff16908163ffffffff168152505060225461113942612645565b6111439042613803565b61114d9190613768565b81600181518110611160576111606138de565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d91926111b8921690869060040161363c565b60606040518083038186803b1580156111d057600080fd5b505afa1580156111e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112089190613597565b600692830b90920b80885291955091506112239082906137b3565b600690810b900b602086015250505b811561124b5761124142612645565b6040840152611253565b600060408401525b50505b919050565b6018546001600160a01b0316331461128657604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916112dd91613628565b60405180910390a1565b6112f26025826129f5565b5050565b6112ff81612a0a565b50565b6002600054141561132e5760405162461bcd60e51b815260040161132590613718565b60405180910390fd5b600260005561133e602583612696565b61135b5760405163e0b6aead60e01b815260040160405180910390fd5b611366601584612696565b61138357604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d602052604090206113a590836129f5565b506113af83612a0a565b6021546001600160a01b038085166000908152602760209081526040808320938716835292905220546113ed906113e7908490613768565b846128d7565b101561140c57604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260286020908152604080832054600a835281842054600b845293829020548251918252928101939093528201527fee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c38209060600160405180910390a261148a6001600160a01b038316333084612a68565b6001600160a01b038084166000908152602760209081526040808320938616835292905290812080548392906114c1908490613768565b909155506114d49050610bd482846128d7565b6001600160a01b0384166000908152600b6020526040812080549091906114fc908490613768565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b6001600160a01b03828116600090815260016020526040902054839116331461158c57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526002602052604090205482911633146116315760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b6017546001600160a01b031633146116d2576040516354348f0360e01b815260040160405180910390fd5b6116dd602582612ad9565b6116fa57604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e5681604051610e9f9190613628565b6017546001600160a01b03163314611754576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff161561178e5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b90610e9f908390613628565b6017546001600160a01b0316331461180c576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001610e9f565b6000805b6001600160a01b0383166000908152600d6020526040902061186690612aee565b811015611971576001600160a01b0383166000908152600d6020526040812061188f9083612af8565b905061189c602582612696565b1561195e5760006118ac82610eaa565b9050806040015160001461195c576001600160a01b0382166000908152600f602052604081205460ff166118ed5781602001516118e890613875565b6118f3565b81602001515b601d546001600160a01b03888116600090815260276020908152604080832089851684529091529081902054602254915163a0d2710760e01b815294955061194e94929093169263a0d2710792610b8492879160040161374f565b6119589086613768565b9450505b505b508061196981613846565b915050611845565b50919050565b6017546001600160a01b031633146119a2576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166119c95760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090610e9f908390613628565b6001600160a01b0381166000908152600d60205260409020606090610be490612689565b6060610adf6015612689565b600080611a5083611841565b6022546001600160a01b03851660009081526028602052604090205491925090611a7a9042613803565b1015610be45760008111611aa6576001600160a01b0383166000908152600a6020526040902054611ae0565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054611ad6908390613794565b611ae09190613780565b9150611971565b6017546001600160a01b03163314611b12576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29101610e9f565b6060610adf6003612689565b6017546001600160a01b03163314611b7c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1615611bb65760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f90610e9f908390613628565b6001600160a01b038381166000908152600160205260409020548491163314611c4557604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038216611c6c5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260136020908152604080832093871683529290522054611caf5760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211611cf4576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615611d2e576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590611d7b908483612b04565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051611dca91815260200190565b60405180910390a45050505050565b6112f26015826129f5565b6017546001600160a01b03163314611e0f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16611e48576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d02590610e9f908390613628565b6017546001600160a01b03163314611ec3576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610e9f908390613628565b6017546001600160a01b03163314611f39576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001610e9f565b6017546001600160a01b03163314611f99576040516354348f0360e01b815260040160405180910390fd5b611fa46025826129f5565b611fc15760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ffa57600080fd5b505afa15801561200e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612032919061346e565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b916120869190600401613628565b60206040518083038186803b15801561209e57600080fd5b505afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d6919061357c565b6001600160a01b0382166000908152600f60205260409020805460ff191691151591909117905561210681610eaa565b6001600160a01b0382166000908152602a60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b90610e9f908390613628565b6017546001600160a01b031633146121be576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001610e9f565b6001600160a01b0382166000908152600d6020526040812061221590836129f5565b9392505050565b6017546001600160a01b03163314612247576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811661226e5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090610e9f908390613628565b6017546001600160a01b031633146122e4576040516354348f0360e01b815260040160405180910390fd5b6201518081101561230857604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001610e9f565b6112f2602582612ad9565b61235061340f565b506001600160a01b03166000908152602a602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b6017546001600160a01b031633146123cf576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e790602001610e9f565b6017546001600160a01b0316331461242f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166124565760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90610e9f908390613628565b6017546001600160a01b031633146124cc576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661250557604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e90610e9f908390613628565b6017546001600160a01b03163314612580576040516354348f0360e01b815260040160405180910390fd5b61258b601583612696565b6125a857604051636211d34960e01b815260040160405180910390fd5b6125b182612a0a565b6001600160a01b0382166000908152600a6020526040812080548392906125d9908490613768565b90915550506001600160a01b038216600081815260286020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d192612639928252602082015260400190565b60405180910390a25050565b6000602254826126559190613861565b610be49083613803565b6000602254831015611971576022546126788385613794565b6126829190613780565b9050610be4565b6060600061221583612b39565b6001600160a01b03811660009081526001830160205260408120541515612215565b6000610be482602254602354612b95565b600260005414156126ec5760405162461bcd60e51b815260040161132590613718565b600260009081556001600160a01b0384168152600d602052604090206127129083612696565b61272e576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602760209081526040808320938616835292905220548111156127745760405163435b562560e01b815260040160405180910390fd5b61277d83612c43565b600061278c610bd483856128d7565b6001600160a01b0385166000908152600b602052604090205490915015612842576001600160a01b0384166000908152600b6020908152604080832054600a909252909120546127dd908390613794565b6127e79190613780565b6001600160a01b0385166000908152600a60205260408120805490919061280f908490613803565b90915550506001600160a01b0384166000908152600b60205260408120805483929061283c908490613803565b90915550505b6001600160a01b03808516600090815260276020908152604080832093871683529290529081208054849290612879908490613803565b90915550506001600160a01b038085166000908152602760209081526040808320938716835292905220546128cc576001600160a01b0384166000908152600d602052604090206128ca9084612ad9565b505b505060016000555050565b6001600160a01b0381166000908152602a602052604081206001015415610be4576001600160a01b0382166000908152600f602052604081205460ff16612949576001600160a01b0383166000908152602a602052604090205461294490600160381b900460060b613875565b61296d565b6001600160a01b0383166000908152602a6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d27107916129a5918891869160040161374f565b60206040518083038186803b1580156129bd57600080fd5b505afa1580156129d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acb91906135f3565b6000612215836001600160a01b038416612c68565b612a1381612cb7565b50612a1d81612e8d565b6001600160a01b0381166000908152600a6020908152604080832054600b90925290912054612a4c9190612f1b565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b0380851660248301528316604482015260648101829052612ad39085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f31565b50505050565b6000612215836001600160a01b038416613003565b6000610be4825490565b600061221583836130f6565b6040516001600160a01b038316602482015260448101829052612b3490849063a9059cbb60e01b90606401612a9c565b505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015612b8957602002820191906000526020600020905b815481526020019060010190808311612b75575b50505050509050919050565b600080806000198587098587029250828110838203039150508060001415612bcf5760008411612bc457600080fd5b508290049050612215565b808411612bdb57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b612c4c81613120565b6001600160a01b039091166000908152600b6020526040902055565b6000818152600183016020526040812054612caf57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610be4565b506000610be4565b6000612cc242612645565b6001600160a01b038316600090815260286020526040902054101561125657612cf2602254426109ef9190613803565b6001600160a01b03831660009081526028602052604090205411612d6857612d1982612c43565b6001600160a01b0382166000908152600b6020908152604080832054600a90925290912055612d4742612645565b6001600160a01b038316600090815260286020526040902055506001919050565b6022546001600160a01b038316600090815260286020526040902054612d8e9042613803565b10612dea57612d9c82612c43565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460289092528220805491929091612ddb908490613768565b90915550600191506112569050565b612df342612645565b6001600160a01b0383166000908152602960205260409020541015611256576001600160a01b0382166000908152600b6020526040902054612e3483612c43565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291612e6491613794565b612e6e9190613780565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260286020526040902054612ed290612eb49042613803565b6001600160a01b0383166000908152600b602052604090205461265f565b6001600160a01b0382166000908152600a602052604081208054909190612efa908490613768565b90915550506001600160a01b03166000908152602860205260409020429055565b6000818310612f2a5781612215565b5090919050565b6000612f86826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166133049092919063ffffffff16565b805190915015612b345780806020019051810190612fa4919061357c565b612b345760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611325565b600081815260018301602052604081205480156130ec576000613027600183613803565b855490915060009061303b90600190613803565b90508181146130a057600086600001828154811061305b5761305b6138de565b906000526020600020015490508087600001848154811061307e5761307e6138de565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806130b1576130b16138c8565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610be4565b6000915050610be4565b600082600001828154811061310d5761310d6138de565b9060005260206000200154905092915050565b600061312b42612645565b601e546001600160a01b03166000908152602a6020526040902060010154146131c257601e54613163906001600160a01b0316610eaa565b601e546001600160a01b03166000908152602a60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d602052604090206131e690612aee565b811015611971576001600160a01b0383166000908152600d6020526040812061320f9083612af8565b905061321c602582612696565b156132f15761322a42612645565b6001600160a01b0382166000908152602a6020526040902060010154146132b05761325481610eaa565b6001600160a01b0382166000908152602a60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b038085166000908152602760209081526040808320938516835292905220546132e490610bd490836128d7565b6132ee9084613768565b92505b50806132fc81613846565b9150506131c5565b6060610acb848460008585843b61335d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611325565b600080866001600160a01b03168587604051613379919061360c565b60006040518083038185875af1925050503d80600081146133b6576040519150601f19603f3d011682016040523d82523d6000602084013e6133bb565b606091505b50915091506133cb8282866133d6565b979650505050505050565b606083156133e5575081612215565b8251156133f55782518084602001fd5b8160405162461bcd60e51b815260040161132591906136e5565b604080516060810182526000808252602082018190529181019190915290565b8051801515811461125657600080fd5b8051600681900b811461125657600080fd5b60006020828403121561346357600080fd5b8135612215816138f4565b60006020828403121561348057600080fd5b8151612215816138f4565b6000806040838503121561349e57600080fd5b82356134a9816138f4565b915060208301356134b9816138f4565b809150509250929050565b6000806000606084860312156134d957600080fd5b83356134e4816138f4565b925060208401356134f4816138f4565b91506040840135613504816138f4565b809150509250925092565b60008060006060848603121561352457600080fd5b833561352f816138f4565b9250602084013561353f816138f4565b929592945050506040919091013590565b6000806040838503121561356357600080fd5b823561356e816138f4565b946020939093013593505050565b60006020828403121561358e57600080fd5b6122158261342f565b6000806000606084860312156135ac57600080fd5b6135b58461343f565b92506135c36020850161343f565b91506135d16040850161342f565b90509250925092565b6000602082840312156135ec57600080fd5b5035919050565b60006020828403121561360557600080fd5b5051919050565b6000825161361e81846020870161381a565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b8181101561368b57845163ffffffff1683529383019391830191600101613669565b5090979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136d95783516001600160a01b0316835292840192918401916001016136b4565b50909695505050505050565b602081526000825180602084015261370481604085016020870161381a565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b6000821982111561377b5761377b61389c565b500190565b60008261378f5761378f6138b2565b500490565b60008160001904831182151516156137ae576137ae61389c565b500290565b60008160060b8360060b6000811281667fffffffffffff19018312811516156137de576137de61389c565b81667fffffffffffff0183138116156137f9576137f961389c565b5090039392505050565b6000828210156138155761381561389c565b500390565b60005b8381101561383557818101518382015260200161381d565b83811115612ad35750506000910152565b600060001982141561385a5761385a61389c565b5060010190565b600082613870576138706138b2565b500690565b60008160060b667fffffffffffff198114156138935761389361389c565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146112ff57600080fdfea264697066735822122052cd4071b868e9336807b54c1db8fd201ce3fd9aea78c61acba980ac545d7fd264736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x3F480 PUSH1 0x1F SSTORE PUSH3 0x127500 PUSH1 0x20 SSTORE PUSH8 0x29A2241AF62C0000 PUSH1 0x21 SSTORE PUSH3 0x69780 PUSH1 0x22 SSTORE PUSH3 0x2CD300 PUSH1 0x23 SSTORE PUSH1 0x1E PUSH1 0x24 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3B9B CODESIZE SUB DUP1 PUSH3 0x3B9B DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x61 SWAP2 PUSH3 0x1C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE DUP4 DUP4 DUP4 DUP4 CALLER DUP1 DUP1 PUSH3 0x8A JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1D DUP1 SLOAD DUP3 AND DUP9 DUP5 AND OR DUP2 SSTORE PUSH1 0x1B DUP1 SLOAD DUP4 AND DUP9 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1C DUP1 SLOAD DUP4 AND DUP8 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1E DUP1 SLOAD DUP4 AND DUP7 DUP6 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP6 AND SWAP1 SWAP2 OR SWAP1 SWAP4 SSTORE SWAP1 SLOAD SWAP1 SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x696A437B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x14A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x170 SWAP2 SWAP1 PUSH3 0x221 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x24C SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E6 DUP6 PUSH3 0x1A7 JUMP JUMPDEST SWAP4 POP PUSH3 0x1F6 PUSH1 0x20 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP3 POP PUSH3 0x206 PUSH1 0x40 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP2 POP PUSH3 0x216 PUSH1 0x60 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x393F DUP1 PUSH3 0x25C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x347 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8BB6DFA8 GT PUSH2 0x1C0 JUMPI DUP1 PUSH4 0xB87FCBFF GT PUSH2 0x100 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x849 JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x86C JUMPI DUP1 PUSH4 0xCACDF93D EQ PUSH2 0x87F JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x892 JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x8A5 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x8B8 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x8E3 JUMPI DUP1 PUSH4 0xDEAF81D4 EQ PUSH2 0x8EC JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x8FF JUMPI DUP1 PUSH4 0xE485DC0E EQ PUSH2 0x91F JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0x932 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0x945 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x958 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0x96B JUMPI DUP1 PUSH4 0xF136A09D EQ PUSH2 0x97E JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x99E JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0x9B1 JUMPI DUP1 PUSH4 0xFE75BC46 EQ PUSH2 0x9BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8BB6DFA8 EQ PUSH2 0x6C0 JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x6D3 JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x6F6 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x709 JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x711 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x73A JUMPI DUP1 PUSH4 0xA2145809 EQ PUSH2 0x74D JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x760 JUMPI DUP1 PUSH4 0xA662031B EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0xA676F9FF EQ PUSH2 0x79E JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x7BE JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x7C7 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x7DA JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x7ED JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x810 JUMPI DUP1 PUSH4 0xB600702A EQ PUSH2 0x823 JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x836 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A4DE29 GT PUSH2 0x28B JUMPI DUP1 PUSH4 0x52A4DE29 EQ PUSH2 0x578 JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x58B JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x59E JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x5B1 JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x5C4 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x5CD JUMPI DUP1 PUSH4 0x64BB43EE EQ PUSH2 0x5D6 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x5E9 JUMPI DUP1 PUSH4 0x694798E6 EQ PUSH2 0x5FC JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x627 JUMPI DUP1 PUSH4 0x6CF262BC EQ PUSH2 0x63A JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0x75A9F7FF EQ PUSH2 0x660 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x673 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x67C JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x68F JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x697 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34D4C61 EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x372 JUMPI DUP1 PUSH4 0xC620BCE EQ PUSH2 0x39D JUMPI DUP1 PUSH4 0xD6A1F87 EQ PUSH2 0x3B2 JUMPI DUP1 PUSH4 0x1101EB41 EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x405 JUMPI DUP1 PUSH4 0x165E62E7 EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x455 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x4A0 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x4C0 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x4EB JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x4F3 JUMPI DUP1 PUSH4 0x280B656C EQ PUSH2 0x526 JUMPI DUP1 PUSH4 0x3E525D20 EQ PUSH2 0x539 JUMPI DUP1 PUSH4 0x454C5031 EQ PUSH2 0x54C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x35F PUSH2 0x35A CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x9CD JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0x380 CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3A5 PUSH2 0xAD3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x369 SWAP2 SWAP1 PUSH2 0x3698 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x3C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3550 JUMP JUMPDEST PUSH2 0xAE4 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x3D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x350F JUMP JUMPDEST PUSH2 0xBEA JUMP JUMPDEST STOP JUMPDEST PUSH2 0x35F PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x413 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0xD44 JUMP JUMPDEST PUSH2 0x42B PUSH2 0x426 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0xEAA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND DUP3 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 SIGNEXTEND SWAP1 DUP3 ADD MSTORE SWAP2 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x369 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x463 CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x48E CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x4B3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x369 SWAP2 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x4CE CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x125B JUMP JUMPDEST PUSH2 0x516 PUSH2 0x501 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x369 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x534 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x12E7 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x547 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x12F6 JUMP JUMPDEST PUSH2 0x516 PUSH2 0x55A CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x586 CALLDATASIZE PUSH1 0x4 PUSH2 0x350F JUMP JUMPDEST PUSH2 0x1302 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x599 CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH2 0x1550 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x5AC CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x15F5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x4B3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x5E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x16A7 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x5F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1729 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x60A CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x635 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DA JUMP JUMPDEST PUSH2 0x17E1 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x648 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1841 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x65B CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1977 JUMP JUMPDEST PUSH2 0x3A5 PUSH2 0x66E CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1A14 JUMP JUMPDEST PUSH2 0x35F PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x4B3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3A5 PUSH2 0x1A38 JUMP JUMPDEST PUSH2 0x4B3 PUSH2 0x6A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x6CE CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1A44 JUMP JUMPDEST PUSH2 0x516 PUSH2 0x6E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x704 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DA JUMP JUMPDEST PUSH2 0x1AE7 JUMP JUMPDEST PUSH2 0x3A5 PUSH2 0x1B45 JUMP JUMPDEST PUSH2 0x4B3 PUSH2 0x71F CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x748 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1B51 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x75B CALLDATASIZE PUSH1 0x4 PUSH2 0x34C4 JUMP JUMPDEST PUSH2 0x1C09 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x76E CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x799 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1DD9 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x7AC CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x7D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1DE4 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x7E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1E98 JUMP JUMPDEST PUSH2 0x516 PUSH2 0x7FB CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x81E CALLDATASIZE PUSH1 0x4 PUSH2 0x35DA JUMP JUMPDEST PUSH2 0x1F0E JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x831 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1F6E JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x844 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DA JUMP JUMPDEST PUSH2 0x2193 JUMP JUMPDEST PUSH2 0x516 PUSH2 0x857 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x4B3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x516 PUSH2 0x88D CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH2 0x21F3 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x8A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x221C JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x8B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DA JUMP JUMPDEST PUSH2 0x22B9 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x8C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x8FA CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x233D JUMP JUMPDEST PUSH2 0x35F PUSH2 0x90D CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x42B PUSH2 0x92D CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x2348 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x940 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DA JUMP JUMPDEST PUSH2 0x23A4 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x953 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x2404 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x966 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x24A1 JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x4B3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x98C CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x4B3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x9C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3550 JUMP JUMPDEST PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x9D9 DUP4 PUSH2 0x1841 JUMP JUMPDEST PUSH1 0x22 SLOAD SWAP1 SWAP2 POP TIMESTAMP SWAP1 PUSH2 0x9F4 SWAP1 PUSH2 0x9EF SWAP1 DUP4 PUSH2 0x3803 JUMP JUMPDEST PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO PUSH2 0xA98 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA39 SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST LT PUSH2 0xA75 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA64 SWAP2 SWAP1 PUSH2 0x3768 JUMP JUMPDEST PUSH2 0xA6E SWAP1 DUP3 PUSH2 0x3803 JUMP JUMPDEST SWAP1 POP PUSH2 0xAAE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA6E SWAP1 DUP3 PUSH2 0x3803 JUMP JUMPDEST PUSH2 0xAA1 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH2 0xAAB SWAP1 DUP3 PUSH2 0x3803 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0xAB8 DUP2 DUP4 PUSH2 0x265F JUMP JUMPDEST PUSH2 0xAC1 DUP6 PUSH2 0x1A44 JUMP JUMPDEST PUSH2 0xACB SWAP2 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xADF PUSH1 0x25 PUSH2 0x2689 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAF1 PUSH1 0x25 DUP5 PUSH2 0x2696 JUMP JUMPDEST ISZERO PUSH2 0xBE4 JUMPI PUSH1 0x0 PUSH2 0xB01 DUP5 PUSH2 0xEAA JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0xBE2 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xB42 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xB3D SWAP1 PUSH2 0x3875 JUMP JUMPDEST PUSH2 0xB48 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH2 0xBD9 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0xB84 SWAP2 DUP10 SWAP2 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x374F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBB0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBD4 SWAP2 SWAP1 PUSH2 0x35F3 JUMP JUMPDEST PUSH2 0x26B8 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xBE4 JUMP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 SLOAD PUSH2 0xC33 SWAP1 TIMESTAMP PUSH2 0x3768 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0xC82 SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0xC93 SWAP1 POP DUP5 DUP5 DUP5 PUSH2 0x26C9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xCD2 JUMPI POP PUSH1 0x21 SLOAD PUSH2 0xCD0 DUP3 DUP7 PUSH2 0x28D7 JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0xCF0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE DUP6 PUSH1 0x40 MLOAD PUSH2 0xD35 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD6F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD96 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0xDF7 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE47 SWAP2 SWAP1 PUSH2 0x357C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xEB2 PUSH2 0x340F JUMP JUMPDEST PUSH2 0xEBB TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ ISZERO PUSH2 0xF31 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF45 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0x9EF SWAP2 SWAP1 PUSH2 0x3803 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 SWAP2 POP DUP2 EQ ISZERO PUSH2 0x10A9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x6 SIGNEXTEND PUSH2 0xFB2 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH2 0xFBC SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xFCF JUMPI PUSH2 0xFCF PUSH2 0x38DE JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD SWAP3 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP2 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x102B SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x363C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1043 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1057 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x107B SWAP2 SWAP1 PUSH2 0x3597 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP PUSH2 0x1095 SWAP2 DUP4 SWAP2 POP PUSH2 0x37B3 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP PUSH2 0x1232 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 GT ISZERO PUSH2 0x1232 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x10F6 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH2 0x1100 SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1113 JUMPI PUSH2 0x1113 PUSH2 0x38DE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x22 SLOAD PUSH2 0x1139 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH2 0x1143 SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST PUSH2 0x114D SWAP2 SWAP1 PUSH2 0x3768 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x1160 JUMPI PUSH2 0x1160 PUSH2 0x38DE JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP3 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x11B8 SWAP3 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x363C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1208 SWAP2 SWAP1 PUSH2 0x3597 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP SWAP2 POP PUSH2 0x1223 SWAP1 DUP3 SWAP1 PUSH2 0x37B3 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x124B JUMPI PUSH2 0x1241 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1253 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP5 ADD MSTORE JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1286 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x12DD SWAP2 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x12F2 PUSH1 0x25 DUP3 PUSH2 0x29F5 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x12FF DUP2 PUSH2 0x2A0A JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x132E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1325 SWAP1 PUSH2 0x3718 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x133E PUSH1 0x25 DUP4 PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x135B JUMPI PUSH1 0x40 MLOAD PUSH4 0xE0B6AEAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1366 PUSH1 0x15 DUP5 PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x1383 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x13A5 SWAP1 DUP4 PUSH2 0x29F5 JUMP JUMPDEST POP PUSH2 0x13AF DUP4 PUSH2 0x2A0A JUMP JUMPDEST PUSH1 0x21 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x13ED SWAP1 PUSH2 0x13E7 SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST DUP5 PUSH2 0x28D7 JUMP JUMPDEST LT ISZERO PUSH2 0x140C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB DUP5 MSTORE SWAP4 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE SWAP3 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP3 ADD MSTORE PUSH32 0xEE3F0DABA9837D1AB0597ACF34328550E4832D02E24E467825E7C2DD318C3820 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x148A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x2A68 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x14C1 SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x14D4 SWAP1 POP PUSH2 0xBD4 DUP3 DUP5 PUSH2 0x28D7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x14FC SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 SWAP1 DUP7 AND SWAP1 PUSH32 0x4E186BC75A2220191B826BAFF3EE63C3E970E94E58A9007FF94C9A7B8E6EBB3F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x158C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x1631 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x16D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x16DD PUSH1 0x25 DUP3 PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0x16FA JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8D08B1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x51199D699BDFD516FA88DD0D2F8487C40C147B4867ACAA23ADC8D4DF6B098E56 DUP2 PUSH1 0x40 MLOAD PUSH2 0xE9F SWAP2 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1754 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x178E JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x180C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1866 SWAP1 PUSH2 0x2AEE JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1971 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x188F SWAP1 DUP4 PUSH2 0x2AF8 JUMP JUMPDEST SWAP1 POP PUSH2 0x189C PUSH1 0x25 DUP3 PUSH2 0x2696 JUMP JUMPDEST ISZERO PUSH2 0x195E JUMPI PUSH1 0x0 PUSH2 0x18AC DUP3 PUSH2 0xEAA JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x195C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x18ED JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x18E8 SWAP1 PUSH2 0x3875 JUMP JUMPDEST PUSH2 0x18F3 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SLOAD PUSH1 0x22 SLOAD SWAP2 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH2 0x194E SWAP5 SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0xA0D27107 SWAP3 PUSH2 0xB84 SWAP3 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x374F JUMP JUMPDEST PUSH2 0x1958 SWAP1 DUP7 PUSH2 0x3768 JUMP JUMPDEST SWAP5 POP POP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x1969 DUP2 PUSH2 0x3846 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1845 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x19A2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x19C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 SWAP1 PUSH2 0xBE4 SWAP1 PUSH2 0x2689 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xADF PUSH1 0x15 PUSH2 0x2689 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1A50 DUP4 PUSH2 0x1841 JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1A7A SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST LT ISZERO PUSH2 0xBE4 JUMPI PUSH1 0x0 DUP2 GT PUSH2 0x1AA6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1AE0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x1AD6 SWAP1 DUP4 SWAP1 PUSH2 0x3794 JUMP JUMPDEST PUSH2 0x1AE0 SWAP2 SWAP1 PUSH2 0x3780 JUMP JUMPDEST SWAP2 POP PUSH2 0x1971 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1B12 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x60 PUSH2 0xADF PUSH1 0x3 PUSH2 0x2689 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1B7C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1BB6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x1C45 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1C6C JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1CAF JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x1CF4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1D2E JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x12 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE SWAP1 PUSH2 0x1D7B SWAP1 DUP5 DUP4 PUSH2 0x2B04 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFDB7893BF11F50C621E59CC7F1CF540E94295CB27CA869EC7ED7618CA7928862 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1DCA SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x12F2 PUSH1 0x15 DUP3 PUSH2 0x29F5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1E0F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1E48 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1EC3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1F39 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1F99 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1FA4 PUSH1 0x25 DUP3 PUSH2 0x29F5 JUMP JUMPDEST PUSH2 0x1FC1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF25E6B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x200E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2032 SWAP2 SWAP1 PUSH2 0x346E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 DUP4 AND SWAP4 DUP5 OR SWAP1 SSTORE PUSH1 0x1D SLOAD SWAP1 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0x696A437B SWAP2 PUSH2 0x2086 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x209E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20D6 SWAP2 SWAP1 PUSH2 0x357C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2106 DUP2 PUSH2 0xEAA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 DUP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xABFA8DB4D238FA78BF4E15FCC91328DD35F3978F200E2857A56BB719732B7B0B SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x21BE JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2215 SWAP1 DUP4 PUSH2 0x29F5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2247 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x226E JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x22E4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x2308 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0xE9F JUMP JUMPDEST PUSH2 0x12F2 PUSH1 0x25 DUP3 PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0x2350 PUSH2 0x340F JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x23CF JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x242F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2456 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x24CC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2505 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2580 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x258B PUSH1 0x15 DUP4 PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x25A8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x25B1 DUP3 PUSH2 0x2A0A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x25D9 SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x5ABCF5031FDBD3BADB9D1E09094208DE329AEE72730E87650F346584205D23D1 SWAP3 PUSH2 0x2639 SWAP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP3 PUSH2 0x2655 SWAP2 SWAP1 PUSH2 0x3861 JUMP JUMPDEST PUSH2 0xBE4 SWAP1 DUP4 PUSH2 0x3803 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP4 LT ISZERO PUSH2 0x1971 JUMPI PUSH1 0x22 SLOAD PUSH2 0x2678 DUP4 DUP6 PUSH2 0x3794 JUMP JUMPDEST PUSH2 0x2682 SWAP2 SWAP1 PUSH2 0x3780 JUMP JUMPDEST SWAP1 POP PUSH2 0xBE4 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2215 DUP4 PUSH2 0x2B39 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x2215 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBE4 DUP3 PUSH1 0x22 SLOAD PUSH1 0x23 SLOAD PUSH2 0x2B95 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x26EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1325 SWAP1 PUSH2 0x3718 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2712 SWAP1 DUP4 PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x272E JUMPI PUSH1 0x40 MLOAD PUSH3 0x41CFA5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x2774 JUMPI PUSH1 0x40 MLOAD PUSH4 0x435B5625 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x277D DUP4 PUSH2 0x2C43 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x278C PUSH2 0xBD4 DUP4 DUP6 PUSH2 0x28D7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x2842 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x27DD SWAP1 DUP4 SWAP1 PUSH2 0x3794 JUMP JUMPDEST PUSH2 0x27E7 SWAP2 SWAP1 PUSH2 0x3780 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x280F SWAP1 DUP5 SWAP1 PUSH2 0x3803 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x283C SWAP1 DUP5 SWAP1 PUSH2 0x3803 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x2879 SWAP1 DUP5 SWAP1 PUSH2 0x3803 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x28CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x28CA SWAP1 DUP5 PUSH2 0x2AD9 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0xBE4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2949 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2944 SWAP1 PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND PUSH2 0x3875 JUMP JUMPDEST PUSH2 0x296D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x29A5 SWAP2 DUP9 SWAP2 DUP7 SWAP2 PUSH1 0x4 ADD PUSH2 0x374F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x29BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x29D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xACB SWAP2 SWAP1 PUSH2 0x35F3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2215 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x2C68 JUMP JUMPDEST PUSH2 0x2A13 DUP2 PUSH2 0x2CB7 JUMP JUMPDEST POP PUSH2 0x2A1D DUP2 PUSH2 0x2E8D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x2A4C SWAP2 SWAP1 PUSH2 0x2F1B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2AD3 SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x2F31 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2215 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x3003 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBE4 DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2215 DUP4 DUP4 PUSH2 0x30F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2B34 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x2A9C JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2B89 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2B75 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x2BCF JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x2BC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x2215 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x2BDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x2C4C DUP2 PUSH2 0x3120 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x2CAF JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xBE4 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xBE4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CC2 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1256 JUMPI PUSH2 0x2CF2 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0x9EF SWAP2 SWAP1 PUSH2 0x3803 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT PUSH2 0x2D68 JUMPI PUSH2 0x2D19 DUP3 PUSH2 0x2C43 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x2D47 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2D8E SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST LT PUSH2 0x2DEA JUMPI PUSH2 0x2D9C DUP3 PUSH2 0x2C43 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SSTORE PUSH1 0x22 SLOAD PUSH1 0x28 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x2DDB SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x1 SWAP2 POP PUSH2 0x1256 SWAP1 POP JUMP JUMPDEST PUSH2 0x2DF3 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1256 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2E34 DUP4 PUSH2 0x2C43 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP3 SWAP2 PUSH2 0x2E64 SWAP2 PUSH2 0x3794 JUMP JUMPDEST PUSH2 0x2E6E SWAP2 SWAP1 PUSH2 0x3780 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2ED2 SWAP1 PUSH2 0x2EB4 SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x265F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x2EFA SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x2F2A JUMPI DUP2 PUSH2 0x2215 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F86 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3304 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x2B34 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2FA4 SWAP2 SWAP1 PUSH2 0x357C JUMP JUMPDEST PUSH2 0x2B34 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1325 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x30EC JUMPI PUSH1 0x0 PUSH2 0x3027 PUSH1 0x1 DUP4 PUSH2 0x3803 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x303B SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x3803 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x30A0 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x305B JUMPI PUSH2 0x305B PUSH2 0x38DE JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x307E JUMPI PUSH2 0x307E PUSH2 0x38DE JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x30B1 JUMPI PUSH2 0x30B1 PUSH2 0x38C8 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xBE4 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0xBE4 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x310D JUMPI PUSH2 0x310D PUSH2 0x38DE JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x312B TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x31C2 JUMPI PUSH1 0x1E SLOAD PUSH2 0x3163 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xEAA JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x31E6 SWAP1 PUSH2 0x2AEE JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1971 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x320F SWAP1 DUP4 PUSH2 0x2AF8 JUMP JUMPDEST SWAP1 POP PUSH2 0x321C PUSH1 0x25 DUP3 PUSH2 0x2696 JUMP JUMPDEST ISZERO PUSH2 0x32F1 JUMPI PUSH2 0x322A TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x32B0 JUMPI PUSH2 0x3254 DUP2 PUSH2 0xEAA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x32E4 SWAP1 PUSH2 0xBD4 SWAP1 DUP4 PUSH2 0x28D7 JUMP JUMPDEST PUSH2 0x32EE SWAP1 DUP5 PUSH2 0x3768 JUMP JUMPDEST SWAP3 POP JUMPDEST POP DUP1 PUSH2 0x32FC DUP2 PUSH2 0x3846 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x31C5 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xACB DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 DUP5 EXTCODESIZE PUSH2 0x335D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1325 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x3379 SWAP2 SWAP1 PUSH2 0x360C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x33B6 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x33BB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x33CB DUP3 DUP3 DUP7 PUSH2 0x33D6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x33E5 JUMPI POP DUP2 PUSH2 0x2215 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x33F5 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1325 SWAP2 SWAP1 PUSH2 0x36E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x6 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x1256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3463 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2215 DUP2 PUSH2 0x38F4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3480 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2215 DUP2 PUSH2 0x38F4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x349E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x34A9 DUP2 PUSH2 0x38F4 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x34B9 DUP2 PUSH2 0x38F4 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x34D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x34E4 DUP2 PUSH2 0x38F4 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x34F4 DUP2 PUSH2 0x38F4 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x3504 DUP2 PUSH2 0x38F4 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3524 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x352F DUP2 PUSH2 0x38F4 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x353F DUP2 PUSH2 0x38F4 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x356E DUP2 PUSH2 0x38F4 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x358E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2215 DUP3 PUSH2 0x342F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x35AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x35B5 DUP5 PUSH2 0x343F JUMP JUMPDEST SWAP3 POP PUSH2 0x35C3 PUSH1 0x20 DUP6 ADD PUSH2 0x343F JUMP JUMPDEST SWAP2 POP PUSH2 0x35D1 PUSH1 0x40 DUP6 ADD PUSH2 0x342F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x35EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3605 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x361E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x381A JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 DUP3 ADD SWAP2 SWAP1 PUSH1 0x60 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x368B JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3669 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x36D9 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x36B4 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x3704 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x381A JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x6 SWAP2 SWAP1 SWAP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x377B JUMPI PUSH2 0x377B PUSH2 0x389C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x378F JUMPI PUSH2 0x378F PUSH2 0x38B2 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x37AE JUMPI PUSH2 0x37AE PUSH2 0x389C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x37DE JUMPI PUSH2 0x37DE PUSH2 0x389C JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x37F9 JUMPI PUSH2 0x37F9 PUSH2 0x389C JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3815 JUMPI PUSH2 0x3815 PUSH2 0x389C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3835 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x381D JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2AD3 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x385A JUMPI PUSH2 0x385A PUSH2 0x389C JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3870 JUMPI PUSH2 0x3870 PUSH2 0x38B2 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x3893 JUMPI PUSH2 0x3893 PUSH2 0x389C JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x12FF JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE 0xCD BLOCKHASH PUSH18 0xB868E9336807B54C1DB8FD201CE3FD9AEA78 0xC6 BYTE 0xCB 0xA9 DUP1 0xAC SLOAD 0x5D PUSH32 0xD264736F6C634300080700330000000000000000000000000000000000000000 ",
              "sourceMap": "143:1276:59:-:0;;;702:6:31;667:41;;786:7;749:44;;877:7;834:50;;968:6;925:49;;1057:7;1015:49;;1135:2;1105:32;;273:203:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1637:1:0;1742:7;:22;402:4:59;408:9;419:14;435:13;462:10;;357:25:28;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;;;-1:-1:-1;;;;;422:24:28;;;;;;;1479:12:31;:28;;;;;;;;;;1513:8;:20;;;;;;;;;;1539:13;:30;;;;;;;;;;1575:12;:28;;;;;;;;;;;;-1:-1:-1;1609:28:31;;;:14;:28;;;;;;;:43;;;;;;;;;;;1703:12;;1730;;1689:54;;-1:-1:-1;;;1689:54:31;;1730:12;;;1689:54;;;1093:51:84;1703:12:31;;;;-1:-1:-1;1689:40:31;;1066:18:84;;1689:54:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1658:28:31;;;;;;;;:13;:28;;;;;:85;;-1:-1:-1;;1658:85:31;;;;;;;;;;-1:-1:-1;143:1276:59;;-1:-1:-1;;;;;;143:1276:59;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:464::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;469:49;514:2;503:9;499:18;469:49;:::i;:::-;459:59;;537:49;582:2;571:9;567:18;537:49;:::i;:::-;527:59;;605:49;650:2;639:9;635:18;605:49;:::i;:::-;595:59;;196:464;;;;;;;:::o;665:277::-;732:6;785:2;773:9;764:7;760:23;756:32;753:52;;;801:1;798;791:12;753:52;833:9;827:16;886:5;879:13;872:21;865:5;862:32;852:60;;908:1;905;898:12;852:60;931:5;665:277;-1:-1:-1;;;665:277:84:o;947:203::-;143:1276:59;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_add_1372": {
                  "entryPoint": 11368,
                  "id": 1372,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_at_1506": {
                  "entryPoint": 12534,
                  "id": 1506,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_calculateJobPeriodCredits_7702": {
                  "entryPoint": 12576,
                  "id": 7702,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_callOptionalReturn_911": {
                  "entryPoint": 12081,
                  "id": 911,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_contains_1475": {
                  "entryPoint": null,
                  "id": 1475,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_getReward_7863": {
                  "entryPoint": 9912,
                  "id": 7863,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_length_1489": {
                  "entryPoint": null,
                  "id": 1489,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_period_7847": {
                  "entryPoint": 9797,
                  "id": 7847,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_phase_7831": {
                  "entryPoint": 9823,
                  "id": 7831,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_quoteLiquidity_7909": {
                  "entryPoint": 10455,
                  "id": 7909,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_remove_1456": {
                  "entryPoint": 12291,
                  "id": 1456,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_rewardJobCredits_7597": {
                  "entryPoint": 11917,
                  "id": 7597,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_settleJobAccountance_7938": {
                  "entryPoint": 10762,
                  "id": 7938,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_unbondLiquidityFromJob_7802": {
                  "entryPoint": 9929,
                  "id": 7802,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_updateJobCreditsIfNeeded_7567": {
                  "entryPoint": 11447,
                  "id": 7567,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_updateJobPeriod_7612": {
                  "entryPoint": 11331,
                  "id": 7612,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_values_1520": {
                  "entryPoint": 11065,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 4699,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@acceptJobOwnership_8373": {
                  "entryPoint": 5621,
                  "id": 8373,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 6993,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addLiquidityToJob_7283": {
                  "entryPoint": 4866,
                  "id": 7283,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 5929,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@add_1658": {
                  "entryPoint": 10741,
                  "id": 1658,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@approveLiquidity_7148": {
                  "entryPoint": 8046,
                  "id": 7148,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@approvedLiquidities_6581": {
                  "entryPoint": 2771,
                  "id": 6581,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@at_1754": {
                  "entryPoint": 11000,
                  "id": 1754,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@bondTime_5611": {
                  "entryPoint": null,
                  "id": 5611,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@changeJobOwnership_8336": {
                  "entryPoint": 5456,
                  "id": 8336,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@contains_1712": {
                  "entryPoint": 9878,
                  "id": 1712,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_5636": {
                  "entryPoint": null,
                  "id": 5636,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@forceLiquidityCreditsToJob_7094": {
                  "entryPoint": 9557,
                  "id": 7094,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@functionCallWithValue_1073": {
                  "entryPoint": null,
                  "id": 1073,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@functionCall_1003": {
                  "entryPoint": 13060,
                  "id": 1003,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@inflationPeriod_5631": {
                  "entryPoint": null,
                  "id": 5631,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@internalJobLiquidities_10893": {
                  "entryPoint": 6676,
                  "id": 10893,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@internalSettleJobAccountance_10903": {
                  "entryPoint": 4854,
                  "id": 10903,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@isContract_932": {
                  "entryPoint": null,
                  "id": 932,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobLiquidityCredits_6715": {
                  "entryPoint": 6724,
                  "id": 6715,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobOwner_8303": {
                  "entryPoint": null,
                  "id": 8303,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPendingOwner_8309": {
                  "entryPoint": null,
                  "id": 8309,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPeriodCredits_6663": {
                  "entryPoint": 6209,
                  "id": 6663,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 6712,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keep3rHelper_5602": {
                  "entryPoint": null,
                  "id": 5602,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1Proxy_5598": {
                  "entryPoint": null,
                  "id": 5598,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1_5594": {
                  "entryPoint": null,
                  "id": 5594,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keepers_5506": {
                  "entryPoint": 6981,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@kp3rWethPool_5606": {
                  "entryPoint": null,
                  "id": 5606,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@length_1727": {
                  "entryPoint": 10990,
                  "id": 1727,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@liquidityAmount_6548": {
                  "entryPoint": null,
                  "id": 6548,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@liquidityMinimum_5621": {
                  "entryPoint": null,
                  "id": 5621,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@min_1270": {
                  "entryPoint": 12059,
                  "id": 1270,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@mulDiv_4263": {
                  "entryPoint": 11157,
                  "id": 4263,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@observeLiquidity_7053": {
                  "entryPoint": 3754,
                  "id": 7053,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@quoteLiquidity_6849": {
                  "entryPoint": 2788,
                  "id": 6849,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@removeDisputer_6072": {
                  "entryPoint": 9377,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 7652,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@remove_1685": {
                  "entryPoint": 10969,
                  "id": 1685,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@revokeLiquidity_7171": {
                  "entryPoint": 5799,
                  "id": 7171,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@rewardPeriodTime_5626": {
                  "entryPoint": null,
                  "id": 5626,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@rewardedAt_6554": {
                  "entryPoint": null,
                  "id": 6554,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@safeTransferFrom_745": {
                  "entryPoint": 10856,
                  "id": 745,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@safeTransfer_719": {
                  "entryPoint": 11012,
                  "id": 719,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@setApprovedLiquidity_10837": {
                  "entryPoint": 4839,
                  "id": 10837,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setBondTime_5836": {
                  "entryPoint": 8595,
                  "id": 5836,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setFee_5933": {
                  "entryPoint": 6113,
                  "id": 5933,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 7832,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setInflationPeriod_5915": {
                  "entryPoint": 7950,
                  "id": 5915,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setJobLiquidity_10825": {
                  "entryPoint": 8691,
                  "id": 10825,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@setJob_10808": {
                  "entryPoint": 7641,
                  "id": 10808,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rHelper_5717": {
                  "entryPoint": 6519,
                  "id": 5717,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1Proxy_5773": {
                  "entryPoint": 8732,
                  "id": 5773,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1_5745": {
                  "entryPoint": 9220,
                  "id": 5745,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_5818": {
                  "entryPoint": 3396,
                  "id": 5818,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setLiquidityMinimum_5872": {
                  "entryPoint": 9124,
                  "id": 5872,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRevokedLiquidity_10849": {
                  "entryPoint": 9021,
                  "id": 10849,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRewardPeriodTime_5897": {
                  "entryPoint": 8889,
                  "id": 5897,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setUnbondTime_5854": {
                  "entryPoint": 6887,
                  "id": 5854,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@totalJobCredits_6795": {
                  "entryPoint": 2509,
                  "id": 6795,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@unbondLiquidityFromJob_7351": {
                  "entryPoint": 3050,
                  "id": 7351,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@unbondTime_5616": {
                  "entryPoint": null,
                  "id": 5616,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 9865,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@verifyCallResult_1208": {
                  "entryPoint": 13270,
                  "id": 1208,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@viewTickCache_10864": {
                  "entryPoint": 9032,
                  "id": 10864,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@viewTickOrder_10876": {
                  "entryPoint": null,
                  "id": 10876,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@withdrawLiquidityFromJob_7443": {
                  "entryPoint": 7177,
                  "id": 7443,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@workedAt_6560": {
                  "entryPoint": null,
                  "id": 6560,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_bool_fromMemory": {
                  "entryPoint": 13359,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_int56_fromMemory": {
                  "entryPoint": 13375,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 13393,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 13422,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 13451,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_address": {
                  "entryPoint": 13508,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256": {
                  "entryPoint": 13583,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 13648,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 13692,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_int56t_int56t_bool_fromMemory": {
                  "entryPoint": 13719,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 13786,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256_fromMemory": {
                  "entryPoint": 13811,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 13836,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 13864,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 13884,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 13976,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 14053,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 14104,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed": {
                  "entryPoint": 14159,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 14184,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 14208,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 14228,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_int56": {
                  "entryPoint": 14259,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 14339,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 14362,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "increment_t_uint256": {
                  "entryPoint": 14406,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mod_t_uint256": {
                  "entryPoint": 14433,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "negate_t_int56": {
                  "entryPoint": 14453,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 14492,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x12": {
                  "entryPoint": 14514,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x31": {
                  "entryPoint": 14536,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x32": {
                  "entryPoint": 14558,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_address": {
                  "entryPoint": 14580,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:12123:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "71:107:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "81:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "96:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "90:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "90:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "81:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "156:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "165:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "168:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "158:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "158:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "158:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "146:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "139:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "139:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "132:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "132:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "122:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "122:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "115:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "115:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "112:60:84"
                            }
                          ]
                        },
                        "name": "abi_decode_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "50:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "61:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "241:106:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "251:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "266:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "260:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "260:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "251:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "325:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "334:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "337:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "327:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "327:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "327:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "295:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "313:1:84",
                                            "type": "",
                                            "value": "6"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "316:5:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "302:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "302:20:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "292:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "292:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "285:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "285:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "282:59:84"
                            }
                          ]
                        },
                        "name": "abi_decode_int56_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "220:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "231:5:84",
                            "type": ""
                          }
                        ],
                        "src": "183:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "422:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "468:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "477:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "480:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "470:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "470:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "470:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "443:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "452:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "439:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "439:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "464:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "435:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "435:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "432:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "493:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "519:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "506:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "506:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "497:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "563:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "538:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "538:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "538:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "578:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "588:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "578:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "388:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "399:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "411:6:84",
                            "type": ""
                          }
                        ],
                        "src": "352:247:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "685:170:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "731:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "740:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "743:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "733:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "733:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "733:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "706:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "715:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "702:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "702:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "727:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "698:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "698:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "695:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "756:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "775:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "769:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "769:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "760:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "819:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "794:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "794:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "794:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "834:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "844:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "834:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "651:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "662:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "674:6:84",
                            "type": ""
                          }
                        ],
                        "src": "604:251:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "947:301:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "993:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1002:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1005:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "995:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "995:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "995:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "968:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "977:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "964:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "964:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "989:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "960:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "960:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "957:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1018:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1044:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1031:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1031:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1022:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1088:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1063:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1063:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1063:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1103:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1113:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1103:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1127:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1159:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1170:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1155:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1155:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1142:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1142:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1131:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1208:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1183:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1183:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1183:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1225:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1235:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1225:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "905:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "916:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "928:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "936:6:84",
                            "type": ""
                          }
                        ],
                        "src": "860:388:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1357:425:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1403:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1412:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1415:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1405:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1405:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1405:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1378:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1387:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1374:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1374:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1399:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1370:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1370:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1367:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1428:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1454:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1441:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1441:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1432:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1498:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1473:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1473:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1473:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1513:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1523:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1513:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1537:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1569:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1580:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1565:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1565:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1552:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1552:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1541:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1618:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1593:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1593:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1593:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1635:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1645:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1635:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1661:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1693:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1704:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1689:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1689:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1676:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1676:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1665:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1742:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1717:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1717:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1717:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1759:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "1769:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1759:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1307:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1318:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1330:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1338:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1346:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1253:529:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1891:352:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1937:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1946:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1949:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1939:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1939:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1939:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1912:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1921:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1908:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1908:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1933:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1904:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1904:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1901:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1962:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1988:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1975:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1975:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1966:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2032:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2007:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2007:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2007:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2047:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2057:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2047:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2071:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2103:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2114:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2099:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2099:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2086:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2086:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2075:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2152:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2127:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2127:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2127:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2169:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "2179:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2169:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2195:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2222:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2233:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2218:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2218:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2205:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2205:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2195:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1841:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1852:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1864:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1872:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1880:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1787:456:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2335:228:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2381:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2390:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2393:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2383:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2383:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2383:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2356:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2365:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2352:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2352:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2377:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2348:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2348:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2345:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2406:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2432:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2419:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2419:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2410:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2476:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2451:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2451:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2451:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2491:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2501:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2491:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2515:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2542:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2553:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2538:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2538:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2525:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2525:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2515:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2293:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2304:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2316:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2324:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2248:315:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2646:124:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2692:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2701:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2704:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2694:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2694:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2694:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2667:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2676:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2663:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2663:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2688:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2659:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2659:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2656:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2717:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2754:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2727:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2727:37:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2717:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2612:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2623:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2635:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2568:202:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2883:256:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2929:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2938:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2941:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2931:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2931:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2931:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2904:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2913:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2900:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2900:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2925:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2896:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2896:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2893:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2954:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2992:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_int56_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2964:27:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2964:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2954:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3011:57:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3053:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3064:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3049:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3049:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_int56_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3021:27:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3021:47:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3011:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3077:56:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3118:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3129:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3114:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3114:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3087:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3087:46:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3077:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int56t_int56t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2833:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2844:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2856:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2864:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2872:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2775:364:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3214:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3260:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3269:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3272:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3262:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3262:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3262:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3235:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3244:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3231:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3231:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3256:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3227:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3227:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3224:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3285:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3308:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3295:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3295:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3285:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3180:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3191:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3203:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3144:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3410:103:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3456:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3465:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3468:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3458:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3458:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3458:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3431:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3440:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3427:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3427:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3452:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3423:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3423:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3420:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3481:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3497:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3491:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3491:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3481:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3376:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3387:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3399:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3329:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3655:137:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3665:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3685:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3679:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3679:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "3669:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "3727:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3735:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3723:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3723:17:84"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3742:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3747:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3701:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3701:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3701:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3763:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3774:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3779:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3770:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3770:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "3763:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "3631:3:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3636:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "3647:3:84",
                            "type": ""
                          }
                        ],
                        "src": "3518:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3898:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3908:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3920:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3931:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3916:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3916:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3908:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3950:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "3965:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3981:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3986:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "3977:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3977:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3990:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "3973:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3973:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "3961:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3961:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3943:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3943:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3943:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3867:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3878:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3889:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3797:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4162:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4172:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4184:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4195:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4180:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4180:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4172:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4207:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4225:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4230:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "4221:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4221:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4234:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "4217:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4217:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4211:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4252:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4267:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4275:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4263:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4263:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4245:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4245:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4245:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4299:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4310:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4295:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4295:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4319:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4327:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4315:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4315:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4288:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4288:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4288:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4351:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4362:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4347:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4347:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "4367:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4340:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4340:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4340:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4115:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4126:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4134:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4142:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4153:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4005:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4562:567:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4572:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4590:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4601:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4586:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4586:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4576:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4620:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4635:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4651:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4656:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "4647:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4647:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4660:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "4643:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4643:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4631:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4631:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4613:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4613:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4613:51:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4673:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4683:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4677:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4705:9:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4716:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4701:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4701:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4721:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4694:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4694:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4694:30:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4733:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "4744:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "4737:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4759:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4779:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4773:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4773:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "4763:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4802:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4810:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4795:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4795:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4795:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4826:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4837:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4848:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4833:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4833:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "4826:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4860:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4878:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4886:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4874:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4874:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "4864:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4898:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4907:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "4902:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4966:137:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "4987:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5002:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "4996:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4996:13:84"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5011:10:84",
                                              "type": "",
                                              "value": "0xffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "4992:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4992:30:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "4980:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4980:43:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4980:43:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5036:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "5047:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "5052:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5043:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5043:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5036:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5068:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "5082:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "5090:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5078:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5078:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5068:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "4928:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4931:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4925:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4925:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "4939:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4941:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "4950:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4953:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4946:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4946:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "4941:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "4921:3:84",
                                "statements": []
                              },
                              "src": "4917:186:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5112:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "5120:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5112:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4523:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4534:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4542:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4553:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4385:744:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5263:145:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5273:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5285:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5296:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5281:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5281:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5273:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5315:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5330:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5346:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5351:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "5342:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5342:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5355:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "5338:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5338:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5326:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5326:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5308:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5308:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5308:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5379:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5390:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5375:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5375:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5395:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5368:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5368:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5368:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5224:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5235:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5243:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5254:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5134:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5564:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5574:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5584:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5578:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5595:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5613:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5624:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5609:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5609:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5599:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5643:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5654:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5636:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5636:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5636:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5666:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "5677:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "5670:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5692:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5712:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5706:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5706:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "5696:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5735:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5743:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5728:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5728:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5728:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5759:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5770:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5781:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5766:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5766:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "5759:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5793:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5811:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5819:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5807:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5807:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "5797:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5831:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5840:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "5835:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5899:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "5920:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5935:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "5929:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "5929:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "5952:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "5957:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5948:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "5948:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "5961:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "5944:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "5944:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "5925:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5925:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5913:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5913:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5913:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5978:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "5989:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "5994:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5985:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5985:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5978:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6010:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "6024:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "6032:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6020:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6020:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6010:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "5861:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5864:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5858:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5858:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "5872:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5874:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "5883:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5886:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5879:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5879:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "5874:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "5854:3:84",
                                "statements": []
                              },
                              "src": "5850:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6054:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "6062:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6054:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5533:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5544:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5555:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5413:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6171:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6181:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6193:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6204:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6189:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6189:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6181:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6223:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "6248:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "6241:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6241:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "6234:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6234:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6216:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6216:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6216:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6140:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6151:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6162:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6076:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6389:262:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6406:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6417:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6399:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6399:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6399:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6429:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6449:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6443:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6443:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6433:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6476:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6487:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6472:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6472:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6492:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6465:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6465:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6465:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6534:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6542:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6530:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6530:15:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6551:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6562:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6547:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6547:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6567:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6508:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6508:66:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6508:66:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6583:62:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6599:9:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "6618:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6626:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "6614:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6614:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6635:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "6631:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6631:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "6610:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6610:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6595:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6595:45:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6642:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6591:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6591:54:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6583:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6358:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6369:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6380:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6268:383:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6830:228:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6847:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6858:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6840:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6840:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6840:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6881:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6892:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6877:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6877:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6897:2:84",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6870:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6870:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6870:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6920:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6931:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6916:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6916:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "6936:34:84",
                                    "type": "",
                                    "value": "Address: insufficient balance fo"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6909:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6909:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6909:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6991:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7002:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6987:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6987:18:84"
                                  },
                                  {
                                    "hexValue": "722063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7007:8:84",
                                    "type": "",
                                    "value": "r call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6980:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6980:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6980:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7025:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7037:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7048:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7033:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7033:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7025:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6807:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6821:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6656:402:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7237:179:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7254:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7265:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7247:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7247:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7247:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7288:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7299:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7284:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7284:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7304:2:84",
                                    "type": "",
                                    "value": "29"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7277:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7277:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7277:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7327:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7338:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7323:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7323:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7343:31:84",
                                    "type": "",
                                    "value": "Address: call to non-contract"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7316:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7316:59:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7316:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7384:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7396:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7407:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7392:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7392:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7384:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7214:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7228:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7063:353:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7595:232:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7612:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7623:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7605:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7605:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7605:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7646:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7657:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7642:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7642:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7662:2:84",
                                    "type": "",
                                    "value": "42"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7635:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7635:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7635:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7685:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7696:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7681:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7681:18:84"
                                  },
                                  {
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7701:34:84",
                                    "type": "",
                                    "value": "SafeERC20: ERC20 operation did n"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7674:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7674:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7674:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7756:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7767:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7752:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7752:18:84"
                                  },
                                  {
                                    "hexValue": "6f742073756363656564",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7772:12:84",
                                    "type": "",
                                    "value": "ot succeed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7745:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7745:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7745:40:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7794:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7806:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7817:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7802:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7802:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7794:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7572:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7586:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7421:406:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8006:181:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8023:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8034:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8016:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8016:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8016:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8057:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8068:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8053:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8053:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8073:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8046:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8046:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8046:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8096:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8107:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8092:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8092:18:84"
                                  },
                                  {
                                    "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8112:33:84",
                                    "type": "",
                                    "value": "ReentrancyGuard: reentrant call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8085:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8085:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8085:61:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8155:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8167:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8178:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8163:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8163:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8155:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7983:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7997:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7832:355:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8349:239:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8359:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8371:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8382:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8367:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8367:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8359:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8401:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8423:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "8432:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "8426:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8426:13:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "8412:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8412:28:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8394:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8394:47:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8394:47:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8461:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8472:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8457:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8457:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8490:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "8503:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8511:4:84",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "8499:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8499:17:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "8493:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8493:24:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "8479:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8479:39:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8450:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8450:69:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8450:69:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8539:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8550:4:84",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8535:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8535:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "8567:6:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "8575:4:84",
                                            "type": "",
                                            "value": "0x40"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "8563:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8563:17:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "8557:5:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8557:24:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8528:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8528:54:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8528:54:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8318:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8329:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8340:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8192:396:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8694:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8704:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8716:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8727:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8712:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8712:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8704:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8746:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8757:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8739:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8739:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8739:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8663:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8674:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8685:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8593:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8928:177:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8938:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8950:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8961:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8946:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8946:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8938:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8980:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8991:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8973:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8973:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8973:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9018:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9029:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9014:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9014:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9045:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9048:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9034:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9034:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9007:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9007:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9007:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9076:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9087:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9072:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9072:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "9092:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9065:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9065:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9065:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8881:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8892:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8900:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8908:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8919:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8775:330:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9239:119:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9249:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9261:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9272:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9257:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9257:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9249:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9291:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9302:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9284:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9284:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9284:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9329:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9340:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9325:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9325:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9345:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9318:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9318:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9318:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9200:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9211:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9219:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9230:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9110:248:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9520:162:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9530:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9542:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9553:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9538:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9538:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9530:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9572:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9583:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9565:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9565:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9565:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9610:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9621:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9606:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9606:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9626:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9599:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9599:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9599:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9653:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9664:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9649:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9649:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "9669:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9642:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9642:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9642:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9473:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "9484:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9492:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9500:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9511:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9363:319:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9735:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9762:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "9764:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9764:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9764:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9751:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "9758:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "9754:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9754:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "9748:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9748:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9745:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9793:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9804:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9807:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9800:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9800:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "9793:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9718:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9721:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "9727:3:84",
                            "type": ""
                          }
                        ],
                        "src": "9687:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9866:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "9889:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "9891:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9891:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "9891:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9886:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "9879:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9879:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "9876:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9920:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "9929:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "9932:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "9925:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9925:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "9920:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9851:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9854:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "9860:1:84",
                            "type": ""
                          }
                        ],
                        "src": "9820:120:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9997:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10056:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10058:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10058:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10058:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "10028:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "10021:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10021:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "10014:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10014:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "10036:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10047:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "10043:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "10043:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "10051:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "10039:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10039:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10033:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10033:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "10010:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10010:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10007:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10087:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10102:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10105:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "10098:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10098:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "10087:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "9976:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "9979:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "9985:7:84",
                            "type": ""
                          }
                        ],
                        "src": "9945:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10165:312:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10175:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10197:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10200:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "10186:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10186:16:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10179:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10211:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10233:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10236:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "10222:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10222:16:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10215:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10247:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10261:3:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10266:1:84",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10257:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10257:11:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10251:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10339:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10341:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10341:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10341:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10291:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "10284:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10284:10:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10300:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10313:16:84",
                                                "type": "",
                                                "value": "0x7fffffffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "10309:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "10309:21:84"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "10332:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10305:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10305:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10296:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10296:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "10280:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10280:58:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10277:84:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10419:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10421:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10421:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10421:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10377:2:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10385:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10394:16:84",
                                            "type": "",
                                            "value": "0x7fffffffffffff"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "10412:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10390:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10390:26:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sgt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10381:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10381:36:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "10373:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10373:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10370:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10450:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10462:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10467:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "10458:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10458:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "10450:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10147:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10150:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "10156:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10118:359:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10531:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10553:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10555:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10555:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10555:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10547:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10550:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10544:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10544:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10541:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10584:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10596:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10599:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "10592:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10592:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "10584:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10513:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10516:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "10522:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10482:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10665:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10675:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10684:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "10679:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10744:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "10769:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "10774:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "10765:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10765:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "10788:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "10793:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "10784:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "10784:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "10778:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10778:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10758:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10758:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10758:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "10705:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10708:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10702:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10702:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "10716:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "10718:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "10727:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10730:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "10723:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10723:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "10718:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "10698:3:84",
                                "statements": []
                              },
                              "src": "10694:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10833:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "10846:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "10851:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "10842:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "10842:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "10860:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10835:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10835:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10835:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "10822:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "10825:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10819:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10819:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10816:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "10643:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "10648:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "10653:6:84",
                            "type": ""
                          }
                        ],
                        "src": "10612:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10922:88:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10953:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10955:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10955:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10955:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "10938:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10949:1:84",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "10945:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10945:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "10935:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10935:17:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10932:43:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10984:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "10995:5:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11002:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10991:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10991:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "10984:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "increment_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "10904:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "10914:3:84",
                            "type": ""
                          }
                        ],
                        "src": "10875:135:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11053:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11076:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "11078:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11078:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11078:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11073:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "11066:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11066:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11063:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11107:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11116:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11119:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "11112:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11112:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "11107:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "11038:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "11041:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "11047:1:84",
                            "type": ""
                          }
                        ],
                        "src": "11015:112:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11174:151:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11184:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11210:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "11213:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "11199:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11199:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11188:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11266:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11268:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11268:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11268:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11234:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11247:16:84",
                                        "type": "",
                                        "value": "0x7fffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "11243:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11243:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "11231:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11231:34:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11228:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11297:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11308:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11311:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "11304:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11304:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "11297:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "11156:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "11166:3:84",
                            "type": ""
                          }
                        ],
                        "src": "11132:193:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11362:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11379:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11386:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11391:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11382:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11382:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11372:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11372:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11372:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11419:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11422:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11412:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11412:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11412:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11443:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11446:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "11436:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11436:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11436:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "11330:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11494:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11511:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11518:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11523:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11514:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11514:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11504:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11504:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11504:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11551:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11554:4:84",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11544:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11544:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11544:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11575:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11578:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "11568:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11568:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11568:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "11462:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11626:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11643:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11650:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11655:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11646:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11646:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11636:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11636:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11636:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11683:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11686:4:84",
                                    "type": "",
                                    "value": "0x31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11676:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11676:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11676:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11707:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11710:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "11700:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11700:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11700:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x31",
                        "nodeType": "YulFunctionDefinition",
                        "src": "11594:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11758:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11775:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11782:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11787:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11778:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11778:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11768:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11768:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11768:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11815:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11818:4:84",
                                    "type": "",
                                    "value": "0x32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11808:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11808:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11808:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11839:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11842:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "11832:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11832:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11832:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x32",
                        "nodeType": "YulFunctionDefinition",
                        "src": "11726:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11890:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11907:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11914:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11919:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11910:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11910:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11900:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11900:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11900:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11947:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11950:4:84",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11940:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11940:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11940:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11971:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11974:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "11964:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11964:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11964:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "11858:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12035:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12099:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "12108:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "12111:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "12101:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12101:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12101:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "12058:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "12069:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "12084:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "12089:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12080:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "12080:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12093:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "12076:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "12076:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "12065:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12065:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "12055:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12055:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "12048:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12048:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12045:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "12024:5:84",
                            "type": ""
                          }
                        ],
                        "src": "11990:131:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_bool_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_int56_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, signextend(6, value))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_bool_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_int56t_int56t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_int56_fromMemory(headStart)\n        value1 := abi_decode_int56_fromMemory(add(headStart, 32))\n        value2 := abi_decode_bool_fromMemory(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let pos := tail_1\n        let length := mload(value1)\n        mstore(tail_1, length)\n        pos := add(headStart, 96)\n        let srcPtr := add(value1, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, signextend(6, mload(value0)))\n        mstore(add(headStart, 0x20), signextend(6, mload(add(value0, 0x20))))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), signextend(6, value1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_int56(x, y) -> diff\n    {\n        let x_1 := signextend(6, x)\n        let y_1 := signextend(6, y)\n        let _1 := slt(y_1, 0)\n        if and(iszero(_1), slt(x_1, add(not(0x7fffffffffffff), y_1))) { panic_error_0x11() }\n        if and(_1, sgt(x_1, add(0x7fffffffffffff, y_1))) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function negate_t_int56(value) -> ret\n    {\n        let value_1 := signextend(6, value)\n        if eq(value_1, not(0x7fffffffffffff)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106103475760003560e01c80638bb6dfa8116101c0578063b87fcbff11610100578063b87fcbff14610849578063c7ae40d01461086c578063cacdf93d1461087f578063cb4be2bb14610892578063cb54694d146108a5578063cd22af1b146108b8578063ddca3f43146108e3578063deaf81d4146108ec578063e326ac43146108ff578063e485dc0e1461091f578063ebbb619414610932578063ec00cdfc14610945578063f0f346b914610958578063f11a1d1a1461096b578063f136a09d1461097e578063f39c38a01461099e578063fc253d2b146109b1578063fe75bc46146109ba57600080fd5b80638bb6dfa8146106c05780638cb22b76146106d35780638fe204dd146106f6578063951dc22c1461070957806398e90a0f146107115780639d5c33d81461073a578063a21458091461074d578063a39744b514610760578063a662031b1461078b578063a676f9ff1461079e578063a7d2e784146107be578063aac6aa9c146107c7578063ab033ea9146107da578063b0103b1a146107ed578063b239223314610810578063b600702a14610823578063b7e773401461083657600080fd5b806352a4de291161028b57806352a4de2914610578578063594a3a931461058b57806359a2255e1461059e5780635aa6e675146105b15780635ebe23f0146105c4578063633fb68f146105cd57806364bb43ee146105d657806368a9f19c146105e9578063694798e6146105fc57806369fe0e2d146106275780636cf262bc1461063a57806372da828a1461064d57806375a9f7ff14610660578063768b5d90146106735780637b40c9131461067c5780637c8fce231461068f578063878c723e1461069757600080fd5b8063034d4c611461034c57806307b435c2146103725780630c620bce1461039d5780630d6a1f87146103b25780631101eb41146103c557806315006b82146103da578063160e1e3114610405578063165e62e714610418578063168f92e7146104555780631b44555e146104805780631ef94b91146104a057806321040b01146104c0578063238efcbc146104eb578063274a8db4146104f3578063280b656c146105265780633e525d2014610539578063454c50311461054c575b600080fd5b61035f61035a366004613451565b6109cd565b6040519081526020015b60405180910390f35b61035f61038036600461348b565b601260209081526000928352604080842090915290825290205481565b6103a5610ad3565b6040516103699190613698565b61035f6103c0366004613550565b610ae4565b6103d86103d336600461350f565b610bea565b005b61035f6103e836600461348b565b601060209081526000928352604080842090915290825290205481565b6103d8610413366004613451565b610d44565b61042b610426366004613451565b610eaa565b604080518251600690810b825260208085015190910b908201529181015190820152606001610369565b61035f61046336600461348b565b600960209081526000928352604080842090915290825290205481565b61035f61048e366004613451565b60056020526000908152604090205481565b601b546104b3906001600160a01b031681565b6040516103699190613628565b61035f6104ce36600461348b565b601360209081526000928352604080842090915290825290205481565b6103d861125b565b610516610501366004613451565b601a6020526000908152604090205460ff1681565b6040519015158152602001610369565b6103d8610534366004613451565b6112e7565b6103d8610547366004613451565b6112f6565b61051661055a366004613451565b6001600160a01b03166000908152600f602052604090205460ff1690565b6103d861058636600461350f565b611302565b6103d861059936600461348b565b611550565b6103d86105ac366004613451565b6115f5565b6017546104b3906001600160a01b031681565b61035f601f5481565b61035f60215481565b6103d86105e4366004613451565b6116a7565b6103d86105f7366004613451565b611729565b61035f61060a36600461348b565b602760209081526000928352604080842090915290825290205481565b6103d86106353660046135da565b6117e1565b61035f610648366004613451565b611841565b6103d861065b366004613451565b611977565b6103a561066e366004613451565b611a14565b61035f60225481565b601e546104b3906001600160a01b031681565b6103a5611a38565b6104b36106a5366004613451565b6001602052600090815260409020546001600160a01b031681565b61035f6106ce366004613451565b611a44565b6105166106e1366004613451565b60146020526000908152604090205460ff1681565b6103d86107043660046135da565b611ae7565b6103a5611b45565b6104b361071f366004613451565b6002602052600090815260409020546001600160a01b031681565b6103d8610748366004613451565b611b51565b6103d861075b3660046134c4565b611c09565b61035f61076e36600461348b565b600860209081526000928352604080842090915290825290205481565b6103d8610799366004613451565b611dd9565b61035f6107ac366004613451565b60286020526000908152604090205481565b61035f60205481565b6103d86107d5366004613451565b611de4565b6103d86107e8366004613451565b611e98565b6105166107fb366004613451565b60076020526000908152604090205460ff1681565b6103d861081e3660046135da565b611f0e565b6103d8610831366004613451565b611f6e565b6103d86108443660046135da565b612193565b610516610857366004613451565b60196020526000908152604090205460ff1681565b601c546104b3906001600160a01b031681565b61051661088d36600461348b565b6121f3565b6103d86108a0366004613451565b61221c565b6103d86108b33660046135da565b6122b9565b61035f6108c636600461348b565b601160209081526000928352604080842090915290825290205481565b61035f60245481565b6103d86108fa366004613451565b61233d565b61035f61090d366004613451565b60066020526000908152604090205481565b61042b61092d366004613451565b612348565b6103d86109403660046135da565b6123a4565b6103d8610953366004613451565b612404565b6103d8610966366004613451565b6124a1565b601d546104b3906001600160a01b031681565b61035f61098c366004613451565b60296020526000908152604090205481565b6018546104b3906001600160a01b031681565b61035f60235481565b6103d86109c8366004613550565b612555565b6000806109d983611841565b60225490915042906109f4906109ef9083613803565b612645565b6001600160a01b0385166000908152602860205260409020541115610a98576022546001600160a01b038516600090815260286020526040902054610a399042613803565b10610a75576022546001600160a01b038516600090815260286020526040902054610a649190613768565b610a6e9082613803565b9050610aae565b6001600160a01b038416600090815260286020526040902054610a6e9082613803565b610aa142612645565b610aab9082613803565b90505b610ab8818361265f565b610ac185611a44565b610acb9190613768565b949350505050565b6060610adf6025612689565b905090565b6000610af1602584612696565b15610be4576000610b0184610eaa565b90508060400151600014610be2576001600160a01b0384166000908152600f602052604081205460ff16610b42578160200151610b3d90613875565b610b48565b81602001515b601d5460225460405163a0d2710760e01b8152929350610bd9926001600160a01b039092169163a0d2710791610b84918991879160040161374f565b60206040518083038186803b158015610b9c57600080fd5b505afa158015610bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd491906135f3565b6126b8565b92505050610be4565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610c2657604051636efb4f4160e11b815260040160405180910390fd5b602054610c339042613768565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610c82908490613768565b90915550610c9390508484846126c9565b6001600160a01b038085166000908152602760209081526040808320938716835292905220548015801590610cd25750602154610cd082866128d7565b105b15610cf057604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de85604051610d3591815260200190565b60405180910390a35050505050565b6017546001600160a01b03163314610d6f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610d965760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b90610df7908490600401613628565b60206040518083038186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e47919061357c565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa90610e9f908390613628565b60405180910390a150565b610eb261340f565b610ebb42612645565b6001600160a01b0383166000908152602a60205260409020600101541415610f3157506001600160a01b03166000908152602a602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b600080610f45602254426109ef9190613803565b6001600160a01b0385166000908152602a60205260409020600101549091508114156110a957604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602a602052604090205490915060060b610fb242612645565b610fbc9042613803565b82600081518110610fcf57610fcf6138de565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d919261102b929190911690869060040161363c565b60606040518083038186803b15801561104357600080fd5b505afa158015611057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107b9190613597565b600692830b90920b808852919550611095918391506137b3565b600690810b900b6020860152506112329050565b6001600160a01b0384166000908152602a6020526040902060010154811115611232576040805160028082526060820183526000926020830190803683370190505090506110f642612645565b6111009042613803565b81600081518110611113576111136138de565b602002602001019063ffffffff16908163ffffffff168152505060225461113942612645565b6111439042613803565b61114d9190613768565b81600181518110611160576111606138de565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d91926111b8921690869060040161363c565b60606040518083038186803b1580156111d057600080fd5b505afa1580156111e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112089190613597565b600692830b90920b80885291955091506112239082906137b3565b600690810b900b602086015250505b811561124b5761124142612645565b6040840152611253565b600060408401525b50505b919050565b6018546001600160a01b0316331461128657604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916112dd91613628565b60405180910390a1565b6112f26025826129f5565b5050565b6112ff81612a0a565b50565b6002600054141561132e5760405162461bcd60e51b815260040161132590613718565b60405180910390fd5b600260005561133e602583612696565b61135b5760405163e0b6aead60e01b815260040160405180910390fd5b611366601584612696565b61138357604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d602052604090206113a590836129f5565b506113af83612a0a565b6021546001600160a01b038085166000908152602760209081526040808320938716835292905220546113ed906113e7908490613768565b846128d7565b101561140c57604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260286020908152604080832054600a835281842054600b845293829020548251918252928101939093528201527fee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c38209060600160405180910390a261148a6001600160a01b038316333084612a68565b6001600160a01b038084166000908152602760209081526040808320938616835292905290812080548392906114c1908490613768565b909155506114d49050610bd482846128d7565b6001600160a01b0384166000908152600b6020526040812080549091906114fc908490613768565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b6001600160a01b03828116600090815260016020526040902054839116331461158c57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526002602052604090205482911633146116315760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b6017546001600160a01b031633146116d2576040516354348f0360e01b815260040160405180910390fd5b6116dd602582612ad9565b6116fa57604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e5681604051610e9f9190613628565b6017546001600160a01b03163314611754576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff161561178e5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b90610e9f908390613628565b6017546001600160a01b0316331461180c576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001610e9f565b6000805b6001600160a01b0383166000908152600d6020526040902061186690612aee565b811015611971576001600160a01b0383166000908152600d6020526040812061188f9083612af8565b905061189c602582612696565b1561195e5760006118ac82610eaa565b9050806040015160001461195c576001600160a01b0382166000908152600f602052604081205460ff166118ed5781602001516118e890613875565b6118f3565b81602001515b601d546001600160a01b03888116600090815260276020908152604080832089851684529091529081902054602254915163a0d2710760e01b815294955061194e94929093169263a0d2710792610b8492879160040161374f565b6119589086613768565b9450505b505b508061196981613846565b915050611845565b50919050565b6017546001600160a01b031633146119a2576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166119c95760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090610e9f908390613628565b6001600160a01b0381166000908152600d60205260409020606090610be490612689565b6060610adf6015612689565b600080611a5083611841565b6022546001600160a01b03851660009081526028602052604090205491925090611a7a9042613803565b1015610be45760008111611aa6576001600160a01b0383166000908152600a6020526040902054611ae0565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054611ad6908390613794565b611ae09190613780565b9150611971565b6017546001600160a01b03163314611b12576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29101610e9f565b6060610adf6003612689565b6017546001600160a01b03163314611b7c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1615611bb65760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f90610e9f908390613628565b6001600160a01b038381166000908152600160205260409020548491163314611c4557604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038216611c6c5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260136020908152604080832093871683529290522054611caf5760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211611cf4576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615611d2e576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590611d7b908483612b04565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051611dca91815260200190565b60405180910390a45050505050565b6112f26015826129f5565b6017546001600160a01b03163314611e0f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16611e48576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d02590610e9f908390613628565b6017546001600160a01b03163314611ec3576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610e9f908390613628565b6017546001600160a01b03163314611f39576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001610e9f565b6017546001600160a01b03163314611f99576040516354348f0360e01b815260040160405180910390fd5b611fa46025826129f5565b611fc15760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ffa57600080fd5b505afa15801561200e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612032919061346e565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b916120869190600401613628565b60206040518083038186803b15801561209e57600080fd5b505afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d6919061357c565b6001600160a01b0382166000908152600f60205260409020805460ff191691151591909117905561210681610eaa565b6001600160a01b0382166000908152602a60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b90610e9f908390613628565b6017546001600160a01b031633146121be576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001610e9f565b6001600160a01b0382166000908152600d6020526040812061221590836129f5565b9392505050565b6017546001600160a01b03163314612247576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811661226e5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090610e9f908390613628565b6017546001600160a01b031633146122e4576040516354348f0360e01b815260040160405180910390fd5b6201518081101561230857604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001610e9f565b6112f2602582612ad9565b61235061340f565b506001600160a01b03166000908152602a602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b6017546001600160a01b031633146123cf576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e790602001610e9f565b6017546001600160a01b0316331461242f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166124565760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90610e9f908390613628565b6017546001600160a01b031633146124cc576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661250557604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e90610e9f908390613628565b6017546001600160a01b03163314612580576040516354348f0360e01b815260040160405180910390fd5b61258b601583612696565b6125a857604051636211d34960e01b815260040160405180910390fd5b6125b182612a0a565b6001600160a01b0382166000908152600a6020526040812080548392906125d9908490613768565b90915550506001600160a01b038216600081815260286020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d192612639928252602082015260400190565b60405180910390a25050565b6000602254826126559190613861565b610be49083613803565b6000602254831015611971576022546126788385613794565b6126829190613780565b9050610be4565b6060600061221583612b39565b6001600160a01b03811660009081526001830160205260408120541515612215565b6000610be482602254602354612b95565b600260005414156126ec5760405162461bcd60e51b815260040161132590613718565b600260009081556001600160a01b0384168152600d602052604090206127129083612696565b61272e576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602760209081526040808320938616835292905220548111156127745760405163435b562560e01b815260040160405180910390fd5b61277d83612c43565b600061278c610bd483856128d7565b6001600160a01b0385166000908152600b602052604090205490915015612842576001600160a01b0384166000908152600b6020908152604080832054600a909252909120546127dd908390613794565b6127e79190613780565b6001600160a01b0385166000908152600a60205260408120805490919061280f908490613803565b90915550506001600160a01b0384166000908152600b60205260408120805483929061283c908490613803565b90915550505b6001600160a01b03808516600090815260276020908152604080832093871683529290529081208054849290612879908490613803565b90915550506001600160a01b038085166000908152602760209081526040808320938716835292905220546128cc576001600160a01b0384166000908152600d602052604090206128ca9084612ad9565b505b505060016000555050565b6001600160a01b0381166000908152602a602052604081206001015415610be4576001600160a01b0382166000908152600f602052604081205460ff16612949576001600160a01b0383166000908152602a602052604090205461294490600160381b900460060b613875565b61296d565b6001600160a01b0383166000908152602a6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d27107916129a5918891869160040161374f565b60206040518083038186803b1580156129bd57600080fd5b505afa1580156129d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acb91906135f3565b6000612215836001600160a01b038416612c68565b612a1381612cb7565b50612a1d81612e8d565b6001600160a01b0381166000908152600a6020908152604080832054600b90925290912054612a4c9190612f1b565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b0380851660248301528316604482015260648101829052612ad39085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f31565b50505050565b6000612215836001600160a01b038416613003565b6000610be4825490565b600061221583836130f6565b6040516001600160a01b038316602482015260448101829052612b3490849063a9059cbb60e01b90606401612a9c565b505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015612b8957602002820191906000526020600020905b815481526020019060010190808311612b75575b50505050509050919050565b600080806000198587098587029250828110838203039150508060001415612bcf5760008411612bc457600080fd5b508290049050612215565b808411612bdb57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b612c4c81613120565b6001600160a01b039091166000908152600b6020526040902055565b6000818152600183016020526040812054612caf57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610be4565b506000610be4565b6000612cc242612645565b6001600160a01b038316600090815260286020526040902054101561125657612cf2602254426109ef9190613803565b6001600160a01b03831660009081526028602052604090205411612d6857612d1982612c43565b6001600160a01b0382166000908152600b6020908152604080832054600a90925290912055612d4742612645565b6001600160a01b038316600090815260286020526040902055506001919050565b6022546001600160a01b038316600090815260286020526040902054612d8e9042613803565b10612dea57612d9c82612c43565b6001600160a01b0382166000908152600b6020908152604080832054600a83528184205560225460289092528220805491929091612ddb908490613768565b90915550600191506112569050565b612df342612645565b6001600160a01b0383166000908152602960205260409020541015611256576001600160a01b0382166000908152600b6020526040902054612e3483612c43565b6001600160a01b0383166000908152600b6020908152604080832054600a909252909120548291612e6491613794565b612e6e9190613780565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b038116600090815260286020526040902054612ed290612eb49042613803565b6001600160a01b0383166000908152600b602052604090205461265f565b6001600160a01b0382166000908152600a602052604081208054909190612efa908490613768565b90915550506001600160a01b03166000908152602860205260409020429055565b6000818310612f2a5781612215565b5090919050565b6000612f86826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166133049092919063ffffffff16565b805190915015612b345780806020019051810190612fa4919061357c565b612b345760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611325565b600081815260018301602052604081205480156130ec576000613027600183613803565b855490915060009061303b90600190613803565b90508181146130a057600086600001828154811061305b5761305b6138de565b906000526020600020015490508087600001848154811061307e5761307e6138de565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806130b1576130b16138c8565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610be4565b6000915050610be4565b600082600001828154811061310d5761310d6138de565b9060005260206000200154905092915050565b600061312b42612645565b601e546001600160a01b03166000908152602a6020526040902060010154146131c257601e54613163906001600160a01b0316610eaa565b601e546001600160a01b03166000908152602a60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d602052604090206131e690612aee565b811015611971576001600160a01b0383166000908152600d6020526040812061320f9083612af8565b905061321c602582612696565b156132f15761322a42612645565b6001600160a01b0382166000908152602a6020526040902060010154146132b05761325481610eaa565b6001600160a01b0382166000908152602a60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b038085166000908152602760209081526040808320938516835292905220546132e490610bd490836128d7565b6132ee9084613768565b92505b50806132fc81613846565b9150506131c5565b6060610acb848460008585843b61335d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611325565b600080866001600160a01b03168587604051613379919061360c565b60006040518083038185875af1925050503d80600081146133b6576040519150601f19603f3d011682016040523d82523d6000602084013e6133bb565b606091505b50915091506133cb8282866133d6565b979650505050505050565b606083156133e5575081612215565b8251156133f55782518084602001fd5b8160405162461bcd60e51b815260040161132591906136e5565b604080516060810182526000808252602082018190529181019190915290565b8051801515811461125657600080fd5b8051600681900b811461125657600080fd5b60006020828403121561346357600080fd5b8135612215816138f4565b60006020828403121561348057600080fd5b8151612215816138f4565b6000806040838503121561349e57600080fd5b82356134a9816138f4565b915060208301356134b9816138f4565b809150509250929050565b6000806000606084860312156134d957600080fd5b83356134e4816138f4565b925060208401356134f4816138f4565b91506040840135613504816138f4565b809150509250925092565b60008060006060848603121561352457600080fd5b833561352f816138f4565b9250602084013561353f816138f4565b929592945050506040919091013590565b6000806040838503121561356357600080fd5b823561356e816138f4565b946020939093013593505050565b60006020828403121561358e57600080fd5b6122158261342f565b6000806000606084860312156135ac57600080fd5b6135b58461343f565b92506135c36020850161343f565b91506135d16040850161342f565b90509250925092565b6000602082840312156135ec57600080fd5b5035919050565b60006020828403121561360557600080fd5b5051919050565b6000825161361e81846020870161381a565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b8181101561368b57845163ffffffff1683529383019391830191600101613669565b5090979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136d95783516001600160a01b0316835292840192918401916001016136b4565b50909695505050505050565b602081526000825180602084015261370481604085016020870161381a565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b6000821982111561377b5761377b61389c565b500190565b60008261378f5761378f6138b2565b500490565b60008160001904831182151516156137ae576137ae61389c565b500290565b60008160060b8360060b6000811281667fffffffffffff19018312811516156137de576137de61389c565b81667fffffffffffff0183138116156137f9576137f961389c565b5090039392505050565b6000828210156138155761381561389c565b500390565b60005b8381101561383557818101518382015260200161381d565b83811115612ad35750506000910152565b600060001982141561385a5761385a61389c565b5060010190565b600082613870576138706138b2565b500690565b60008160060b667fffffffffffff198114156138935761389361389c565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146112ff57600080fdfea264697066735822122052cd4071b868e9336807b54c1db8fd201ce3fd9aea78c61acba980ac545d7fd264736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x347 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8BB6DFA8 GT PUSH2 0x1C0 JUMPI DUP1 PUSH4 0xB87FCBFF GT PUSH2 0x100 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x849 JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x86C JUMPI DUP1 PUSH4 0xCACDF93D EQ PUSH2 0x87F JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x892 JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x8A5 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x8B8 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x8E3 JUMPI DUP1 PUSH4 0xDEAF81D4 EQ PUSH2 0x8EC JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x8FF JUMPI DUP1 PUSH4 0xE485DC0E EQ PUSH2 0x91F JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0x932 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0x945 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x958 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0x96B JUMPI DUP1 PUSH4 0xF136A09D EQ PUSH2 0x97E JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x99E JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0x9B1 JUMPI DUP1 PUSH4 0xFE75BC46 EQ PUSH2 0x9BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8BB6DFA8 EQ PUSH2 0x6C0 JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x6D3 JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x6F6 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x709 JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x711 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x73A JUMPI DUP1 PUSH4 0xA2145809 EQ PUSH2 0x74D JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x760 JUMPI DUP1 PUSH4 0xA662031B EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0xA676F9FF EQ PUSH2 0x79E JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x7BE JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x7C7 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x7DA JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x7ED JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x810 JUMPI DUP1 PUSH4 0xB600702A EQ PUSH2 0x823 JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x836 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A4DE29 GT PUSH2 0x28B JUMPI DUP1 PUSH4 0x52A4DE29 EQ PUSH2 0x578 JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x58B JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x59E JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x5B1 JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x5C4 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x5CD JUMPI DUP1 PUSH4 0x64BB43EE EQ PUSH2 0x5D6 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x5E9 JUMPI DUP1 PUSH4 0x694798E6 EQ PUSH2 0x5FC JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x627 JUMPI DUP1 PUSH4 0x6CF262BC EQ PUSH2 0x63A JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0x75A9F7FF EQ PUSH2 0x660 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x673 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x67C JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x68F JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x697 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34D4C61 EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x372 JUMPI DUP1 PUSH4 0xC620BCE EQ PUSH2 0x39D JUMPI DUP1 PUSH4 0xD6A1F87 EQ PUSH2 0x3B2 JUMPI DUP1 PUSH4 0x1101EB41 EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x405 JUMPI DUP1 PUSH4 0x165E62E7 EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x455 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x4A0 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x4C0 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x4EB JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x4F3 JUMPI DUP1 PUSH4 0x280B656C EQ PUSH2 0x526 JUMPI DUP1 PUSH4 0x3E525D20 EQ PUSH2 0x539 JUMPI DUP1 PUSH4 0x454C5031 EQ PUSH2 0x54C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x35F PUSH2 0x35A CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x9CD JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x35F PUSH2 0x380 CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3A5 PUSH2 0xAD3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x369 SWAP2 SWAP1 PUSH2 0x3698 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x3C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3550 JUMP JUMPDEST PUSH2 0xAE4 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x3D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x350F JUMP JUMPDEST PUSH2 0xBEA JUMP JUMPDEST STOP JUMPDEST PUSH2 0x35F PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x413 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0xD44 JUMP JUMPDEST PUSH2 0x42B PUSH2 0x426 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0xEAA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND DUP3 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 SIGNEXTEND SWAP1 DUP3 ADD MSTORE SWAP2 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x369 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x463 CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x48E CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x4B3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x369 SWAP2 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x4CE CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x125B JUMP JUMPDEST PUSH2 0x516 PUSH2 0x501 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x369 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x534 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x12E7 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x547 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x12F6 JUMP JUMPDEST PUSH2 0x516 PUSH2 0x55A CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x586 CALLDATASIZE PUSH1 0x4 PUSH2 0x350F JUMP JUMPDEST PUSH2 0x1302 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x599 CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH2 0x1550 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x5AC CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x15F5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x4B3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x5E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x16A7 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x5F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1729 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x60A CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x635 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DA JUMP JUMPDEST PUSH2 0x17E1 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x648 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1841 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x65B CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1977 JUMP JUMPDEST PUSH2 0x3A5 PUSH2 0x66E CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1A14 JUMP JUMPDEST PUSH2 0x35F PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x4B3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3A5 PUSH2 0x1A38 JUMP JUMPDEST PUSH2 0x4B3 PUSH2 0x6A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x6CE CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1A44 JUMP JUMPDEST PUSH2 0x516 PUSH2 0x6E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x704 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DA JUMP JUMPDEST PUSH2 0x1AE7 JUMP JUMPDEST PUSH2 0x3A5 PUSH2 0x1B45 JUMP JUMPDEST PUSH2 0x4B3 PUSH2 0x71F CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x748 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1B51 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x75B CALLDATASIZE PUSH1 0x4 PUSH2 0x34C4 JUMP JUMPDEST PUSH2 0x1C09 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x76E CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x799 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1DD9 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x7AC CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x7D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1DE4 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x7E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1E98 JUMP JUMPDEST PUSH2 0x516 PUSH2 0x7FB CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x81E CALLDATASIZE PUSH1 0x4 PUSH2 0x35DA JUMP JUMPDEST PUSH2 0x1F0E JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x831 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x1F6E JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x844 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DA JUMP JUMPDEST PUSH2 0x2193 JUMP JUMPDEST PUSH2 0x516 PUSH2 0x857 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x4B3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x516 PUSH2 0x88D CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH2 0x21F3 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x8A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x221C JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x8B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DA JUMP JUMPDEST PUSH2 0x22B9 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x8C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x348B JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x8FA CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x233D JUMP JUMPDEST PUSH2 0x35F PUSH2 0x90D CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x42B PUSH2 0x92D CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x2348 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x940 CALLDATASIZE PUSH1 0x4 PUSH2 0x35DA JUMP JUMPDEST PUSH2 0x23A4 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x953 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x2404 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x966 CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH2 0x24A1 JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x4B3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH2 0x98C CALLDATASIZE PUSH1 0x4 PUSH2 0x3451 JUMP JUMPDEST PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x4B3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x35F PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3D8 PUSH2 0x9C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3550 JUMP JUMPDEST PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x9D9 DUP4 PUSH2 0x1841 JUMP JUMPDEST PUSH1 0x22 SLOAD SWAP1 SWAP2 POP TIMESTAMP SWAP1 PUSH2 0x9F4 SWAP1 PUSH2 0x9EF SWAP1 DUP4 PUSH2 0x3803 JUMP JUMPDEST PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO PUSH2 0xA98 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA39 SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST LT PUSH2 0xA75 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA64 SWAP2 SWAP1 PUSH2 0x3768 JUMP JUMPDEST PUSH2 0xA6E SWAP1 DUP3 PUSH2 0x3803 JUMP JUMPDEST SWAP1 POP PUSH2 0xAAE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA6E SWAP1 DUP3 PUSH2 0x3803 JUMP JUMPDEST PUSH2 0xAA1 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH2 0xAAB SWAP1 DUP3 PUSH2 0x3803 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0xAB8 DUP2 DUP4 PUSH2 0x265F JUMP JUMPDEST PUSH2 0xAC1 DUP6 PUSH2 0x1A44 JUMP JUMPDEST PUSH2 0xACB SWAP2 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xADF PUSH1 0x25 PUSH2 0x2689 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAF1 PUSH1 0x25 DUP5 PUSH2 0x2696 JUMP JUMPDEST ISZERO PUSH2 0xBE4 JUMPI PUSH1 0x0 PUSH2 0xB01 DUP5 PUSH2 0xEAA JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0xBE2 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xB42 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xB3D SWAP1 PUSH2 0x3875 JUMP JUMPDEST PUSH2 0xB48 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH2 0xBD9 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0xB84 SWAP2 DUP10 SWAP2 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x374F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBB0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBD4 SWAP2 SWAP1 PUSH2 0x35F3 JUMP JUMPDEST PUSH2 0x26B8 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xBE4 JUMP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 SLOAD PUSH2 0xC33 SWAP1 TIMESTAMP PUSH2 0x3768 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0xC82 SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0xC93 SWAP1 POP DUP5 DUP5 DUP5 PUSH2 0x26C9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xCD2 JUMPI POP PUSH1 0x21 SLOAD PUSH2 0xCD0 DUP3 DUP7 PUSH2 0x28D7 JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0xCF0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE DUP6 PUSH1 0x40 MLOAD PUSH2 0xD35 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD6F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD96 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0xDF7 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE47 SWAP2 SWAP1 PUSH2 0x357C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xEB2 PUSH2 0x340F JUMP JUMPDEST PUSH2 0xEBB TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ ISZERO PUSH2 0xF31 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF45 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0x9EF SWAP2 SWAP1 PUSH2 0x3803 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 SWAP2 POP DUP2 EQ ISZERO PUSH2 0x10A9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x6 SIGNEXTEND PUSH2 0xFB2 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH2 0xFBC SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xFCF JUMPI PUSH2 0xFCF PUSH2 0x38DE JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD SWAP3 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP2 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x102B SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x363C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1043 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1057 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x107B SWAP2 SWAP1 PUSH2 0x3597 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP PUSH2 0x1095 SWAP2 DUP4 SWAP2 POP PUSH2 0x37B3 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP PUSH2 0x1232 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 GT ISZERO PUSH2 0x1232 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x10F6 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH2 0x1100 SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1113 JUMPI PUSH2 0x1113 PUSH2 0x38DE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x22 SLOAD PUSH2 0x1139 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH2 0x1143 SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST PUSH2 0x114D SWAP2 SWAP1 PUSH2 0x3768 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x1160 JUMPI PUSH2 0x1160 PUSH2 0x38DE JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP3 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x11B8 SWAP3 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x363C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1208 SWAP2 SWAP1 PUSH2 0x3597 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP SWAP2 POP PUSH2 0x1223 SWAP1 DUP3 SWAP1 PUSH2 0x37B3 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x124B JUMPI PUSH2 0x1241 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1253 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP5 ADD MSTORE JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1286 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x12DD SWAP2 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x12F2 PUSH1 0x25 DUP3 PUSH2 0x29F5 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x12FF DUP2 PUSH2 0x2A0A JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x132E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1325 SWAP1 PUSH2 0x3718 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x133E PUSH1 0x25 DUP4 PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x135B JUMPI PUSH1 0x40 MLOAD PUSH4 0xE0B6AEAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1366 PUSH1 0x15 DUP5 PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x1383 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x13A5 SWAP1 DUP4 PUSH2 0x29F5 JUMP JUMPDEST POP PUSH2 0x13AF DUP4 PUSH2 0x2A0A JUMP JUMPDEST PUSH1 0x21 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x13ED SWAP1 PUSH2 0x13E7 SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST DUP5 PUSH2 0x28D7 JUMP JUMPDEST LT ISZERO PUSH2 0x140C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB DUP5 MSTORE SWAP4 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE SWAP3 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP3 ADD MSTORE PUSH32 0xEE3F0DABA9837D1AB0597ACF34328550E4832D02E24E467825E7C2DD318C3820 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x148A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x2A68 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x14C1 SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x14D4 SWAP1 POP PUSH2 0xBD4 DUP3 DUP5 PUSH2 0x28D7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x14FC SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 SWAP1 DUP7 AND SWAP1 PUSH32 0x4E186BC75A2220191B826BAFF3EE63C3E970E94E58A9007FF94C9A7B8E6EBB3F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x158C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x1631 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x16D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x16DD PUSH1 0x25 DUP3 PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0x16FA JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8D08B1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x51199D699BDFD516FA88DD0D2F8487C40C147B4867ACAA23ADC8D4DF6B098E56 DUP2 PUSH1 0x40 MLOAD PUSH2 0xE9F SWAP2 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1754 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x178E JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x180C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1866 SWAP1 PUSH2 0x2AEE JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1971 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x188F SWAP1 DUP4 PUSH2 0x2AF8 JUMP JUMPDEST SWAP1 POP PUSH2 0x189C PUSH1 0x25 DUP3 PUSH2 0x2696 JUMP JUMPDEST ISZERO PUSH2 0x195E JUMPI PUSH1 0x0 PUSH2 0x18AC DUP3 PUSH2 0xEAA JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x195C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x18ED JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x18E8 SWAP1 PUSH2 0x3875 JUMP JUMPDEST PUSH2 0x18F3 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SLOAD PUSH1 0x22 SLOAD SWAP2 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH2 0x194E SWAP5 SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0xA0D27107 SWAP3 PUSH2 0xB84 SWAP3 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x374F JUMP JUMPDEST PUSH2 0x1958 SWAP1 DUP7 PUSH2 0x3768 JUMP JUMPDEST SWAP5 POP POP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x1969 DUP2 PUSH2 0x3846 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1845 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x19A2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x19C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 SWAP1 PUSH2 0xBE4 SWAP1 PUSH2 0x2689 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xADF PUSH1 0x15 PUSH2 0x2689 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1A50 DUP4 PUSH2 0x1841 JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1A7A SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST LT ISZERO PUSH2 0xBE4 JUMPI PUSH1 0x0 DUP2 GT PUSH2 0x1AA6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1AE0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x1AD6 SWAP1 DUP4 SWAP1 PUSH2 0x3794 JUMP JUMPDEST PUSH2 0x1AE0 SWAP2 SWAP1 PUSH2 0x3780 JUMP JUMPDEST SWAP2 POP PUSH2 0x1971 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1B12 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x60 PUSH2 0xADF PUSH1 0x3 PUSH2 0x2689 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1B7C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1BB6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x1C45 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1C6C JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1CAF JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x1CF4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1D2E JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x12 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE SWAP1 PUSH2 0x1D7B SWAP1 DUP5 DUP4 PUSH2 0x2B04 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFDB7893BF11F50C621E59CC7F1CF540E94295CB27CA869EC7ED7618CA7928862 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1DCA SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x12F2 PUSH1 0x15 DUP3 PUSH2 0x29F5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1E0F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1E48 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1EC3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1F39 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1F99 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1FA4 PUSH1 0x25 DUP3 PUSH2 0x29F5 JUMP JUMPDEST PUSH2 0x1FC1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF25E6B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x200E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2032 SWAP2 SWAP1 PUSH2 0x346E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 DUP4 AND SWAP4 DUP5 OR SWAP1 SSTORE PUSH1 0x1D SLOAD SWAP1 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0x696A437B SWAP2 PUSH2 0x2086 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x209E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20D6 SWAP2 SWAP1 PUSH2 0x357C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2106 DUP2 PUSH2 0xEAA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 DUP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xABFA8DB4D238FA78BF4E15FCC91328DD35F3978F200E2857A56BB719732B7B0B SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x21BE JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2215 SWAP1 DUP4 PUSH2 0x29F5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2247 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x226E JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x22E4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x2308 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0xE9F JUMP JUMPDEST PUSH2 0x12F2 PUSH1 0x25 DUP3 PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0x2350 PUSH2 0x340F JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x23CF JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x242F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2456 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x24CC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2505 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0xE9F SWAP1 DUP4 SWAP1 PUSH2 0x3628 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2580 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x258B PUSH1 0x15 DUP4 PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x25A8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x25B1 DUP3 PUSH2 0x2A0A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x25D9 SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x5ABCF5031FDBD3BADB9D1E09094208DE329AEE72730E87650F346584205D23D1 SWAP3 PUSH2 0x2639 SWAP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP3 PUSH2 0x2655 SWAP2 SWAP1 PUSH2 0x3861 JUMP JUMPDEST PUSH2 0xBE4 SWAP1 DUP4 PUSH2 0x3803 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP4 LT ISZERO PUSH2 0x1971 JUMPI PUSH1 0x22 SLOAD PUSH2 0x2678 DUP4 DUP6 PUSH2 0x3794 JUMP JUMPDEST PUSH2 0x2682 SWAP2 SWAP1 PUSH2 0x3780 JUMP JUMPDEST SWAP1 POP PUSH2 0xBE4 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2215 DUP4 PUSH2 0x2B39 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x2215 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBE4 DUP3 PUSH1 0x22 SLOAD PUSH1 0x23 SLOAD PUSH2 0x2B95 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x26EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1325 SWAP1 PUSH2 0x3718 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2712 SWAP1 DUP4 PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x272E JUMPI PUSH1 0x40 MLOAD PUSH3 0x41CFA5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x2774 JUMPI PUSH1 0x40 MLOAD PUSH4 0x435B5625 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x277D DUP4 PUSH2 0x2C43 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x278C PUSH2 0xBD4 DUP4 DUP6 PUSH2 0x28D7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x2842 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x27DD SWAP1 DUP4 SWAP1 PUSH2 0x3794 JUMP JUMPDEST PUSH2 0x27E7 SWAP2 SWAP1 PUSH2 0x3780 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x280F SWAP1 DUP5 SWAP1 PUSH2 0x3803 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x283C SWAP1 DUP5 SWAP1 PUSH2 0x3803 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x2879 SWAP1 DUP5 SWAP1 PUSH2 0x3803 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x28CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x28CA SWAP1 DUP5 PUSH2 0x2AD9 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0xBE4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2949 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2944 SWAP1 PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND PUSH2 0x3875 JUMP JUMPDEST PUSH2 0x296D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x29A5 SWAP2 DUP9 SWAP2 DUP7 SWAP2 PUSH1 0x4 ADD PUSH2 0x374F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x29BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x29D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xACB SWAP2 SWAP1 PUSH2 0x35F3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2215 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x2C68 JUMP JUMPDEST PUSH2 0x2A13 DUP2 PUSH2 0x2CB7 JUMP JUMPDEST POP PUSH2 0x2A1D DUP2 PUSH2 0x2E8D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x2A4C SWAP2 SWAP1 PUSH2 0x2F1B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2AD3 SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x2F31 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2215 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x3003 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBE4 DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2215 DUP4 DUP4 PUSH2 0x30F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2B34 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x2A9C JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2B89 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2B75 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x2BCF JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x2BC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x2215 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x2BDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x2C4C DUP2 PUSH2 0x3120 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x2CAF JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xBE4 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xBE4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CC2 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1256 JUMPI PUSH2 0x2CF2 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0x9EF SWAP2 SWAP1 PUSH2 0x3803 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT PUSH2 0x2D68 JUMPI PUSH2 0x2D19 DUP3 PUSH2 0x2C43 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x2D47 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2D8E SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST LT PUSH2 0x2DEA JUMPI PUSH2 0x2D9C DUP3 PUSH2 0x2C43 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SSTORE PUSH1 0x22 SLOAD PUSH1 0x28 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x2DDB SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x1 SWAP2 POP PUSH2 0x1256 SWAP1 POP JUMP JUMPDEST PUSH2 0x2DF3 TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1256 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2E34 DUP4 PUSH2 0x2C43 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP3 SWAP2 PUSH2 0x2E64 SWAP2 PUSH2 0x3794 JUMP JUMPDEST PUSH2 0x2E6E SWAP2 SWAP1 PUSH2 0x3780 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2ED2 SWAP1 PUSH2 0x2EB4 SWAP1 TIMESTAMP PUSH2 0x3803 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x265F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x2EFA SWAP1 DUP5 SWAP1 PUSH2 0x3768 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x2F2A JUMPI DUP2 PUSH2 0x2215 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F86 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3304 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x2B34 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2FA4 SWAP2 SWAP1 PUSH2 0x357C JUMP JUMPDEST PUSH2 0x2B34 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1325 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x30EC JUMPI PUSH1 0x0 PUSH2 0x3027 PUSH1 0x1 DUP4 PUSH2 0x3803 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x303B SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x3803 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x30A0 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x305B JUMPI PUSH2 0x305B PUSH2 0x38DE JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x307E JUMPI PUSH2 0x307E PUSH2 0x38DE JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x30B1 JUMPI PUSH2 0x30B1 PUSH2 0x38C8 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xBE4 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0xBE4 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x310D JUMPI PUSH2 0x310D PUSH2 0x38DE JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x312B TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x31C2 JUMPI PUSH1 0x1E SLOAD PUSH2 0x3163 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xEAA JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x31E6 SWAP1 PUSH2 0x2AEE JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1971 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x320F SWAP1 DUP4 PUSH2 0x2AF8 JUMP JUMPDEST SWAP1 POP PUSH2 0x321C PUSH1 0x25 DUP3 PUSH2 0x2696 JUMP JUMPDEST ISZERO PUSH2 0x32F1 JUMPI PUSH2 0x322A TIMESTAMP PUSH2 0x2645 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x32B0 JUMPI PUSH2 0x3254 DUP2 PUSH2 0xEAA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x27 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x32E4 SWAP1 PUSH2 0xBD4 SWAP1 DUP4 PUSH2 0x28D7 JUMP JUMPDEST PUSH2 0x32EE SWAP1 DUP5 PUSH2 0x3768 JUMP JUMPDEST SWAP3 POP JUMPDEST POP DUP1 PUSH2 0x32FC DUP2 PUSH2 0x3846 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x31C5 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xACB DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 DUP5 EXTCODESIZE PUSH2 0x335D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1325 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x3379 SWAP2 SWAP1 PUSH2 0x360C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x33B6 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x33BB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x33CB DUP3 DUP3 DUP7 PUSH2 0x33D6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x33E5 JUMPI POP DUP2 PUSH2 0x2215 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x33F5 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1325 SWAP2 SWAP1 PUSH2 0x36E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x6 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x1256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3463 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2215 DUP2 PUSH2 0x38F4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3480 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2215 DUP2 PUSH2 0x38F4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x349E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x34A9 DUP2 PUSH2 0x38F4 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x34B9 DUP2 PUSH2 0x38F4 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x34D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x34E4 DUP2 PUSH2 0x38F4 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x34F4 DUP2 PUSH2 0x38F4 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x3504 DUP2 PUSH2 0x38F4 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3524 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x352F DUP2 PUSH2 0x38F4 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x353F DUP2 PUSH2 0x38F4 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x356E DUP2 PUSH2 0x38F4 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x358E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2215 DUP3 PUSH2 0x342F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x35AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x35B5 DUP5 PUSH2 0x343F JUMP JUMPDEST SWAP3 POP PUSH2 0x35C3 PUSH1 0x20 DUP6 ADD PUSH2 0x343F JUMP JUMPDEST SWAP2 POP PUSH2 0x35D1 PUSH1 0x40 DUP6 ADD PUSH2 0x342F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x35EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3605 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x361E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x381A JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 DUP3 ADD SWAP2 SWAP1 PUSH1 0x60 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x368B JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3669 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x36D9 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x36B4 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x3704 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x381A JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x6 SWAP2 SWAP1 SWAP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x377B JUMPI PUSH2 0x377B PUSH2 0x389C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x378F JUMPI PUSH2 0x378F PUSH2 0x38B2 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x37AE JUMPI PUSH2 0x37AE PUSH2 0x389C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x37DE JUMPI PUSH2 0x37DE PUSH2 0x389C JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x37F9 JUMPI PUSH2 0x37F9 PUSH2 0x389C JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3815 JUMPI PUSH2 0x3815 PUSH2 0x389C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3835 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x381D JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2AD3 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x385A JUMPI PUSH2 0x385A PUSH2 0x389C JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3870 JUMPI PUSH2 0x3870 PUSH2 0x38B2 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x3893 JUMPI PUSH2 0x3893 PUSH2 0x389C JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x12FF JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE 0xCD BLOCKHASH PUSH18 0xB868E9336807B54C1DB8FD201CE3FD9AEA78 0xC6 BYTE 0xCB 0xA9 DUP1 0xAC SLOAD 0x5D PUSH32 0xD264736F6C634300080700330000000000000000000000000000000000000000 ",
              "sourceMap": "143:1276:59:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3206:848:35;;;;;;:::i;:::-;;:::i;:::-;;;8739:25:84;;;8727:2;8712:18;3206:848:35;;;;;;;;1968:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1402:135:35;;;:::i;:::-;;;;;;;:::i;4104:514::-;;;;;;:::i;:::-;;:::i;8401:573::-;;;;;;:::i;:::-;;:::i;:::-;;1728:76:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2556:364:31;;;;;;:::i;:::-;;:::i;4668:1632:35:-;;;;;;:::i;:::-;;:::i;:::-;;;;8426:13:84;;8423:1;8412:28;;;8394:47;;8511:4;8499:17;;;8493:24;8479:39;;;8457:20;;;8450:69;8563:17;;;8557:24;8535:20;;;8528:54;8382:2;8367:18;4668:1632:35;8192:396:84;880:79:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;:::i;:::-;;;;;;;;;;;;;;362:32:31;;;;;-1:-1:-1;;;;;362:32:31;;;;;;;;;;:::i;2090:78:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;384:50:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6241:14:84;;6234:22;6216:41;;6204:2;6189:18;384:50:32;6076:187:84;691:106:59;;;;;;:::i;:::-;;:::i;1318:99::-;;;;;;:::i;:::-;;:::i;1053:115::-;;;;;;:::i;:::-;-1:-1:-1;;;;;1138:25:59;1119:4;1138:25;;;:13;:25;;;;;;;;;1053:115;7478:873:35;;;;;;:::i;:::-;;:::i;423:204:38:-;;;;;;:::i;:::-;;:::i;669:279::-;;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;-1:-1:-1;;;;;199:34:28;;;667:41:31;;;;;;834:50;;;;;;7219:209:35;;;;;;:::i;:::-;;:::i;533:194:32:-;;;;;;:::i;:::-;;:::i;945:79:35:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4195:110:31;;;;;;:::i;:::-;;:::i;1587:691:35:-;;;;;;:::i;:::-;;:::i;1788:223:31:-;;;;;;:::i;:::-;;:::i;1172:142:59:-;;;;;;:::i;:::-;;:::i;925:49:31:-;;;;;;590:36;;;;;-1:-1:-1;;;;;590:36:31;;;2385:105:29;;;:::i;226:52:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;226:52:38;;;2328:828:35;;;;;;:::i;:::-;;:::i;2210:50:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3140:152:31;;;;;;:::i;:::-;;:::i;2531:111:29:-;;;:::i;321:59:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;321:59:38;;;999:203:32;;;;;;:::i;:::-;;:::i;9024:681:35:-;;;;;;:::i;:::-;;:::i;769:69:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;480:65:59;;;;;;:::i;:::-;;:::i;1075:54:35:-;;;;;;:::i;:::-;;;;;;;;;;;;;;749:44:31;;;;;;762:202:32;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3973:182:31;;;;;;:::i;:::-;;:::i;6736:433:35:-;;;;;;:::i;:::-;;:::i;2960:140:31:-;;;;;;:::i;:::-;;:::i;299:49:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;435:37:31;;;;;-1:-1:-1;;;;;435:37:31;;;549:138:59;;;;;;:::i;:::-;;:::i;2286:230:31:-;;;;;;:::i;:::-;;:::i;3666:267::-;;;;;;:::i;:::-;;:::i;1846:80:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1105:32:31;;;;;;801:108:59;;;;;;:::i;:::-;;:::i;534:53:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;913:136:59;;;;;;:::i;:::-;;:::i;3332:188:31:-;;;;;;:::i;:::-;;:::i;2051:195::-;;;;;;:::i;:::-;;:::i;1237:211:32:-;;;;;;:::i;:::-;;:::i;513:36:31:-;;;;;-1:-1:-1;;;;;513:36:31;;;1180:52:35;;;;;;:::i;:::-;;;;;;;;;;;;;;268:41:28;;;;;-1:-1:-1;;;;;268:41:28;;;1015:49:31;;;;;;6364:322:35;;;;;;:::i;:::-;;:::i;3206:848::-;3277:16;3301:22;3326;3343:4;3326:16;:22::i;:::-;3446:16;;3301:47;;-1:-1:-1;3374:15:35;;3420:43;;3428:34;;3374:15;3428:34;:::i;:::-;3420:7;:43::i;:::-;-1:-1:-1;;;;;3401:16:35;;;;;;:10;:16;;;;;;:62;3396:576;;;3566:16;;-1:-1:-1;;;;;3545:16:35;;;;;;:10;:16;;;;;;3527:34;;:15;:34;:::i;:::-;3526:56;3522:324;;3704:16;;-1:-1:-1;;;;;3685:16:35;;;;;;:10;:16;;;;;;:35;;3704:16;3685:35;:::i;:::-;3671:50;;;;:::i;:::-;;;3396:576;;3522:324;-1:-1:-1;;;;;3821:16:35;;;;;;:10;:16;;;;;;3808:29;;;;:::i;3396:576::-;3941:24;3949:15;3941:7;:24::i;:::-;3928:37;;;;:::i;:::-;;;3396:576;4016:33;4023:9;4034:14;4016:6;:33::i;:::-;3988:25;4008:4;3988:19;:25::i;:::-;:61;;;;:::i;:::-;3977:72;3206:848;-1:-1:-1;;;;3206:848:35:o;1402:135::-;1465:22;1503:29;:20;:27;:29::i;:::-;1495:37;;1402:135;:::o;4104:514::-;4197:22;4231:41;:20;4261:10;4231:29;:41::i;:::-;4227:387;;;4282:27;4312:28;4329:10;4312:16;:28::i;:::-;4282:58;;4352:10;:17;;;4373:1;4352:22;4348:260;;-1:-1:-1;;;;;4410:25:35;;4386:21;4410:25;;;:13;:25;;;;;;;;:74;;4463:10;:21;;;4462:22;;;:::i;:::-;4410:74;;;4438:10;:21;;;4410:74;4526:12;;4581:16;;4512:86;;-1:-1:-1;;;4512:86:35;;4386:98;;-1:-1:-1;4501:98:35;;-1:-1:-1;;;;;4526:12:35;;;;4512:42;;:86;;4555:7;;4386:98;;4512:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:10;:98::i;:::-;4494:105;;;;;;4348:260;4274:340;4227:387;4104:514;;;;:::o;8401:573::-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;8598:10:35::1;::::0;8580:28:::1;::::0;:15:::1;:28;:::i;:::-;-1:-1:-1::0;;;;;8543:22:35;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;:34;;::::1;::::0;;;;;;;;;:65;;;;8614:20;;;:14:::1;:20:::0;;;;;:32;;;;;;;;;:43;;8650:7;;8543:22;8614:43:::1;::::0;8650:7;;8614:43:::1;:::i;:::-;::::0;;;-1:-1:-1;8663:50:35::1;::::0;-1:-1:-1;8687:4:35;8693:10;8705:7;8663:23:::1;:50::i;:::-;-1:-1:-1::0;;;;;8750:21:35;;::::1;8720:27;8750:21:::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;8793:23;;;;;:94:::1;;;8871:16;;8820:48;8836:19;8857:10;8820:15;:48::i;:::-;:67;8793:94;8789:132;;;8896:25;;-1:-1:-1::0;;;8896:25:35::1;;;;;;;;;;;8789:132;8949:10;-1:-1:-1::0;;;;;8933:36:35::1;8943:4;-1:-1:-1::0;;;;;8933:36:35::1;;8961:7;8933:36;;;;8739:25:84::0;;8727:2;8712:18;;8593:177;8933:36:35::1;;;;;;;;8537:437;8401:573:::0;;;;:::o;2556:364:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2647:27:31;::::1;2643:53;;2683:13;;-1:-1:-1::0;;;2683:13:31::1;;;;;;;;;;;2643:53;2702:12;:28:::0;;-1:-1:-1;;;;;2702:28:31;;::::1;-1:-1:-1::0;;;;;;2702:28:31;;::::1;::::0;::::1;::::0;;;:12:::1;2736:28:::0;;;:14:::1;:28;::::0;;;;;;:43;;;;::::1;::::0;;::::1;::::0;;;2830:12:::1;::::0;2816:55;;-1:-1:-1;;;2816:55:31;;2830:12;::::1;::::0;2816:40:::1;::::0;:55:::1;::::0;2717:13;;2816:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2785:28:31;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;:86;;-1:-1:-1;;2785:86:31::1;::::0;::::1;;::::0;;;::::1;::::0;;;2882:33;::::1;::::0;::::1;::::0;2785:28;;2882:33:::1;:::i;:::-;;;;;;;;2556:364:::0;:::o;4668:1632:35:-;4752:27;;:::i;:::-;4819:24;4827:15;4819:7;:24::i;:::-;-1:-1:-1;;;;;4791:17:35;;;;;;:5;:17;;;;;:24;;;:52;4787:1509;;;-1:-1:-1;;;;;;4924:17:35;;;;;:5;:17;;;;;;;;;4911:30;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4911:30:35;;;;;;;;;;;;;;;;;;;;;;;;;;;4668:1632::o;4787:1509::-;4962:12;4982:18;5003:43;5029:16;;5011:15;:34;;;;:::i;5003:43::-;-1:-1:-1;;;;;5059:17:35;;;;;;:5;:17;;;;;:24;;;4982:64;;-1:-1:-1;5059:38:35;;5055:1103;;;5220:15;;;5233:1;5220:15;;;;;;;;;5190:27;;5220:15;;;;;;;;;-1:-1:-1;;;;;;;;5266:17:35;;5245:18;5266:17;;;:5;:17;;;;;:25;5190:45;;-1:-1:-1;5266:25:35;;5344:24;5352:15;5344:7;:24::i;:::-;5326:42;;:15;:42;:::i;:::-;5302:11;5314:1;5302:14;;;;;;;;:::i;:::-;:67;;;;:14;;;;;;;;;;:67;5428:12;;-1:-1:-1;;;;;5450:26:35;;;5428:12;5450:26;;;:14;:26;;;;;;;;;5414:76;;-1:-1:-1;;;5414:76:35;;5428:12;;;;5414:35;;:76;;5450:26;;;;;5478:11;;5414:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5380:110;;;;;;;;;;;;-1:-1:-1;5525:33:35;;5546:12;;-1:-1:-1;5525:33:35;:::i;:::-;5501:57;;;;;;:21;;;:57;-1:-1:-1;5055:1103:35;;-1:-1:-1;5055:1103:35;;-1:-1:-1;;;;;5577:17:35;;;;;;:5;:17;;;;;:24;;;:37;-1:-1:-1;5573:585:35;;;5719:15;;;5732:1;5719:15;;;;;;;;5689:27;;5719:15;;;;;;;;;;-1:-1:-1;5719:15:35;5689:45;;5787:24;5795:15;5787:7;:24::i;:::-;5769:42;;:15;:42;:::i;:::-;5745:11;5757:1;5745:14;;;;;;;;:::i;:::-;;;;;;:67;;;;;;;;;;;5891:16;;5864:24;5872:15;5864:7;:24::i;:::-;5846:42;;:15;:42;:::i;:::-;:61;;;;:::i;:::-;5822:11;5834:1;5822:14;;;;;;;;:::i;:::-;:86;;;;:14;;;;;;;;;;:86;6015:12;;-1:-1:-1;;;;;6037:26:35;;;5919:22;6037:26;;;:14;:26;;;;;;;;6001:76;;-1:-1:-1;;;6001:76:35;;6015:12;;;;6001:35;;:76;;6037:26;;6065:11;;6001:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5951:126;;;;;;;;;;;;-1:-1:-1;5951:126:35;-1:-1:-1;6112:37:35;;5951:126;;6112:37;:::i;:::-;6088:61;;;;;;:21;;;:61;-1:-1:-1;;5573:585:35;6169:7;6165:125;;;6208:24;6216:15;6208:7;:24::i;:::-;6188:17;;;:44;6165:125;;;6257:24;6264:17;;;6257:24;6165:125;4954:1342;;4787:1509;4668:1632;;;:::o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;754:10:::1;:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;691:106:59:-;756:36;:20;781:10;756:24;:36::i;:::-;;691:106;:::o;1318:99::-;1385:27;1407:4;1385:21;:27::i;:::-;1318:99;:::o;7478:873:35:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;;;;;;;;;1680:1;2389:7;:18;7614:41:35::1;:20;7644:10:::0;7614:29:::1;:41::i;:::-;7609:80;;7664:25;;-1:-1:-1::0;;;7664:25:35::1;;;;;;;;;;;7609:80;7700:20;:5;7715:4:::0;7700:14:::1;:20::i;:::-;7695:50;;7729:16;;-1:-1:-1::0;;;7729:16:35::1;;;;;;;;;;;7695:50;-1:-1:-1::0;;;;;7752:21:35;::::1;;::::0;;;:15:::1;:21;::::0;;;;:37:::1;::::0;7778:10;7752:25:::1;:37::i;:::-;;7796:27;7818:4;7796:21;:27::i;:::-;7909:16;::::0;-1:-1:-1;;;;;7850:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;7834:72:::1;::::0;7850:43:::1;::::0;7886:7;;7850:43:::1;:::i;:::-;7895:10;7834:15;:72::i;:::-;:91;7830:129;;;7934:25;;-1:-1:-1::0;;;7934:25:35::1;;;;;;;;;;;7830:129;-1:-1:-1::0;;;;;7971:99:35;::::1;8000:16;::::0;;;:10:::1;:16;::::0;;;;;;;;8018:20:::1;:26:::0;;;;;;8046:17:::1;:23:::0;;;;;;;7971:99;;9565:25:84;;;9606:18;;;9599:34;;;;9649:18;;9642:34;7971:99:35::1;::::0;9553:2:84;9538:18;7971:99:35::1;;;;;;;8077:71;-1:-1:-1::0;;;;;8077:35:35;::::1;8113:10;8133:4;8140:7:::0;8077:35:::1;:71::i;:::-;-1:-1:-1::0;;;;;8154:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:44;;8191:7;;8154:21;:44:::1;::::0;8191:7;;8154:44:::1;:::i;:::-;::::0;;;-1:-1:-1;8231:48:35::1;::::0;-1:-1:-1;8242:36:35::1;8258:7:::0;8267:10;8242:15:::1;:36::i;8231:48::-;-1:-1:-1::0;;;;;8204:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;:75;;:23;;;:75:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;8290:56:35::1;::::0;8739:25:84;;;8326:10:35::1;::::0;-1:-1:-1;;;;;8290:56:35;;::::1;::::0;;;::::1;::::0;::::1;::::0;8727:2:84;8712:18;8290:56:35::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;7478:873:35:o;423:204:38:-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;527:21:38;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;-1:-1:-1;;;;;;527:33:38::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;596:14:38;;;;;;;571:51;;527:33;;596:14:::1;::::0;527:21;571:51:::1;::::0;::::1;423:204:::0;;;:::o;669:279::-;-1:-1:-1;;;;;1132:21:38;;;;;;;:15;:21;;;;;;;;;1118:10;:35;1114:69;;1162:21;;-1:-1:-1;;;1162:21:38;;;;;;;;;;;1114:69;-1:-1:-1;;;;;786:14:38;;::::1;761:22;786:14:::0;;;:8:::1;:14;::::0;;;;;;;;;824:15:::1;:21:::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;;807:38:38;;::::1;::::0;;;::::1;::::0;;;851:28;;;;::::1;::::0;;891:52;786:14;::::1;::::0;;;;910:10:::1;::::0;891:52:::1;::::0;761:22;891:52:::1;755:193;669:279:::0;;:::o;7219:209:35:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;7308:39:35::1;:20;7336:10:::0;7308:27:::1;:39::i;:::-;7303:78;;7356:25;;-1:-1:-1::0;;;7356:25:35::1;;;;;;;;;;;7303:78;7392:31;7412:10;7392:31;;;;;;:::i;533:194:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;4195:110:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4264:3:31::1;:10:::0;;;4285:15:::1;::::0;8739:25:84;;;4285:15:31::1;::::0;8727:2:84;8712:18;4285:15:31::1;8593:177:84::0;1587:691:35;1657:22;1692:9;1687:587;-1:-1:-1;;;;;1707:21:35;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;1703:1;:34;1687:587;;;-1:-1:-1;;;;;1773:21:35;;1752:18;1773:21;;;:15;:21;;;;;:27;;1798:1;1773:24;:27::i;:::-;1752:48;-1:-1:-1;1812:41:35;:20;1752:48;1812:29;:41::i;:::-;1808:460;;;1865:27;1895:28;1912:10;1895:16;:28::i;:::-;1865:58;;1937:10;:17;;;1958:1;1937:22;1933:327;;-1:-1:-1;;;;;1997:25:35;;1973:21;1997:25;;;:13;:25;;;;;;;;:74;;2050:10;:21;;;2049:22;;;:::i;:::-;1997:74;;;2025:10;:21;;;1997:74;2139:12;;-1:-1:-1;;;;;2168:21:35;;;2139:12;2168:21;;;:15;:21;;;;;;;;:33;;;;;;;;;;;;;2220:16;;2125:112;;-1:-1:-1;;;2125:112:35;;1973:98;;-1:-1:-1;2101:148:35;;2139:12;;;;;2125:42;;:112;;1973:98;;2125:112;;;:::i;2101:148::-;2083:166;;;;:::i;:::-;;;1961:299;1933:327;1855:413;1808:460;-1:-1:-1;1739:3:35;;;;:::i;:::-;;;;1687:587;;;;1587:691;;;:::o;1788:223:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1879:27:31;::::1;1875:53;;1915:13;;-1:-1:-1::0;;;1915:13:31::1;;;;;;;;;;;1875:53;1934:12;:28:::0;;-1:-1:-1;;;;;;1934:28:31::1;-1:-1:-1::0;;;;;1934:28:31;::::1;;::::0;;1973:33:::1;::::0;::::1;::::0;::::1;::::0;1934:28;;1973:33:::1;:::i;1172:142:59:-:0;-1:-1:-1;;;;;1279:21:59;;;;;;:15;:21;;;;;1241:22;;1279:30;;:28;:30::i;2385:105:29:-;2433:22;2471:14;:5;:12;:14::i;2328:828:35:-;2401:25;2434:22;2459;2476:4;2459:16;:22::i;:::-;2588:16;;-1:-1:-1;;;;;2568:16:35;;;;;;:10;:16;;;;;;2434:47;;-1:-1:-1;2588:16:35;2550:34;;:15;:34;:::i;:::-;2549:55;2545:607;;;2729:1;2712:14;:18;:220;;-1:-1:-1;;;;;2906:26:35;;;;;;:20;:26;;;;;;2712:220;;;-1:-1:-1;;;;;2789:23:35;;;;;;:17;:23;;;;;;;;;2742:20;:26;;;;;;;:43;;2771:14;;2742:43;:::i;:::-;2741:71;;;;:::i;:::-;2692:240;;2545:607;;3140:152:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3223:10:31::1;:24:::0;;;3258:29:::1;::::0;8739:25:84;;;3258:29:31::1;::::0;8712:18:84;3258:29:31::1;8593:177:84::0;2531:111:29;2582:22;2620:17;:8;:15;:17::i;999:203:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;9024:681:35:-:0;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;9174:23:35;::::1;9170:49;;9206:13;;-1:-1:-1::0;;;9206:13:35::1;;;;;;;;;;;9170:49;-1:-1:-1::0;;;;;9229:20:35;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;;;;;;9225:69:::1;;9275:19;;-1:-1:-1::0;;;9275:19:35::1;;;;;;;;;;;9225:69;-1:-1:-1::0;;;;;9304:22:35;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;:34;;::::1;::::0;;;;;;;9342:15:::1;-1:-1:-1::0;9300:81:35::1;;9366:15;;-1:-1:-1::0;;;9366:15:35::1;;;;;;;;;;;9300:81;-1:-1:-1::0;;;;;9391:14:35;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;9387:37;;;9414:10;;-1:-1:-1::0;;;9414:10:35::1;;;;;;;;;;;9387:37;-1:-1:-1::0;;;;;9449:20:35;;::::1;9431:15;9449:20:::0;;;:14:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;;;;;;;;;;9488:39;;;;9540:22;;;:16:::1;:22:::0;;;;;:34;;;;;;;;9533:41;9449:32;9581:51:::1;::::0;9613:9;9449:32;9581:31:::1;:51::i;:::-;9681:9;-1:-1:-1::0;;;;;9643:57:35::1;9669:10;-1:-1:-1::0;;;;;9643:57:35::1;9663:4;-1:-1:-1::0;;;;;9643:57:35::1;;9692:7;9643:57;;;;8739:25:84::0;;8727:2;8712:18;;8593:177;9643:57:35::1;;;;;;;;9164:541;9024:681:::0;;;;:::o;480:65:59:-;525:15;:5;535:4;525:9;:15::i;762:202:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;3973:182:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4066:15:31::1;:34:::0;;;4111:39:::1;::::0;8739:25:84;;;4111:39:31::1;::::0;8727:2:84;8712:18;4111:39:31::1;8593:177:84::0;6736:433:35;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;6834:36:35::1;:20;6859:10:::0;6834:24:::1;:36::i;:::-;6829:73;;6879:23;;-1:-1:-1::0;;;6879:23:35::1;;;;;;;;;;;6829:73;6950:10;-1:-1:-1::0;;;;;6937:29:35::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6908:26:35;;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;:60;;-1:-1:-1;;;;;;6908:60:35::1;::::0;;::::1;::::0;;::::1;::::0;;7016:12:::1;::::0;7002:68;;-1:-1:-1;;;7002:68:35;;7016:12;::::1;::::0;7002:40:::1;::::0;:68:::1;::::0;6908:60;7002:68:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6974:25:35;::::1;;::::0;;;:13:::1;:25;::::0;;;;:96;;-1:-1:-1;;6974:96:35::1;::::0;::::1;;::::0;;;::::1;::::0;;7096:28:::1;6974:25:::0;7096:16:::1;:28::i;:::-;-1:-1:-1::0;;;;;7076:17:35;::::1;;::::0;;;:5:::1;:17;::::0;;;;;;;;:48;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;;7076:48:35::1;-1:-1:-1::0;;;;;;7076:48:35;;;;;;::::1;;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;7135:29;::::1;::::0;::::1;::::0;7082:10;;7135:29:::1;:::i;2960:140:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3039:8:31::1;:20:::0;;;3070:25:::1;::::0;8739::84;;;3070::31::1;::::0;8727:2:84;8712:18;3070:25:31::1;8593:177:84::0;549:138:59;-1:-1:-1;;;;;645:21:59;;626:4;645:21;;;:15;:21;;;;;:37;;671:10;645:25;:37::i;:::-;638:44;549:138;-1:-1:-1;;;549:138:59:o;2286:230:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2379:28:31;::::1;2375:54;;2416:13;;-1:-1:-1::0;;;2416:13:31::1;;;;;;;;;;;2375:54;2435:13;:30:::0;;-1:-1:-1;;;;;;2435:30:31::1;-1:-1:-1::0;;;;;2435:30:31;::::1;;::::0;;2476:35:::1;::::0;::::1;::::0;::::1;::::0;2435:30;;2476:35:::1;:::i;3666:267::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1341:6:31::1;3765:17;:43;3761:73;;;3817:17;;-1:-1:-1::0;;;3817:17:31::1;;;;;;;;;;;3761:73;3840:16;:36:::0;;;3887:41:::1;::::0;8739:25:84;;;3887:41:31::1;::::0;8727:2:84;8712:18;3887:41:31::1;8593:177:84::0;801:108:59;865:39;:20;893:10;865:27;:39::i;913:136::-;979:27;;:::i;:::-;-1:-1:-1;;;;;;1027:17:59;;;;;:5;:17;;;;;;;;;1014:30;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1014:30:59;;;;;;;;;;;;;;;;;;;;;;;;;;;913:136::o;3332:188:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3427:16:31::1;:36:::0;;;3474:41:::1;::::0;8739:25:84;;;3474:41:31::1;::::0;8727:2:84;8712:18;3474:41:31::1;8593:177:84::0;2051:195:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2134:23:31;::::1;2130:49;;2166:13;;-1:-1:-1::0;;;2166:13:31::1;;;;;;;;;;;2130:49;2185:8;:20:::0;;-1:-1:-1;;;;;;2185:20:31::1;-1:-1:-1::0;;;;;2185:20:31;::::1;;::::0;;2216:25:::1;::::0;::::1;::::0;::::1;::::0;2185:20;;2216:25:::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;6364:322:35:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;6475:20:35::1;:5;6490:4:::0;6475:14:::1;:20::i;:::-;6470:50;;6504:16;;-1:-1:-1::0;;;6504:16:35::1;;;;;;;;;;;6470:50;6526:27;6548:4;6526:21;:27::i;:::-;-1:-1:-1::0;;;;;6559:26:35;::::1;;::::0;;;:20:::1;:26;::::0;;;;:37;;6589:7;;6559:26;:37:::1;::::0;6589:7;;6559:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;6607:74:35;::::1;6636:16;::::0;;;:10:::1;:16;::::0;;;;;;;;6654:20:::1;:26:::0;;;;;;;;6607:74;;::::1;::::0;::::1;::::0;9284:25:84;;9340:2;9325:18;;9318:34;9272:2;9257:18;;9110:248;6607:74:35::1;;;;;;;;6364:322:::0;;:::o;14272:148::-;14332:24;14398:16;;14385:10;:29;;;;:::i;:::-;14371:44;;:10;:44;:::i;13953:243::-;14034:15;14075:16;;14061:11;:30;14057:134;;;14141:16;;14112:25;14126:11;14112;:25;:::i;:::-;14111:46;;;;:::i;:::-;14101:56;;14057:134;;9499:257:8;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;8100:165::-;-1:-1:-1;;;;;8233:23:8;;8180:4;3767:19;;;:12;;;:19;;;;;;:24;;8203:55;3671:127;14499:163:35;14563:16;14594:63;14610:11;14623:16;;14641:15;;14594;:63::i;12794:1028::-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;-1:-1:-1;;;;;12927:21:35;::::1;::::0;;:15:::1;:21;::::0;;;;:42:::1;::::0;12958:10;12927:30:::1;:42::i;:::-;12922:80;;12978:24;;-1:-1:-1::0;;;12978:24:35::1;;;;;;;;;;;12922:80;-1:-1:-1::0;;;;;13012:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;:43;-1:-1:-1;13008:82:35::1;;;13064:26;;-1:-1:-1::0;;;13064:26:35::1;;;;;;;;;;;13008:82;13145:22;13162:4;13145:16;:22::i;:::-;13173:30;13206:48;13217:36;13233:7;13242:10;13217:15;:36::i;13206:48::-;-1:-1:-1::0;;;;;13337:23:35;::::1;13363:1;13337:23:::0;;;:17:::1;:23;::::0;;;;;13173:81;;-1:-1:-1;13337:27:35;13333:330:::1;;-1:-1:-1::0;;;;;13576:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;;13521:20:::1;:26:::0;;;;;;;:51:::1;::::0;13550:22;;13521:51:::1;:::i;:::-;13520:79;;;;:::i;:::-;-1:-1:-1::0;;;;;13490:26:35;::::1;;::::0;;;:20:::1;:26;::::0;;;;:109;;:26;;;:109:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;13607:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;:49;;13634:22;;13607:23;:49:::1;::::0;13634:22;;13607:49:::1;:::i;:::-;::::0;;;-1:-1:-1;;13333:330:35::1;-1:-1:-1::0;;;;;13669:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:44;;13706:7;;13669:21;:44:::1;::::0;13706:7;;13669:44:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;13723:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;13719:99:::1;;-1:-1:-1::0;;;;;13771:21:35;::::1;;::::0;;;:15:::1;:21;::::0;;;;:40:::1;::::0;13800:10;13771:28:::1;:40::i;:::-;;13719:99;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;12794:1028:35:o;14740:384::-;-1:-1:-1;;;;;14859:17:35;;14833:14;14859:17;;;:5;:17;;;;;:24;;;:29;14855:265;;-1:-1:-1;;;;;14922:25:35;;14898:21;14922:25;;;:13;:25;;;;;;;;:88;;-1:-1:-1;;;;;14982:17:35;;;;;;:5;:17;;;;;:28;14981:29;;-1:-1:-1;;;14982:28:35;;;;14981:29;:::i;:::-;14922:88;;;-1:-1:-1;;;;;14950:17:35;;;;;;:5;:17;;;;;:28;-1:-1:-1;;;14950:28:35;;;;14922:88;15041:12;;15096:16;;15027:86;;-1:-1:-1;;;15027:86:35;;14898:112;;-1:-1:-1;;;;;;15041:12:35;;;;15027:42;;:86;;15070:7;;14898:112;;15027:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7545:150:8:-;7615:4;7638:50;7643:3;-1:-1:-1;;;;;7663:23:8;;7638:4;:50::i;15273:229:35:-;15341:31;15367:4;15341:25;:31::i;:::-;;15378:23;15396:4;15378:17;:23::i;:::-;-1:-1:-1;;;;;15445:26:35;;;;;;:20;:26;;;;;;;;;15473:17;:23;;;;;;;15436:61;;15445:26;15436:8;:61::i;:::-;-1:-1:-1;;;;;15407:26:35;;;;;;;:20;:26;;;;;:90;15273:229::o;845:241:4:-;1010:68;;-1:-1:-1;;;;;4263:15:84;;;1010:68:4;;;4245:34:84;4315:15;;4295:18;;;4288:43;4347:18;;;4340:34;;;983:96:4;;1003:5;;-1:-1:-1;;;1033:27:4;4180:18:84;;1010:68:4;;;;-1:-1:-1;;1010:68:4;;;;;;;;;;;;;;-1:-1:-1;;;;;1010:68:4;-1:-1:-1;;;;;;1010:68:4;;;;;;;;;;983:19;:96::i;:::-;845:241;;;;:::o;7863:156:8:-;7936:4;7959:53;7967:3;-1:-1:-1;;;;;7987:23:8;;7959:7;:53::i;8346:115::-;8409:7;8435:19;8443:3;3961:18;;3879:107;8803:156;8877:7;8927:22;8931:3;8943:5;8927:3;:22::i;634:205:4:-;773:58;;-1:-1:-1;;;;;5326:32:84;;773:58:4;;;5308:51:84;5375:18;;;5368:34;;;746:86:4;;766:5;;-1:-1:-1;;;796:23:4;5281:18:84;;773:58:4;5134:274:84;746:86:4;634:205;;;:::o;4986:109:8:-;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;735:3600:23:-;833:14;;;-1:-1:-1;;1336:1:23;1333;1326:20;1371:1;1368;1364:9;1355:18;;1418:5;1414:2;1411:13;1403:5;1399:2;1395:14;1391:34;1382:43;;;1501:5;1510:1;1501:10;1497:155;;;1545:1;1531:11;:15;1523:24;;;;;;-1:-1:-1;1588:23:23;;;;-1:-1:-1;1630:13:23;;1497:155;1773:5;1759:11;:19;1751:28;;;;;;2044:17;2114:11;2111:1;2108;2101:25;3338:1;3319;2473;2458:12;;:16;;2457:32;;2575:22;;;;3319:15;;;3318:21;;3557:17;;;3553:21;;3546:28;3613:17;;;3609:21;;3602:28;3670:17;;;3666:21;;3659:28;3727:17;;;3723:21;;3716:28;3784:17;;;3780:21;;3773:28;3842:17;;;3838:21;;;3831:28;2442:12;2923;;;2919:23;;;2915:31;;;2233:20;;;2222:32;;;2970:12;;;;2272:21;;2693:16;;;;2961:21;;;;4292:11;;735:3600;-1:-1:-1;;;;735:3600:23:o;11656:118:35:-;11737:32;11764:4;11737:26;:32::i;:::-;-1:-1:-1;;;;;11711:23:35;;;;;;;:17;:23;;;;;:58;11656:118::o;1630:404:8:-;1693:4;3767:19;;;:12;;;:19;;;;;;1709:319;;-1:-1:-1;1751:23:8;;;;;;;;:11;:23;;;;;;;;;;;;;1931:18;;1909:19;;;:12;;;:19;;;;;;:40;;;;1963:11;;1709:319;-1:-1:-1;2012:5:8;2005:12;;9829:1303:35;9896:14;9941:24;9949:15;9941:7;:24::i;:::-;-1:-1:-1;;;;;9922:16:35;;;;;;:10;:16;;;;;;:43;9918:1210;;;10070:43;10096:16;;10078:15;:34;;;;:::i;10070:43::-;-1:-1:-1;;;;;10050:16:35;;;;;;:10;:16;;;;;;:63;10046:1076;;10214:22;10231:4;10214:16;:22::i;:::-;-1:-1:-1;;;;;10275:23:35;;;;;;:17;:23;;;;;;;;;10246:20;:26;;;;;;:52;10327:24;10335:15;10327:7;:24::i;:::-;-1:-1:-1;;;;;10308:16:35;;;;;;:10;:16;;;;;:43;-1:-1:-1;10373:4:35;4668:1632;;;:::o;10046:1076::-;10436:16;;-1:-1:-1;;;;;10415:16:35;;;;;;:10;:16;;;;;;10397:34;;:15;:34;:::i;:::-;10396:56;10392:730;;10544:22;10561:4;10544:16;:22::i;:::-;-1:-1:-1;;;;;10605:23:35;;;;;;:17;:23;;;;;;;;;10576:20;:26;;;;;:52;10658:16;;10638:10;:16;;;;;:36;;10658:16;;10638;;:36;;10658:16;;10638:36;:::i;:::-;;;;-1:-1:-1;10696:4:35;;-1:-1:-1;10392:730:35;;-1:-1:-1;10392:730:35;;10736:24;10744:15;10736:7;:24::i;:::-;-1:-1:-1;;;;;10719:14:35;;;;;;:8;:14;;;;;;:41;10715:407;;;-1:-1:-1;;;;;10885:23:35;;10853:29;10885:23;;;:17;:23;;;;;;10918:22;10903:4;10918:16;:22::i;:::-;-1:-1:-1;;;;;11009:23:35;;;;;;:17;:23;;;;;;;;;10980:20;:26;;;;;;;11036:21;;10980:52;;;:::i;:::-;10979:78;;;;:::i;:::-;-1:-1:-1;;;;;10950:26:35;;;;;;:20;:26;;;;;:107;-1:-1:-1;9829:1303:35;;;:::o;11196:400::-;-1:-1:-1;;;;;11509:16:35;;;;;;:10;:16;;;;;;11484:67;;11491:34;;:15;:34;:::i;:::-;-1:-1:-1;;;;;11527:23:35;;;;;;:17;:23;;;;;;11484:6;:67::i;:::-;-1:-1:-1;;;;;11454:26:35;;;;;;:20;:26;;;;;:97;;:26;;;:97;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11557:16:35;;;;;:10;:16;;;;;11576:15;11557:34;;11196:400::o;391:104:7:-;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:7;;391:104;-1:-1:-1;391:104:7:o;3140:706:4:-;3559:23;3585:69;3613:4;3585:69;;;;;;;;;;;;;;;;;3593:5;-1:-1:-1;;;;;3585:27:4;;;:69;;;;;:::i;:::-;3668:17;;3559:95;;-1:-1:-1;3668:21:4;3664:176;;3763:10;3752:30;;;;;;;;;;;;:::i;:::-;3744:85;;;;-1:-1:-1;;;3744:85:4;;7623:2:84;3744:85:4;;;7605:21:84;7662:2;7642:18;;;7635:30;7701:34;7681:18;;;7674:62;-1:-1:-1;;;7752:18:84;;;7745:40;7802:19;;3744:85:4;7421:406:84;2202:1388:8;2268:4;2405:19;;;:12;;;:19;;;;;;2439:15;;2435:1149;;2808:21;2832:14;2845:1;2832:10;:14;:::i;:::-;2880:18;;2808:38;;-1:-1:-1;2860:17:8;;2880:22;;2901:1;;2880:22;:::i;:::-;2860:42;;2934:13;2921:9;:26;2917:398;;2967:17;2987:3;:11;;2999:9;2987:22;;;;;;;;:::i;:::-;;;;;;;;;2967:42;;3138:9;3109:3;:11;;3121:13;3109:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3221:23;;;:12;;;:23;;;;;:36;;;2917:398;3393:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3485:3;:12;;:19;3498:5;3485:19;;;;;;;;;;;3478:26;;;3526:4;3519:11;;;;;;;2435:1149;3568:5;3561:12;;;;;4328:118;4395:7;4421:3;:11;;4433:5;4421:18;;;;;;;;:::i;:::-;;;;;;;;;4414:25;;4328:118;;;;:::o;11943:753:35:-;12011:22;12075:24;12083:15;12075:7;:24::i;:::-;12051:12;;-1:-1:-1;;;;;12051:12:35;12045:19;;;;:5;:19;;;;;12051:12;12045:26;;:54;12041:170;;12191:12;;12174:30;;-1:-1:-1;;;;;12191:12:35;12174:16;:30::i;:::-;12158:12;;-1:-1:-1;;;;;12158:12:35;12152:19;;;;:5;:19;;;;;;;;;:52;;;;;;;;;;;;;;;;-1:-1:-1;;;12152:52:35;-1:-1:-1;;;;;;12152:52:35;;;;;;;;;;;;;;;;;;12158:12;12152:52;;;;;12041:170;12222:9;12217:475;-1:-1:-1;;;;;12237:21:35;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;12233:1;:34;12217:475;;;-1:-1:-1;;;;;12303:21:35;;12282:18;12303:21;;;:15;:21;;;;;:27;;12328:1;12303:24;:27::i;:::-;12282:48;-1:-1:-1;12342:41:35;:20;12282:48;12342:29;:41::i;:::-;12338:348;;;12427:24;12435:15;12427:7;:24::i;:::-;-1:-1:-1;;;;;12399:17:35;;;;;;:5;:17;;;;;:24;;;:52;12395:181;;12537:28;12554:10;12537:16;:28::i;:::-;-1:-1:-1;;;;;12517:17:35;;;;;;:5;:17;;;;;;;;;:48;;;;;;;;;;;;;;;;-1:-1:-1;;;12517:48:35;-1:-1:-1;;;;;;12517:48:35;;;;;;;;;;;;;;;;;;;;;;;12395:181;-1:-1:-1;;;;;12630:21:35;;;;;;;:15;:21;;;;;;;;:33;;;;;;;;;;12603:74;;12614:62;;12652:10;12614:15;:62::i;12603:74::-;12585:92;;;;:::i;:::-;;;12338:348;-1:-1:-1;12269:3:35;;;;:::i;:::-;;;;12217:475;;3461:223:5;3594:12;3625:52;3647:6;3655:4;3661:1;3664:12;3594;1034:20;;4828:60;;;;-1:-1:-1;;;4828:60:5;;7265:2:84;4828:60:5;;;7247:21:84;7304:2;7284:18;;;7277:30;7343:31;7323:18;;;7316:59;7392:18;;4828:60:5;7063:353:84;4828:60:5;4900:12;4914:23;4941:6;-1:-1:-1;;;;;4941:11:5;4960:5;4967:4;4941:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4899:73;;;;4989:51;5006:7;5015:10;5027:12;4989:16;:51::i;:::-;4982:58;4548:499;-1:-1:-1;;;;;;;4548:499:5:o;7161:692::-;7307:12;7335:7;7331:516;;;-1:-1:-1;7365:10:5;7358:17;;7331:516;7476:17;;:21;7472:365;;7670:10;7664:17;7730:15;7717:10;7713:2;7709:19;7702:44;7472:365;7809:12;7802:20;;-1:-1:-1;;;7802:20:5;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:164:84:-;90:13;;139;;132:21;122:32;;112:60;;168:1;165;158:12;183:164;260:13;;313:1;302:20;;;292:31;;282:59;;337:1;334;327:12;352:247;411:6;464:2;452:9;443:7;439:23;435:32;432:52;;;480:1;477;470:12;432:52;519:9;506:23;538:31;563:5;538:31;:::i;604:251::-;674:6;727:2;715:9;706:7;702:23;698:32;695:52;;;743:1;740;733:12;695:52;775:9;769:16;794:31;819:5;794:31;:::i;860:388::-;928:6;936;989:2;977:9;968:7;964:23;960:32;957:52;;;1005:1;1002;995:12;957:52;1044:9;1031:23;1063:31;1088:5;1063:31;:::i;:::-;1113:5;-1:-1:-1;1170:2:84;1155:18;;1142:32;1183:33;1142:32;1183:33;:::i;:::-;1235:7;1225:17;;;860:388;;;;;:::o;1253:529::-;1330:6;1338;1346;1399:2;1387:9;1378:7;1374:23;1370:32;1367:52;;;1415:1;1412;1405:12;1367:52;1454:9;1441:23;1473:31;1498:5;1473:31;:::i;:::-;1523:5;-1:-1:-1;1580:2:84;1565:18;;1552:32;1593:33;1552:32;1593:33;:::i;:::-;1645:7;-1:-1:-1;1704:2:84;1689:18;;1676:32;1717:33;1676:32;1717:33;:::i;:::-;1769:7;1759:17;;;1253:529;;;;;:::o;1787:456::-;1864:6;1872;1880;1933:2;1921:9;1912:7;1908:23;1904:32;1901:52;;;1949:1;1946;1939:12;1901:52;1988:9;1975:23;2007:31;2032:5;2007:31;:::i;:::-;2057:5;-1:-1:-1;2114:2:84;2099:18;;2086:32;2127:33;2086:32;2127:33;:::i;:::-;1787:456;;2179:7;;-1:-1:-1;;;2233:2:84;2218:18;;;;2205:32;;1787:456::o;2248:315::-;2316:6;2324;2377:2;2365:9;2356:7;2352:23;2348:32;2345:52;;;2393:1;2390;2383:12;2345:52;2432:9;2419:23;2451:31;2476:5;2451:31;:::i;:::-;2501:5;2553:2;2538:18;;;;2525:32;;-1:-1:-1;;;2248:315:84:o;2568:202::-;2635:6;2688:2;2676:9;2667:7;2663:23;2659:32;2656:52;;;2704:1;2701;2694:12;2656:52;2727:37;2754:9;2727:37;:::i;2775:364::-;2856:6;2864;2872;2925:2;2913:9;2904:7;2900:23;2896:32;2893:52;;;2941:1;2938;2931:12;2893:52;2964:38;2992:9;2964:38;:::i;:::-;2954:48;;3021:47;3064:2;3053:9;3049:18;3021:47;:::i;:::-;3011:57;;3087:46;3129:2;3118:9;3114:18;3087:46;:::i;:::-;3077:56;;2775:364;;;;;:::o;3144:180::-;3203:6;3256:2;3244:9;3235:7;3231:23;3227:32;3224:52;;;3272:1;3269;3262:12;3224:52;-1:-1:-1;3295:23:84;;3144:180;-1:-1:-1;3144:180:84:o;3329:184::-;3399:6;3452:2;3440:9;3431:7;3427:23;3423:32;3420:52;;;3468:1;3465;3458:12;3420:52;-1:-1:-1;3491:16:84;;3329:184;-1:-1:-1;3329:184:84:o;3518:274::-;3647:3;3685:6;3679:13;3701:53;3747:6;3742:3;3735:4;3727:6;3723:17;3701:53;:::i;:::-;3770:16;;;;;3518:274;-1:-1:-1;;3518:274:84:o;3797:203::-;-1:-1:-1;;;;;3961:32:84;;;;3943:51;;3931:2;3916:18;;3797:203::o;4385:744::-;-1:-1:-1;;;;;4631:32:84;;4613:51;;4601:2;4683;4701:18;;;4694:30;;;4773:13;;4586:18;;;4795:22;;;4553:4;;4874:15;;;;4683:2;4848;4833:18;;;4553:4;4917:186;4931:6;4928:1;4925:13;4917:186;;;4996:13;;5011:10;4992:30;4980:43;;5078:15;;;;5043:12;;;;4953:1;4946:9;4917:186;;;-1:-1:-1;5120:3:84;;4385:744;-1:-1:-1;;;;;;;4385:744:84:o;5413:658::-;5584:2;5636:21;;;5706:13;;5609:18;;;5728:22;;;5555:4;;5584:2;5807:15;;;;5781:2;5766:18;;;5555:4;5850:195;5864:6;5861:1;5858:13;5850:195;;;5929:13;;-1:-1:-1;;;;;5925:39:84;5913:52;;6020:15;;;;5985:12;;;;5961:1;5879:9;5850:195;;;-1:-1:-1;6062:3:84;;5413:658;-1:-1:-1;;;;;;5413:658:84:o;6268:383::-;6417:2;6406:9;6399:21;6380:4;6449:6;6443:13;6492:6;6487:2;6476:9;6472:18;6465:34;6508:66;6567:6;6562:2;6551:9;6547:18;6542:2;6534:6;6530:15;6508:66;:::i;:::-;6635:2;6614:15;-1:-1:-1;;6610:29:84;6595:45;;;;6642:2;6591:54;;6268:383;-1:-1:-1;;6268:383:84:o;7832:355::-;8034:2;8016:21;;;8073:2;8053:18;;;8046:30;8112:33;8107:2;8092:18;;8085:61;8178:2;8163:18;;7832:355::o;8775:330::-;8973:25;;;9045:1;9034:21;;;;9029:2;9014:18;;9007:49;9087:2;9072:18;;9065:34;8961:2;8946:18;;8775:330::o;9687:128::-;9727:3;9758:1;9754:6;9751:1;9748:13;9745:39;;;9764:18;;:::i;:::-;-1:-1:-1;9800:9:84;;9687:128::o;9820:120::-;9860:1;9886;9876:35;;9891:18;;:::i;:::-;-1:-1:-1;9925:9:84;;9820:120::o;9945:168::-;9985:7;10051:1;10047;10043:6;10039:14;10036:1;10033:21;10028:1;10021:9;10014:17;10010:45;10007:71;;;10058:18;;:::i;:::-;-1:-1:-1;10098:9:84;;9945:168::o;10118:359::-;10156:4;10200:1;10197;10186:16;10236:1;10233;10222:16;10266:1;10261:3;10257:11;10332:3;10313:16;10309:21;10305:31;10300:3;10296:41;10291:2;10284:10;10280:58;10277:84;;;10341:18;;:::i;:::-;10412:3;10394:16;10390:26;10385:3;10381:36;10377:2;10373:45;10370:71;;;10421:18;;:::i;:::-;-1:-1:-1;10458:13:84;;;10118:359;-1:-1:-1;;;10118:359:84:o;10482:125::-;10522:4;10550:1;10547;10544:8;10541:34;;;10555:18;;:::i;:::-;-1:-1:-1;10592:9:84;;10482:125::o;10612:258::-;10684:1;10694:113;10708:6;10705:1;10702:13;10694:113;;;10784:11;;;10778:18;10765:11;;;10758:39;10730:2;10723:10;10694:113;;;10825:6;10822:1;10819:13;10816:48;;;-1:-1:-1;;10860:1:84;10842:16;;10835:27;10612:258::o;10875:135::-;10914:3;-1:-1:-1;;10935:17:84;;10932:43;;;10955:18;;:::i;:::-;-1:-1:-1;11002:1:84;10991:13;;10875:135::o;11015:112::-;11047:1;11073;11063:35;;11078:18;;:::i;:::-;-1:-1:-1;11112:9:84;;11015:112::o;11132:193::-;11166:3;11213:5;11210:1;11199:20;11247:16;11243:21;11234:7;11231:34;11228:60;;;11268:18;;:::i;:::-;11308:1;11304:15;;11132:193;-1:-1:-1;;11132:193:84:o;11330:127::-;11391:10;11386:3;11382:20;11379:1;11372:31;11422:4;11419:1;11412:15;11446:4;11443:1;11436:15;11462:127;11523:10;11518:3;11514:20;11511:1;11504:31;11554:4;11551:1;11544:15;11578:4;11575:1;11568:15;11594:127;11655:10;11650:3;11646:20;11643:1;11636:31;11686:4;11683:1;11676:15;11710:4;11707:1;11700:15;11726:127;11787:10;11782:3;11778:20;11775:1;11768:31;11818:4;11815:1;11808:15;11842:4;11839:1;11832:15;11990:131;-1:-1:-1;;;;;12065:31:84;;12055:42;;12045:70;;12111:1;12108;12101:12"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "2931000",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "52170",
                "acceptJobOwnership(address)": "55234",
                "addDisputer(address)": "30215",
                "addLiquidityToJob(address,address,uint256)": "infinite",
                "addSlasher(address)": "30259",
                "approveLiquidity(address)": "infinite",
                "approvedLiquidities()": "infinite",
                "bondTime()": "2395",
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "changeJobOwnership(address,address)": "infinite",
                "disputers(address)": "2835",
                "disputes(address)": "2834",
                "fee()": "2438",
                "firstSeen(address)": "2700",
                "forceLiquidityCreditsToJob(address,uint256)": "infinite",
                "governance()": "2450",
                "hasBonded(address)": "2570",
                "inflationPeriod()": "2658",
                "internalJobLiquidities(address)": "infinite",
                "internalSettleJobAccountance(address)": "infinite",
                "jobLiquidityCredits(address)": "infinite",
                "jobOwner(address)": "2951",
                "jobPendingOwner(address)": "2687",
                "jobPeriodCredits(address)": "infinite",
                "jobTokenCredits(address,address)": "infinite",
                "jobs()": "infinite",
                "keep3rHelper()": "2669",
                "keep3rV1()": "2605",
                "keep3rV1Proxy()": "2405",
                "keepers()": "infinite",
                "kp3rWethPool()": "2692",
                "liquidityAmount(address,address)": "infinite",
                "liquidityMinimum()": "2417",
                "observeLiquidity(address)": "infinite",
                "pendingBonds(address,address)": "infinite",
                "pendingGovernance()": "2713",
                "pendingUnbonds(address,address)": "infinite",
                "quoteLiquidity(address,uint256)": "infinite",
                "removeDisputer(address)": "30359",
                "removeSlasher(address)": "30338",
                "revokeLiquidity(address)": "infinite",
                "rewardPeriodTime()": "2593",
                "rewardedAt(address)": "2723",
                "setApprovedLiquidity(address)": "infinite",
                "setBondTime(uint256)": "25916",
                "setFee(uint256)": "25762",
                "setGovernance(address)": "28096",
                "setInflationPeriod(uint256)": "25872",
                "setJob(address)": "infinite",
                "setJobLiquidity(address,address)": "infinite",
                "setKeep3rHelper(address)": "28109",
                "setKeep3rV1(address)": "28108",
                "setKeep3rV1Proxy(address)": "27932",
                "setKp3rWethPool(address)": "infinite",
                "setLiquidityMinimum(uint256)": "25783",
                "setRevokedLiquidity(address)": "infinite",
                "setRewardPeriodTime(uint256)": "25677",
                "setUnbondTime(uint256)": "25605",
                "slashers(address)": "2547",
                "totalJobCredits(address)": "infinite",
                "unbondLiquidityFromJob(address,address,uint256)": "infinite",
                "unbondTime()": "2527",
                "viewTickCache(address)": "5237",
                "viewTickOrder(address)": "2919",
                "withdrawLiquidityFromJob(address,address,address)": "infinite",
                "workCompleted(address)": "2724",
                "workedAt(address)": "2832"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addSlasher(address)": "68a9f19c",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "internalJobLiquidities(address)": "75a9f7ff",
              "internalSettleJobAccountance(address)": "3e525d20",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityAmount(address,address)": "694798e6",
              "liquidityMinimum()": "633fb68f",
              "observeLiquidity(address)": "165e62e7",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardPeriodTime()": "768b5d90",
              "rewardedAt(address)": "a676f9ff",
              "setApprovedLiquidity(address)": "280b656c",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setJob(address)": "a662031b",
              "setJobLiquidity(address,address)": "cacdf93d",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRevokedLiquidity(address)": "deaf81d4",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "unbondTime()": "a7d2e784",
              "viewTickCache(address)": "e485dc0e",
              "viewTickOrder(address)": "454c5031",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "workCompleted(address)": "1b44555e",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kph\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"internalJobLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"internalSettleJobAccountance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"setApprovedLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"setJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"setJobLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"setRevokedLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"viewTickCache\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"viewTickOrder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_liquidityCredits\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_periodCredits\":\"The credits the given job has at the current period\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_credits\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol\":\"Keep3rJobFundableLiquidityForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/IPairManager.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '../../libraries/FullMath.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableLiquidity is IKeep3rJobFundableLiquidity, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice List of liquidities that are accepted in the system\\n  EnumerableSet.AddressSet internal _approvedLiquidities;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => mapping(address => uint256)) public override liquidityAmount;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override rewardedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override workedAt;\\n\\n  /// @notice Tracks an address and returns its TickCache\\n  mapping(address => TickCache) internal _tick;\\n\\n  // Views\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approvedLiquidities() external view override returns (address[] memory _list) {\\n    _list = _approvedLiquidities.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobPeriodCredits(address _job) public view override returns (uint256 _periodCredits) {\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        TickCache memory _tickCache = observeLiquidity(_liquidity);\\n        if (_tickCache.period != 0) {\\n          int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n          _periodCredits += _getReward(\\n            IKeep3rHelper(keep3rHelper).getKP3RsAtTick(liquidityAmount[_job][_liquidity], _tickDifference, rewardPeriodTime)\\n          );\\n        }\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobLiquidityCredits(address _job) public view override returns (uint256 _liquidityCredits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n\\n    // If the job was rewarded in the past 1 period time\\n    if ((block.timestamp - rewardedAt[_job]) < rewardPeriodTime) {\\n      // If the job has period credits, update minted job credits to new twap\\n      _liquidityCredits = _periodCredits > 0\\n        ? (_jobLiquidityCredits[_job] * _periodCredits) / _jobPeriodCredits[_job] // If the job has period credits, return remaining job credits updated to new twap\\n        : _jobLiquidityCredits[_job]; // If not, return remaining credits, forced credits should not be updated\\n    } else {\\n      // Else return a full period worth of credits if current credits have expired\\n      _liquidityCredits = _periodCredits;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function totalJobCredits(address _job) external view override returns (uint256 _credits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n    uint256 _cooldown = block.timestamp;\\n\\n    if ((rewardedAt[_job] > _period(block.timestamp - rewardPeriodTime))) {\\n      // Will calculate cooldown if it outdated\\n      if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will calculate cooldown from last reward reference in this period\\n        _cooldown -= (rewardedAt[_job] + rewardPeriodTime);\\n      } else {\\n        // Will calculate cooldown from last reward timestamp\\n        _cooldown -= rewardedAt[_job];\\n      }\\n    } else {\\n      // Will calculate cooldown from period start if expired\\n      _cooldown -= _period(block.timestamp);\\n    }\\n    _credits = jobLiquidityCredits(_job) + _phase(_cooldown, _periodCredits);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view override returns (uint256 _periodCredits) {\\n    if (_approvedLiquidities.contains(_liquidity)) {\\n      TickCache memory _tickCache = observeLiquidity(_liquidity);\\n      if (_tickCache.period != 0) {\\n        int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n        return _getReward(IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime));\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function observeLiquidity(address _liquidity) public view virtual override returns (TickCache memory _tickCache) {\\n    if (_tick[_liquidity].period == _period(block.timestamp)) {\\n      // Will return cached twaps if liquidity is updated\\n      _tickCache = _tick[_liquidity];\\n    } else {\\n      bool success;\\n      uint256 lastPeriod = _period(block.timestamp - rewardPeriodTime);\\n\\n      if (_tick[_liquidity].period == lastPeriod) {\\n        // Will only ask for current period accumulator if liquidity is outdated\\n        uint32[] memory _secondsAgo = new uint32[](1);\\n        int56 previousTick = _tick[_liquidity].current;\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n\\n        (_tickCache.current, , success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - previousTick;\\n      } else if (_tick[_liquidity].period < lastPeriod) {\\n        // Will ask for 2 accumulators if liquidity is expired\\n        uint32[] memory _secondsAgo = new uint32[](2);\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n        _secondsAgo[1] = uint32(block.timestamp - _period(block.timestamp) + rewardPeriodTime);\\n\\n        int56 _tickCumulative2;\\n        (_tickCache.current, _tickCumulative2, success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - _tickCumulative2;\\n      }\\n      if (success) {\\n        _tickCache.period = _period(block.timestamp);\\n      } else {\\n        delete _tickCache.period;\\n      }\\n    }\\n  }\\n\\n  // Methods\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external override onlyGovernance {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    _settleJobAccountance(_job);\\n    _jobLiquidityCredits[_job] += _amount;\\n    emit LiquidityCreditsForced(_job, rewardedAt[_job], _jobLiquidityCredits[_job]);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approveLiquidity(address _liquidity) external virtual override onlyGovernance {\\n    if (!_approvedLiquidities.add(_liquidity)) revert LiquidityPairApproved();\\n    _liquidityPool[_liquidity] = IPairManager(_liquidity).pool();\\n    _isKP3RToken0[_liquidity] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_liquidityPool[_liquidity]);\\n    _tick[_liquidity] = observeLiquidity(_liquidity);\\n    emit LiquidityApproval(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function revokeLiquidity(address _liquidity) external override onlyGovernance {\\n    if (!_approvedLiquidities.remove(_liquidity)) revert LiquidityPairUnexistent();\\n    emit LiquidityRevocation(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_approvedLiquidities.contains(_liquidity)) revert LiquidityPairUnapproved();\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n\\n    _jobLiquidities[_job].add(_liquidity);\\n\\n    _settleJobAccountance(_job);\\n\\n    if (_quoteLiquidity(liquidityAmount[_job][_liquidity] + _amount, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n    IERC20(_liquidity).safeTransferFrom(msg.sender, address(this), _amount);\\n    liquidityAmount[_job][_liquidity] += _amount;\\n    _jobPeriodCredits[_job] += _getReward(_quoteLiquidity(_amount, _liquidity));\\n    emit LiquidityAddition(_job, _liquidity, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlyJobOwner(_job) {\\n    canWithdrawAfter[_job][_liquidity] = block.timestamp + unbondTime;\\n    pendingUnbonds[_job][_liquidity] += _amount;\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n\\n    uint256 _remainingLiquidity = liquidityAmount[_job][_liquidity];\\n    if (_remainingLiquidity > 0 && _quoteLiquidity(_remainingLiquidity, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit Unbonding(_job, _liquidity, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external override onlyJobOwner(_job) {\\n    if (_receiver == address(0)) revert ZeroAddress();\\n    if (pendingUnbonds[_job][_liquidity] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[_job][_liquidity] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[_job]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[_job][_liquidity];\\n\\n    delete pendingUnbonds[_job][_liquidity];\\n    delete canWithdrawAfter[_job][_liquidity];\\n\\n    IERC20(_liquidity).safeTransfer(_receiver, _amount);\\n    emit LiquidityWithdrawal(_job, _liquidity, _receiver, _amount);\\n  }\\n\\n  // Internal functions\\n\\n  /// @notice Updates or rewards job liquidity credits depending on time since last job reward\\n  function _updateJobCreditsIfNeeded(address _job) internal returns (bool _rewarded) {\\n    if (rewardedAt[_job] < _period(block.timestamp)) {\\n      // Will exit function if job has been rewarded in current period\\n      if (rewardedAt[_job] <= _period(block.timestamp - rewardPeriodTime)) {\\n        // Will reset job to period syncronicity if a full period passed without rewards\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] = _period(block.timestamp);\\n        _rewarded = true;\\n      } else if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will reset job's syncronicity if last reward was more than epoch ago\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] += rewardPeriodTime;\\n        _rewarded = true;\\n      } else if (workedAt[_job] < _period(block.timestamp)) {\\n        // First keeper on period has to update job accountance to current twaps\\n        uint256 previousPeriodCredits = _jobPeriodCredits[_job];\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = (_jobLiquidityCredits[_job] * _jobPeriodCredits[_job]) / previousPeriodCredits;\\n        // Updating job accountance does not reward job\\n      }\\n    }\\n  }\\n\\n  /// @notice Only called if _jobLiquidityCredits < payment\\n  function _rewardJobCredits(address _job) internal {\\n    /// @notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)\\n    /* WARNING: this allows to top up _jobLiquidityCredits to a max of 1.99 but have to spend at least 1 */\\n    _jobLiquidityCredits[_job] += _phase(block.timestamp - rewardedAt[_job], _jobPeriodCredits[_job]);\\n    rewardedAt[_job] = block.timestamp;\\n  }\\n\\n  /// @notice Updates accountance for _jobPeriodCredits\\n  function _updateJobPeriod(address _job) internal {\\n    _jobPeriodCredits[_job] = _calculateJobPeriodCredits(_job);\\n  }\\n\\n  /// @notice Quotes the outdated job liquidities and calculates _periodCredits\\n  /// @dev This function is also responsible for keeping the KP3R/WETH quote updated\\n  function _calculateJobPeriodCredits(address _job) internal returns (uint256 _periodCredits) {\\n    if (_tick[kp3rWethPool].period != _period(block.timestamp)) {\\n      // Updates KP3R/WETH quote if needed\\n      _tick[kp3rWethPool] = observeLiquidity(kp3rWethPool);\\n    }\\n\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        if (_tick[_liquidity].period != _period(block.timestamp)) {\\n          // Updates liquidity cache only if needed\\n          _tick[_liquidity] = observeLiquidity(_liquidity);\\n        }\\n        _periodCredits += _getReward(_quoteLiquidity(liquidityAmount[_job][_liquidity], _liquidity));\\n      }\\n    }\\n  }\\n\\n  /// @notice Updates job accountance calculating the impact of the unbonded liquidity amount\\n  function _unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) internal nonReentrant {\\n    if (!_jobLiquidities[_job].contains(_liquidity)) revert JobLiquidityUnexistent();\\n    if (liquidityAmount[_job][_liquidity] < _amount) revert JobLiquidityInsufficient();\\n\\n    // Ensures current twaps in job liquidities\\n    _updateJobPeriod(_job);\\n    uint256 _periodCreditsToRemove = _getReward(_quoteLiquidity(_amount, _liquidity));\\n\\n    // A liquidity can be revoked causing a job to have 0 periodCredits\\n    if (_jobPeriodCredits[_job] > 0) {\\n      // Removes a % correspondant to a full rewardPeriodTime for the liquidity withdrawn vs all of the liquidities\\n      _jobLiquidityCredits[_job] -= (_jobLiquidityCredits[_job] * _periodCreditsToRemove) / _jobPeriodCredits[_job];\\n      _jobPeriodCredits[_job] -= _periodCreditsToRemove;\\n    }\\n\\n    liquidityAmount[_job][_liquidity] -= _amount;\\n    if (liquidityAmount[_job][_liquidity] == 0) {\\n      _jobLiquidities[_job].remove(_liquidity);\\n    }\\n  }\\n\\n  /// @notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed\\n  function _phase(uint256 _timePassed, uint256 _multiplier) internal view returns (uint256 _result) {\\n    if (_timePassed < rewardPeriodTime) {\\n      _result = (_timePassed * _multiplier) / rewardPeriodTime;\\n    } else _result = _multiplier;\\n  }\\n\\n  /// @notice Returns the start of the period of the provided timestamp\\n  function _period(uint256 _timestamp) internal view returns (uint256 _periodTimestamp) {\\n    return _timestamp - (_timestamp % rewardPeriodTime);\\n  }\\n\\n  /// @notice Calculates relation between rewardPeriod and inflationPeriod\\n  function _getReward(uint256 _baseAmount) internal view returns (uint256 _credits) {\\n    return FullMath.mulDiv(_baseAmount, rewardPeriodTime, inflationPeriod);\\n  }\\n\\n  /// @notice Returns underlying KP3R amount for a given liquidity amount\\n  function _quoteLiquidity(uint256 _amount, address _liquidity) internal view virtual returns (uint256 _quote) {\\n    if (_tick[_liquidity].period != 0) {\\n      int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tick[_liquidity].difference : -_tick[_liquidity].difference;\\n      _quote = IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime);\\n    }\\n  }\\n\\n  /// @notice Updates job credits to current quotes and rewards job's pending minted credits\\n  /// @dev Ensures a maximum of 1 period of credits\\n  function _settleJobAccountance(address _job) internal virtual {\\n    _updateJobCreditsIfNeeded(_job);\\n    _rewardJobCredits(_job);\\n    _jobLiquidityCredits[_job] = Math.min(_jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n  }\\n}\\n\",\"keccak256\":\"0x7747b2a0ee0c4e3322e92a3e1fc0f6f03be63942bc398009726b58f8c9f79cf0\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol';\\n\\ncontract Keep3rJobFundableLiquidityForTest is Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  constructor(\\n    address _kph,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) Keep3rParameters(_kph, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\\n\\n  function setJob(address _job) external {\\n    _jobs.add(_job);\\n  }\\n\\n  function setJobLiquidity(address _job, address _liquidity) external returns (bool) {\\n    return _jobLiquidities[_job].add(_liquidity);\\n  }\\n\\n  function setApprovedLiquidity(address _liquidity) external {\\n    _approvedLiquidities.add(_liquidity);\\n  }\\n\\n  function setRevokedLiquidity(address _liquidity) external {\\n    _approvedLiquidities.remove(_liquidity);\\n  }\\n\\n  function viewTickCache(address _liquidity) external view returns (TickCache memory _tickCache) {\\n    _tickCache = _tick[_liquidity];\\n  }\\n\\n  function viewTickOrder(address _liquidity) external view returns (bool) {\\n    return _isKP3RToken0[_liquidity];\\n  }\\n\\n  function internalJobLiquidities(address _job) external view returns (address[] memory _list) {\\n    _list = _jobLiquidities[_job].values();\\n  }\\n\\n  function internalSettleJobAccountance(address _job) external {\\n    _settleJobAccountance(_job);\\n  }\\n}\\n\",\"keccak256\":\"0x667d4245e4904e8f029a1d60f027b5f3f2ad2cd43d8e25f9a35383ee0a5d2acb\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6540,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "_approvedLiquidities",
                "offset": 0,
                "slot": "37",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 6548,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "liquidityAmount",
                "offset": 0,
                "slot": "39",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6554,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "rewardedAt",
                "offset": 0,
                "slot": "40",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6560,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "workedAt",
                "offset": 0,
                "slot": "41",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6566,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                "label": "_tick",
                "offset": 0,
                "slot": "42",
                "type": "t_mapping(t_address,t_struct(TickCache)13178_storage)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_int56": {
                "encoding": "inplace",
                "label": "int56",
                "numberOfBytes": "7"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_struct(TickCache)13178_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)",
                "numberOfBytes": "32",
                "value": "t_struct(TickCache)13178_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(TickCache)13178_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rJobFundableLiquidity.TickCache",
                "members": [
                  {
                    "astId": 13173,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                    "label": "current",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13175,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                    "label": "difference",
                    "offset": 7,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13177,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol:Keep3rJobFundableLiquidityForTest",
                    "label": "period",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol": {
        "Keep3rJobManagerForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "AlreadyAKeeper",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobAlreadyAdded",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOwner",
                  "type": "address"
                }
              ],
              "name": "JobAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "addJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "isJob",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isJob",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addJob(address)": {
                "params": {
                  "_job": "Address of the contract for which work should be performed"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_10935": {
                  "entryPoint": null,
                  "id": 10935,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5689": {
                  "entryPoint": null,
                  "id": 5689,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 418,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory": {
                  "entryPoint": 447,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 540,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1152:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "328:332:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "375:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "384:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "387:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "377:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "377:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "377:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "349:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "358:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "345:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "345:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "370:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "341:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "341:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "338:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "400:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "440:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "410:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "410:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "400:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "459:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "503:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "514:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "499:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "499:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "469:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "469:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "459:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "527:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "571:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "582:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "567:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "567:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "537:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "537:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "527:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "595:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "639:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "650:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "635:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "635:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "605:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "605:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "595:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "270:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "281:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "293:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "301:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "309:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "317:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:464:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "743:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "789:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "798:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "801:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "791:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "791:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "791:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "764:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "773:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "760:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "760:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "785:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "756:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "756:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "753:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "814:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "833:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "827:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "827:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "818:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "896:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "905:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "908:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "898:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "898:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "898:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "865:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "886:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "879:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "879:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "872:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "872:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "862:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "855:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "855:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "852:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "921:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "931:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "921:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "709:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "720:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "732:6:84",
                            "type": ""
                          }
                        ],
                        "src": "665:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1048:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1058:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1070:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1081:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1066:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1066:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1058:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1100:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1115:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1131:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1136:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1127:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1127:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1140:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1123:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1123:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1111:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1111:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1093:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1093:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1093:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1017:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1028:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1039:4:84",
                            "type": ""
                          }
                        ],
                        "src": "947:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526203f480601e5562127500601f556729a2241af62c000060205562069780602155622cd300602255601e6023553480156200003e57600080fd5b5060405162001734380380620017348339810160408190526200006191620001bf565b83838383338080620000855760405162b293ed60e81b815260040160405180910390fd5b601680546001600160a01b03199081166001600160a01b0393841617909155601c80548216888416178155601a80548316888516179055601b80548316878516179055601d8054831686851690811782556000818152600d602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200013057600080fd5b505afa15801562000145573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016b91906200021c565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055506200024795505050505050565b80516001600160a01b0381168114620001ba57600080fd5b919050565b60008060008060808587031215620001d657600080fd5b620001e185620001a2565b9350620001f160208601620001a2565b92506200020160408601620001a2565b91506200021160608601620001a2565b905092959194509250565b6000602082840312156200022f57600080fd5b815180151581146200024057600080fd5b9392505050565b6114dd80620002576000396000f3fe608060405234801561001057600080fd5b50600436106102605760003560e01c8063951dc22c11610147578063c7ae40d0116100be578063c7ae40d0146105f8578063cb4be2bb1461060b578063cb54694d1461061e578063cd22af1b14610631578063ddca3f431461065c578063e326ac4314610665578063ebbb619414610685578063ec00cdfc14610698578063f0f346b9146106ab578063f11a1d1a146106be578063f39c38a0146106d1578063fc253d2b146106e457600080fd5b8063951dc22c146104db57806398e90a0f146104e35780639d5c33d81461050c578063a39744b51461051f578063a7d2e7841461054a578063aac6aa9c14610553578063ab033ea914610566578063b0103b1a14610579578063b23922331461059c578063b7e77340146105af578063b87fcbff146105c2578063c5198abc146105e557600080fd5b80635aa6e675116101db5780635aa6e675146103ed5780635ebe23f014610400578063633fb68f1461040957806368a9f19c1461041257806369fe0e2d1461042557806372da828a14610438578063768b5d901461044b5780637b40c913146104545780637c8fce2314610467578063878c723e1461047c5780638cb22b76146104a55780638fe204dd146104c857600080fd5b806307b435c21461026557806315006b82146102a3578063160e1e31146102ce578063168f92e7146102e35780631b44555e1461030e5780631cd5c01f1461032e5780631ef94b911461035157806321040b0114610371578063238efcbc1461039c578063274a8db4146103a4578063594a3a93146103c757806359a2255e146103da575b600080fd5b6102906102733660046113d8565b601160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6102906102b13660046113d8565b600f60209081526000928352604080842090915290825290205481565b6102e16102dc3660046113bd565b6106ed565b005b6102906102f13660046113d8565b600860209081526000928352604080842090915290825290205481565b61029061031c3660046113bd565b60046020526000908152604090205481565b61034161033c3660046113bd565b610853565b604051901515815260200161029a565b601a54610364906001600160a01b031681565b60405161029a9190611446565b61029061037f3660046113d8565b601260209081526000928352604080842090915290825290205481565b6102e1610866565b6103416103b23660046113bd565b60196020526000908152604090205460ff1681565b6102e16103d53660046113d8565b6108f2565b6102e16103e83660046113bd565b610996565b601654610364906001600160a01b031681565b610290601e5481565b61029060205481565b6102e16104203660046113bd565b610a46565b6102e161043336600461142d565b610afe565b6102e16104463660046113bd565b610b5e565b61029060215481565b601d54610364906001600160a01b031681565b61046f610bfb565b60405161029a919061145a565b61036461048a3660046113bd565b6000602081905290815260409020546001600160a01b031681565b6103416104b33660046113bd565b60136020526000908152604090205460ff1681565b6102e16104d636600461142d565b610c0c565b61046f610c6c565b6103646104f13660046113bd565b6001602052600090815260409020546001600160a01b031681565b6102e161051a3660046113bd565b610c78565b61029061052d3660046113d8565b600760209081526000928352604080842090915290825290205481565b610290601f5481565b6102e16105613660046113bd565b610d30565b6102e16105743660046113bd565b610de4565b6103416105873660046113bd565b60066020526000908152604090205460ff1681565b6102e16105aa36600461142d565b610e5a565b6102e16105bd36600461142d565b610eba565b6103416105d03660046113bd565b60186020526000908152604090205460ff1681565b6102e16105f33660046113bd565b610f1a565b601b54610364906001600160a01b031681565b6102e16106193660046113bd565b610fdf565b6102e161062c36600461142d565b61107c565b61029061063f3660046113d8565b601060209081526000928352604080842090915290825290205481565b61029060235481565b6102906106733660046113bd565b60056020526000908152604090205481565b6102e161069336600461142d565b611100565b6102e16106a63660046113bd565b61115e565b6102e16106b93660046113bd565b6111fb565b601c54610364906001600160a01b031681565b601754610364906001600160a01b031681565b61029060225481565b6016546001600160a01b03163314610718576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811661073f5760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b038084166001600160a01b031992831681179093556000838152600d6020526040908190208054909316909317909155601c54915163696a437b60e01b815291169063696a437b906107a0908490600401611446565b60206040518083038186803b1580156107b857600080fd5b505afa1580156107cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f0919061140b565b6001600160a01b0382166000908152600e602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa90610848908390611446565b60405180910390a150565b60006108606014836112af565b92915050565b6017546001600160a01b0316331461089157604051637ef5703160e11b815260040160405180910390fd5b60178054601680546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916108e891611446565b60405180910390a1565b6001600160a01b03828116600090815260208190526040902054839116331461092e57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260016020908152604080832080546001600160a01b0319168887169081179091559183905280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526001602052604090205482911633146109d25760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b0382811660008181526020818152604080832080546001909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b6016546001600160a01b03163314610a71576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff1615610aab5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b90610848908390611446565b6016546001600160a01b03163314610b29576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001610848565b6016546001600160a01b03163314610b89576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610bb05760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090610848908390611446565b6060610c0760146112d4565b905090565b6016546001600160a01b03163314610c37576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee290602001610848565b6060610c0760026112d4565b6016546001600160a01b03163314610ca3576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff1615610cdd5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f90610848908390611446565b6016546001600160a01b03163314610d5b576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff16610d94576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d02590610848908390611446565b6016546001600160a01b03163314610e0f576040516354348f0360e01b815260040160405180910390fd5b601780546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610848908390611446565b6016546001600160a01b03163314610e85576040516354348f0360e01b815260040160405180910390fd5b60228190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001610848565b6016546001600160a01b03163314610ee5576040516354348f0360e01b815260040160405180910390fd5b601e8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001610848565b610f256014826112af565b15610f4357604051630809740d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526013602052604090205460ff1615610f7d57604051632f3d320560e01b815260040160405180910390fd5b610f886014826112e1565b506001600160a01b03811660008181526020819052604080822080546001600160a01b03191633908117909155905190917fed3faef50715743626cd57de74281a2b17cdbfc11c0486feda541fb911e0293d91a350565b6016546001600160a01b0316331461100a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166110315760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090610848908390611446565b6016546001600160a01b031633146110a7576040516354348f0360e01b815260040160405180910390fd5b620151808110156110cb57604051633f384aad60e21b815260040160405180910390fd5b60218190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001610848565b6016546001600160a01b0316331461112b576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e79101610848565b6016546001600160a01b03163314611189576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166111b05760405163d92e233d60e01b815260040160405180910390fd5b601a80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90610848908390611446565b6016546001600160a01b03163314611226576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff1661125f57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e90610848908390611446565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b606060006112cd836112f6565b60006112cd836001600160a01b038416611352565b60608160000180548060200260200160405190810160405280929190818152602001828054801561134657602002820191906000526020600020905b815481526020019060010190808311611332575b50505050509050919050565b600081815260018301602052604081205461139957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610860565b506000610860565b80356001600160a01b03811681146113b857600080fd5b919050565b6000602082840312156113cf57600080fd5b6112cd826113a1565b600080604083850312156113eb57600080fd5b6113f4836113a1565b9150611402602084016113a1565b90509250929050565b60006020828403121561141d57600080fd5b815180151581146112cd57600080fd5b60006020828403121561143f57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b8181101561149b5783516001600160a01b031683529284019291840191600101611476565b5090969550505050505056fea2646970667358221220ff92d4ad09156a00752678a79d94e2081a204b4efbb3f2b08535205a96c48a8864736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x3F480 PUSH1 0x1E SSTORE PUSH3 0x127500 PUSH1 0x1F SSTORE PUSH8 0x29A2241AF62C0000 PUSH1 0x20 SSTORE PUSH3 0x69780 PUSH1 0x21 SSTORE PUSH3 0x2CD300 PUSH1 0x22 SSTORE PUSH1 0x1E PUSH1 0x23 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1734 CODESIZE SUB DUP1 PUSH3 0x1734 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x61 SWAP2 PUSH3 0x1BF JUMP JUMPDEST DUP4 DUP4 DUP4 DUP4 CALLER DUP1 DUP1 PUSH3 0x85 JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1C DUP1 SLOAD DUP3 AND DUP9 DUP5 AND OR DUP2 SSTORE PUSH1 0x1A DUP1 SLOAD DUP4 AND DUP9 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1B DUP1 SLOAD DUP4 AND DUP8 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1D DUP1 SLOAD DUP4 AND DUP7 DUP6 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP6 AND SWAP1 SWAP2 OR SWAP1 SWAP4 SSTORE SWAP1 SLOAD SWAP1 SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x696A437B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x145 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x16B SWAP2 SWAP1 PUSH3 0x21C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x247 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E1 DUP6 PUSH3 0x1A2 JUMP JUMPDEST SWAP4 POP PUSH3 0x1F1 PUSH1 0x20 DUP7 ADD PUSH3 0x1A2 JUMP JUMPDEST SWAP3 POP PUSH3 0x201 PUSH1 0x40 DUP7 ADD PUSH3 0x1A2 JUMP JUMPDEST SWAP2 POP PUSH3 0x211 PUSH1 0x60 DUP7 ADD PUSH3 0x1A2 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x14DD DUP1 PUSH3 0x257 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x260 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x951DC22C GT PUSH2 0x147 JUMPI DUP1 PUSH4 0xC7AE40D0 GT PUSH2 0xBE JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x5F8 JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x60B JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x61E JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x631 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x65C JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x665 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0x685 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0x698 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x6AB JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0x6BE JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x6D1 JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0x6E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x951DC22C EQ PUSH2 0x4DB JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x4E3 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x50C JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x51F JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x553 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x566 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x579 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x59C JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x5AF JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0xC5198ABC EQ PUSH2 0x5E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5AA6E675 GT PUSH2 0x1DB JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x409 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x412 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x44B JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x467 JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x4A5 JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x4C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x265 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x2CE JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x2E3 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x1CD5C01F EQ PUSH2 0x32E JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x351 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x371 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x39C JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x3C7 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x3DA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x290 PUSH2 0x273 CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x290 PUSH2 0x2B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x2DC CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0x6ED JUMP JUMPDEST STOP JUMPDEST PUSH2 0x290 PUSH2 0x2F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x31C CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x341 PUSH2 0x33C CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0x853 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x29A JUMP JUMPDEST PUSH1 0x1A SLOAD PUSH2 0x364 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29A SWAP2 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x37F CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x866 JUMP JUMPDEST PUSH2 0x341 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH2 0x8F2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0x996 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH2 0x364 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x1E SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x420 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xA46 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x433 CALLDATASIZE PUSH1 0x4 PUSH2 0x142D JUMP JUMPDEST PUSH2 0xAFE JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x446 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xB5E JUMP JUMPDEST PUSH2 0x290 PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x364 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x46F PUSH2 0xBFB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29A SWAP2 SWAP1 PUSH2 0x145A JUMP JUMPDEST PUSH2 0x364 PUSH2 0x48A CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x341 PUSH2 0x4B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x4D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x142D JUMP JUMPDEST PUSH2 0xC0C JUMP JUMPDEST PUSH2 0x46F PUSH2 0xC6C JUMP JUMPDEST PUSH2 0x364 PUSH2 0x4F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x51A CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xC78 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x52D CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x561 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xD30 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x574 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xDE4 JUMP JUMPDEST PUSH2 0x341 PUSH2 0x587 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x5AA CALLDATASIZE PUSH1 0x4 PUSH2 0x142D JUMP JUMPDEST PUSH2 0xE5A JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x5BD CALLDATASIZE PUSH1 0x4 PUSH2 0x142D JUMP JUMPDEST PUSH2 0xEBA JUMP JUMPDEST PUSH2 0x341 PUSH2 0x5D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x5F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xF1A JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x364 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x619 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xFDF JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x62C CALLDATASIZE PUSH1 0x4 PUSH2 0x142D JUMP JUMPDEST PUSH2 0x107C JUMP JUMPDEST PUSH2 0x290 PUSH2 0x63F CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x673 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x693 CALLDATASIZE PUSH1 0x4 PUSH2 0x142D JUMP JUMPDEST PUSH2 0x1100 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x6A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0x115E JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x6B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0x11FB JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x364 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x364 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x718 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x73F JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1C SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x7A0 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7F0 SWAP2 SWAP1 PUSH2 0x140B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x860 PUSH1 0x14 DUP4 PUSH2 0x12AF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x891 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0x16 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x8E8 SWAP2 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x92E JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 DUP4 SWAP1 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x9D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA71 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xAAB JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB29 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x848 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB89 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xBB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC07 PUSH1 0x14 PUSH2 0x12D4 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC37 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP1 PUSH1 0x20 ADD PUSH2 0x848 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC07 PUSH1 0x2 PUSH2 0x12D4 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCA3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xCDD JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD5B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xD94 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE0F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE85 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x848 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xEE5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x848 JUMP JUMPDEST PUSH2 0xF25 PUSH1 0x14 DUP3 PUSH2 0x12AF JUMP JUMPDEST ISZERO PUSH2 0xF43 JUMPI PUSH1 0x40 MLOAD PUSH4 0x809740D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xF7D JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F3D3205 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF88 PUSH1 0x14 DUP3 PUSH2 0x12E1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP2 PUSH32 0xED3FAEF50715743626CD57DE74281A2B17CDBFC11C0486FEDA541FB911E0293D SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x100A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1031 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10A7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x10CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0x848 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x112B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP2 ADD PUSH2 0x848 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1189 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x11B0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1226 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x125F JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x12CD DUP4 PUSH2 0x12F6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12CD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1352 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1346 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1332 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1399 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x860 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x860 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x13B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12CD DUP3 PUSH2 0x13A1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x13EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13F4 DUP4 PUSH2 0x13A1 JUMP JUMPDEST SWAP2 POP PUSH2 0x1402 PUSH1 0x20 DUP5 ADD PUSH2 0x13A1 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x141D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x12CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x143F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x149B JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1476 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFDESTRUCT SWAP3 0xD4 0xAD MULMOD ISZERO PUSH11 0x752678A79D94E2081A20 0x4B 0x4E 0xFB 0xB3 CALLCODE 0xB0 DUP6 CALLDATALOAD KECCAK256 GAS SWAP7 0xC4 DUP11 DUP9 PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "133:442:60:-:0;;;702:6:31;667:41;;786:7;749:44;;877:7;834:50;;968:6;925:49;;1057:7;1015:49;;1135:2;1105:32;;243:221:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;381:13;396:9;407:14;423:13;450:10;;357:25:28;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;;;-1:-1:-1;;;;;422:24:28;;;;;;;1479:12:31;:28;;;;;;;;;;1513:8;:20;;;;;;;;;;1539:13;:30;;;;;;;;;;1575:12;:28;;;;;;;;;;;;-1:-1:-1;1609:28:31;;;:14;:28;;;;;;;:43;;;;;;;;;;;1703:12;;1730;;1689:54;;-1:-1:-1;;;1689:54:31;;1730:12;;;1689:54;;;1093:51:84;1703:12:31;;;;-1:-1:-1;1689:40:31;;1066:18:84;;1689:54:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1658:28:31;;;;;;;;:13;:28;;;;;:85;;-1:-1:-1;;1658:85:31;;;;;;;;;;-1:-1:-1;133:442:60;;-1:-1:-1;;;;;;133:442:60;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:464::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;469:49;514:2;503:9;499:18;469:49;:::i;:::-;459:59;;537:49;582:2;571:9;567:18;537:49;:::i;:::-;527:59;;605:49;650:2;639:9;635:18;605:49;:::i;:::-;595:59;;196:464;;;;;;;:::o;665:277::-;732:6;785:2;773:9;764:7;760:23;756:32;753:52;;;801:1;798;791:12;753:52;833:9;827:16;886:5;879:13;872:21;865:5;862:32;852:60;;908:1;905;898:12;852:60;931:5;665:277;-1:-1:-1;;;665:277:84:o;947:203::-;133:442:60;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_add_1372": {
                  "entryPoint": 4946,
                  "id": 1372,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_contains_1475": {
                  "entryPoint": null,
                  "id": 1475,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_values_1520": {
                  "entryPoint": 4854,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 2150,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@acceptJobOwnership_8373": {
                  "entryPoint": 2454,
                  "id": 8373,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 3192,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addJob_7999": {
                  "entryPoint": 3866,
                  "id": 7999,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 2630,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@add_1658": {
                  "entryPoint": 4833,
                  "id": 1658,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@bondTime_5611": {
                  "entryPoint": null,
                  "id": 5611,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@changeJobOwnership_8336": {
                  "entryPoint": 2290,
                  "id": 8336,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@contains_1712": {
                  "entryPoint": 4783,
                  "id": 1712,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_5636": {
                  "entryPoint": null,
                  "id": 5636,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@inflationPeriod_5631": {
                  "entryPoint": null,
                  "id": 5631,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@isJob_10950": {
                  "entryPoint": 2131,
                  "id": 10950,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobOwner_8303": {
                  "entryPoint": null,
                  "id": 8303,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPendingOwner_8309": {
                  "entryPoint": null,
                  "id": 8309,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 3067,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keep3rHelper_5602": {
                  "entryPoint": null,
                  "id": 5602,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1Proxy_5598": {
                  "entryPoint": null,
                  "id": 5598,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1_5594": {
                  "entryPoint": null,
                  "id": 5594,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keepers_5506": {
                  "entryPoint": 3180,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@kp3rWethPool_5606": {
                  "entryPoint": null,
                  "id": 5606,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@liquidityMinimum_5621": {
                  "entryPoint": null,
                  "id": 5621,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@removeDisputer_6072": {
                  "entryPoint": 4603,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 3376,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@rewardPeriodTime_5626": {
                  "entryPoint": null,
                  "id": 5626,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@setBondTime_5836": {
                  "entryPoint": 3770,
                  "id": 5836,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setFee_5933": {
                  "entryPoint": 2814,
                  "id": 5933,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 3556,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setInflationPeriod_5915": {
                  "entryPoint": 3674,
                  "id": 5915,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rHelper_5717": {
                  "entryPoint": 2910,
                  "id": 5717,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1Proxy_5773": {
                  "entryPoint": 4063,
                  "id": 5773,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1_5745": {
                  "entryPoint": 4446,
                  "id": 5745,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_5818": {
                  "entryPoint": 1773,
                  "id": 5818,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setLiquidityMinimum_5872": {
                  "entryPoint": 4352,
                  "id": 5872,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRewardPeriodTime_5897": {
                  "entryPoint": 4220,
                  "id": 5897,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setUnbondTime_5854": {
                  "entryPoint": 3084,
                  "id": 5854,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@unbondTime_5616": {
                  "entryPoint": null,
                  "id": 5616,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 4820,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_address": {
                  "entryPoint": 5025,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 5053,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 5080,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 5131,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 5165,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 5190,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 5210,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:2357:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "111:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "262:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "308:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "317:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "320:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "310:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "310:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "310:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "292:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "279:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "275:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "272:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "333:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "362:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "333:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "228:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "239:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "251:6:84",
                            "type": ""
                          }
                        ],
                        "src": "192:186:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "470:173:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "516:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "525:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "528:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "518:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "518:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "518:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "491:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "500:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "487:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "487:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "512:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "480:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "541:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "570:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "551:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "551:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "541:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "589:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "622:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "633:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "618:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "618:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "599:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "599:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "589:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "428:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "439:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "451:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "459:6:84",
                            "type": ""
                          }
                        ],
                        "src": "383:260:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "726:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "772:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "781:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "784:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "774:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "774:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "774:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "747:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "756:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "743:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "743:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "768:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "739:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "739:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "736:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "797:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "816:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "810:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "810:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "801:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "879:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "888:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "891:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "881:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "881:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "881:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "848:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "869:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "862:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "862:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "855:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "855:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "845:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "845:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "838:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "838:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "835:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "904:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "914:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "904:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "692:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "703:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "715:6:84",
                            "type": ""
                          }
                        ],
                        "src": "648:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1000:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1046:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1055:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1058:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1048:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1048:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1048:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1021:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1030:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1017:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1017:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1042:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1013:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1013:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1010:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1071:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1094:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1081:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1081:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1071:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "966:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "977:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "989:6:84",
                            "type": ""
                          }
                        ],
                        "src": "930:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1216:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1226:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1238:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1249:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1234:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1234:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1226:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1268:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1283:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1299:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1304:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1295:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1295:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1308:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1291:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1291:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1279:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1261:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1261:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1261:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1185:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1196:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1207:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1115:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1474:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1484:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1494:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1488:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1505:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1523:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1534:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1519:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1519:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1509:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1553:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1564:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1546:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1546:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1546:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1576:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "1587:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "1580:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1602:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1622:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1616:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1616:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "1606:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1645:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1653:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1638:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1638:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1638:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1669:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1680:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1691:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1676:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1676:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "1669:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1703:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1721:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1729:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1717:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1717:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1707:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1741:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1750:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "1745:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1809:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "1830:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1845:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "1839:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1839:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "1862:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "1867:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1858:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "1858:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "1871:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "1854:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1854:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "1835:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1835:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1823:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1823:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1823:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1888:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "1899:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1904:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1895:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1895:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "1888:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1920:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "1934:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1942:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1930:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1930:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1920:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1771:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1774:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1768:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1768:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1782:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1784:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1793:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1796:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1789:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1789:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1784:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1764:3:84",
                                "statements": []
                              },
                              "src": "1760:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1964:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "1972:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1964:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1443:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1454:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1465:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1323:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2081:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2091:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2103:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2114:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2099:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2099:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2091:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2133:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "2158:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "2151:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2151:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "2144:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2144:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2126:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2126:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2126:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2050:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2061:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2072:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1986:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2279:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2289:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2301:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2312:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2297:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2297:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2289:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2331:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2342:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2324:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2324:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2324:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2248:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2259:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2270:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2178:177:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106102605760003560e01c8063951dc22c11610147578063c7ae40d0116100be578063c7ae40d0146105f8578063cb4be2bb1461060b578063cb54694d1461061e578063cd22af1b14610631578063ddca3f431461065c578063e326ac4314610665578063ebbb619414610685578063ec00cdfc14610698578063f0f346b9146106ab578063f11a1d1a146106be578063f39c38a0146106d1578063fc253d2b146106e457600080fd5b8063951dc22c146104db57806398e90a0f146104e35780639d5c33d81461050c578063a39744b51461051f578063a7d2e7841461054a578063aac6aa9c14610553578063ab033ea914610566578063b0103b1a14610579578063b23922331461059c578063b7e77340146105af578063b87fcbff146105c2578063c5198abc146105e557600080fd5b80635aa6e675116101db5780635aa6e675146103ed5780635ebe23f014610400578063633fb68f1461040957806368a9f19c1461041257806369fe0e2d1461042557806372da828a14610438578063768b5d901461044b5780637b40c913146104545780637c8fce2314610467578063878c723e1461047c5780638cb22b76146104a55780638fe204dd146104c857600080fd5b806307b435c21461026557806315006b82146102a3578063160e1e31146102ce578063168f92e7146102e35780631b44555e1461030e5780631cd5c01f1461032e5780631ef94b911461035157806321040b0114610371578063238efcbc1461039c578063274a8db4146103a4578063594a3a93146103c757806359a2255e146103da575b600080fd5b6102906102733660046113d8565b601160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6102906102b13660046113d8565b600f60209081526000928352604080842090915290825290205481565b6102e16102dc3660046113bd565b6106ed565b005b6102906102f13660046113d8565b600860209081526000928352604080842090915290825290205481565b61029061031c3660046113bd565b60046020526000908152604090205481565b61034161033c3660046113bd565b610853565b604051901515815260200161029a565b601a54610364906001600160a01b031681565b60405161029a9190611446565b61029061037f3660046113d8565b601260209081526000928352604080842090915290825290205481565b6102e1610866565b6103416103b23660046113bd565b60196020526000908152604090205460ff1681565b6102e16103d53660046113d8565b6108f2565b6102e16103e83660046113bd565b610996565b601654610364906001600160a01b031681565b610290601e5481565b61029060205481565b6102e16104203660046113bd565b610a46565b6102e161043336600461142d565b610afe565b6102e16104463660046113bd565b610b5e565b61029060215481565b601d54610364906001600160a01b031681565b61046f610bfb565b60405161029a919061145a565b61036461048a3660046113bd565b6000602081905290815260409020546001600160a01b031681565b6103416104b33660046113bd565b60136020526000908152604090205460ff1681565b6102e16104d636600461142d565b610c0c565b61046f610c6c565b6103646104f13660046113bd565b6001602052600090815260409020546001600160a01b031681565b6102e161051a3660046113bd565b610c78565b61029061052d3660046113d8565b600760209081526000928352604080842090915290825290205481565b610290601f5481565b6102e16105613660046113bd565b610d30565b6102e16105743660046113bd565b610de4565b6103416105873660046113bd565b60066020526000908152604090205460ff1681565b6102e16105aa36600461142d565b610e5a565b6102e16105bd36600461142d565b610eba565b6103416105d03660046113bd565b60186020526000908152604090205460ff1681565b6102e16105f33660046113bd565b610f1a565b601b54610364906001600160a01b031681565b6102e16106193660046113bd565b610fdf565b6102e161062c36600461142d565b61107c565b61029061063f3660046113d8565b601060209081526000928352604080842090915290825290205481565b61029060235481565b6102906106733660046113bd565b60056020526000908152604090205481565b6102e161069336600461142d565b611100565b6102e16106a63660046113bd565b61115e565b6102e16106b93660046113bd565b6111fb565b601c54610364906001600160a01b031681565b601754610364906001600160a01b031681565b61029060225481565b6016546001600160a01b03163314610718576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811661073f5760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b038084166001600160a01b031992831681179093556000838152600d6020526040908190208054909316909317909155601c54915163696a437b60e01b815291169063696a437b906107a0908490600401611446565b60206040518083038186803b1580156107b857600080fd5b505afa1580156107cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f0919061140b565b6001600160a01b0382166000908152600e602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa90610848908390611446565b60405180910390a150565b60006108606014836112af565b92915050565b6017546001600160a01b0316331461089157604051637ef5703160e11b815260040160405180910390fd5b60178054601680546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916108e891611446565b60405180910390a1565b6001600160a01b03828116600090815260208190526040902054839116331461092e57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260016020908152604080832080546001600160a01b0319168887169081179091559183905280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526001602052604090205482911633146109d25760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b0382811660008181526020818152604080832080546001909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b6016546001600160a01b03163314610a71576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff1615610aab5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b90610848908390611446565b6016546001600160a01b03163314610b29576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001610848565b6016546001600160a01b03163314610b89576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610bb05760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090610848908390611446565b6060610c0760146112d4565b905090565b6016546001600160a01b03163314610c37576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee290602001610848565b6060610c0760026112d4565b6016546001600160a01b03163314610ca3576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff1615610cdd5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f90610848908390611446565b6016546001600160a01b03163314610d5b576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff16610d94576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d02590610848908390611446565b6016546001600160a01b03163314610e0f576040516354348f0360e01b815260040160405180910390fd5b601780546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610848908390611446565b6016546001600160a01b03163314610e85576040516354348f0360e01b815260040160405180910390fd5b60228190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001610848565b6016546001600160a01b03163314610ee5576040516354348f0360e01b815260040160405180910390fd5b601e8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001610848565b610f256014826112af565b15610f4357604051630809740d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526013602052604090205460ff1615610f7d57604051632f3d320560e01b815260040160405180910390fd5b610f886014826112e1565b506001600160a01b03811660008181526020819052604080822080546001600160a01b03191633908117909155905190917fed3faef50715743626cd57de74281a2b17cdbfc11c0486feda541fb911e0293d91a350565b6016546001600160a01b0316331461100a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166110315760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090610848908390611446565b6016546001600160a01b031633146110a7576040516354348f0360e01b815260040160405180910390fd5b620151808110156110cb57604051633f384aad60e21b815260040160405180910390fd5b60218190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001610848565b6016546001600160a01b0316331461112b576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e79101610848565b6016546001600160a01b03163314611189576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166111b05760405163d92e233d60e01b815260040160405180910390fd5b601a80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90610848908390611446565b6016546001600160a01b03163314611226576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff1661125f57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e90610848908390611446565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b606060006112cd836112f6565b60006112cd836001600160a01b038416611352565b60608160000180548060200260200160405190810160405280929190818152602001828054801561134657602002820191906000526020600020905b815481526020019060010190808311611332575b50505050509050919050565b600081815260018301602052604081205461139957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610860565b506000610860565b80356001600160a01b03811681146113b857600080fd5b919050565b6000602082840312156113cf57600080fd5b6112cd826113a1565b600080604083850312156113eb57600080fd5b6113f4836113a1565b9150611402602084016113a1565b90509250929050565b60006020828403121561141d57600080fd5b815180151581146112cd57600080fd5b60006020828403121561143f57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b8181101561149b5783516001600160a01b031683529284019291840191600101611476565b5090969550505050505056fea2646970667358221220ff92d4ad09156a00752678a79d94e2081a204b4efbb3f2b08535205a96c48a8864736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x260 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x951DC22C GT PUSH2 0x147 JUMPI DUP1 PUSH4 0xC7AE40D0 GT PUSH2 0xBE JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x5F8 JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x60B JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x61E JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x631 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x65C JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x665 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0x685 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0x698 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x6AB JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0x6BE JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x6D1 JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0x6E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x951DC22C EQ PUSH2 0x4DB JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x4E3 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x50C JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x51F JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x553 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x566 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x579 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x59C JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x5AF JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0xC5198ABC EQ PUSH2 0x5E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5AA6E675 GT PUSH2 0x1DB JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x409 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x412 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x44B JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x467 JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x4A5 JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x4C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x265 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x2CE JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x2E3 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x1CD5C01F EQ PUSH2 0x32E JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x351 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x371 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x39C JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x3C7 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x3DA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x290 PUSH2 0x273 CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x290 PUSH2 0x2B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x2DC CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0x6ED JUMP JUMPDEST STOP JUMPDEST PUSH2 0x290 PUSH2 0x2F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x31C CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x341 PUSH2 0x33C CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0x853 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x29A JUMP JUMPDEST PUSH1 0x1A SLOAD PUSH2 0x364 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29A SWAP2 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x37F CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x866 JUMP JUMPDEST PUSH2 0x341 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH2 0x8F2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0x996 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH2 0x364 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x1E SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x420 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xA46 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x433 CALLDATASIZE PUSH1 0x4 PUSH2 0x142D JUMP JUMPDEST PUSH2 0xAFE JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x446 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xB5E JUMP JUMPDEST PUSH2 0x290 PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x364 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x46F PUSH2 0xBFB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29A SWAP2 SWAP1 PUSH2 0x145A JUMP JUMPDEST PUSH2 0x364 PUSH2 0x48A CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x341 PUSH2 0x4B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x4D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x142D JUMP JUMPDEST PUSH2 0xC0C JUMP JUMPDEST PUSH2 0x46F PUSH2 0xC6C JUMP JUMPDEST PUSH2 0x364 PUSH2 0x4F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x51A CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xC78 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x52D CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x561 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xD30 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x574 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xDE4 JUMP JUMPDEST PUSH2 0x341 PUSH2 0x587 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x5AA CALLDATASIZE PUSH1 0x4 PUSH2 0x142D JUMP JUMPDEST PUSH2 0xE5A JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x5BD CALLDATASIZE PUSH1 0x4 PUSH2 0x142D JUMP JUMPDEST PUSH2 0xEBA JUMP JUMPDEST PUSH2 0x341 PUSH2 0x5D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x5F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xF1A JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x364 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x619 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0xFDF JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x62C CALLDATASIZE PUSH1 0x4 PUSH2 0x142D JUMP JUMPDEST PUSH2 0x107C JUMP JUMPDEST PUSH2 0x290 PUSH2 0x63F CALLDATASIZE PUSH1 0x4 PUSH2 0x13D8 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x673 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x693 CALLDATASIZE PUSH1 0x4 PUSH2 0x142D JUMP JUMPDEST PUSH2 0x1100 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x6A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0x115E JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x6B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x13BD JUMP JUMPDEST PUSH2 0x11FB JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x364 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x364 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x718 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x73F JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1C SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x7A0 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7F0 SWAP2 SWAP1 PUSH2 0x140B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x860 PUSH1 0x14 DUP4 PUSH2 0x12AF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x891 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0x16 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x8E8 SWAP2 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x92E JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 DUP4 SWAP1 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x9D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA71 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xAAB JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB29 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x848 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB89 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xBB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC07 PUSH1 0x14 PUSH2 0x12D4 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC37 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP1 PUSH1 0x20 ADD PUSH2 0x848 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC07 PUSH1 0x2 PUSH2 0x12D4 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCA3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xCDD JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD5B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xD94 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE0F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE85 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x848 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xEE5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x848 JUMP JUMPDEST PUSH2 0xF25 PUSH1 0x14 DUP3 PUSH2 0x12AF JUMP JUMPDEST ISZERO PUSH2 0xF43 JUMPI PUSH1 0x40 MLOAD PUSH4 0x809740D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xF7D JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F3D3205 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF88 PUSH1 0x14 DUP3 PUSH2 0x12E1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP2 PUSH32 0xED3FAEF50715743626CD57DE74281A2B17CDBFC11C0486FEDA541FB911E0293D SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x100A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1031 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10A7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x10CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0x848 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x112B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP2 ADD PUSH2 0x848 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1189 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x11B0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1226 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x125F JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x848 SWAP1 DUP4 SWAP1 PUSH2 0x1446 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x12CD DUP4 PUSH2 0x12F6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12CD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1352 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1346 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1332 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1399 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x860 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x860 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x13B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12CD DUP3 PUSH2 0x13A1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x13EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13F4 DUP4 PUSH2 0x13A1 JUMP JUMPDEST SWAP2 POP PUSH2 0x1402 PUSH1 0x20 DUP5 ADD PUSH2 0x13A1 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x141D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x12CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x143F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x149B JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1476 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFDESTRUCT SWAP3 0xD4 0xAD MULMOD ISZERO PUSH11 0x752678A79D94E2081A20 0x4B 0x4E 0xFB 0xB3 CALLCODE 0xB0 DUP6 CALLDATALOAD KECCAK256 GAS SWAP7 0xC4 DUP11 DUP9 PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "133:442:60:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1968:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;2324:25:84;;;2312:2;2297:18;1968:80:29;;;;;;;;1728:76;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2556:364:31;;;;;;:::i;:::-;;:::i;:::-;;880:79:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;:::i;:::-;;;;;;;;;;;;;;468:105:60;;;;;;:::i;:::-;;:::i;:::-;;;2151:14:84;;2144:22;2126:41;;2114:2;2099:18;468:105:60;1986:187:84;362:32:31;;;;;-1:-1:-1;;;;;362:32:31;;;;;;;;;;:::i;2090:78:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;384:50:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;423:204:38;;;;;;:::i;:::-;;:::i;669:279::-;;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;-1:-1:-1;;;;;199:34:28;;;667:41:31;;;;;;834:50;;;;;;533:194:32;;;;;;:::i;:::-;;:::i;4195:110:31:-;;;;;;:::i;:::-;;:::i;1788:223::-;;;;;;:::i;:::-;;:::i;925:49::-;;;;;;590:36;;;;;-1:-1:-1;;;;;590:36:31;;;2385:105:29;;;:::i;:::-;;;;;;;:::i;226:52:38:-;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;226:52:38;;;2210:50:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3140:152:31;;;;;;:::i;:::-;;:::i;2531:111:29:-;;;:::i;321:59:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;321:59:38;;;999:203:32;;;;;;:::i;:::-;;:::i;769:69:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;749:44:31;;;;;;762:202:32;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3973:182:31;;;;;;:::i;:::-;;:::i;2960:140::-;;;;;;:::i;:::-;;:::i;299:49:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;422:253:36;;;;;;:::i;:::-;;:::i;435:37:31:-;;;;;-1:-1:-1;;;;;435:37:31;;;2286:230;;;;;;:::i;:::-;;:::i;3666:267::-;;;;;;:::i;:::-;;:::i;1846:80:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1105:32:31;;;;;;534:53:29;;;;;;:::i;:::-;;;;;;;;;;;;;;3332:188:31;;;;;;:::i;:::-;;:::i;2051:195::-;;;;;;:::i;:::-;;:::i;1237:211:32:-;;;;;;:::i;:::-;;:::i;513:36:31:-;;;;;-1:-1:-1;;;;;513:36:31;;;268:41:28;;;;;-1:-1:-1;;;;;268:41:28;;;1015:49:31;;;;;;2556:364;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2647:27:31;::::1;2643:53;;2683:13;;-1:-1:-1::0;;;2683:13:31::1;;;;;;;;;;;2643:53;2702:12;:28:::0;;-1:-1:-1;;;;;2702:28:31;;::::1;-1:-1:-1::0;;;;;;2702:28:31;;::::1;::::0;::::1;::::0;;;:12:::1;2736:28:::0;;;:14:::1;:28;::::0;;;;;;:43;;;;::::1;::::0;;::::1;::::0;;;2830:12:::1;::::0;2816:55;;-1:-1:-1;;;2816:55:31;;2830:12;::::1;::::0;2816:40:::1;::::0;:55:::1;::::0;2717:13;;2816:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2785:28:31;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;:86;;-1:-1:-1;;2785:86:31::1;::::0;::::1;;::::0;;;::::1;::::0;;;2882:33;::::1;::::0;::::1;::::0;2785:28;;2882:33:::1;:::i;:::-;;;;;;;;2556:364:::0;:::o;468:105:60:-;520:11;548:20;:5;563:4;548:14;:20::i;:::-;539:29;468:105;-1:-1:-1;;468:105:60:o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;754:10:::1;:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;423:204:38:-;-1:-1:-1;;;;;1012:14:38;;;:8;:14;;;;;;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;527:21:38;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;-1:-1:-1;;;;;;527:33:38::1;::::0;;::::1;::::0;;::::1;::::0;;;596:14;;;;;;;;571:51;;527:33;;596:14:::1;::::0;527:21;571:51:::1;::::0;::::1;423:204:::0;;;:::o;669:279::-;-1:-1:-1;;;;;1132:21:38;;;;;;;:15;:21;;;;;;;;;1118:10;:35;1114:69;;1162:21;;-1:-1:-1;;;1162:21:38;;;;;;;;;;;1114:69;-1:-1:-1;;;;;786:14:38;;::::1;761:22;786:14:::0;;;::::1;::::0;;;;;;;;;;824:21;;;;;;;;;::::1;-1:-1:-1::0;;;;;;807:38:38;;::::1;::::0;;;::::1;::::0;;;851:28;;;;::::1;::::0;;891:52;786:14;::::1;::::0;;;;910:10:::1;::::0;891:52:::1;::::0;761:22;891:52:::1;755:193;669:279:::0;;:::o;533:194:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;4195:110:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4264:3:31::1;:10:::0;;;4285:15:::1;::::0;2324:25:84;;;4285:15:31::1;::::0;2312:2:84;2297:18;4285:15:31::1;2178:177:84::0;1788:223:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1879:27:31;::::1;1875:53;;1915:13;;-1:-1:-1::0;;;1915:13:31::1;;;;;;;;;;;1875:53;1934:12;:28:::0;;-1:-1:-1;;;;;;1934:28:31::1;-1:-1:-1::0;;;;;1934:28:31;::::1;;::::0;;1973:33:::1;::::0;::::1;::::0;::::1;::::0;1934:28;;1973:33:::1;:::i;2385:105:29:-:0;2433:22;2471:14;:5;:12;:14::i;:::-;2463:22;;2385:105;:::o;3140:152:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3223:10:31::1;:24:::0;;;3258:29:::1;::::0;2324:25:84;;;3258:29:31::1;::::0;2312:2:84;2297:18;3258:29:31::1;2178:177:84::0;2531:111:29;2582:22;2620:17;:8;:15;:17::i;999:203:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;762:202::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;3973:182:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4066:15:31::1;:34:::0;;;4111:39:::1;::::0;2324:25:84;;;4111:39:31::1;::::0;2312:2:84;2297:18;4111:39:31::1;2178:177:84::0;2960:140:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3039:8:31::1;:20:::0;;;3070:25:::1;::::0;2324::84;;;3070::31::1;::::0;2312:2:84;2297:18;3070:25:31::1;2178:177:84::0;422:253:36;480:20;:5;495:4;480:14;:20::i;:::-;476:50;;;509:17;;-1:-1:-1;;;509:17:36;;;;;;;;;;;476:50;-1:-1:-1;;;;;536:15:36;;;;;;:9;:15;;;;;;;;532:44;;;560:16;;-1:-1:-1;;;560:16:36;;;;;;;;;;;532:44;582:15;:5;592:4;582:9;:15::i;:::-;-1:-1:-1;;;;;;603:14:36;;:8;:14;;;;;;;;;;;:27;;-1:-1:-1;;;;;;603:27:36;620:10;603:27;;;;;;641:29;;620:10;;641:29;;;422:253;:::o;2286:230:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2379:28:31;::::1;2375:54;;2416:13;;-1:-1:-1::0;;;2416:13:31::1;;;;;;;;;;;2375:54;2435:13;:30:::0;;-1:-1:-1;;;;;;2435:30:31::1;-1:-1:-1::0;;;;;2435:30:31;::::1;;::::0;;2476:35:::1;::::0;::::1;::::0;::::1;::::0;2435:30;;2476:35:::1;:::i;3666:267::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1341:6:31::1;3765:17;:43;3761:73;;;3817:17;;-1:-1:-1::0;;;3817:17:31::1;;;;;;;;;;;3761:73;3840:16;:36:::0;;;3887:41:::1;::::0;2324:25:84;;;3887:41:31::1;::::0;2312:2:84;2297:18;3887:41:31::1;2178:177:84::0;3332:188:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3427:16:31::1;:36:::0;;;3474:41:::1;::::0;2324:25:84;;;3474:41:31::1;::::0;2297:18:84;3474:41:31::1;2178:177:84::0;2051:195:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2134:23:31;::::1;2130:49;;2166:13;;-1:-1:-1::0;;;2166:13:31::1;;;;;;;;;;;2130:49;2185:8;:20:::0;;-1:-1:-1;;;;;;2185:20:31::1;-1:-1:-1::0;;;;;2185:20:31;::::1;;::::0;;2216:25:::1;::::0;::::1;::::0;::::1;::::0;2185:20;;2216:25:::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;8100:165:8:-:0;-1:-1:-1;;;;;8233:23:8;;8180:4;3767:19;;;:12;;;:19;;;;;;:24;;8203:55;8196:62;8100:165;-1:-1:-1;;;8100:165:8:o;9499:257::-;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;7545:150::-;7615:4;7638:50;7643:3;-1:-1:-1;;;;;7663:23:8;;7638:4;:50::i;4986:109::-;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;1630:404::-;1693:4;3767:19;;;:12;;;:19;;;;;;1709:319;;-1:-1:-1;1751:23:8;;;;;;;;:11;:23;;;;;;;;;;;;;1931:18;;1909:19;;;:12;;;:19;;;;;;:40;;;;1963:11;;1709:319;-1:-1:-1;2012:5:8;2005:12;;14:173:84;82:20;;-1:-1:-1;;;;;131:31:84;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:277::-;715:6;768:2;756:9;747:7;743:23;739:32;736:52;;;784:1;781;774:12;736:52;816:9;810:16;869:5;862:13;855:21;848:5;845:32;835:60;;891:1;888;881:12;930:180;989:6;1042:2;1030:9;1021:7;1017:23;1013:32;1010:52;;;1058:1;1055;1048:12;1010:52;-1:-1:-1;1081:23:84;;930:180;-1:-1:-1;930:180:84:o;1115:203::-;-1:-1:-1;;;;;1279:32:84;;;;1261:51;;1249:2;1234:18;;1115:203::o;1323:658::-;1494:2;1546:21;;;1616:13;;1519:18;;;1638:22;;;1465:4;;1494:2;1717:15;;;;1691:2;1676:18;;;1465:4;1760:195;1774:6;1771:1;1768:13;1760:195;;;1839:13;;-1:-1:-1;;;;;1835:39:84;1823:52;;1930:15;;;;1895:12;;;;1871:1;1789:9;1760:195;;;-1:-1:-1;1972:3:84;;1323:658;-1:-1:-1;;;;;;1323:658:84:o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1068200",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "52082",
                "acceptJobOwnership(address)": "55436",
                "addDisputer(address)": "30155",
                "addJob(address)": "infinite",
                "addSlasher(address)": "30177",
                "bondTime()": "2329",
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "changeJobOwnership(address,address)": "infinite",
                "disputers(address)": "2753",
                "disputes(address)": "2708",
                "fee()": "2394",
                "firstSeen(address)": "2640",
                "governance()": "2384",
                "hasBonded(address)": "2774",
                "inflationPeriod()": "2548",
                "isJob(address)": "infinite",
                "jobOwner(address)": "2806",
                "jobPendingOwner(address)": "2627",
                "jobTokenCredits(address,address)": "infinite",
                "jobs()": "infinite",
                "keep3rHelper()": "2581",
                "keep3rV1()": "2517",
                "keep3rV1Proxy()": "2383",
                "keepers()": "infinite",
                "kp3rWethPool()": "2538",
                "liquidityMinimum()": "2351",
                "pendingBonds(address,address)": "infinite",
                "pendingGovernance()": "2603",
                "pendingUnbonds(address,address)": "infinite",
                "removeDisputer(address)": "30277",
                "removeSlasher(address)": "30212",
                "rewardPeriodTime()": "2439",
                "setBondTime(uint256)": "25762",
                "setFee(uint256)": "25652",
                "setGovernance(address)": "27970",
                "setInflationPeriod(uint256)": "25740",
                "setKeep3rHelper(address)": "27983",
                "setKeep3rV1(address)": "28026",
                "setKeep3rV1Proxy(address)": "27894",
                "setKp3rWethPool(address)": "infinite",
                "setLiquidityMinimum(uint256)": "25692",
                "setRewardPeriodTime(uint256)": "25633",
                "setUnbondTime(uint256)": "25806",
                "slashers(address)": "2774",
                "unbondTime()": "2395",
                "workCompleted(address)": "2620"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addJob(address)": "c5198abc",
              "addSlasher(address)": "68a9f19c",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "isJob(address)": "1cd5c01f",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityMinimum()": "633fb68f",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "rewardPeriodTime()": "768b5d90",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "unbondTime()": "a7d2e784",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyAKeeper\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOwner\",\"type\":\"address\"}],\"name\":\"JobAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"addJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"isJob\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isJob\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addJob(address)\":{\"params\":{\"_job\":\"Address of the contract for which work should be performed\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAKeeper()\":[{\"notice\":\"Throws when the address that is trying to register as a keeper is already a keeper\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobAlreadyAdded()\":[{\"notice\":\"Throws when trying to add a job that has already been added\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobAddition(address,address)\":{\"notice\":\"Emitted when Keep3rJobManager#addJob is called\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addJob(address)\":{\"notice\":\"Allows any caller to add a new job\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol\":\"Keep3rJobManagerForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rRoles.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobManager is IKeep3rJobManager, Keep3rJobOwnership, Keep3rRoles, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @inheritdoc IKeep3rJobManager\\n  function addJob(address _job) external override {\\n    if (_jobs.contains(_job)) revert JobAlreadyAdded();\\n    if (hasBonded[_job]) revert AlreadyAKeeper();\\n    _jobs.add(_job);\\n    jobOwner[_job] = msg.sender;\\n    emit JobAddition(msg.sender, _job);\\n  }\\n}\\n\",\"keccak256\":\"0xa1fa3fde2b28e28476f0af438049043e695372ee24e1e780b67f00d14d5f660e\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../contracts/peripherals/jobs/Keep3rJobManager.sol';\\n\\ncontract Keep3rJobManagerForTest is Keep3rJobManager {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) Keep3rParameters(_keep3rHelper, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\\n\\n  function isJob(address _job) external view returns (bool _isJob) {\\n    _isJob = _jobs.contains(_job);\\n  }\\n}\\n\",\"keccak256\":\"0x5925a32b2259f893252f7da9958e3276e0a5f151d962ccdb36e366dd4b493c12\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 8303,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "jobOwner",
                "offset": 0,
                "slot": "0",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "_keepers",
                "offset": 0,
                "slot": "2",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "workCompleted",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "firstSeen",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "disputes",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "bonds",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "hasBonded",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "_jobs",
                "offset": 0,
                "slot": "20",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "governance",
                "offset": 0,
                "slot": "22",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "slashers",
                "offset": 0,
                "slot": "24",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "disputers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "26",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "bondTime",
                "offset": 0,
                "slot": "30",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "unbondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                "label": "fee",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol:Keep3rJobManagerForTest",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyAKeeper()": [
                {
                  "notice": "Throws when the address that is trying to register as a keeper is already a keeper"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobAlreadyAdded()": [
                {
                  "notice": "Throws when trying to add a job that has already been added"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobAddition(address,address)": {
                "notice": "Emitted when Keep3rJobManager#addJob is called"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addJob(address)": {
                "notice": "Allows any caller to add a new job"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol": {
        "Keep3rJobMigrationForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kph",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationImpossible",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationSuccessful",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "acceptJobMigration",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "isJob",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "migrateJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingJobMigrations",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "setJobLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                }
              ],
              "name": "setJobToken",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "settleJobAccountanceCallCount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "viewJobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "viewJobLiquidityList",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "viewJobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "viewJobTokenListLength",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "viewMigrationCreatedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobMigration(address,address)": {
                "details": "Unbond/withdraw process doesn't get migrated",
                "params": {
                  "_fromJob": "The address of the job that requested to migrate",
                  "_toJob": "The address to which the job wants to migrate to"
                }
              },
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_liquidityCredits": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_periodCredits": "The credits the given job has at the current period"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "migrateJob(address,address)": {
                "params": {
                  "_fromJob": "The address of the job that is requesting to migrate",
                  "_toJob": "The address at which the job is requesting to migrate"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_credits": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_10986": {
                  "entryPoint": null,
                  "id": 10986,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_18": {
                  "entryPoint": null,
                  "id": 18,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5689": {
                  "entryPoint": null,
                  "id": 5689,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 423,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory": {
                  "entryPoint": 452,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 545,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1152:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "328:332:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "375:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "384:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "387:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "377:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "377:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "377:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "349:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "358:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "345:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "345:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "370:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "341:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "341:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "338:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "400:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "440:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "410:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "410:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "400:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "459:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "503:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "514:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "499:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "499:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "469:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "469:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "459:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "527:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "571:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "582:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "567:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "567:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "537:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "537:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "527:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "595:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "639:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "650:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "635:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "635:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "605:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "605:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "595:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "270:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "281:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "293:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "301:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "309:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "317:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:464:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "743:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "789:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "798:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "801:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "791:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "791:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "791:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "764:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "773:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "760:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "760:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "785:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "756:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "756:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "753:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "814:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "833:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "827:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "827:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "818:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "896:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "905:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "908:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "898:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "898:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "898:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "865:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "886:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "879:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "879:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "872:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "872:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "862:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "855:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "855:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "852:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "921:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "931:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "921:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "709:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "720:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "732:6:84",
                            "type": ""
                          }
                        ],
                        "src": "665:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1048:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1058:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1070:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1081:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1066:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1066:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1058:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1100:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1115:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1131:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1136:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1127:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1127:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1140:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1123:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1123:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1111:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1111:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1093:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1093:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1093:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1017:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1028:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1039:4:84",
                            "type": ""
                          }
                        ],
                        "src": "947:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526203f480601f55621275006020556729a2241af62c000060215562069780602255622cd300602355601e6024553480156200003e57600080fd5b50604051620044aa380380620044aa8339810160408190526200006191620001c4565b6001600055838383833380806200008a5760405162b293ed60e81b815260040160405180910390fd5b601780546001600160a01b03199081166001600160a01b0393841617909155601d80548216888416178155601b80548316888516179055601c80548316878516179055601e8054831686851690811782556000818152600e602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200013557600080fd5b505afa1580156200014a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000170919062000221565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055506200024c95505050505050565b80516001600160a01b0381168114620001bf57600080fd5b919050565b60008060008060808587031215620001db57600080fd5b620001e685620001a7565b9350620001f660208601620001a7565b92506200020660408601620001a7565b91506200021660608601620001a7565b905092959194509250565b6000602082840312156200023457600080fd5b815180151581146200024557600080fd5b9392505050565b61424e806200025c6000396000f3fe608060405234801561001057600080fd5b50600436106103945760003560e01c8063951dc22c116101e1578063cb4be2bb1161010b578063cb4be2bb1461094a578063cb54694d1461095d578063cd22af1b14610970578063d55995fe1461099b578063ddca3f43146109ae578063e01f857c146109b7578063e326ac43146109ca578063e7f0cbf8146109ea578063ebbb619414610a13578063ec00cdfc14610a26578063ec8ca64314610a39578063f0f346b914610a62578063f11a1d1a14610a75578063f136a09d14610a88578063f22150c814610aa8578063f39c38a014610abb578063f6bb203214610ace578063fc253d2b14610af7578063fe75bc4614610b0057600080fd5b8063951dc22c1461075d57806398e90a0f146107655780639d5c33d81461078e578063a2145809146107a1578063a39744b5146107b4578063a676f9ff146107df578063a7d2e784146107ff578063aac6aa9c14610808578063ab033ea91461081b578063af320e811461082e578063b0103b1a14610841578063b239223314610864578063b440027f14610877578063b600702a146108a2578063b7e77340146108b5578063b87fcbff146108c8578063bea2b827146108eb578063c7ae40d014610924578063cacdf93d1461093757600080fd5b806359a2255e116102c257806359a2255e146105d25780635aa6e675146105e55780635ebe23f0146105f8578063633fb68f1461060157806364bb43ee1461060a57806368a9f19c1461061d578063694798e61461063057806369fe0e2d1461065b5780636cf262bc1461066e57806372da828a14610681578063768b5d90146106945780637b40c9131461069d5780637c8fce23146106b0578063878c723e146106b85780638bb6dfa8146106e15780638cb22b76146106f45780638fe204dd146107175780639035654f1461072a57806390a4684e1461074a57600080fd5b8063034d4c611461039957806307b435c2146103bf5780630c620bce146103ea5780630d6a1f87146103ff5780631101eb411461041257806315006b8214610427578063160e1e3114610452578063165e62e714610465578063168f92e7146104a25780631b44555e146104cd5780631cd5c01f146104ed5780631ef94b911461051057806321040b0114610530578063238efcbc1461055b578063274a8db41461056357806346d8908d1461058657806352a4de2914610599578063575288bf146105ac578063594a3a93146105bf575b600080fd5b6103ac6103a7366004613d0a565b610b13565b6040519081526020015b60405180910390f35b6103ac6103cd366004613d44565b601260209081526000928352604080842090915290825290205481565b6103f2610c19565b6040516103b69190613fa4565b6103ac61040d366004613e5c565b610c2a565b610425610420366004613dc8565b610d30565b005b6103ac610435366004613d44565b601060209081526000928352604080842090915290825290205481565b610425610460366004613d0a565b610e8a565b610478610473366004613d0a565b610ff0565b604080518251600690810b825260208085015190910b9082015291810151908201526060016103b6565b6103ac6104b0366004613d44565b600960209081526000928352604080842090915290825290205481565b6103ac6104db366004613d0a565b60056020526000908152604090205481565b6105006104fb366004613d0a565b6113b6565b60405190151581526020016103b6565b601b54610523906001600160a01b031681565b6040516103b69190613f34565b6103ac61053e366004613d44565b601360209081526000928352604080842090915290825290205481565b6104256113c3565b610500610571366004613d0a565b601a6020526000908152604090205460ff1681565b6103f2610594366004613d0a565b61144f565b6104256105a7366004613dc8565b611473565b6104256105ba366004613dc8565b6116c1565b6104256105cd366004613d44565b611984565b6104256105e0366004613d0a565b611a29565b601754610523906001600160a01b031681565b6103ac601f5481565b6103ac60215481565b610425610618366004613d0a565b611adb565b61042561062b366004613d0a565b611b5d565b6103ac61063e366004613d44565b602860209081526000928352604080842090915290825290205481565b610425610669366004613ee6565b611c15565b6103ac61067c366004613d0a565b611c75565b61042561068f366004613d0a565b611dab565b6103ac60225481565b601e54610523906001600160a01b031681565b6103f2611e48565b6105236106c6366004613d0a565b6001602052600090815260409020546001600160a01b031681565b6103ac6106ef366004613d0a565b611e54565b610500610702366004613d0a565b60146020526000908152604090205460ff1681565b610425610725366004613ee6565b611ef7565b6103ac610738366004613d0a565b602e6020526000908152604090205481565b610425610758366004613d44565b611f55565b6103f2612043565b610523610773366004613d0a565b6002602052600090815260409020546001600160a01b031681565b61042561079c366004613d0a565b61204f565b6104256107af366004613d7d565b612107565b6103ac6107c2366004613d44565b600860209081526000928352604080842090915290825290205481565b6103ac6107ed366004613d0a565b60296020526000908152604090205481565b6103ac60205481565b610425610816366004613d0a565b6122d7565b610425610829366004613d0a565b61238b565b61042561083c366004613d44565b612401565b61050061084f366004613d0a565b60076020526000908152604090205460ff1681565b610425610872366004613ee6565b612880565b6103ac610885366004613d44565b602560209081526000928352604080842090915290825290205481565b6104256108b0366004613d0a565b6128e0565b6104256108c3366004613ee6565b612b05565b6105006108d6366004613d0a565b60196020526000908152604090205460ff1681565b6103ac6108f9366004613d44565b6001600160a01b039182166000908152602d6020908152604080832093909416825291909152205490565b601c54610523906001600160a01b031681565b610425610945366004613d44565b612b65565b610425610958366004613d0a565b612b8c565b61042561096b366004613ee6565b612c29565b6103ac61097e366004613d44565b601160209081526000928352604080842090915290825290205481565b6104256109a9366004613e09565b612cad565b6103ac60245481565b6104256109c5366004613d44565b612ee4565b6103ac6109d8366004613d0a565b60066020526000908152604090205481565b6103ac6109f8366004613d0a565b6001600160a01b03166000908152600a602052604090205490565b610425610a21366004613ee6565b612f06565b610425610a34366004613d0a565b612f66565b610523610a47366004613d0a565b602c602052600090815260409020546001600160a01b031681565b610425610a70366004613d0a565b613003565b601d54610523906001600160a01b031681565b6103ac610a96366004613d0a565b602a6020526000908152604090205481565b6103ac610ab6366004613d0a565b6130b7565b601854610523906001600160a01b031681565b6103ac610adc366004613d0a565b6001600160a01b03166000908152600b602052604090205490565b6103ac60235481565b610425610b0e366004613e5c565b6130d8565b600080610b1f83611c75565b6022549091504290610b3a90610b35908361410f565b6131c8565b6001600160a01b0385166000908152602960205260409020541115610bde576022546001600160a01b038516600090815260296020526040902054610b7f904261410f565b10610bbb576022546001600160a01b038516600090815260296020526040902054610baa9190614074565b610bb4908261410f565b9050610bf4565b6001600160a01b038416600090815260296020526040902054610bb4908261410f565b610be7426131c8565b610bf1908261410f565b90505b610bfe81836131e2565b610c0785611e54565b610c119190614074565b949350505050565b6060610c25602661320c565b905090565b6000610c37602684613220565b15610d2a576000610c4784610ff0565b90508060400151600014610d28576001600160a01b0384166000908152600f602052604081205460ff16610c88578160200151610c8390614181565b610c8e565b81602001515b601d5460225460405163a0d2710760e01b8152929350610d1f926001600160a01b039092169163a0d2710791610cca918991879160040161405b565b60206040518083038186803b158015610ce257600080fd5b505afa158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a9190613eff565b613242565b92505050610d2a565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610d6c57604051636efb4f4160e11b815260040160405180910390fd5b602054610d799042614074565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610dc8908490614074565b90915550610dd99050848484613253565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590610e185750602154610e168286613461565b105b15610e3657604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de85604051610e7b91815260200190565b60405180910390a35050505050565b6017546001600160a01b03163314610eb5576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610edc5760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b90610f3d908490600401613f34565b60206040518083038186803b158015610f5557600080fd5b505afa158015610f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8d9190613e88565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa90610fe5908390613f34565b60405180910390a150565b6040805160608101825260008082526020820181905291810191909152611016426131c8565b6001600160a01b0383166000908152602b6020526040902060010154141561108c57506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b6000806110a060225442610b35919061410f565b6001600160a01b0385166000908152602b602052604090206001015490915081141561120457604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b61110d426131c8565b611117904261410f565b8260008151811061112a5761112a6141ea565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926111869291909116908690600401613f48565b60606040518083038186803b15801561119e57600080fd5b505afa1580156111b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d69190613ea3565b600692830b90920b8088529195506111f0918391506140bf565b600690810b900b60208601525061138d9050565b6001600160a01b0384166000908152602b602052604090206001015481111561138d57604080516002808252606082018352600092602083019080368337019050509050611251426131c8565b61125b904261410f565b8160008151811061126e5761126e6141ea565b602002602001019063ffffffff16908163ffffffff1681525050602254611294426131c8565b61129e904261410f565b6112a89190614074565b816001815181106112bb576112bb6141ea565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d91926113139216908690600401613f48565b60606040518083038186803b15801561132b57600080fd5b505afa15801561133f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113639190613ea3565b600692830b90920b808852919550915061137e9082906140bf565b600690810b900b602086015250505b81156113a65761139c426131c8565b60408401526113ae565b600060408401525b50505b919050565b6000610d2a601583613220565b6018546001600160a01b031633146113ee57604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161144591613f34565b60405180910390a1565b6001600160a01b0381166000908152600d60205260409020606090610d2a9061320c565b6002600054141561149f5760405162461bcd60e51b815260040161149690614024565b60405180910390fd5b60026000556114af602683613220565b6114cc5760405163e0b6aead60e01b815260040160405180910390fd5b6114d7601584613220565b6114f457604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611516908361357f565b5061152083613594565b6021546001600160a01b0380851660009081526028602090815260408083209387168352929052205461155e90611558908490614074565b84613461565b101561157d57604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b845293829020548251918252928101939093528201527fee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c38209060600160405180910390a26115fb6001600160a01b0383163330846135c0565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611632908490614074565b909155506116459050610d1a8284613461565b6001600160a01b0384166000908152600b60205260408120805490919061166d908490614074565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b600260005414156116e45760405162461bcd60e51b815260040161149690614024565b60026000556116f4601584613220565b61171157604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b038381169116141561173f5760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a082319061176e903090600401613f34565b60206040518083038186803b15801561178657600080fd5b505afa15801561179a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117be9190613eff565b90506117d56001600160a01b0384163330856135c0565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016118049190613f34565b60206040518083038186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190613eff565b61185e919061410f565b905060006127106024548361187391906140a0565b61187d919061408c565b9050611889818361410f565b6001600160a01b038088166000908152600960209081526040808320938a16835292905290812080549091906118c0908490614074565b90915550506001600160a01b03808716600090815260256020908152604080832089851680855292529091204290556017546118fd921683613631565b6001600160a01b0386166000908152600c6020526040902061191f908661357f565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb8560405161196f91815260200190565b60405180910390a45050600160005550505050565b6001600160a01b0382811660009081526001602052604090205483911633146119c057604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b038181166000908152600260205260409020548291163314611a655760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b6017546001600160a01b03163314611b06576040516354348f0360e01b815260040160405180910390fd5b611b11602682613661565b611b2e57604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e5681604051610fe59190613f34565b6017546001600160a01b03163314611b88576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff1615611bc25760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b90610fe5908390613f34565b6017546001600160a01b03163314611c40576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001610fe5565b6000805b6001600160a01b0383166000908152600d60205260409020611c9a90613676565b811015611da5576001600160a01b0383166000908152600d60205260408120611cc39083613680565b9050611cd0602682613220565b15611d92576000611ce082610ff0565b90508060400151600014611d90576001600160a01b0382166000908152600f602052604081205460ff16611d21578160200151611d1c90614181565b611d27565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b8152949550611d8294929093169263a0d2710792610cca92879160040161405b565b611d8c9086614074565b9450505b505b5080611d9d81614152565b915050611c79565b50919050565b6017546001600160a01b03163314611dd6576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116611dfd5760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090610fe5908390613f34565b6060610c25601561320c565b600080611e6083611c75565b6022546001600160a01b03851660009081526029602052604090205491925090611e8a904261410f565b1015610d2a5760008111611eb6576001600160a01b0383166000908152600a6020526040902054611ef0565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054611ee69083906140a0565b611ef0919061408c565b9150611da5565b6017546001600160a01b03163314611f22576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29101610fe5565b6001600160a01b038281166000908152600160205260409020548391163314611f9157604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415611fc45760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d825280832094835293905282902042905590517fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c90612036908590613f34565b60405180910390a2505050565b6060610c25600361320c565b6017546001600160a01b0316331461207a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff16156120b45760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f90610fe5908390613f34565b6001600160a01b03838116600090815260016020526040902054849116331461214357604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03821661216a5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038085166000908152601360209081526040808320938716835292905220546121ad5760405163184c088160e21b815260040160405180910390fd5b6001600160a01b0380851660009081526012602090815260408083209387168352929052205442116121f2576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff161561222c576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590612279908483613631565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca7928862846040516122c891815260200190565b60405180910390a45050505050565b6017546001600160a01b03163314612302576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff1661233b576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d02590610fe5908390613f34565b6017546001600160a01b031633146123b6576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610fe5908390613f34565b6001600160a01b03818116600090815260016020526040902054829116331461243d57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff168061247c57506001600160a01b03821660009081526007602052604090205460ff165b1561249a5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c60205260409020548116908316146124d757604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d602090815260408083209386168352929052205461250990603c90614074565b421015612529576040516356248e9760e01b815260040160405180910390fd5b61253283613594565b61253b82613594565b6001600160a01b0383166000908152600c6020526040812061255c90613676565b111561263e576001600160a01b0383166000908152600c602052604081206125849082613680565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a1685529282528084209284529190528120805493945091926125d2908490614074565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c909152206126149082613661565b506001600160a01b0383166000908152600c60205260409020612637908261357f565b505061253b565b6001600160a01b0383166000908152600d6020526040812061265f90613676565b1115612741576001600160a01b0383166000908152600d602052604081206126879082613680565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a1685529282528084209284529190528120805493945091926126d5908490614074565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d905220612717908261357f565b506001600160a01b0384166000908152600d6020526040902061273a9082613661565b505061263e565b6001600160a01b038084166000908152600b602052604080822054928516825281208054909190612773908490614074565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a909152808220549285168252812080549091906127b7908490614074565b90915550506001600160a01b0383166000908152600a6020908152604080832083905560299091528120556127ed601584613661565b506001600160a01b03808416600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055938352602c909152908190208054909216909155517f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f290612036908690613f34565b6017546001600160a01b031633146128ab576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001610fe5565b6017546001600160a01b0316331461290b576040516354348f0360e01b815260040160405180910390fd5b61291660268261357f565b6129335760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561296c57600080fd5b505afa158015612980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a49190613d27565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b916129f89190600401613f34565b60206040518083038186803b158015612a1057600080fd5b505afa158015612a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a489190613e88565b6001600160a01b0382166000908152600f60205260409020805460ff1916911515919091179055612a7881610ff0565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b90610fe5908390613f34565b6017546001600160a01b03163314612b30576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001610fe5565b6001600160a01b0382166000908152600d60205260409020612b87908261357f565b505050565b6017546001600160a01b03163314612bb7576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612bde5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090610fe5908390613f34565b6017546001600160a01b03163314612c54576040516354348f0360e01b815260040160405180910390fd5b62015180811015612c7857604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001610fe5565b60026000541415612cd05760405162461bcd60e51b815260040161149690614024565b600260009081556001600160a01b03858116825260016020526040909120548591163314612d1157604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054612d4390603c90614074565b4211612d6257604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115612da85760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615612de25760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290612e1990849061410f565b90915550612e3390506001600160a01b0385168385613631565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054612e81576001600160a01b0385166000908152600c60205260409020612e7f9085613661565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051612ed091815260200190565b60405180910390a450506001600055505050565b6001600160a01b0382166000908152600c60205260409020612b87908261357f565b6017546001600160a01b03163314612f31576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e790602001610fe5565b6017546001600160a01b03163314612f91576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612fb85760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90610fe5908390613f34565b6017546001600160a01b0316331461302e576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661306757604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e90610fe5908390613f34565b6001600160a01b0381166000908152600c60205260408120610d2a90613676565b6017546001600160a01b03163314613103576040516354348f0360e01b815260040160405180910390fd5b61310e601583613220565b61312b57604051636211d34960e01b815260040160405180910390fd5b61313482613594565b6001600160a01b0382166000908152600a60205260408120805483929061315c908490614074565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d1926131bc928252602082015260400190565b60405180910390a25050565b6000602254826131d8919061416d565b610d2a908361410f565b6000602254831015611da5576022546131fb83856140a0565b613205919061408c565b9050610d2a565b606060006132198361368c565b9392505050565b6001600160a01b03811660009081526001830160205260408120541515613219565b6000610d2a826022546023546136e8565b600260005414156132765760405162461bcd60e51b815260040161149690614024565b600260009081556001600160a01b0384168152600d6020526040902061329c9083613220565b6132b8576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156132fe5760405163435b562560e01b815260040160405180910390fd5b61330783613796565b6000613316610d1a8385613461565b6001600160a01b0385166000908152600b6020526040902054909150156133cc576001600160a01b0384166000908152600b6020908152604080832054600a909252909120546133679083906140a0565b613371919061408c565b6001600160a01b0385166000908152600a60205260408120805490919061339990849061410f565b90915550506001600160a01b0384166000908152600b6020526040812080548392906133c690849061410f565b90915550505b6001600160a01b0380851660009081526028602090815260408083209387168352929052908120805484929061340390849061410f565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054613456576001600160a01b0384166000908152600d602052604090206134549084613661565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610d2a576001600160a01b0382166000908152600f602052604081205460ff166134d3576001600160a01b0383166000908152602b60205260409020546134ce90600160381b900460060b614181565b6134f7565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d271079161352f918891869160040161405b565b60206040518083038186803b15801561354757600080fd5b505afa15801561355b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c119190613eff565b6000613219836001600160a01b0384166137bb565b6001600160a01b0381166000908152602e602052604081208054916135b883614152565b919050555050565b6040516001600160a01b038085166024830152831660448201526064810182905261362b9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261380a565b50505050565b6040516001600160a01b038316602482015260448101829052612b8790849063a9059cbb60e01b906064016135f4565b6000613219836001600160a01b0384166138dc565b6000610d2a825490565b600061321983836139cf565b6060816000018054806020026020016040519081016040528092919081815260200182805480156136dc57602002820191906000526020600020905b8154815260200190600101908083116136c8575b50505050509050919050565b600080806000198587098587029250828110838203039150508060001415613722576000841161371757600080fd5b508290049050613219565b80841161372e57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b61379f816139f9565b6001600160a01b039091166000908152600b6020526040902055565b600081815260018301602052604081205461380257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d2a565b506000610d2a565b600061385f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613bdd9092919063ffffffff16565b805190915015612b87578080602001905181019061387d9190613e88565b612b875760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611496565b600081815260018301602052604081205480156139c557600061390060018361410f565b85549091506000906139149060019061410f565b9050818114613979576000866000018281548110613934576139346141ea565b9060005260206000200154905080876000018481548110613957576139576141ea565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061398a5761398a6141d4565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d2a565b6000915050610d2a565b60008260000182815481106139e6576139e66141ea565b9060005260206000200154905092915050565b6000613a04426131c8565b601e546001600160a01b03166000908152602b602052604090206001015414613a9b57601e54613a3c906001600160a01b0316610ff0565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d60205260409020613abf90613676565b811015611da5576001600160a01b0383166000908152600d60205260408120613ae89083613680565b9050613af5602682613220565b15613bca57613b03426131c8565b6001600160a01b0382166000908152602b602052604090206001015414613b8957613b2d81610ff0565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b03808516600090815260286020908152604080832093851683529290522054613bbd90610d1a9083613461565b613bc79084614074565b92505b5080613bd581614152565b915050613a9e565b6060610c11848460008585843b613c365760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611496565b600080866001600160a01b03168587604051613c529190613f18565b60006040518083038185875af1925050503d8060008114613c8f576040519150601f19603f3d011682016040523d82523d6000602084013e613c94565b606091505b5091509150613ca4828286613caf565b979650505050505050565b60608315613cbe575081613219565b825115613cce5782518084602001fd5b8160405162461bcd60e51b81526004016114969190613ff1565b805180151581146113b157600080fd5b8051600681900b81146113b157600080fd5b600060208284031215613d1c57600080fd5b813561321981614200565b600060208284031215613d3957600080fd5b815161321981614200565b60008060408385031215613d5757600080fd5b8235613d6281614200565b91506020830135613d7281614200565b809150509250929050565b600080600060608486031215613d9257600080fd5b8335613d9d81614200565b92506020840135613dad81614200565b91506040840135613dbd81614200565b809150509250925092565b600080600060608486031215613ddd57600080fd5b8335613de881614200565b92506020840135613df881614200565b929592945050506040919091013590565b60008060008060808587031215613e1f57600080fd5b8435613e2a81614200565b93506020850135613e3a81614200565b9250604085013591506060850135613e5181614200565b939692955090935050565b60008060408385031215613e6f57600080fd5b8235613e7a81614200565b946020939093013593505050565b600060208284031215613e9a57600080fd5b61321982613ce8565b600080600060608486031215613eb857600080fd5b613ec184613cf8565b9250613ecf60208501613cf8565b9150613edd60408501613ce8565b90509250925092565b600060208284031215613ef857600080fd5b5035919050565b600060208284031215613f1157600080fd5b5051919050565b60008251613f2a818460208701614126565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015613f9757845163ffffffff1683529383019391830191600101613f75565b5090979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613fe55783516001600160a01b031683529284019291840191600101613fc0565b50909695505050505050565b6020815260008251806020840152614010816040850160208701614126565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b60008219821115614087576140876141a8565b500190565b60008261409b5761409b6141be565b500490565b60008160001904831182151516156140ba576140ba6141a8565b500290565b60008160060b8360060b6000811281667fffffffffffff19018312811516156140ea576140ea6141a8565b81667fffffffffffff018313811615614105576141056141a8565b5090039392505050565b600082821015614121576141216141a8565b500390565b60005b83811015614141578181015183820152602001614129565b8381111561362b5750506000910152565b6000600019821415614166576141666141a8565b5060010190565b60008261417c5761417c6141be565b500690565b60008160060b667fffffffffffff1981141561419f5761419f6141a8565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461421557600080fd5b5056fea2646970667358221220ec7879ea33a2b6c1b3ad38acbf2a9055a05042e69842ff8123fb271fe295664d64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x3F480 PUSH1 0x1F SSTORE PUSH3 0x127500 PUSH1 0x20 SSTORE PUSH8 0x29A2241AF62C0000 PUSH1 0x21 SSTORE PUSH3 0x69780 PUSH1 0x22 SSTORE PUSH3 0x2CD300 PUSH1 0x23 SSTORE PUSH1 0x1E PUSH1 0x24 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x44AA CODESIZE SUB DUP1 PUSH3 0x44AA DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x61 SWAP2 PUSH3 0x1C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE DUP4 DUP4 DUP4 DUP4 CALLER DUP1 DUP1 PUSH3 0x8A JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1D DUP1 SLOAD DUP3 AND DUP9 DUP5 AND OR DUP2 SSTORE PUSH1 0x1B DUP1 SLOAD DUP4 AND DUP9 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1C DUP1 SLOAD DUP4 AND DUP8 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1E DUP1 SLOAD DUP4 AND DUP7 DUP6 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP6 AND SWAP1 SWAP2 OR SWAP1 SWAP4 SSTORE SWAP1 SLOAD SWAP1 SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x696A437B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x14A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x170 SWAP2 SWAP1 PUSH3 0x221 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x24C SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E6 DUP6 PUSH3 0x1A7 JUMP JUMPDEST SWAP4 POP PUSH3 0x1F6 PUSH1 0x20 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP3 POP PUSH3 0x206 PUSH1 0x40 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP2 POP PUSH3 0x216 PUSH1 0x60 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x424E DUP1 PUSH3 0x25C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x394 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x951DC22C GT PUSH2 0x1E1 JUMPI DUP1 PUSH4 0xCB4BE2BB GT PUSH2 0x10B JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x94A JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x95D JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x970 JUMPI DUP1 PUSH4 0xD55995FE EQ PUSH2 0x99B JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x9AE JUMPI DUP1 PUSH4 0xE01F857C EQ PUSH2 0x9B7 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x9CA JUMPI DUP1 PUSH4 0xE7F0CBF8 EQ PUSH2 0x9EA JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0xA13 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0xA26 JUMPI DUP1 PUSH4 0xEC8CA643 EQ PUSH2 0xA39 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0xA62 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0xA75 JUMPI DUP1 PUSH4 0xF136A09D EQ PUSH2 0xA88 JUMPI DUP1 PUSH4 0xF22150C8 EQ PUSH2 0xAA8 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0xABB JUMPI DUP1 PUSH4 0xF6BB2032 EQ PUSH2 0xACE JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0xAF7 JUMPI DUP1 PUSH4 0xFE75BC46 EQ PUSH2 0xB00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x951DC22C EQ PUSH2 0x75D JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x765 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x78E JUMPI DUP1 PUSH4 0xA2145809 EQ PUSH2 0x7A1 JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x7B4 JUMPI DUP1 PUSH4 0xA676F9FF EQ PUSH2 0x7DF JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x7FF JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x808 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x81B JUMPI DUP1 PUSH4 0xAF320E81 EQ PUSH2 0x82E JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x841 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x864 JUMPI DUP1 PUSH4 0xB440027F EQ PUSH2 0x877 JUMPI DUP1 PUSH4 0xB600702A EQ PUSH2 0x8A2 JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x8B5 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x8C8 JUMPI DUP1 PUSH4 0xBEA2B827 EQ PUSH2 0x8EB JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x924 JUMPI DUP1 PUSH4 0xCACDF93D EQ PUSH2 0x937 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x59A2255E GT PUSH2 0x2C2 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x5D2 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x5E5 JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x5F8 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x601 JUMPI DUP1 PUSH4 0x64BB43EE EQ PUSH2 0x60A JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x61D JUMPI DUP1 PUSH4 0x694798E6 EQ PUSH2 0x630 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x65B JUMPI DUP1 PUSH4 0x6CF262BC EQ PUSH2 0x66E JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x681 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x694 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x69D JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x6B0 JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0x8BB6DFA8 EQ PUSH2 0x6E1 JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x6F4 JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x717 JUMPI DUP1 PUSH4 0x9035654F EQ PUSH2 0x72A JUMPI DUP1 PUSH4 0x90A4684E EQ PUSH2 0x74A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34D4C61 EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0xC620BCE EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0xD6A1F87 EQ PUSH2 0x3FF JUMPI DUP1 PUSH4 0x1101EB41 EQ PUSH2 0x412 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x452 JUMPI DUP1 PUSH4 0x165E62E7 EQ PUSH2 0x465 JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0x1CD5C01F EQ PUSH2 0x4ED JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x510 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x530 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x55B JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x563 JUMPI DUP1 PUSH4 0x46D8908D EQ PUSH2 0x586 JUMPI DUP1 PUSH4 0x52A4DE29 EQ PUSH2 0x599 JUMPI DUP1 PUSH4 0x575288BF EQ PUSH2 0x5AC JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x5BF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3AC PUSH2 0x3A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0xB13 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3AC PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0xC19 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B6 SWAP2 SWAP1 PUSH2 0x3FA4 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x40D CALLDATASIZE PUSH1 0x4 PUSH2 0x3E5C JUMP JUMPDEST PUSH2 0xC2A JUMP JUMPDEST PUSH2 0x425 PUSH2 0x420 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC8 JUMP JUMPDEST PUSH2 0xD30 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3AC PUSH2 0x435 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x460 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0xE8A JUMP JUMPDEST PUSH2 0x478 PUSH2 0x473 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0xFF0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND DUP3 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 SIGNEXTEND SWAP1 DUP3 ADD MSTORE SWAP2 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x4B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x500 PUSH2 0x4FB CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x13B6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x523 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B6 SWAP2 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x53E CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x13C3 JUMP JUMPDEST PUSH2 0x500 PUSH2 0x571 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0x594 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x144F JUMP JUMPDEST PUSH2 0x425 PUSH2 0x5A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC8 JUMP JUMPDEST PUSH2 0x1473 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x5BA CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC8 JUMP JUMPDEST PUSH2 0x16C1 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x5CD CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH2 0x1984 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x5E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x1A29 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x523 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x618 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x1ADB JUMP JUMPDEST PUSH2 0x425 PUSH2 0x62B CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x1B5D JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x63E CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x669 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE6 JUMP JUMPDEST PUSH2 0x1C15 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x67C CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x1C75 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x68F CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x1DAB JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x523 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0x1E48 JUMP JUMPDEST PUSH2 0x523 PUSH2 0x6C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x6EF CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x500 PUSH2 0x702 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x725 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE6 JUMP JUMPDEST PUSH2 0x1EF7 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x738 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x2E PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x758 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH2 0x1F55 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0x2043 JUMP JUMPDEST PUSH2 0x523 PUSH2 0x773 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x79C CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x204F JUMP JUMPDEST PUSH2 0x425 PUSH2 0x7AF CALLDATASIZE PUSH1 0x4 PUSH2 0x3D7D JUMP JUMPDEST PUSH2 0x2107 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x7C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x7ED CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x816 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x22D7 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x829 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x238B JUMP JUMPDEST PUSH2 0x425 PUSH2 0x83C CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH2 0x2401 JUMP JUMPDEST PUSH2 0x500 PUSH2 0x84F CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x872 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE6 JUMP JUMPDEST PUSH2 0x2880 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x885 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x8B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x28E0 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x8C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE6 JUMP JUMPDEST PUSH2 0x2B05 JUMP JUMPDEST PUSH2 0x500 PUSH2 0x8D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x8F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x523 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x945 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH2 0x2B65 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x958 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x2B8C JUMP JUMPDEST PUSH2 0x425 PUSH2 0x96B CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE6 JUMP JUMPDEST PUSH2 0x2C29 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x97E CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x9A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E09 JUMP JUMPDEST PUSH2 0x2CAD JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x9C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH2 0x2EE4 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x9D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x9F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x425 PUSH2 0xA21 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE6 JUMP JUMPDEST PUSH2 0x2F06 JUMP JUMPDEST PUSH2 0x425 PUSH2 0xA34 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x2F66 JUMP JUMPDEST PUSH2 0x523 PUSH2 0xA47 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0xA70 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x3003 JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x523 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0xA96 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0xAB6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x30B7 JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x523 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0xADC CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0xB0E CALLDATASIZE PUSH1 0x4 PUSH2 0x3E5C JUMP JUMPDEST PUSH2 0x30D8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB1F DUP4 PUSH2 0x1C75 JUMP JUMPDEST PUSH1 0x22 SLOAD SWAP1 SWAP2 POP TIMESTAMP SWAP1 PUSH2 0xB3A SWAP1 PUSH2 0xB35 SWAP1 DUP4 PUSH2 0x410F JUMP JUMPDEST PUSH2 0x31C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO PUSH2 0xBDE JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xB7F SWAP1 TIMESTAMP PUSH2 0x410F JUMP JUMPDEST LT PUSH2 0xBBB JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xBAA SWAP2 SWAP1 PUSH2 0x4074 JUMP JUMPDEST PUSH2 0xBB4 SWAP1 DUP3 PUSH2 0x410F JUMP JUMPDEST SWAP1 POP PUSH2 0xBF4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xBB4 SWAP1 DUP3 PUSH2 0x410F JUMP JUMPDEST PUSH2 0xBE7 TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH2 0xBF1 SWAP1 DUP3 PUSH2 0x410F JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0xBFE DUP2 DUP4 PUSH2 0x31E2 JUMP JUMPDEST PUSH2 0xC07 DUP6 PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0xC11 SWAP2 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC25 PUSH1 0x26 PUSH2 0x320C JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC37 PUSH1 0x26 DUP5 PUSH2 0x3220 JUMP JUMPDEST ISZERO PUSH2 0xD2A JUMPI PUSH1 0x0 PUSH2 0xC47 DUP5 PUSH2 0xFF0 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0xD28 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xC88 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xC83 SWAP1 PUSH2 0x4181 JUMP JUMPDEST PUSH2 0xC8E JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH2 0xD1F SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0xCCA SWAP2 DUP10 SWAP2 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x405B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD1A SWAP2 SWAP1 PUSH2 0x3EFF JUMP JUMPDEST PUSH2 0x3242 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xD2A JUMP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0xD6C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 SLOAD PUSH2 0xD79 SWAP1 TIMESTAMP PUSH2 0x4074 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0xDC8 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0xDD9 SWAP1 POP DUP5 DUP5 DUP5 PUSH2 0x3253 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xE18 JUMPI POP PUSH1 0x21 SLOAD PUSH2 0xE16 DUP3 DUP7 PUSH2 0x3461 JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0xE36 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE DUP6 PUSH1 0x40 MLOAD PUSH2 0xE7B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xEB5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xEDC JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0xF3D SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF69 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF8D SWAP2 SWAP1 PUSH2 0x3E88 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1016 TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ ISZERO PUSH2 0x108C JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x10A0 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xB35 SWAP2 SWAP1 PUSH2 0x410F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 SWAP2 POP DUP2 EQ ISZERO PUSH2 0x1204 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x6 SIGNEXTEND PUSH2 0x110D TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH2 0x1117 SWAP1 TIMESTAMP PUSH2 0x410F JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x112A JUMPI PUSH2 0x112A PUSH2 0x41EA JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD SWAP3 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP2 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x1186 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3F48 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x119E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11D6 SWAP2 SWAP1 PUSH2 0x3EA3 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP PUSH2 0x11F0 SWAP2 DUP4 SWAP2 POP PUSH2 0x40BF JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP PUSH2 0x138D SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 GT ISZERO PUSH2 0x138D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x1251 TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH2 0x125B SWAP1 TIMESTAMP PUSH2 0x410F JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x126E JUMPI PUSH2 0x126E PUSH2 0x41EA JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x22 SLOAD PUSH2 0x1294 TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH2 0x129E SWAP1 TIMESTAMP PUSH2 0x410F JUMP JUMPDEST PUSH2 0x12A8 SWAP2 SWAP1 PUSH2 0x4074 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x12BB JUMPI PUSH2 0x12BB PUSH2 0x41EA JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP3 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x1313 SWAP3 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3F48 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x132B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x133F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1363 SWAP2 SWAP1 PUSH2 0x3EA3 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP SWAP2 POP PUSH2 0x137E SWAP1 DUP3 SWAP1 PUSH2 0x40BF JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x13A6 JUMPI PUSH2 0x139C TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x13AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP5 ADD MSTORE JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD2A PUSH1 0x15 DUP4 PUSH2 0x3220 JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13EE JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x1445 SWAP2 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 SWAP1 PUSH2 0xD2A SWAP1 PUSH2 0x320C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x149F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1496 SWAP1 PUSH2 0x4024 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x14AF PUSH1 0x26 DUP4 PUSH2 0x3220 JUMP JUMPDEST PUSH2 0x14CC JUMPI PUSH1 0x40 MLOAD PUSH4 0xE0B6AEAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x14D7 PUSH1 0x15 DUP5 PUSH2 0x3220 JUMP JUMPDEST PUSH2 0x14F4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1516 SWAP1 DUP4 PUSH2 0x357F JUMP JUMPDEST POP PUSH2 0x1520 DUP4 PUSH2 0x3594 JUMP JUMPDEST PUSH1 0x21 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x155E SWAP1 PUSH2 0x1558 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST DUP5 PUSH2 0x3461 JUMP JUMPDEST LT ISZERO PUSH2 0x157D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB DUP5 MSTORE SWAP4 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE SWAP3 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP3 ADD MSTORE PUSH32 0xEE3F0DABA9837D1AB0597ACF34328550E4832D02E24E467825E7C2DD318C3820 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x15FB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x35C0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1632 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1645 SWAP1 POP PUSH2 0xD1A DUP3 DUP5 PUSH2 0x3461 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x166D SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 SWAP1 DUP7 AND SWAP1 PUSH32 0x4E186BC75A2220191B826BAFF3EE63C3E970E94E58A9007FF94C9A7B8E6EBB3F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x16E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1496 SWAP1 PUSH2 0x4024 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x16F4 PUSH1 0x15 DUP5 PUSH2 0x3220 JUMP JUMPDEST PUSH2 0x1711 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x173F JUMPI PUSH1 0x40 MLOAD PUSH3 0x822D97 PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x176E SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1786 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x179A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17BE SWAP2 SWAP1 PUSH2 0x3EFF JUMP JUMPDEST SWAP1 POP PUSH2 0x17D5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x35C0 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1804 SWAP2 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x181C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1830 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1854 SWAP2 SWAP1 PUSH2 0x3EFF JUMP JUMPDEST PUSH2 0x185E SWAP2 SWAP1 PUSH2 0x410F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2710 PUSH1 0x24 SLOAD DUP4 PUSH2 0x1873 SWAP2 SWAP1 PUSH2 0x40A0 JUMP JUMPDEST PUSH2 0x187D SWAP2 SWAP1 PUSH2 0x408C JUMP JUMPDEST SWAP1 POP PUSH2 0x1889 DUP2 DUP4 PUSH2 0x410F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x18C0 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x17 SLOAD PUSH2 0x18FD SWAP3 AND DUP4 PUSH2 0x3631 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x191F SWAP1 DUP7 PUSH2 0x357F JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEC1A37D4A331A5059081E0FB5DA1735E7890900CD215A4FB1E9F2779FD7B83EB DUP6 PUSH1 0x40 MLOAD PUSH2 0x196F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x19C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x1A65 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1B06 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1B11 PUSH1 0x26 DUP3 PUSH2 0x3661 JUMP JUMPDEST PUSH2 0x1B2E JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8D08B1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x51199D699BDFD516FA88DD0D2F8487C40C147B4867ACAA23ADC8D4DF6B098E56 DUP2 PUSH1 0x40 MLOAD PUSH2 0xFE5 SWAP2 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1B88 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1BC2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1C40 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0xFE5 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1C9A SWAP1 PUSH2 0x3676 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1DA5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1CC3 SWAP1 DUP4 PUSH2 0x3680 JUMP JUMPDEST SWAP1 POP PUSH2 0x1CD0 PUSH1 0x26 DUP3 PUSH2 0x3220 JUMP JUMPDEST ISZERO PUSH2 0x1D92 JUMPI PUSH1 0x0 PUSH2 0x1CE0 DUP3 PUSH2 0xFF0 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x1D90 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1D21 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x1D1C SWAP1 PUSH2 0x4181 JUMP JUMPDEST PUSH2 0x1D27 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SLOAD PUSH1 0x22 SLOAD SWAP2 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH2 0x1D82 SWAP5 SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0xA0D27107 SWAP3 PUSH2 0xCCA SWAP3 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x405B JUMP JUMPDEST PUSH2 0x1D8C SWAP1 DUP7 PUSH2 0x4074 JUMP JUMPDEST SWAP5 POP POP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x1D9D DUP2 PUSH2 0x4152 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1C79 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1DD6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1DFD JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC25 PUSH1 0x15 PUSH2 0x320C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1E60 DUP4 PUSH2 0x1C75 JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1E8A SWAP1 TIMESTAMP PUSH2 0x410F JUMP JUMPDEST LT ISZERO PUSH2 0xD2A JUMPI PUSH1 0x0 DUP2 GT PUSH2 0x1EB6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EF0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x1EE6 SWAP1 DUP4 SWAP1 PUSH2 0x40A0 JUMP JUMPDEST PUSH2 0x1EF0 SWAP2 SWAP1 PUSH2 0x408C JUMP JUMPDEST SWAP2 POP PUSH2 0x1DA5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1F22 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0xFE5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x1F91 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1FC4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAFE7AD49 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP6 DUP9 AND SWAP6 DUP7 OR SWAP1 SSTORE PUSH1 0x2D DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE SWAP1 MLOAD PUSH32 0xFF0456758201108DE53C0FF04C69988D4678FF455B2CE6F733328CF85722C04C SWAP1 PUSH2 0x2036 SWAP1 DUP6 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC25 PUSH1 0x3 PUSH2 0x320C JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x207A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x20B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x2143 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x216A JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x21AD JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x21F2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x222C JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x12 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE SWAP1 PUSH2 0x2279 SWAP1 DUP5 DUP4 PUSH2 0x3631 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFDB7893BF11F50C621E59CC7F1CF540E94295CB27CA869EC7ED7618CA7928862 DUP5 PUSH1 0x40 MLOAD PUSH2 0x22C8 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2302 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x233B JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x23B6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x243D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x247C JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x249A JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 AND SWAP1 DUP4 AND EQ PUSH2 0x24D7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCED616B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2509 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x4074 JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x2529 JUMPI PUSH1 0x40 MLOAD PUSH4 0x56248E97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2532 DUP4 PUSH2 0x3594 JUMP JUMPDEST PUSH2 0x253B DUP3 PUSH2 0x3594 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x255C SWAP1 PUSH2 0x3676 JUMP JUMPDEST GT ISZERO PUSH2 0x263E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2584 SWAP1 DUP3 PUSH2 0x3680 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x25D2 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP3 SWAP1 SSTORE SWAP2 DUP2 MSTORE PUSH1 0xC SWAP1 SWAP2 MSTORE KECCAK256 PUSH2 0x2614 SWAP1 DUP3 PUSH2 0x3661 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2637 SWAP1 DUP3 PUSH2 0x357F JUMP JUMPDEST POP POP PUSH2 0x253B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x265F SWAP1 PUSH2 0x3676 JUMP JUMPDEST GT ISZERO PUSH2 0x2741 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2687 SWAP1 DUP3 PUSH2 0x3680 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x26D5 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE SWAP3 DUP7 AND DUP3 MSTORE PUSH1 0xD SWAP1 MSTORE KECCAK256 PUSH2 0x2717 SWAP1 DUP3 PUSH2 0x357F JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x273A SWAP1 DUP3 PUSH2 0x3661 JUMP JUMPDEST POP POP PUSH2 0x263E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x2773 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x27B7 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0x29 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x27ED PUSH1 0x15 DUP5 PUSH2 0x3661 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x2D DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 DUP9 AND DUP1 DUP6 MSTORE SWAP6 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x2C SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9B712B63E3FB1325FA042D3C238CE8144937875065900528EA1E4F3B00F379F2 SWAP1 PUSH2 0x2036 SWAP1 DUP7 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x28AB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0xFE5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x290B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2916 PUSH1 0x26 DUP3 PUSH2 0x357F JUMP JUMPDEST PUSH2 0x2933 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF25E6B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x296C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2980 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29A4 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 DUP4 AND SWAP4 DUP5 OR SWAP1 SSTORE PUSH1 0x1D SLOAD SWAP1 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0x696A437B SWAP2 PUSH2 0x29F8 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A24 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A48 SWAP2 SWAP1 PUSH2 0x3E88 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2A78 DUP2 PUSH2 0xFF0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 DUP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xABFA8DB4D238FA78BF4E15FCC91328DD35F3978F200E2857A56BB719732B7B0B SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2B30 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0xFE5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2B87 SWAP1 DUP3 PUSH2 0x357F JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2BB7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2BDE JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2C54 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x2C78 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0xFE5 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x2CD0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1496 SWAP1 PUSH2 0x4024 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 AND CALLER EQ PUSH2 0x2D11 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2D43 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x4074 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x2D62 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E0B4075 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP4 GT ISZERO PUSH2 0x2DA8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24AE82D PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2DE2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x2E19 SWAP1 DUP5 SWAP1 PUSH2 0x410F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x2E33 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP4 DUP6 PUSH2 0x3631 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2E81 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2E7F SWAP1 DUP6 PUSH2 0x3661 JUMP JUMPDEST POP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x53E982DD9EC088D634C74C98FBBC161F808B4B6469A26C657120B9A31CB34BFE DUP7 PUSH1 0x40 MLOAD PUSH2 0x2ED0 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2B87 SWAP1 DUP3 PUSH2 0x357F JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2F31 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0xFE5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2F91 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2FB8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x302E JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3067 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0xD2A SWAP1 PUSH2 0x3676 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3103 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x310E PUSH1 0x15 DUP4 PUSH2 0x3220 JUMP JUMPDEST PUSH2 0x312B JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3134 DUP3 PUSH2 0x3594 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x315C SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x5ABCF5031FDBD3BADB9D1E09094208DE329AEE72730E87650F346584205D23D1 SWAP3 PUSH2 0x31BC SWAP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP3 PUSH2 0x31D8 SWAP2 SWAP1 PUSH2 0x416D JUMP JUMPDEST PUSH2 0xD2A SWAP1 DUP4 PUSH2 0x410F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP4 LT ISZERO PUSH2 0x1DA5 JUMPI PUSH1 0x22 SLOAD PUSH2 0x31FB DUP4 DUP6 PUSH2 0x40A0 JUMP JUMPDEST PUSH2 0x3205 SWAP2 SWAP1 PUSH2 0x408C JUMP JUMPDEST SWAP1 POP PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x3219 DUP4 PUSH2 0x368C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x3219 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD2A DUP3 PUSH1 0x22 SLOAD PUSH1 0x23 SLOAD PUSH2 0x36E8 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x3276 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1496 SWAP1 PUSH2 0x4024 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x329C SWAP1 DUP4 PUSH2 0x3220 JUMP JUMPDEST PUSH2 0x32B8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x41CFA5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x32FE JUMPI PUSH1 0x40 MLOAD PUSH4 0x435B5625 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3307 DUP4 PUSH2 0x3796 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3316 PUSH2 0xD1A DUP4 DUP6 PUSH2 0x3461 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x33CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x3367 SWAP1 DUP4 SWAP1 PUSH2 0x40A0 JUMP JUMPDEST PUSH2 0x3371 SWAP2 SWAP1 PUSH2 0x408C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x3399 SWAP1 DUP5 SWAP1 PUSH2 0x410F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x33C6 SWAP1 DUP5 SWAP1 PUSH2 0x410F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x3403 SWAP1 DUP5 SWAP1 PUSH2 0x410F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3456 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3454 SWAP1 DUP5 PUSH2 0x3661 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0xD2A JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x34D3 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x34CE SWAP1 PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND PUSH2 0x4181 JUMP JUMPDEST PUSH2 0x34F7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x352F SWAP2 DUP9 SWAP2 DUP7 SWAP2 PUSH1 0x4 ADD PUSH2 0x405B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x355B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC11 SWAP2 SWAP1 PUSH2 0x3EFF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3219 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x37BB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2E PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 PUSH2 0x35B8 DUP4 PUSH2 0x4152 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x362B SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x380A JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2B87 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x35F4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3219 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x38DC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD2A DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3219 DUP4 DUP4 PUSH2 0x39CF JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x36DC JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x36C8 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x3722 JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x3717 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x3219 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x372E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x379F DUP2 PUSH2 0x39F9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x3802 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xD2A JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x385F DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3BDD SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x2B87 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x387D SWAP2 SWAP1 PUSH2 0x3E88 JUMP JUMPDEST PUSH2 0x2B87 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1496 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x39C5 JUMPI PUSH1 0x0 PUSH2 0x3900 PUSH1 0x1 DUP4 PUSH2 0x410F JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x3914 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x410F JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x3979 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x3934 JUMPI PUSH2 0x3934 PUSH2 0x41EA JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x3957 JUMPI PUSH2 0x3957 PUSH2 0x41EA JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x398A JUMPI PUSH2 0x398A PUSH2 0x41D4 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x39E6 JUMPI PUSH2 0x39E6 PUSH2 0x41EA JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A04 TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x3A9B JUMPI PUSH1 0x1E SLOAD PUSH2 0x3A3C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFF0 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3ABF SWAP1 PUSH2 0x3676 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1DA5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x3AE8 SWAP1 DUP4 PUSH2 0x3680 JUMP JUMPDEST SWAP1 POP PUSH2 0x3AF5 PUSH1 0x26 DUP3 PUSH2 0x3220 JUMP JUMPDEST ISZERO PUSH2 0x3BCA JUMPI PUSH2 0x3B03 TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x3B89 JUMPI PUSH2 0x3B2D DUP2 PUSH2 0xFF0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3BBD SWAP1 PUSH2 0xD1A SWAP1 DUP4 PUSH2 0x3461 JUMP JUMPDEST PUSH2 0x3BC7 SWAP1 DUP5 PUSH2 0x4074 JUMP JUMPDEST SWAP3 POP JUMPDEST POP DUP1 PUSH2 0x3BD5 DUP2 PUSH2 0x4152 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x3A9E JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC11 DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 DUP5 EXTCODESIZE PUSH2 0x3C36 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1496 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x3C52 SWAP2 SWAP1 PUSH2 0x3F18 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3C8F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3C94 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x3CA4 DUP3 DUP3 DUP7 PUSH2 0x3CAF JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x3CBE JUMPI POP DUP2 PUSH2 0x3219 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x3CCE JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1496 SWAP2 SWAP1 PUSH2 0x3FF1 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x13B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x6 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x13B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3D1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3219 DUP2 PUSH2 0x4200 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3D39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3219 DUP2 PUSH2 0x4200 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3D57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3D62 DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3D72 DUP2 PUSH2 0x4200 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3D92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3D9D DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3DAD DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x3DBD DUP2 PUSH2 0x4200 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3DDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3DE8 DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3DF8 DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3E1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3E2A DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3E3A DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x3E51 DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3E7A DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3E9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3219 DUP3 PUSH2 0x3CE8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3EB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3EC1 DUP5 PUSH2 0x3CF8 JUMP JUMPDEST SWAP3 POP PUSH2 0x3ECF PUSH1 0x20 DUP6 ADD PUSH2 0x3CF8 JUMP JUMPDEST SWAP2 POP PUSH2 0x3EDD PUSH1 0x40 DUP6 ADD PUSH2 0x3CE8 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3EF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x3F2A DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x4126 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 DUP3 ADD SWAP2 SWAP1 PUSH1 0x60 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F97 JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3F75 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3FE5 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3FC0 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x4010 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x4126 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x6 SWAP2 SWAP1 SWAP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x4087 JUMPI PUSH2 0x4087 PUSH2 0x41A8 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x409B JUMPI PUSH2 0x409B PUSH2 0x41BE JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x40BA JUMPI PUSH2 0x40BA PUSH2 0x41A8 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x40EA JUMPI PUSH2 0x40EA PUSH2 0x41A8 JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x4105 JUMPI PUSH2 0x4105 PUSH2 0x41A8 JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x4121 JUMPI PUSH2 0x4121 PUSH2 0x41A8 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4141 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4129 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x362B JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x4166 JUMPI PUSH2 0x4166 PUSH2 0x41A8 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x417C JUMPI PUSH2 0x417C PUSH2 0x41BE JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x419F JUMPI PUSH2 0x419F PUSH2 0x41A8 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEC PUSH25 0x79EA33A2B6C1B3AD38ACBF2A9055A05042E69842FF8123FB27 0x1F 0xE2 SWAP6 PUSH7 0x4D64736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "135:1500:61:-:0;;;702:6:31;667:41;;786:7;749:44;;877:7;834:50;;968:6;925:49;;1057:7;1015:49;;1135:2;1105:32;;318:203:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1637:1:0;1742:7;:22;447:4:61;453:9;464:14;480:13;507:10;;357:25:28;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;;;-1:-1:-1;;;;;422:24:28;;;;;;;1479:12:31;:28;;;;;;;;;;1513:8;:20;;;;;;;;;;1539:13;:30;;;;;;;;;;1575:12;:28;;;;;;;;;;;;-1:-1:-1;1609:28:31;;;:14;:28;;;;;;;:43;;;;;;;;;;;1703:12;;1730;;1689:54;;-1:-1:-1;;;1689:54:31;;1730:12;;;1689:54;;;1093:51:84;1703:12:31;;;;-1:-1:-1;1689:40:31;;1066:18:84;;1689:54:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1658:28:31;;;;;;;;:13;:28;;;;;:85;;-1:-1:-1;;1658:85:31;;;;;;;;;;-1:-1:-1;135:1500:61;;-1:-1:-1;;;;;;135:1500:61;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:464::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;469:49;514:2;503:9;499:18;469:49;:::i;:::-;459:59;;537:49;582:2;571:9;567:18;537:49;:::i;:::-;527:59;;605:49;650:2;639:9;635:18;605:49;:::i;:::-;595:59;;196:464;;;;;;;:::o;665:277::-;732:6;785:2;773:9;764:7;760:23;756:32;753:52;;;801:1;798;791:12;753:52;833:9;827:16;886:5;879:13;872:21;865:5;862:32;852:60;;908:1;905;898:12;852:60;931:5;665:277;-1:-1:-1;;;665:277:84:o;947:203::-;135:1500:61;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_add_1372": {
                  "entryPoint": 14267,
                  "id": 1372,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_at_1506": {
                  "entryPoint": 14799,
                  "id": 1506,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_calculateJobPeriodCredits_7702": {
                  "entryPoint": 14841,
                  "id": 7702,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_callOptionalReturn_911": {
                  "entryPoint": 14346,
                  "id": 911,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_contains_1475": {
                  "entryPoint": null,
                  "id": 1475,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_getReward_7863": {
                  "entryPoint": 12866,
                  "id": 7863,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_length_1489": {
                  "entryPoint": null,
                  "id": 1489,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_period_7847": {
                  "entryPoint": 12744,
                  "id": 7847,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_phase_7831": {
                  "entryPoint": 12770,
                  "id": 7831,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_quoteLiquidity_7909": {
                  "entryPoint": 13409,
                  "id": 7909,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_remove_1456": {
                  "entryPoint": 14556,
                  "id": 1456,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_settleJobAccountance_11112": {
                  "entryPoint": 13716,
                  "id": 11112,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_unbondLiquidityFromJob_7802": {
                  "entryPoint": 12883,
                  "id": 7802,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_updateJobPeriod_7612": {
                  "entryPoint": 14230,
                  "id": 7612,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_values_1520": {
                  "entryPoint": 13964,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 5059,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@acceptJobMigration_8291": {
                  "entryPoint": 9217,
                  "id": 8291,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@acceptJobOwnership_8373": {
                  "entryPoint": 6697,
                  "id": 8373,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 8271,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addLiquidityToJob_7283": {
                  "entryPoint": 5235,
                  "id": 7283,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 7005,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addTokenCreditsToJob_6417": {
                  "entryPoint": 5825,
                  "id": 6417,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@add_1658": {
                  "entryPoint": 13695,
                  "id": 1658,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@approveLiquidity_7148": {
                  "entryPoint": 10464,
                  "id": 7148,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@approvedLiquidities_6581": {
                  "entryPoint": 3097,
                  "id": 6581,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@at_1754": {
                  "entryPoint": 13952,
                  "id": 1754,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@bondTime_5611": {
                  "entryPoint": null,
                  "id": 5611,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@changeJobOwnership_8336": {
                  "entryPoint": 6532,
                  "id": 8336,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@contains_1712": {
                  "entryPoint": 12832,
                  "id": 1712,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_5636": {
                  "entryPoint": null,
                  "id": 5636,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@forceLiquidityCreditsToJob_7094": {
                  "entryPoint": 12504,
                  "id": 7094,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@functionCallWithValue_1073": {
                  "entryPoint": null,
                  "id": 1073,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@functionCall_1003": {
                  "entryPoint": 15325,
                  "id": 1003,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@inflationPeriod_5631": {
                  "entryPoint": null,
                  "id": 5631,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@isContract_932": {
                  "entryPoint": null,
                  "id": 932,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@isJob_11100": {
                  "entryPoint": 5046,
                  "id": 11100,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobLiquidityCredits_6715": {
                  "entryPoint": 7764,
                  "id": 6715,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobOwner_8303": {
                  "entryPoint": null,
                  "id": 8303,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPendingOwner_8309": {
                  "entryPoint": null,
                  "id": 8309,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPeriodCredits_6663": {
                  "entryPoint": 7285,
                  "id": 6663,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobTokenCreditsAddedAt_6297": {
                  "entryPoint": null,
                  "id": 6297,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 7752,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keep3rHelper_5602": {
                  "entryPoint": null,
                  "id": 5602,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1Proxy_5598": {
                  "entryPoint": null,
                  "id": 5598,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1_5594": {
                  "entryPoint": null,
                  "id": 5594,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keepers_5506": {
                  "entryPoint": 8259,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@kp3rWethPool_5606": {
                  "entryPoint": null,
                  "id": 5606,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@length_1727": {
                  "entryPoint": 13942,
                  "id": 1727,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@liquidityAmount_6548": {
                  "entryPoint": null,
                  "id": 6548,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@liquidityMinimum_5621": {
                  "entryPoint": null,
                  "id": 5621,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@migrateJob_8070": {
                  "entryPoint": 8021,
                  "id": 8070,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@mulDiv_4263": {
                  "entryPoint": 14056,
                  "id": 4263,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@observeLiquidity_7053": {
                  "entryPoint": 4080,
                  "id": 7053,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingJobMigrations_8024": {
                  "entryPoint": null,
                  "id": 8024,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@quoteLiquidity_6849": {
                  "entryPoint": 3114,
                  "id": 6849,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@removeDisputer_6072": {
                  "entryPoint": 12291,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 8919,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@remove_1685": {
                  "entryPoint": 13921,
                  "id": 1685,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@revokeLiquidity_7171": {
                  "entryPoint": 6875,
                  "id": 7171,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@rewardPeriodTime_5626": {
                  "entryPoint": null,
                  "id": 5626,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@rewardedAt_6554": {
                  "entryPoint": null,
                  "id": 6554,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@safeTransferFrom_745": {
                  "entryPoint": 13760,
                  "id": 745,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@safeTransfer_719": {
                  "entryPoint": 13873,
                  "id": 719,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@setBondTime_5836": {
                  "entryPoint": 11013,
                  "id": 5836,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setFee_5933": {
                  "entryPoint": 7189,
                  "id": 5933,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 9099,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setInflationPeriod_5915": {
                  "entryPoint": 10368,
                  "id": 5915,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setJobLiquidity_11016": {
                  "entryPoint": 11109,
                  "id": 11016,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@setJobToken_11001": {
                  "entryPoint": 12004,
                  "id": 11001,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@setKeep3rHelper_5717": {
                  "entryPoint": 7595,
                  "id": 5717,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1Proxy_5773": {
                  "entryPoint": 11148,
                  "id": 5773,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1_5745": {
                  "entryPoint": 12134,
                  "id": 5745,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_5818": {
                  "entryPoint": 3722,
                  "id": 5818,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setLiquidityMinimum_5872": {
                  "entryPoint": 12038,
                  "id": 5872,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRewardPeriodTime_5897": {
                  "entryPoint": 11305,
                  "id": 5897,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setUnbondTime_5854": {
                  "entryPoint": 7927,
                  "id": 5854,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@settleJobAccountanceCallCount_10964": {
                  "entryPoint": null,
                  "id": 10964,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@totalJobCredits_6795": {
                  "entryPoint": 2835,
                  "id": 6795,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@unbondLiquidityFromJob_7351": {
                  "entryPoint": 3376,
                  "id": 7351,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@unbondTime_5616": {
                  "entryPoint": null,
                  "id": 5616,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 12812,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@verifyCallResult_1208": {
                  "entryPoint": 15535,
                  "id": 1208,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@viewJobLiquidityCredits_11071": {
                  "entryPoint": null,
                  "id": 11071,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@viewJobLiquidityList_11047": {
                  "entryPoint": 5199,
                  "id": 11047,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@viewJobPeriodCredits_11059": {
                  "entryPoint": null,
                  "id": 11059,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@viewJobTokenListLength_11030": {
                  "entryPoint": 12471,
                  "id": 11030,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@viewMigrationCreatedAt_11087": {
                  "entryPoint": null,
                  "id": 11087,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@withdrawLiquidityFromJob_7443": {
                  "entryPoint": 8455,
                  "id": 7443,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@withdrawTokenCreditsFromJob_6507": {
                  "entryPoint": 11437,
                  "id": 6507,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@workedAt_6560": {
                  "entryPoint": null,
                  "id": 6560,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_bool_fromMemory": {
                  "entryPoint": 15592,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_int56_fromMemory": {
                  "entryPoint": 15608,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 15626,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 15655,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 15684,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_address": {
                  "entryPoint": 15741,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256": {
                  "entryPoint": 15816,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_address": {
                  "entryPoint": 15881,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 15964,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 16008,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_int56t_int56t_bool_fromMemory": {
                  "entryPoint": 16035,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 16102,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256_fromMemory": {
                  "entryPoint": 16127,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 16152,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 16180,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 16200,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 16292,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 16369,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 16420,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed": {
                  "entryPoint": 16475,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 16500,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 16524,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 16544,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_int56": {
                  "entryPoint": 16575,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 16655,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 16678,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "increment_t_uint256": {
                  "entryPoint": 16722,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mod_t_uint256": {
                  "entryPoint": 16749,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "negate_t_int56": {
                  "entryPoint": 16769,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 16808,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x12": {
                  "entryPoint": 16830,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x31": {
                  "entryPoint": 16852,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x32": {
                  "entryPoint": 16874,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_address": {
                  "entryPoint": 16896,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:12726:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "71:107:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "81:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "96:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "90:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "90:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "81:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "156:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "165:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "168:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "158:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "158:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "158:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "146:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "139:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "139:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "132:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "132:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "122:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "122:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "115:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "115:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "112:60:84"
                            }
                          ]
                        },
                        "name": "abi_decode_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "50:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "61:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "241:106:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "251:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "266:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "260:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "260:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "251:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "325:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "334:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "337:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "327:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "327:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "327:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "295:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "313:1:84",
                                            "type": "",
                                            "value": "6"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "316:5:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "302:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "302:20:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "292:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "292:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "285:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "285:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "282:59:84"
                            }
                          ]
                        },
                        "name": "abi_decode_int56_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "220:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "231:5:84",
                            "type": ""
                          }
                        ],
                        "src": "183:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "422:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "468:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "477:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "480:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "470:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "470:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "470:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "443:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "452:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "439:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "439:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "464:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "435:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "435:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "432:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "493:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "519:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "506:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "506:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "497:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "563:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "538:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "538:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "538:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "578:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "588:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "578:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "388:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "399:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "411:6:84",
                            "type": ""
                          }
                        ],
                        "src": "352:247:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "685:170:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "731:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "740:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "743:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "733:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "733:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "733:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "706:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "715:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "702:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "702:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "727:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "698:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "698:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "695:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "756:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "775:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "769:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "769:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "760:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "819:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "794:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "794:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "794:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "834:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "844:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "834:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "651:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "662:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "674:6:84",
                            "type": ""
                          }
                        ],
                        "src": "604:251:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "947:301:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "993:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1002:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1005:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "995:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "995:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "995:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "968:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "977:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "964:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "964:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "989:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "960:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "960:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "957:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1018:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1044:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1031:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1031:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1022:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1088:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1063:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1063:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1063:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1103:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1113:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1103:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1127:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1159:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1170:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1155:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1155:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1142:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1142:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1131:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1208:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1183:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1183:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1183:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1225:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1235:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1225:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "905:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "916:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "928:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "936:6:84",
                            "type": ""
                          }
                        ],
                        "src": "860:388:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1357:425:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1403:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1412:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1415:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1405:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1405:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1405:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1378:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1387:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1374:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1374:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1399:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1370:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1370:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1367:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1428:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1454:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1441:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1441:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1432:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1498:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1473:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1473:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1473:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1513:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1523:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1513:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1537:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1569:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1580:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1565:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1565:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1552:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1552:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1541:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1618:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1593:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1593:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1593:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1635:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1645:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1635:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1661:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1693:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1704:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1689:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1689:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1676:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1676:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1665:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1742:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1717:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1717:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1717:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1759:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "1769:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1759:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1307:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1318:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1330:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1338:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1346:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1253:529:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1891:352:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1937:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1946:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1949:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1939:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1939:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1939:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1912:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1921:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1908:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1908:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1933:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1904:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1904:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1901:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1962:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1988:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1975:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1975:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1966:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2032:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2007:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2007:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2007:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2047:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2057:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2047:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2071:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2103:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2114:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2099:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2099:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2086:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2086:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2075:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2152:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2127:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2127:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2127:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2169:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "2179:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2169:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2195:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2222:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2233:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2218:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2218:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2205:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2205:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2195:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1841:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1852:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1864:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1872:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1880:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1787:456:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2369:477:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2416:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2425:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2428:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2418:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2418:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2418:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2390:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2399:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2386:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2386:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2411:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2382:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2382:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2379:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2441:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2467:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2454:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2454:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2445:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2511:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2486:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2486:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2486:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2526:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2536:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2526:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2550:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2582:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2593:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2578:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2578:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2565:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2565:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2554:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2631:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2606:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2606:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2606:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2648:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "2658:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2648:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2674:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2701:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2712:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2697:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2697:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2684:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2684:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2674:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2725:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2757:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2768:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2753:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2753:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2740:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2740:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2729:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2806:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2781:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2781:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2781:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2823:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "2833:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "2823:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2311:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2322:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2334:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2342:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2350:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2358:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2248:598:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2938:228:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2984:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2993:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2996:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2986:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2986:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2986:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2959:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2968:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2955:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2955:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2980:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2951:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2951:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2948:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3009:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3035:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3022:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3022:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3013:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3079:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3054:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3054:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3054:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3094:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3104:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3094:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3118:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3145:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3156:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3141:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3141:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3128:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3128:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3118:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2896:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2907:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2919:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2927:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2851:315:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3249:124:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3295:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3304:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3307:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3297:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3297:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3297:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3270:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3279:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3266:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3266:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3291:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3262:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3262:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3259:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3320:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3357:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3330:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3330:37:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3320:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3215:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3226:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3238:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3171:202:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3486:256:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3532:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3541:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3544:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3534:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3534:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3534:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3507:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3516:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3503:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3503:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3528:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3499:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3499:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3496:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3557:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3595:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_int56_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3567:27:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3567:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3557:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3614:57:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3656:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3667:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3652:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3652:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_int56_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3624:27:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3624:47:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3614:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3680:56:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3721:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3732:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3717:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3717:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3690:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3690:46:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3680:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int56t_int56t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3436:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3447:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3459:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3467:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3475:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3378:364:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3817:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3863:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3872:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3875:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3865:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3865:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3865:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3838:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3847:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3834:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3834:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3859:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3830:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3830:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3827:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3888:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3911:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3898:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3898:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3888:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3783:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3794:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3806:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3747:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4013:103:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4059:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4068:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4071:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4061:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4061:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4061:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4034:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4043:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4030:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4030:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4055:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4026:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4026:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4023:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4084:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4100:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4094:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4094:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4084:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3979:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3990:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4002:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3932:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4258:137:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4268:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4288:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4282:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4282:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "4272:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4330:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4338:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4326:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4326:17:84"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4345:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4350:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4304:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4304:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4304:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4366:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4377:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4382:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4373:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4373:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "4366:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "4234:3:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4239:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "4250:3:84",
                            "type": ""
                          }
                        ],
                        "src": "4121:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4501:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4511:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4523:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4534:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4519:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4519:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4511:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4553:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4568:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4584:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4589:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "4580:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4580:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4593:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "4576:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4576:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4564:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4564:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4546:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4546:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4546:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4470:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4481:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4492:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4400:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4765:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4775:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4787:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4798:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4783:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4783:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4775:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4810:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4828:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4833:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "4824:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4824:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4837:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "4820:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4820:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4814:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4855:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4870:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4878:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4866:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4866:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4848:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4848:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4848:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4902:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4913:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4898:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4898:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4922:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4930:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4918:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4918:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4891:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4891:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4891:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4954:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4965:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4950:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4950:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "4970:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4943:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4943:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4943:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4718:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4729:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4737:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4745:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4756:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4608:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5165:567:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5175:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5193:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5204:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5189:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5189:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5179:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5223:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5238:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5254:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5259:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "5250:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5250:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5263:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "5246:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5246:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5234:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5234:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5216:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5216:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5216:51:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5276:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5286:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5280:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5308:9:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5319:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5304:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5304:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5324:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5297:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5297:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5297:30:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5336:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "5347:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "5340:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5362:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5382:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5376:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5376:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "5366:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5405:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5413:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5398:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5398:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5398:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5429:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5440:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5451:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5436:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5436:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "5429:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5463:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5481:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5489:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5477:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5477:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "5467:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5501:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5510:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "5505:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5569:137:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "5590:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5605:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "5599:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "5599:13:84"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "5614:10:84",
                                              "type": "",
                                              "value": "0xffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "5595:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5595:30:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "5583:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5583:43:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5583:43:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5639:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "5650:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "5655:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5646:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5646:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5639:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5671:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "5685:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "5693:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5681:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5681:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "5671:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "5531:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5534:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5528:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5528:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "5542:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5544:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "5553:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5556:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "5549:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5549:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "5544:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "5524:3:84",
                                "statements": []
                              },
                              "src": "5520:186:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5715:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "5723:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5715:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5126:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5137:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5145:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5156:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4988:744:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5866:145:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5876:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5888:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5899:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5884:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5884:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5876:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5918:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5933:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5949:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5954:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "5945:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5945:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5958:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "5941:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5941:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5929:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5929:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5911:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5911:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5911:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5982:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5993:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5978:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5978:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5998:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5971:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5971:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5971:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5827:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5838:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5846:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5857:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5737:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6167:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6177:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6187:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6181:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6198:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6216:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6227:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6212:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6212:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6202:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6246:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6257:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6239:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6239:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6239:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6269:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "6280:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "6273:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6295:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6315:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6309:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6309:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6299:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6338:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6346:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6331:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6331:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6331:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6362:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6373:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6384:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6369:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6369:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "6362:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6396:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6414:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6422:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6410:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6410:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "6400:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6434:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6443:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6438:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6502:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "6523:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6538:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "6532:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6532:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "6555:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "6560:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "6551:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "6551:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "6564:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "6547:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6547:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "6528:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6528:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6516:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6516:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6516:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6581:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "6592:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "6597:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6588:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6588:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6581:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6613:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "6627:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "6635:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6623:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6623:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6613:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6464:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6467:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6461:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6461:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "6475:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6477:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "6486:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6489:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6482:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6482:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "6477:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6457:3:84",
                                "statements": []
                              },
                              "src": "6453:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6657:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "6665:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6657:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6136:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6147:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6158:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6016:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6774:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6784:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6796:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6807:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6792:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6792:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6784:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6826:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "6851:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "6844:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6844:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "6837:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6837:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6819:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6819:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6819:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6743:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6754:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6765:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6679:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6992:262:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7009:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7020:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7002:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7002:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7002:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7032:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7052:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7046:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7046:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "7036:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7079:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7090:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7075:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7075:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7095:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7068:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7068:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7068:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7137:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7145:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7133:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7133:15:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7154:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7165:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7150:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7150:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7170:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "7111:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7111:66:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7111:66:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7186:62:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7202:9:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "7221:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7229:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "7217:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7217:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7238:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "7234:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7234:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "7213:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7213:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7198:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7198:45:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7245:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7194:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7194:54:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7186:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6961:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6972:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6983:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6871:383:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7433:228:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7450:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7461:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7443:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7443:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7443:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7484:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7495:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7480:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7480:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7500:2:84",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7473:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7473:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7473:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7523:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7534:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7519:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7519:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7539:34:84",
                                    "type": "",
                                    "value": "Address: insufficient balance fo"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7512:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7512:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7512:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7594:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7605:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7590:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7590:18:84"
                                  },
                                  {
                                    "hexValue": "722063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7610:8:84",
                                    "type": "",
                                    "value": "r call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7583:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7583:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7583:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7628:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7640:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7651:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7636:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7636:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7628:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7410:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7424:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7259:402:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7840:179:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7857:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7868:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7850:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7850:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7850:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7891:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7902:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7887:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7887:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7907:2:84",
                                    "type": "",
                                    "value": "29"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7880:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7880:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7880:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7930:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7941:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7926:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7926:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7946:31:84",
                                    "type": "",
                                    "value": "Address: call to non-contract"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7919:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7919:59:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7919:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7987:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7999:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8010:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7995:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7995:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7987:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7817:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7831:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7666:353:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8198:232:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8215:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8226:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8208:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8208:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8208:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8249:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8260:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8245:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8245:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8265:2:84",
                                    "type": "",
                                    "value": "42"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8238:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8238:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8238:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8288:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8299:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8284:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8284:18:84"
                                  },
                                  {
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8304:34:84",
                                    "type": "",
                                    "value": "SafeERC20: ERC20 operation did n"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8277:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8277:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8277:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8359:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8370:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8355:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8355:18:84"
                                  },
                                  {
                                    "hexValue": "6f742073756363656564",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8375:12:84",
                                    "type": "",
                                    "value": "ot succeed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8348:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8348:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8348:40:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8397:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8409:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8420:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8405:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8405:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8397:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8175:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8189:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8024:406:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8609:181:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8626:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8637:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8619:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8619:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8619:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8660:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8671:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8656:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8656:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8676:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8649:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8649:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8649:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8699:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8710:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8695:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8695:18:84"
                                  },
                                  {
                                    "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8715:33:84",
                                    "type": "",
                                    "value": "ReentrancyGuard: reentrant call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8688:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8688:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8688:61:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8758:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8770:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8781:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8766:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8766:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8758:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8586:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8600:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8435:355:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8952:239:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8962:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8974:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8985:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8970:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8970:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8962:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9004:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9026:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "9035:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "9029:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9029:13:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9015:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9015:28:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8997:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8997:47:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8997:47:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9064:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9075:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9060:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9060:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9093:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "9106:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "9114:4:84",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "9102:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "9102:17:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "9096:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9096:24:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9082:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9082:39:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9053:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9053:69:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9053:69:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9142:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9153:4:84",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9138:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9138:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "9170:6:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "9178:4:84",
                                            "type": "",
                                            "value": "0x40"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "9166:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9166:17:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "9160:5:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9160:24:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9131:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9131:54:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9131:54:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8921:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8932:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8943:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8795:396:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9297:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9307:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9319:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9330:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9315:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9315:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9307:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9349:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9360:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9342:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9342:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9342:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9266:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9277:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9288:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9196:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9531:177:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9541:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9553:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9564:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9549:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9549:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9541:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9583:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9594:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9576:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9576:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9576:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9621:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9632:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9617:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9617:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9648:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "9651:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9637:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9637:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9610:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9610:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9610:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9679:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9690:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9675:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9675:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "9695:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9668:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9668:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9668:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9484:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "9495:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9503:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9511:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9522:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9378:330:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9842:119:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9852:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9864:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9875:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9860:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9860:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9852:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9894:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "9905:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9887:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9887:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9887:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9932:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9943:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9928:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9928:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "9948:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9921:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9921:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9921:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9803:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "9814:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9822:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9833:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9713:248:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10123:162:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10133:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10145:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10156:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10141:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10141:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10133:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10175:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "10186:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10168:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10168:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10168:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10213:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10224:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10209:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10209:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10229:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10202:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10202:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10202:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10256:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10267:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10252:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10252:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "10272:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10245:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10245:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10245:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10076:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "10087:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "10095:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10103:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10114:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9966:319:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10338:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10365:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10367:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10367:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10367:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10354:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "10361:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "10357:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10357:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10351:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10351:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10348:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10396:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10407:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10410:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10403:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10403:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "10396:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10321:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10324:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "10330:3:84",
                            "type": ""
                          }
                        ],
                        "src": "10290:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10469:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10492:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "10494:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10494:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10494:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10489:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10482:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10482:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10479:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10523:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10532:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10535:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "10528:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10528:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "10523:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10454:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10457:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "10463:1:84",
                            "type": ""
                          }
                        ],
                        "src": "10423:120:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10600:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10659:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10661:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10661:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10661:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "10631:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "10624:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10624:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "10617:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10617:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "10639:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10650:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "10646:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "10646:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "10654:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "10642:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10642:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10636:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10636:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "10613:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10613:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10610:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10690:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10705:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10708:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "10701:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10701:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "10690:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10579:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10582:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "10588:7:84",
                            "type": ""
                          }
                        ],
                        "src": "10548:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10768:312:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10778:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10800:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10803:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "10789:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10789:16:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10782:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10814:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10836:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10839:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "10825:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10825:16:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10818:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "10850:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10864:3:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10869:1:84",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10860:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10860:11:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "10854:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10942:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10944:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10944:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10944:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10894:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "10887:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10887:10:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10903:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10916:16:84",
                                                "type": "",
                                                "value": "0x7fffffffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "10912:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "10912:21:84"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "10935:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10908:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10908:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10899:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10899:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "10883:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10883:58:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10880:84:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11022:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11024:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11024:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11024:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10980:2:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10988:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10997:16:84",
                                            "type": "",
                                            "value": "0x7fffffffffffff"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "11015:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10993:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10993:26:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sgt",
                                      "nodeType": "YulIdentifier",
                                      "src": "10984:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10984:36:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "10976:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10976:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "10973:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11053:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11065:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11070:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "11061:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11061:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "11053:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10750:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10753:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "10759:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10721:359:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11134:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11156:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11158:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11158:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11158:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11150:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11153:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11147:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11147:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11144:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11187:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11199:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11202:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "11195:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11195:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "11187:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "11116:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "11119:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "11125:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11085:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11268:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11278:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11287:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "11282:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11347:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "11372:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "11377:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "11368:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11368:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11391:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11396:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "11387:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "11387:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "11381:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11381:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11361:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11361:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11361:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "11308:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "11311:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11305:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11305:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "11319:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "11321:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "11330:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11333:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "11326:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11326:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "11321:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "11301:3:84",
                                "statements": []
                              },
                              "src": "11297:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11436:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "11449:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "11454:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "11445:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11445:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11463:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11438:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11438:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11438:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "11425:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "11428:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11422:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11422:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11419:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "11246:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "11251:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "11256:6:84",
                            "type": ""
                          }
                        ],
                        "src": "11215:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11525:88:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11556:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11558:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11558:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11558:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "11541:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11552:1:84",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "11548:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11548:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "11538:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11538:17:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11535:43:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11587:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "11598:5:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11605:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11594:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11594:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "11587:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "increment_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "11507:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "11517:3:84",
                            "type": ""
                          }
                        ],
                        "src": "11478:135:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11656:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11679:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "11681:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11681:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11681:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11676:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "11669:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11669:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11666:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11710:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11719:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11722:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "11715:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11715:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "11710:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "11641:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "11644:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "11650:1:84",
                            "type": ""
                          }
                        ],
                        "src": "11618:112:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11777:151:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11787:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11813:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "11816:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "11802:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11802:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11791:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11869:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11871:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11871:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11871:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11837:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11850:16:84",
                                        "type": "",
                                        "value": "0x7fffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "11846:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11846:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "11834:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11834:34:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11831:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11900:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11911:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11914:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "11907:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11907:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "11900:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "11759:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "11769:3:84",
                            "type": ""
                          }
                        ],
                        "src": "11735:193:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11965:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11982:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11989:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11994:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11985:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11985:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11975:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11975:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11975:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12022:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12025:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12015:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12015:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12015:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12046:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12049:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12039:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12039:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12039:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "11933:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12097:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12114:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12121:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12126:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12117:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12117:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12107:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12107:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12107:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12154:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12157:4:84",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12147:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12147:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12147:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12178:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12181:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12171:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12171:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12171:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "12065:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12229:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12246:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12253:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12258:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12249:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12249:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12239:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12239:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12239:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12286:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12289:4:84",
                                    "type": "",
                                    "value": "0x31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12279:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12279:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12279:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12310:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12313:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12303:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12303:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12303:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x31",
                        "nodeType": "YulFunctionDefinition",
                        "src": "12197:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12361:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12378:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12385:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12390:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12381:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12381:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12371:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12371:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12371:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12418:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12421:4:84",
                                    "type": "",
                                    "value": "0x32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12411:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12411:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12411:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12442:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12445:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12435:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12435:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12435:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x32",
                        "nodeType": "YulFunctionDefinition",
                        "src": "12329:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12493:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12510:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12517:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12522:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12513:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12513:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12503:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12503:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12503:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12550:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12553:4:84",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12543:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12543:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12543:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12574:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12577:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12567:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12567:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12567:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "12461:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12638:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12702:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "12711:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "12714:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "12704:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12704:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12704:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "12661:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "12672:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "12687:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "12692:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12683:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "12683:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12696:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "12679:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "12679:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "12668:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12668:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "12658:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12658:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "12651:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12651:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12648:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "12627:5:84",
                            "type": ""
                          }
                        ],
                        "src": "12593:131:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_bool_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_int56_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, signextend(6, value))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let value_2 := calldataload(add(headStart, 96))\n        validator_revert_address(value_2)\n        value3 := value_2\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_bool_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_int56t_int56t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_int56_fromMemory(headStart)\n        value1 := abi_decode_int56_fromMemory(add(headStart, 32))\n        value2 := abi_decode_bool_fromMemory(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let pos := tail_1\n        let length := mload(value1)\n        mstore(tail_1, length)\n        pos := add(headStart, 96)\n        let srcPtr := add(value1, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, signextend(6, mload(value0)))\n        mstore(add(headStart, 0x20), signextend(6, mload(add(value0, 0x20))))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), signextend(6, value1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_int56(x, y) -> diff\n    {\n        let x_1 := signextend(6, x)\n        let y_1 := signextend(6, y)\n        let _1 := slt(y_1, 0)\n        if and(iszero(_1), slt(x_1, add(not(0x7fffffffffffff), y_1))) { panic_error_0x11() }\n        if and(_1, sgt(x_1, add(0x7fffffffffffff, y_1))) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function negate_t_int56(value) -> ret\n    {\n        let value_1 := signextend(6, value)\n        if eq(value_1, not(0x7fffffffffffff)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106103945760003560e01c8063951dc22c116101e1578063cb4be2bb1161010b578063cb4be2bb1461094a578063cb54694d1461095d578063cd22af1b14610970578063d55995fe1461099b578063ddca3f43146109ae578063e01f857c146109b7578063e326ac43146109ca578063e7f0cbf8146109ea578063ebbb619414610a13578063ec00cdfc14610a26578063ec8ca64314610a39578063f0f346b914610a62578063f11a1d1a14610a75578063f136a09d14610a88578063f22150c814610aa8578063f39c38a014610abb578063f6bb203214610ace578063fc253d2b14610af7578063fe75bc4614610b0057600080fd5b8063951dc22c1461075d57806398e90a0f146107655780639d5c33d81461078e578063a2145809146107a1578063a39744b5146107b4578063a676f9ff146107df578063a7d2e784146107ff578063aac6aa9c14610808578063ab033ea91461081b578063af320e811461082e578063b0103b1a14610841578063b239223314610864578063b440027f14610877578063b600702a146108a2578063b7e77340146108b5578063b87fcbff146108c8578063bea2b827146108eb578063c7ae40d014610924578063cacdf93d1461093757600080fd5b806359a2255e116102c257806359a2255e146105d25780635aa6e675146105e55780635ebe23f0146105f8578063633fb68f1461060157806364bb43ee1461060a57806368a9f19c1461061d578063694798e61461063057806369fe0e2d1461065b5780636cf262bc1461066e57806372da828a14610681578063768b5d90146106945780637b40c9131461069d5780637c8fce23146106b0578063878c723e146106b85780638bb6dfa8146106e15780638cb22b76146106f45780638fe204dd146107175780639035654f1461072a57806390a4684e1461074a57600080fd5b8063034d4c611461039957806307b435c2146103bf5780630c620bce146103ea5780630d6a1f87146103ff5780631101eb411461041257806315006b8214610427578063160e1e3114610452578063165e62e714610465578063168f92e7146104a25780631b44555e146104cd5780631cd5c01f146104ed5780631ef94b911461051057806321040b0114610530578063238efcbc1461055b578063274a8db41461056357806346d8908d1461058657806352a4de2914610599578063575288bf146105ac578063594a3a93146105bf575b600080fd5b6103ac6103a7366004613d0a565b610b13565b6040519081526020015b60405180910390f35b6103ac6103cd366004613d44565b601260209081526000928352604080842090915290825290205481565b6103f2610c19565b6040516103b69190613fa4565b6103ac61040d366004613e5c565b610c2a565b610425610420366004613dc8565b610d30565b005b6103ac610435366004613d44565b601060209081526000928352604080842090915290825290205481565b610425610460366004613d0a565b610e8a565b610478610473366004613d0a565b610ff0565b604080518251600690810b825260208085015190910b9082015291810151908201526060016103b6565b6103ac6104b0366004613d44565b600960209081526000928352604080842090915290825290205481565b6103ac6104db366004613d0a565b60056020526000908152604090205481565b6105006104fb366004613d0a565b6113b6565b60405190151581526020016103b6565b601b54610523906001600160a01b031681565b6040516103b69190613f34565b6103ac61053e366004613d44565b601360209081526000928352604080842090915290825290205481565b6104256113c3565b610500610571366004613d0a565b601a6020526000908152604090205460ff1681565b6103f2610594366004613d0a565b61144f565b6104256105a7366004613dc8565b611473565b6104256105ba366004613dc8565b6116c1565b6104256105cd366004613d44565b611984565b6104256105e0366004613d0a565b611a29565b601754610523906001600160a01b031681565b6103ac601f5481565b6103ac60215481565b610425610618366004613d0a565b611adb565b61042561062b366004613d0a565b611b5d565b6103ac61063e366004613d44565b602860209081526000928352604080842090915290825290205481565b610425610669366004613ee6565b611c15565b6103ac61067c366004613d0a565b611c75565b61042561068f366004613d0a565b611dab565b6103ac60225481565b601e54610523906001600160a01b031681565b6103f2611e48565b6105236106c6366004613d0a565b6001602052600090815260409020546001600160a01b031681565b6103ac6106ef366004613d0a565b611e54565b610500610702366004613d0a565b60146020526000908152604090205460ff1681565b610425610725366004613ee6565b611ef7565b6103ac610738366004613d0a565b602e6020526000908152604090205481565b610425610758366004613d44565b611f55565b6103f2612043565b610523610773366004613d0a565b6002602052600090815260409020546001600160a01b031681565b61042561079c366004613d0a565b61204f565b6104256107af366004613d7d565b612107565b6103ac6107c2366004613d44565b600860209081526000928352604080842090915290825290205481565b6103ac6107ed366004613d0a565b60296020526000908152604090205481565b6103ac60205481565b610425610816366004613d0a565b6122d7565b610425610829366004613d0a565b61238b565b61042561083c366004613d44565b612401565b61050061084f366004613d0a565b60076020526000908152604090205460ff1681565b610425610872366004613ee6565b612880565b6103ac610885366004613d44565b602560209081526000928352604080842090915290825290205481565b6104256108b0366004613d0a565b6128e0565b6104256108c3366004613ee6565b612b05565b6105006108d6366004613d0a565b60196020526000908152604090205460ff1681565b6103ac6108f9366004613d44565b6001600160a01b039182166000908152602d6020908152604080832093909416825291909152205490565b601c54610523906001600160a01b031681565b610425610945366004613d44565b612b65565b610425610958366004613d0a565b612b8c565b61042561096b366004613ee6565b612c29565b6103ac61097e366004613d44565b601160209081526000928352604080842090915290825290205481565b6104256109a9366004613e09565b612cad565b6103ac60245481565b6104256109c5366004613d44565b612ee4565b6103ac6109d8366004613d0a565b60066020526000908152604090205481565b6103ac6109f8366004613d0a565b6001600160a01b03166000908152600a602052604090205490565b610425610a21366004613ee6565b612f06565b610425610a34366004613d0a565b612f66565b610523610a47366004613d0a565b602c602052600090815260409020546001600160a01b031681565b610425610a70366004613d0a565b613003565b601d54610523906001600160a01b031681565b6103ac610a96366004613d0a565b602a6020526000908152604090205481565b6103ac610ab6366004613d0a565b6130b7565b601854610523906001600160a01b031681565b6103ac610adc366004613d0a565b6001600160a01b03166000908152600b602052604090205490565b6103ac60235481565b610425610b0e366004613e5c565b6130d8565b600080610b1f83611c75565b6022549091504290610b3a90610b35908361410f565b6131c8565b6001600160a01b0385166000908152602960205260409020541115610bde576022546001600160a01b038516600090815260296020526040902054610b7f904261410f565b10610bbb576022546001600160a01b038516600090815260296020526040902054610baa9190614074565b610bb4908261410f565b9050610bf4565b6001600160a01b038416600090815260296020526040902054610bb4908261410f565b610be7426131c8565b610bf1908261410f565b90505b610bfe81836131e2565b610c0785611e54565b610c119190614074565b949350505050565b6060610c25602661320c565b905090565b6000610c37602684613220565b15610d2a576000610c4784610ff0565b90508060400151600014610d28576001600160a01b0384166000908152600f602052604081205460ff16610c88578160200151610c8390614181565b610c8e565b81602001515b601d5460225460405163a0d2710760e01b8152929350610d1f926001600160a01b039092169163a0d2710791610cca918991879160040161405b565b60206040518083038186803b158015610ce257600080fd5b505afa158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a9190613eff565b613242565b92505050610d2a565b505b92915050565b6001600160a01b038381166000908152600160205260409020548491163314610d6c57604051636efb4f4160e11b815260040160405180910390fd5b602054610d799042614074565b6001600160a01b03808616600081815260126020908152604080832094891680845294825280832095909555918152601382528381209281529190529081208054849290610dc8908490614074565b90915550610dd99050848484613253565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590610e185750602154610e168286613461565b105b15610e3657604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de85604051610e7b91815260200190565b60405180910390a35050505050565b6017546001600160a01b03163314610eb5576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610edc5760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b90610f3d908490600401613f34565b60206040518083038186803b158015610f5557600080fd5b505afa158015610f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8d9190613e88565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa90610fe5908390613f34565b60405180910390a150565b6040805160608101825260008082526020820181905291810191909152611016426131c8565b6001600160a01b0383166000908152602b6020526040902060010154141561108c57506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b6000806110a060225442610b35919061410f565b6001600160a01b0385166000908152602b602052604090206001015490915081141561120457604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b61110d426131c8565b611117904261410f565b8260008151811061112a5761112a6141ea565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926111869291909116908690600401613f48565b60606040518083038186803b15801561119e57600080fd5b505afa1580156111b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d69190613ea3565b600692830b90920b8088529195506111f0918391506140bf565b600690810b900b60208601525061138d9050565b6001600160a01b0384166000908152602b602052604090206001015481111561138d57604080516002808252606082018352600092602083019080368337019050509050611251426131c8565b61125b904261410f565b8160008151811061126e5761126e6141ea565b602002602001019063ffffffff16908163ffffffff1681525050602254611294426131c8565b61129e904261410f565b6112a89190614074565b816001815181106112bb576112bb6141ea565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d91926113139216908690600401613f48565b60606040518083038186803b15801561132b57600080fd5b505afa15801561133f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113639190613ea3565b600692830b90920b808852919550915061137e9082906140bf565b600690810b900b602086015250505b81156113a65761139c426131c8565b60408401526113ae565b600060408401525b50505b919050565b6000610d2a601583613220565b6018546001600160a01b031633146113ee57604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b69161144591613f34565b60405180910390a1565b6001600160a01b0381166000908152600d60205260409020606090610d2a9061320c565b6002600054141561149f5760405162461bcd60e51b815260040161149690614024565b60405180910390fd5b60026000556114af602683613220565b6114cc5760405163e0b6aead60e01b815260040160405180910390fd5b6114d7601584613220565b6114f457604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611516908361357f565b5061152083613594565b6021546001600160a01b0380851660009081526028602090815260408083209387168352929052205461155e90611558908490614074565b84613461565b101561157d57604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b845293829020548251918252928101939093528201527fee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c38209060600160405180910390a26115fb6001600160a01b0383163330846135c0565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611632908490614074565b909155506116459050610d1a8284613461565b6001600160a01b0384166000908152600b60205260408120805490919061166d908490614074565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b600260005414156116e45760405162461bcd60e51b815260040161149690614024565b60026000556116f4601584613220565b61171157604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b038381169116141561173f5760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a082319061176e903090600401613f34565b60206040518083038186803b15801561178657600080fd5b505afa15801561179a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117be9190613eff565b90506117d56001600160a01b0384163330856135c0565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016118049190613f34565b60206040518083038186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190613eff565b61185e919061410f565b905060006127106024548361187391906140a0565b61187d919061408c565b9050611889818361410f565b6001600160a01b038088166000908152600960209081526040808320938a16835292905290812080549091906118c0908490614074565b90915550506001600160a01b03808716600090815260256020908152604080832089851680855292529091204290556017546118fd921683613631565b6001600160a01b0386166000908152600c6020526040902061191f908661357f565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb8560405161196f91815260200190565b60405180910390a45050600160005550505050565b6001600160a01b0382811660009081526001602052604090205483911633146119c057604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b038181166000908152600260205260409020548291163314611a655760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b6017546001600160a01b03163314611b06576040516354348f0360e01b815260040160405180910390fd5b611b11602682613661565b611b2e57604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e5681604051610fe59190613f34565b6017546001600160a01b03163314611b88576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff1615611bc25760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b90610fe5908390613f34565b6017546001600160a01b03163314611c40576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d90602001610fe5565b6000805b6001600160a01b0383166000908152600d60205260409020611c9a90613676565b811015611da5576001600160a01b0383166000908152600d60205260408120611cc39083613680565b9050611cd0602682613220565b15611d92576000611ce082610ff0565b90508060400151600014611d90576001600160a01b0382166000908152600f602052604081205460ff16611d21578160200151611d1c90614181565b611d27565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b8152949550611d8294929093169263a0d2710792610cca92879160040161405b565b611d8c9086614074565b9450505b505b5080611d9d81614152565b915050611c79565b50919050565b6017546001600160a01b03163314611dd6576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116611dfd5760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b090610fe5908390613f34565b6060610c25601561320c565b600080611e6083611c75565b6022546001600160a01b03851660009081526029602052604090205491925090611e8a904261410f565b1015610d2a5760008111611eb6576001600160a01b0383166000908152600a6020526040902054611ef0565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054611ee69083906140a0565b611ef0919061408c565b9150611da5565b6017546001600160a01b03163314611f22576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29101610fe5565b6001600160a01b038281166000908152600160205260409020548391163314611f9157604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415611fc45760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d825280832094835293905282902042905590517fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c90612036908590613f34565b60405180910390a2505050565b6060610c25600361320c565b6017546001600160a01b0316331461207a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff16156120b45760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f90610fe5908390613f34565b6001600160a01b03838116600090815260016020526040902054849116331461214357604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03821661216a5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038085166000908152601360209081526040808320938716835292905220546121ad5760405163184c088160e21b815260040160405180910390fd5b6001600160a01b0380851660009081526012602090815260408083209387168352929052205442116121f2576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff161561222c576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590612279908483613631565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca7928862846040516122c891815260200190565b60405180910390a45050505050565b6017546001600160a01b03163314612302576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff1661233b576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d02590610fe5908390613f34565b6017546001600160a01b031633146123b6576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f90610fe5908390613f34565b6001600160a01b03818116600090815260016020526040902054829116331461243d57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff168061247c57506001600160a01b03821660009081526007602052604090205460ff165b1561249a5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c60205260409020548116908316146124d757604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d602090815260408083209386168352929052205461250990603c90614074565b421015612529576040516356248e9760e01b815260040160405180910390fd5b61253283613594565b61253b82613594565b6001600160a01b0383166000908152600c6020526040812061255c90613676565b111561263e576001600160a01b0383166000908152600c602052604081206125849082613680565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a1685529282528084209284529190528120805493945091926125d2908490614074565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c909152206126149082613661565b506001600160a01b0383166000908152600c60205260409020612637908261357f565b505061253b565b6001600160a01b0383166000908152600d6020526040812061265f90613676565b1115612741576001600160a01b0383166000908152600d602052604081206126879082613680565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a1685529282528084209284529190528120805493945091926126d5908490614074565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d905220612717908261357f565b506001600160a01b0384166000908152600d6020526040902061273a9082613661565b505061263e565b6001600160a01b038084166000908152600b602052604080822054928516825281208054909190612773908490614074565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a909152808220549285168252812080549091906127b7908490614074565b90915550506001600160a01b0383166000908152600a6020908152604080832083905560299091528120556127ed601584613661565b506001600160a01b03808416600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055938352602c909152908190208054909216909155517f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f290612036908690613f34565b6017546001600160a01b031633146128ab576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb6990602001610fe5565b6017546001600160a01b0316331461290b576040516354348f0360e01b815260040160405180910390fd5b61291660268261357f565b6129335760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561296c57600080fd5b505afa158015612980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a49190613d27565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b916129f89190600401613f34565b60206040518083038186803b158015612a1057600080fd5b505afa158015612a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a489190613e88565b6001600160a01b0382166000908152600f60205260409020805460ff1916911515919091179055612a7881610ff0565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b90610fe5908390613f34565b6017546001600160a01b03163314612b30576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b4390602001610fe5565b6001600160a01b0382166000908152600d60205260409020612b87908261357f565b505050565b6017546001600160a01b03163314612bb7576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612bde5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae25090610fe5908390613f34565b6017546001600160a01b03163314612c54576040516354348f0360e01b815260040160405180910390fd5b62015180811015612c7857604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d990602001610fe5565b60026000541415612cd05760405162461bcd60e51b815260040161149690614024565b600260009081556001600160a01b03858116825260016020526040909120548591163314612d1157604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03808616600090815260256020908152604080832093881683529290522054612d4390603c90614074565b4211612d6257604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290522054831115612da85760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff1615612de25760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260096020908152604080832093881683529290529081208054859290612e1990849061410f565b90915550612e3390506001600160a01b0385168385613631565b6001600160a01b03808616600090815260096020908152604080832093881683529290522054612e81576001600160a01b0385166000908152600c60205260409020612e7f9085613661565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe86604051612ed091815260200190565b60405180910390a450506001600055505050565b6001600160a01b0382166000908152600c60205260409020612b87908261357f565b6017546001600160a01b03163314612f31576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e790602001610fe5565b6017546001600160a01b03163314612f91576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116612fb85760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf90610fe5908390613f34565b6017546001600160a01b0316331461302e576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff1661306757604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e90610fe5908390613f34565b6001600160a01b0381166000908152600c60205260408120610d2a90613676565b6017546001600160a01b03163314613103576040516354348f0360e01b815260040160405180910390fd5b61310e601583613220565b61312b57604051636211d34960e01b815260040160405180910390fd5b61313482613594565b6001600160a01b0382166000908152600a60205260408120805483929061315c908490614074565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d1926131bc928252602082015260400190565b60405180910390a25050565b6000602254826131d8919061416d565b610d2a908361410f565b6000602254831015611da5576022546131fb83856140a0565b613205919061408c565b9050610d2a565b606060006132198361368c565b9392505050565b6001600160a01b03811660009081526001830160205260408120541515613219565b6000610d2a826022546023546136e8565b600260005414156132765760405162461bcd60e51b815260040161149690614024565b600260009081556001600160a01b0384168152600d6020526040902061329c9083613220565b6132b8576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b038084166000908152602860209081526040808320938616835292905220548111156132fe5760405163435b562560e01b815260040160405180910390fd5b61330783613796565b6000613316610d1a8385613461565b6001600160a01b0385166000908152600b6020526040902054909150156133cc576001600160a01b0384166000908152600b6020908152604080832054600a909252909120546133679083906140a0565b613371919061408c565b6001600160a01b0385166000908152600a60205260408120805490919061339990849061410f565b90915550506001600160a01b0384166000908152600b6020526040812080548392906133c690849061410f565b90915550505b6001600160a01b0380851660009081526028602090815260408083209387168352929052908120805484929061340390849061410f565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054613456576001600160a01b0384166000908152600d602052604090206134549084613661565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415610d2a576001600160a01b0382166000908152600f602052604081205460ff166134d3576001600160a01b0383166000908152602b60205260409020546134ce90600160381b900460060b614181565b6134f7565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d271079161352f918891869160040161405b565b60206040518083038186803b15801561354757600080fd5b505afa15801561355b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c119190613eff565b6000613219836001600160a01b0384166137bb565b6001600160a01b0381166000908152602e602052604081208054916135b883614152565b919050555050565b6040516001600160a01b038085166024830152831660448201526064810182905261362b9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261380a565b50505050565b6040516001600160a01b038316602482015260448101829052612b8790849063a9059cbb60e01b906064016135f4565b6000613219836001600160a01b0384166138dc565b6000610d2a825490565b600061321983836139cf565b6060816000018054806020026020016040519081016040528092919081815260200182805480156136dc57602002820191906000526020600020905b8154815260200190600101908083116136c8575b50505050509050919050565b600080806000198587098587029250828110838203039150508060001415613722576000841161371757600080fd5b508290049050613219565b80841161372e57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b61379f816139f9565b6001600160a01b039091166000908152600b6020526040902055565b600081815260018301602052604081205461380257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d2a565b506000610d2a565b600061385f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613bdd9092919063ffffffff16565b805190915015612b87578080602001905181019061387d9190613e88565b612b875760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611496565b600081815260018301602052604081205480156139c557600061390060018361410f565b85549091506000906139149060019061410f565b9050818114613979576000866000018281548110613934576139346141ea565b9060005260206000200154905080876000018481548110613957576139576141ea565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061398a5761398a6141d4565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d2a565b6000915050610d2a565b60008260000182815481106139e6576139e66141ea565b9060005260206000200154905092915050565b6000613a04426131c8565b601e546001600160a01b03166000908152602b602052604090206001015414613a9b57601e54613a3c906001600160a01b0316610ff0565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d60205260409020613abf90613676565b811015611da5576001600160a01b0383166000908152600d60205260408120613ae89083613680565b9050613af5602682613220565b15613bca57613b03426131c8565b6001600160a01b0382166000908152602b602052604090206001015414613b8957613b2d81610ff0565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b03808516600090815260286020908152604080832093851683529290522054613bbd90610d1a9083613461565b613bc79084614074565b92505b5080613bd581614152565b915050613a9e565b6060610c11848460008585843b613c365760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611496565b600080866001600160a01b03168587604051613c529190613f18565b60006040518083038185875af1925050503d8060008114613c8f576040519150601f19603f3d011682016040523d82523d6000602084013e613c94565b606091505b5091509150613ca4828286613caf565b979650505050505050565b60608315613cbe575081613219565b825115613cce5782518084602001fd5b8160405162461bcd60e51b81526004016114969190613ff1565b805180151581146113b157600080fd5b8051600681900b81146113b157600080fd5b600060208284031215613d1c57600080fd5b813561321981614200565b600060208284031215613d3957600080fd5b815161321981614200565b60008060408385031215613d5757600080fd5b8235613d6281614200565b91506020830135613d7281614200565b809150509250929050565b600080600060608486031215613d9257600080fd5b8335613d9d81614200565b92506020840135613dad81614200565b91506040840135613dbd81614200565b809150509250925092565b600080600060608486031215613ddd57600080fd5b8335613de881614200565b92506020840135613df881614200565b929592945050506040919091013590565b60008060008060808587031215613e1f57600080fd5b8435613e2a81614200565b93506020850135613e3a81614200565b9250604085013591506060850135613e5181614200565b939692955090935050565b60008060408385031215613e6f57600080fd5b8235613e7a81614200565b946020939093013593505050565b600060208284031215613e9a57600080fd5b61321982613ce8565b600080600060608486031215613eb857600080fd5b613ec184613cf8565b9250613ecf60208501613cf8565b9150613edd60408501613ce8565b90509250925092565b600060208284031215613ef857600080fd5b5035919050565b600060208284031215613f1157600080fd5b5051919050565b60008251613f2a818460208701614126565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015613f9757845163ffffffff1683529383019391830191600101613f75565b5090979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613fe55783516001600160a01b031683529284019291840191600101613fc0565b50909695505050505050565b6020815260008251806020840152614010816040850160208701614126565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b60008219821115614087576140876141a8565b500190565b60008261409b5761409b6141be565b500490565b60008160001904831182151516156140ba576140ba6141a8565b500290565b60008160060b8360060b6000811281667fffffffffffff19018312811516156140ea576140ea6141a8565b81667fffffffffffff018313811615614105576141056141a8565b5090039392505050565b600082821015614121576141216141a8565b500390565b60005b83811015614141578181015183820152602001614129565b8381111561362b5750506000910152565b6000600019821415614166576141666141a8565b5060010190565b60008261417c5761417c6141be565b500690565b60008160060b667fffffffffffff1981141561419f5761419f6141a8565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461421557600080fd5b5056fea2646970667358221220ec7879ea33a2b6c1b3ad38acbf2a9055a05042e69842ff8123fb271fe295664d64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x394 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x951DC22C GT PUSH2 0x1E1 JUMPI DUP1 PUSH4 0xCB4BE2BB GT PUSH2 0x10B JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x94A JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x95D JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x970 JUMPI DUP1 PUSH4 0xD55995FE EQ PUSH2 0x99B JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x9AE JUMPI DUP1 PUSH4 0xE01F857C EQ PUSH2 0x9B7 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x9CA JUMPI DUP1 PUSH4 0xE7F0CBF8 EQ PUSH2 0x9EA JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0xA13 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0xA26 JUMPI DUP1 PUSH4 0xEC8CA643 EQ PUSH2 0xA39 JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0xA62 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0xA75 JUMPI DUP1 PUSH4 0xF136A09D EQ PUSH2 0xA88 JUMPI DUP1 PUSH4 0xF22150C8 EQ PUSH2 0xAA8 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0xABB JUMPI DUP1 PUSH4 0xF6BB2032 EQ PUSH2 0xACE JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0xAF7 JUMPI DUP1 PUSH4 0xFE75BC46 EQ PUSH2 0xB00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x951DC22C EQ PUSH2 0x75D JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x765 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x78E JUMPI DUP1 PUSH4 0xA2145809 EQ PUSH2 0x7A1 JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x7B4 JUMPI DUP1 PUSH4 0xA676F9FF EQ PUSH2 0x7DF JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x7FF JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x808 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x81B JUMPI DUP1 PUSH4 0xAF320E81 EQ PUSH2 0x82E JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x841 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x864 JUMPI DUP1 PUSH4 0xB440027F EQ PUSH2 0x877 JUMPI DUP1 PUSH4 0xB600702A EQ PUSH2 0x8A2 JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x8B5 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x8C8 JUMPI DUP1 PUSH4 0xBEA2B827 EQ PUSH2 0x8EB JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x924 JUMPI DUP1 PUSH4 0xCACDF93D EQ PUSH2 0x937 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x59A2255E GT PUSH2 0x2C2 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x5D2 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x5E5 JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x5F8 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x601 JUMPI DUP1 PUSH4 0x64BB43EE EQ PUSH2 0x60A JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x61D JUMPI DUP1 PUSH4 0x694798E6 EQ PUSH2 0x630 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x65B JUMPI DUP1 PUSH4 0x6CF262BC EQ PUSH2 0x66E JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x681 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x694 JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x69D JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x6B0 JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0x8BB6DFA8 EQ PUSH2 0x6E1 JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x6F4 JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x717 JUMPI DUP1 PUSH4 0x9035654F EQ PUSH2 0x72A JUMPI DUP1 PUSH4 0x90A4684E EQ PUSH2 0x74A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34D4C61 EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0xC620BCE EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0xD6A1F87 EQ PUSH2 0x3FF JUMPI DUP1 PUSH4 0x1101EB41 EQ PUSH2 0x412 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x452 JUMPI DUP1 PUSH4 0x165E62E7 EQ PUSH2 0x465 JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0x1CD5C01F EQ PUSH2 0x4ED JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x510 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x530 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x55B JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x563 JUMPI DUP1 PUSH4 0x46D8908D EQ PUSH2 0x586 JUMPI DUP1 PUSH4 0x52A4DE29 EQ PUSH2 0x599 JUMPI DUP1 PUSH4 0x575288BF EQ PUSH2 0x5AC JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x5BF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3AC PUSH2 0x3A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0xB13 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3AC PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0xC19 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B6 SWAP2 SWAP1 PUSH2 0x3FA4 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x40D CALLDATASIZE PUSH1 0x4 PUSH2 0x3E5C JUMP JUMPDEST PUSH2 0xC2A JUMP JUMPDEST PUSH2 0x425 PUSH2 0x420 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC8 JUMP JUMPDEST PUSH2 0xD30 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3AC PUSH2 0x435 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x460 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0xE8A JUMP JUMPDEST PUSH2 0x478 PUSH2 0x473 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0xFF0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND DUP3 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 SIGNEXTEND SWAP1 DUP3 ADD MSTORE SWAP2 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x4B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x500 PUSH2 0x4FB CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x13B6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x523 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B6 SWAP2 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x53E CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x13C3 JUMP JUMPDEST PUSH2 0x500 PUSH2 0x571 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0x594 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x144F JUMP JUMPDEST PUSH2 0x425 PUSH2 0x5A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC8 JUMP JUMPDEST PUSH2 0x1473 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x5BA CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC8 JUMP JUMPDEST PUSH2 0x16C1 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x5CD CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH2 0x1984 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x5E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x1A29 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH2 0x523 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x618 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x1ADB JUMP JUMPDEST PUSH2 0x425 PUSH2 0x62B CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x1B5D JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x63E CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x669 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE6 JUMP JUMPDEST PUSH2 0x1C15 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x67C CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x1C75 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x68F CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x1DAB JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x523 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0x1E48 JUMP JUMPDEST PUSH2 0x523 PUSH2 0x6C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x6EF CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0x500 PUSH2 0x702 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x725 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE6 JUMP JUMPDEST PUSH2 0x1EF7 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x738 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x2E PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x758 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH2 0x1F55 JUMP JUMPDEST PUSH2 0x3F2 PUSH2 0x2043 JUMP JUMPDEST PUSH2 0x523 PUSH2 0x773 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x79C CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x204F JUMP JUMPDEST PUSH2 0x425 PUSH2 0x7AF CALLDATASIZE PUSH1 0x4 PUSH2 0x3D7D JUMP JUMPDEST PUSH2 0x2107 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x7C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x7ED CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x816 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x22D7 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x829 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x238B JUMP JUMPDEST PUSH2 0x425 PUSH2 0x83C CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH2 0x2401 JUMP JUMPDEST PUSH2 0x500 PUSH2 0x84F CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x872 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE6 JUMP JUMPDEST PUSH2 0x2880 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x885 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x8B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x28E0 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x8C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE6 JUMP JUMPDEST PUSH2 0x2B05 JUMP JUMPDEST PUSH2 0x500 PUSH2 0x8D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x8F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x523 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x945 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH2 0x2B65 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x958 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x2B8C JUMP JUMPDEST PUSH2 0x425 PUSH2 0x96B CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE6 JUMP JUMPDEST PUSH2 0x2C29 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x97E CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x9A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E09 JUMP JUMPDEST PUSH2 0x2CAD JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0x9C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D44 JUMP JUMPDEST PUSH2 0x2EE4 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x9D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0x9F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x425 PUSH2 0xA21 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE6 JUMP JUMPDEST PUSH2 0x2F06 JUMP JUMPDEST PUSH2 0x425 PUSH2 0xA34 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x2F66 JUMP JUMPDEST PUSH2 0x523 PUSH2 0xA47 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0xA70 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x3003 JUMP JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x523 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0xA96 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0xAB6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH2 0x30B7 JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH2 0x523 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3AC PUSH2 0xADC CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3AC PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x425 PUSH2 0xB0E CALLDATASIZE PUSH1 0x4 PUSH2 0x3E5C JUMP JUMPDEST PUSH2 0x30D8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB1F DUP4 PUSH2 0x1C75 JUMP JUMPDEST PUSH1 0x22 SLOAD SWAP1 SWAP2 POP TIMESTAMP SWAP1 PUSH2 0xB3A SWAP1 PUSH2 0xB35 SWAP1 DUP4 PUSH2 0x410F JUMP JUMPDEST PUSH2 0x31C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO PUSH2 0xBDE JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xB7F SWAP1 TIMESTAMP PUSH2 0x410F JUMP JUMPDEST LT PUSH2 0xBBB JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xBAA SWAP2 SWAP1 PUSH2 0x4074 JUMP JUMPDEST PUSH2 0xBB4 SWAP1 DUP3 PUSH2 0x410F JUMP JUMPDEST SWAP1 POP PUSH2 0xBF4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xBB4 SWAP1 DUP3 PUSH2 0x410F JUMP JUMPDEST PUSH2 0xBE7 TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH2 0xBF1 SWAP1 DUP3 PUSH2 0x410F JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0xBFE DUP2 DUP4 PUSH2 0x31E2 JUMP JUMPDEST PUSH2 0xC07 DUP6 PUSH2 0x1E54 JUMP JUMPDEST PUSH2 0xC11 SWAP2 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC25 PUSH1 0x26 PUSH2 0x320C JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC37 PUSH1 0x26 DUP5 PUSH2 0x3220 JUMP JUMPDEST ISZERO PUSH2 0xD2A JUMPI PUSH1 0x0 PUSH2 0xC47 DUP5 PUSH2 0xFF0 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0xD28 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xC88 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xC83 SWAP1 PUSH2 0x4181 JUMP JUMPDEST PUSH2 0xC8E JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH2 0xD1F SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0xCCA SWAP2 DUP10 SWAP2 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x405B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD1A SWAP2 SWAP1 PUSH2 0x3EFF JUMP JUMPDEST PUSH2 0x3242 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xD2A JUMP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0xD6C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 SLOAD PUSH2 0xD79 SWAP1 TIMESTAMP PUSH2 0x4074 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0xDC8 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0xDD9 SWAP1 POP DUP5 DUP5 DUP5 PUSH2 0x3253 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xE18 JUMPI POP PUSH1 0x21 SLOAD PUSH2 0xE16 DUP3 DUP7 PUSH2 0x3461 JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0xE36 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE DUP6 PUSH1 0x40 MLOAD PUSH2 0xE7B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xEB5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xEDC JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0xF3D SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF69 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF8D SWAP2 SWAP1 PUSH2 0x3E88 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1016 TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ ISZERO PUSH2 0x108C JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x10A0 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xB35 SWAP2 SWAP1 PUSH2 0x410F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 SWAP2 POP DUP2 EQ ISZERO PUSH2 0x1204 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x6 SIGNEXTEND PUSH2 0x110D TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH2 0x1117 SWAP1 TIMESTAMP PUSH2 0x410F JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x112A JUMPI PUSH2 0x112A PUSH2 0x41EA JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD SWAP3 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP2 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x1186 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3F48 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x119E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11D6 SWAP2 SWAP1 PUSH2 0x3EA3 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP PUSH2 0x11F0 SWAP2 DUP4 SWAP2 POP PUSH2 0x40BF JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP PUSH2 0x138D SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 GT ISZERO PUSH2 0x138D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x1251 TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH2 0x125B SWAP1 TIMESTAMP PUSH2 0x410F JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x126E JUMPI PUSH2 0x126E PUSH2 0x41EA JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x22 SLOAD PUSH2 0x1294 TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH2 0x129E SWAP1 TIMESTAMP PUSH2 0x410F JUMP JUMPDEST PUSH2 0x12A8 SWAP2 SWAP1 PUSH2 0x4074 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x12BB JUMPI PUSH2 0x12BB PUSH2 0x41EA JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP3 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x1313 SWAP3 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x3F48 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x132B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x133F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1363 SWAP2 SWAP1 PUSH2 0x3EA3 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP SWAP2 POP PUSH2 0x137E SWAP1 DUP3 SWAP1 PUSH2 0x40BF JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x13A6 JUMPI PUSH2 0x139C TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x13AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP5 ADD MSTORE JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD2A PUSH1 0x15 DUP4 PUSH2 0x3220 JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13EE JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x1445 SWAP2 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 SWAP1 PUSH2 0xD2A SWAP1 PUSH2 0x320C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x149F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1496 SWAP1 PUSH2 0x4024 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x14AF PUSH1 0x26 DUP4 PUSH2 0x3220 JUMP JUMPDEST PUSH2 0x14CC JUMPI PUSH1 0x40 MLOAD PUSH4 0xE0B6AEAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x14D7 PUSH1 0x15 DUP5 PUSH2 0x3220 JUMP JUMPDEST PUSH2 0x14F4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1516 SWAP1 DUP4 PUSH2 0x357F JUMP JUMPDEST POP PUSH2 0x1520 DUP4 PUSH2 0x3594 JUMP JUMPDEST PUSH1 0x21 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x155E SWAP1 PUSH2 0x1558 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST DUP5 PUSH2 0x3461 JUMP JUMPDEST LT ISZERO PUSH2 0x157D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB DUP5 MSTORE SWAP4 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE SWAP3 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP3 ADD MSTORE PUSH32 0xEE3F0DABA9837D1AB0597ACF34328550E4832D02E24E467825E7C2DD318C3820 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x15FB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x35C0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1632 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1645 SWAP1 POP PUSH2 0xD1A DUP3 DUP5 PUSH2 0x3461 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x166D SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 SWAP1 DUP7 AND SWAP1 PUSH32 0x4E186BC75A2220191B826BAFF3EE63C3E970E94E58A9007FF94C9A7B8E6EBB3F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x16E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1496 SWAP1 PUSH2 0x4024 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x16F4 PUSH1 0x15 DUP5 PUSH2 0x3220 JUMP JUMPDEST PUSH2 0x1711 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x173F JUMPI PUSH1 0x40 MLOAD PUSH3 0x822D97 PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x176E SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1786 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x179A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17BE SWAP2 SWAP1 PUSH2 0x3EFF JUMP JUMPDEST SWAP1 POP PUSH2 0x17D5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x35C0 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1804 SWAP2 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x181C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1830 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1854 SWAP2 SWAP1 PUSH2 0x3EFF JUMP JUMPDEST PUSH2 0x185E SWAP2 SWAP1 PUSH2 0x410F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2710 PUSH1 0x24 SLOAD DUP4 PUSH2 0x1873 SWAP2 SWAP1 PUSH2 0x40A0 JUMP JUMPDEST PUSH2 0x187D SWAP2 SWAP1 PUSH2 0x408C JUMP JUMPDEST SWAP1 POP PUSH2 0x1889 DUP2 DUP4 PUSH2 0x410F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x18C0 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x17 SLOAD PUSH2 0x18FD SWAP3 AND DUP4 PUSH2 0x3631 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x191F SWAP1 DUP7 PUSH2 0x357F JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEC1A37D4A331A5059081E0FB5DA1735E7890900CD215A4FB1E9F2779FD7B83EB DUP6 PUSH1 0x40 MLOAD PUSH2 0x196F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x19C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x1A65 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1B06 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1B11 PUSH1 0x26 DUP3 PUSH2 0x3661 JUMP JUMPDEST PUSH2 0x1B2E JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8D08B1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x51199D699BDFD516FA88DD0D2F8487C40C147B4867ACAA23ADC8D4DF6B098E56 DUP2 PUSH1 0x40 MLOAD PUSH2 0xFE5 SWAP2 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1B88 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1BC2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1C40 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0xFE5 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1C9A SWAP1 PUSH2 0x3676 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1DA5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1CC3 SWAP1 DUP4 PUSH2 0x3680 JUMP JUMPDEST SWAP1 POP PUSH2 0x1CD0 PUSH1 0x26 DUP3 PUSH2 0x3220 JUMP JUMPDEST ISZERO PUSH2 0x1D92 JUMPI PUSH1 0x0 PUSH2 0x1CE0 DUP3 PUSH2 0xFF0 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x1D90 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1D21 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x1D1C SWAP1 PUSH2 0x4181 JUMP JUMPDEST PUSH2 0x1D27 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SLOAD PUSH1 0x22 SLOAD SWAP2 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH2 0x1D82 SWAP5 SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0xA0D27107 SWAP3 PUSH2 0xCCA SWAP3 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x405B JUMP JUMPDEST PUSH2 0x1D8C SWAP1 DUP7 PUSH2 0x4074 JUMP JUMPDEST SWAP5 POP POP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x1D9D DUP2 PUSH2 0x4152 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1C79 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1DD6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1DFD JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC25 PUSH1 0x15 PUSH2 0x320C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1E60 DUP4 PUSH2 0x1C75 JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1E8A SWAP1 TIMESTAMP PUSH2 0x410F JUMP JUMPDEST LT ISZERO PUSH2 0xD2A JUMPI PUSH1 0x0 DUP2 GT PUSH2 0x1EB6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1EF0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x1EE6 SWAP1 DUP4 SWAP1 PUSH2 0x40A0 JUMP JUMPDEST PUSH2 0x1EF0 SWAP2 SWAP1 PUSH2 0x408C JUMP JUMPDEST SWAP2 POP PUSH2 0x1DA5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1F22 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0xFE5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x1F91 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1FC4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAFE7AD49 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP6 DUP9 AND SWAP6 DUP7 OR SWAP1 SSTORE PUSH1 0x2D DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE SWAP1 MLOAD PUSH32 0xFF0456758201108DE53C0FF04C69988D4678FF455B2CE6F733328CF85722C04C SWAP1 PUSH2 0x2036 SWAP1 DUP6 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC25 PUSH1 0x3 PUSH2 0x320C JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x207A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x20B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x2143 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x216A JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x21AD JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x21F2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x222C JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x12 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE SWAP1 PUSH2 0x2279 SWAP1 DUP5 DUP4 PUSH2 0x3631 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFDB7893BF11F50C621E59CC7F1CF540E94295CB27CA869EC7ED7618CA7928862 DUP5 PUSH1 0x40 MLOAD PUSH2 0x22C8 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2302 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x233B JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x23B6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x243D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x247C JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x249A JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 AND SWAP1 DUP4 AND EQ PUSH2 0x24D7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCED616B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2509 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x4074 JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x2529 JUMPI PUSH1 0x40 MLOAD PUSH4 0x56248E97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2532 DUP4 PUSH2 0x3594 JUMP JUMPDEST PUSH2 0x253B DUP3 PUSH2 0x3594 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x255C SWAP1 PUSH2 0x3676 JUMP JUMPDEST GT ISZERO PUSH2 0x263E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2584 SWAP1 DUP3 PUSH2 0x3680 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x25D2 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP3 SWAP1 SSTORE SWAP2 DUP2 MSTORE PUSH1 0xC SWAP1 SWAP2 MSTORE KECCAK256 PUSH2 0x2614 SWAP1 DUP3 PUSH2 0x3661 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2637 SWAP1 DUP3 PUSH2 0x357F JUMP JUMPDEST POP POP PUSH2 0x253B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x265F SWAP1 PUSH2 0x3676 JUMP JUMPDEST GT ISZERO PUSH2 0x2741 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2687 SWAP1 DUP3 PUSH2 0x3680 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x26D5 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE SWAP3 DUP7 AND DUP3 MSTORE PUSH1 0xD SWAP1 MSTORE KECCAK256 PUSH2 0x2717 SWAP1 DUP3 PUSH2 0x357F JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x273A SWAP1 DUP3 PUSH2 0x3661 JUMP JUMPDEST POP POP PUSH2 0x263E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x2773 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x27B7 SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0x29 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x27ED PUSH1 0x15 DUP5 PUSH2 0x3661 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x2D DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 DUP9 AND DUP1 DUP6 MSTORE SWAP6 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x2C SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9B712B63E3FB1325FA042D3C238CE8144937875065900528EA1E4F3B00F379F2 SWAP1 PUSH2 0x2036 SWAP1 DUP7 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x28AB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0xFE5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x290B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2916 PUSH1 0x26 DUP3 PUSH2 0x357F JUMP JUMPDEST PUSH2 0x2933 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF25E6B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x296C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2980 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29A4 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 DUP4 AND SWAP4 DUP5 OR SWAP1 SSTORE PUSH1 0x1D SLOAD SWAP1 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0x696A437B SWAP2 PUSH2 0x29F8 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A24 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A48 SWAP2 SWAP1 PUSH2 0x3E88 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2A78 DUP2 PUSH2 0xFF0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 DUP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xABFA8DB4D238FA78BF4E15FCC91328DD35F3978F200E2857A56BB719732B7B0B SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2B30 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0xFE5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2B87 SWAP1 DUP3 PUSH2 0x357F JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2BB7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2BDE JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2C54 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x2C78 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0xFE5 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x2CD0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1496 SWAP1 PUSH2 0x4024 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 AND CALLER EQ PUSH2 0x2D11 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2D43 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x4074 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x2D62 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E0B4075 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP4 GT ISZERO PUSH2 0x2DA8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24AE82D PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2DE2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x2E19 SWAP1 DUP5 SWAP1 PUSH2 0x410F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x2E33 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP4 DUP6 PUSH2 0x3631 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2E81 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2E7F SWAP1 DUP6 PUSH2 0x3661 JUMP JUMPDEST POP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x53E982DD9EC088D634C74C98FBBC161F808B4B6469A26C657120B9A31CB34BFE DUP7 PUSH1 0x40 MLOAD PUSH2 0x2ED0 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2B87 SWAP1 DUP3 PUSH2 0x357F JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2F31 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0xFE5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2F91 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2FB8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x302E JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3067 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0xFE5 SWAP1 DUP4 SWAP1 PUSH2 0x3F34 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0xD2A SWAP1 PUSH2 0x3676 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3103 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x310E PUSH1 0x15 DUP4 PUSH2 0x3220 JUMP JUMPDEST PUSH2 0x312B JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3134 DUP3 PUSH2 0x3594 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x315C SWAP1 DUP5 SWAP1 PUSH2 0x4074 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x5ABCF5031FDBD3BADB9D1E09094208DE329AEE72730E87650F346584205D23D1 SWAP3 PUSH2 0x31BC SWAP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP3 PUSH2 0x31D8 SWAP2 SWAP1 PUSH2 0x416D JUMP JUMPDEST PUSH2 0xD2A SWAP1 DUP4 PUSH2 0x410F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP4 LT ISZERO PUSH2 0x1DA5 JUMPI PUSH1 0x22 SLOAD PUSH2 0x31FB DUP4 DUP6 PUSH2 0x40A0 JUMP JUMPDEST PUSH2 0x3205 SWAP2 SWAP1 PUSH2 0x408C JUMP JUMPDEST SWAP1 POP PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x3219 DUP4 PUSH2 0x368C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x3219 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD2A DUP3 PUSH1 0x22 SLOAD PUSH1 0x23 SLOAD PUSH2 0x36E8 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x3276 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1496 SWAP1 PUSH2 0x4024 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x329C SWAP1 DUP4 PUSH2 0x3220 JUMP JUMPDEST PUSH2 0x32B8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x41CFA5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x32FE JUMPI PUSH1 0x40 MLOAD PUSH4 0x435B5625 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3307 DUP4 PUSH2 0x3796 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3316 PUSH2 0xD1A DUP4 DUP6 PUSH2 0x3461 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x33CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x3367 SWAP1 DUP4 SWAP1 PUSH2 0x40A0 JUMP JUMPDEST PUSH2 0x3371 SWAP2 SWAP1 PUSH2 0x408C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x3399 SWAP1 DUP5 SWAP1 PUSH2 0x410F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x33C6 SWAP1 DUP5 SWAP1 PUSH2 0x410F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x3403 SWAP1 DUP5 SWAP1 PUSH2 0x410F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3456 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3454 SWAP1 DUP5 PUSH2 0x3661 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0xD2A JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x34D3 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x34CE SWAP1 PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND PUSH2 0x4181 JUMP JUMPDEST PUSH2 0x34F7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x352F SWAP2 DUP9 SWAP2 DUP7 SWAP2 PUSH1 0x4 ADD PUSH2 0x405B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x355B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC11 SWAP2 SWAP1 PUSH2 0x3EFF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3219 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x37BB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2E PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 PUSH2 0x35B8 DUP4 PUSH2 0x4152 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x362B SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x380A JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2B87 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x35F4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3219 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x38DC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD2A DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3219 DUP4 DUP4 PUSH2 0x39CF JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x36DC JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x36C8 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x3722 JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x3717 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x3219 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x372E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x379F DUP2 PUSH2 0x39F9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x3802 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xD2A JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x385F DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3BDD SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x2B87 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x387D SWAP2 SWAP1 PUSH2 0x3E88 JUMP JUMPDEST PUSH2 0x2B87 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1496 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x39C5 JUMPI PUSH1 0x0 PUSH2 0x3900 PUSH1 0x1 DUP4 PUSH2 0x410F JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x3914 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x410F JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x3979 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x3934 JUMPI PUSH2 0x3934 PUSH2 0x41EA JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x3957 JUMPI PUSH2 0x3957 PUSH2 0x41EA JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x398A JUMPI PUSH2 0x398A PUSH2 0x41D4 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x39E6 JUMPI PUSH2 0x39E6 PUSH2 0x41EA JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A04 TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x3A9B JUMPI PUSH1 0x1E SLOAD PUSH2 0x3A3C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFF0 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3ABF SWAP1 PUSH2 0x3676 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1DA5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x3AE8 SWAP1 DUP4 PUSH2 0x3680 JUMP JUMPDEST SWAP1 POP PUSH2 0x3AF5 PUSH1 0x26 DUP3 PUSH2 0x3220 JUMP JUMPDEST ISZERO PUSH2 0x3BCA JUMPI PUSH2 0x3B03 TIMESTAMP PUSH2 0x31C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x3B89 JUMPI PUSH2 0x3B2D DUP2 PUSH2 0xFF0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3BBD SWAP1 PUSH2 0xD1A SWAP1 DUP4 PUSH2 0x3461 JUMP JUMPDEST PUSH2 0x3BC7 SWAP1 DUP5 PUSH2 0x4074 JUMP JUMPDEST SWAP3 POP JUMPDEST POP DUP1 PUSH2 0x3BD5 DUP2 PUSH2 0x4152 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x3A9E JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC11 DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 DUP5 EXTCODESIZE PUSH2 0x3C36 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1496 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x3C52 SWAP2 SWAP1 PUSH2 0x3F18 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3C8F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3C94 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x3CA4 DUP3 DUP3 DUP7 PUSH2 0x3CAF JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x3CBE JUMPI POP DUP2 PUSH2 0x3219 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x3CCE JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1496 SWAP2 SWAP1 PUSH2 0x3FF1 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x13B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x6 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x13B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3D1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3219 DUP2 PUSH2 0x4200 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3D39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3219 DUP2 PUSH2 0x4200 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3D57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3D62 DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3D72 DUP2 PUSH2 0x4200 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3D92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3D9D DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3DAD DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x3DBD DUP2 PUSH2 0x4200 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3DDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3DE8 DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3DF8 DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3E1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3E2A DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3E3A DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x3E51 DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3E7A DUP2 PUSH2 0x4200 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3E9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3219 DUP3 PUSH2 0x3CE8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3EB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3EC1 DUP5 PUSH2 0x3CF8 JUMP JUMPDEST SWAP3 POP PUSH2 0x3ECF PUSH1 0x20 DUP6 ADD PUSH2 0x3CF8 JUMP JUMPDEST SWAP2 POP PUSH2 0x3EDD PUSH1 0x40 DUP6 ADD PUSH2 0x3CE8 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3EF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x3F2A DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x4126 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 DUP3 ADD SWAP2 SWAP1 PUSH1 0x60 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F97 JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3F75 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3FE5 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3FC0 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x4010 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x4126 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x6 SWAP2 SWAP1 SWAP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x4087 JUMPI PUSH2 0x4087 PUSH2 0x41A8 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x409B JUMPI PUSH2 0x409B PUSH2 0x41BE JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x40BA JUMPI PUSH2 0x40BA PUSH2 0x41A8 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x40EA JUMPI PUSH2 0x40EA PUSH2 0x41A8 JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x4105 JUMPI PUSH2 0x4105 PUSH2 0x41A8 JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x4121 JUMPI PUSH2 0x4121 PUSH2 0x41A8 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4141 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4129 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x362B JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x4166 JUMPI PUSH2 0x4166 PUSH2 0x41A8 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x417C JUMPI PUSH2 0x417C PUSH2 0x41BE JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x419F JUMPI PUSH2 0x419F PUSH2 0x41A8 JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEC PUSH25 0x79EA33A2B6C1B3AD38ACBF2A9055A05042E69842FF8123FB27 0x1F 0xE2 SWAP6 PUSH7 0x4D64736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "135:1500:61:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3206:848:35;;;;;;:::i;:::-;;:::i;:::-;;;9342:25:84;;;9330:2;9315:18;3206:848:35;;;;;;;;1968:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1402:135:35;;;:::i;:::-;;;;;;;:::i;4104:514::-;;;;;;:::i;:::-;;:::i;8401:573::-;;;;;;:::i;:::-;;:::i;:::-;;1728:76:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2556:364:31;;;;;;:::i;:::-;;:::i;4668:1632:35:-;;;;;;:::i;:::-;;:::i;:::-;;;;9029:13:84;;9026:1;9015:28;;;8997:47;;9114:4;9102:17;;;9096:24;9082:39;;;9060:20;;;9053:69;9166:17;;;9160:24;9138:20;;;9131:54;8985:2;8970:18;4668:1632:35;8795:396:84;880:79:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;:::i;:::-;;;;;;;;;;;;;;1422:96:61;;;;;;:::i;:::-;;:::i;:::-;;;6844:14:84;;6837:22;6819:41;;6807:2;6792:18;1422:96:61;6679:187:84;362:32:31;;;;;-1:-1:-1;;;;;362:32:31;;;;;;;;;;:::i;2090:78:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;384:50:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;873:140:61;;;;;;:::i;:::-;;:::i;7478:873:35:-;;;;;;:::i;:::-;;:::i;973:834:34:-;;;;;;:::i;:::-;;:::i;423:204:38:-;;;;;;:::i;:::-;;:::i;669:279::-;;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;-1:-1:-1;;;;;199:34:28;;;667:41:31;;;;;;834:50;;;;;;7219:209:35;;;;;;:::i;:::-;;:::i;533:194:32:-;;;;;;:::i;:::-;;:::i;945:79:35:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4195:110:31;;;;;;:::i;:::-;;:::i;1587:691:35:-;;;;;;:::i;:::-;;:::i;1788:223:31:-;;;;;;:::i;:::-;;:::i;925:49::-;;;;;;590:36;;;;;-1:-1:-1;;;;;590:36:31;;;2385:105:29;;;:::i;226:52:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;226:52:38;;;2328:828:35;;;;;;:::i;:::-;;:::i;2210:50:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3140:152:31;;;;;;:::i;:::-;;:::i;249:64:61:-;;;;;;:::i;:::-;;;;;;;;;;;;;;666:319:37;;;;;;:::i;:::-;;:::i;2531:111:29:-;;;:::i;321:59:38:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;321:59:38;;;999:203:32;;;;;;:::i;:::-;;:::i;9024:681:35:-;;;;;;:::i;:::-;;:::i;769:69:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1075:54:35;;;;;;:::i;:::-;;;;;;;;;;;;;;749:44:31;;;;;;762:202:32;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;1027:1856:37:-;;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3973:182:31;;;;;;:::i;:::-;;:::i;838:86:34:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6736:433:35;;;;;;:::i;:::-;;:::i;2960:140:31:-;;;;;;:::i;:::-;;:::i;299:49:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1265:153:61;;;;;;:::i;:::-;-1:-1:-1;;;;;1376:29:61;;;1354:7;1376:29;;;:19;:29;;;;;;;;:37;;;;;;;;;;;;;1265:153;435:37:31;;;;;-1:-1:-1;;;;;435:37:31;;;628:116:61;;;;;;:::i;:::-;;:::i;2286:230:31:-;;;;;;:::i;:::-;;:::i;3666:267::-;;;;;;:::i;:::-;;:::i;1846:80:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1855:695:34;;;;;;:::i;:::-;;:::i;1105:32:31:-;;;;;;525:99:61;;;;;;:::i;:::-;;:::i;534:53:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;1138:123:61;;;;;;:::i;:::-;-1:-1:-1;;;;;1230:26:61;1208:7;1230:26;;;:20;:26;;;;;;;1138:123;3332:188:31;;;;;;:::i;:::-;;:::i;2051:195::-;;;;;;:::i;:::-;;:::i;479:64:37:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;479:64:37;;;1237:211:32;;;;;;:::i;:::-;;:::i;513:36:31:-;;;;;-1:-1:-1;;;;;513:36:31;;;1180:52:35;;;;;;:::i;:::-;;;;;;;;;;;;;;748:121:61;;;;;;:::i;:::-;;:::i;268:41:28:-;;;;;-1:-1:-1;;;;;268:41:28;;;1017:117:61;;;;;;:::i;:::-;-1:-1:-1;;;;;1106:23:61;1084:7;1106:23;;;:17;:23;;;;;;;1017:117;1015:49:31;;;;;;6364:322:35;;;;;;:::i;:::-;;:::i;3206:848::-;3277:16;3301:22;3326;3343:4;3326:16;:22::i;:::-;3446:16;;3301:47;;-1:-1:-1;3374:15:35;;3420:43;;3428:34;;3374:15;3428:34;:::i;:::-;3420:7;:43::i;:::-;-1:-1:-1;;;;;3401:16:35;;;;;;:10;:16;;;;;;:62;3396:576;;;3566:16;;-1:-1:-1;;;;;3545:16:35;;;;;;:10;:16;;;;;;3527:34;;:15;:34;:::i;:::-;3526:56;3522:324;;3704:16;;-1:-1:-1;;;;;3685:16:35;;;;;;:10;:16;;;;;;:35;;3704:16;3685:35;:::i;:::-;3671:50;;;;:::i;:::-;;;3396:576;;3522:324;-1:-1:-1;;;;;3821:16:35;;;;;;:10;:16;;;;;;3808:29;;;;:::i;3396:576::-;3941:24;3949:15;3941:7;:24::i;:::-;3928:37;;;;:::i;:::-;;;3396:576;4016:33;4023:9;4034:14;4016:6;:33::i;:::-;3988:25;4008:4;3988:19;:25::i;:::-;:61;;;;:::i;:::-;3977:72;3206:848;-1:-1:-1;;;;3206:848:35:o;1402:135::-;1465:22;1503:29;:20;:27;:29::i;:::-;1495:37;;1402:135;:::o;4104:514::-;4197:22;4231:41;:20;4261:10;4231:29;:41::i;:::-;4227:387;;;4282:27;4312:28;4329:10;4312:16;:28::i;:::-;4282:58;;4352:10;:17;;;4373:1;4352:22;4348:260;;-1:-1:-1;;;;;4410:25:35;;4386:21;4410:25;;;:13;:25;;;;;;;;:74;;4463:10;:21;;;4462:22;;;:::i;:::-;4410:74;;;4438:10;:21;;;4410:74;4526:12;;4581:16;;4512:86;;-1:-1:-1;;;4512:86:35;;4386:98;;-1:-1:-1;4501:98:35;;-1:-1:-1;;;;;4526:12:35;;;;4512:42;;:86;;4555:7;;4386:98;;4512:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:10;:98::i;:::-;4494:105;;;;;;4348:260;4274:340;4227:387;4104:514;;;;:::o;8401:573::-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;8598:10:35::1;::::0;8580:28:::1;::::0;:15:::1;:28;:::i;:::-;-1:-1:-1::0;;;;;8543:22:35;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;:34;;::::1;::::0;;;;;;;;;:65;;;;8614:20;;;:14:::1;:20:::0;;;;;:32;;;;;;;;;:43;;8650:7;;8543:22;8614:43:::1;::::0;8650:7;;8614:43:::1;:::i;:::-;::::0;;;-1:-1:-1;8663:50:35::1;::::0;-1:-1:-1;8687:4:35;8693:10;8705:7;8663:23:::1;:50::i;:::-;-1:-1:-1::0;;;;;8750:21:35;;::::1;8720:27;8750:21:::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;8793:23;;;;;:94:::1;;;8871:16;;8820:48;8836:19;8857:10;8820:15;:48::i;:::-;:67;8793:94;8789:132;;;8896:25;;-1:-1:-1::0;;;8896:25:35::1;;;;;;;;;;;8789:132;8949:10;-1:-1:-1::0;;;;;8933:36:35::1;8943:4;-1:-1:-1::0;;;;;8933:36:35::1;;8961:7;8933:36;;;;9342:25:84::0;;9330:2;9315:18;;9196:177;8933:36:35::1;;;;;;;;8537:437;8401:573:::0;;;;:::o;2556:364:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2647:27:31;::::1;2643:53;;2683:13;;-1:-1:-1::0;;;2683:13:31::1;;;;;;;;;;;2643:53;2702:12;:28:::0;;-1:-1:-1;;;;;2702:28:31;;::::1;-1:-1:-1::0;;;;;;2702:28:31;;::::1;::::0;::::1;::::0;;;:12:::1;2736:28:::0;;;:14:::1;:28;::::0;;;;;;:43;;;;::::1;::::0;;::::1;::::0;;;2830:12:::1;::::0;2816:55;;-1:-1:-1;;;2816:55:31;;2830:12;::::1;::::0;2816:40:::1;::::0;:55:::1;::::0;2717:13;;2816:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2785:28:31;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;:86;;-1:-1:-1;;2785:86:31::1;::::0;::::1;;::::0;;;::::1;::::0;;;2882:33;::::1;::::0;::::1;::::0;2785:28;;2882:33:::1;:::i;:::-;;;;;;;;2556:364:::0;:::o;4668:1632:35:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;4819:24:35;4827:15;4819:7;:24::i;:::-;-1:-1:-1;;;;;4791:17:35;;;;;;:5;:17;;;;;:24;;;:52;4787:1509;;;-1:-1:-1;;;;;;4924:17:35;;;;;:5;:17;;;;;;;;;4911:30;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4911:30:35;;;;;;;;;;;;;;;;;;;;;;;;;;;4668:1632::o;4787:1509::-;4962:12;4982:18;5003:43;5029:16;;5011:15;:34;;;;:::i;5003:43::-;-1:-1:-1;;;;;5059:17:35;;;;;;:5;:17;;;;;:24;;;4982:64;;-1:-1:-1;5059:38:35;;5055:1103;;;5220:15;;;5233:1;5220:15;;;;;;;;;5190:27;;5220:15;;;;;;;;;-1:-1:-1;;;;;;;;5266:17:35;;5245:18;5266:17;;;:5;:17;;;;;:25;5190:45;;-1:-1:-1;5266:25:35;;5344:24;5352:15;5344:7;:24::i;:::-;5326:42;;:15;:42;:::i;:::-;5302:11;5314:1;5302:14;;;;;;;;:::i;:::-;:67;;;;:14;;;;;;;;;;:67;5428:12;;-1:-1:-1;;;;;5450:26:35;;;5428:12;5450:26;;;:14;:26;;;;;;;;;5414:76;;-1:-1:-1;;;5414:76:35;;5428:12;;;;5414:35;;:76;;5450:26;;;;;5478:11;;5414:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5380:110;;;;;;;;;;;;-1:-1:-1;5525:33:35;;5546:12;;-1:-1:-1;5525:33:35;:::i;:::-;5501:57;;;;;;:21;;;:57;-1:-1:-1;5055:1103:35;;-1:-1:-1;5055:1103:35;;-1:-1:-1;;;;;5577:17:35;;;;;;:5;:17;;;;;:24;;;:37;-1:-1:-1;5573:585:35;;;5719:15;;;5732:1;5719:15;;;;;;;;5689:27;;5719:15;;;;;;;;;;-1:-1:-1;5719:15:35;5689:45;;5787:24;5795:15;5787:7;:24::i;:::-;5769:42;;:15;:42;:::i;:::-;5745:11;5757:1;5745:14;;;;;;;;:::i;:::-;;;;;;:67;;;;;;;;;;;5891:16;;5864:24;5872:15;5864:7;:24::i;:::-;5846:42;;:15;:42;:::i;:::-;:61;;;;:::i;:::-;5822:11;5834:1;5822:14;;;;;;;;:::i;:::-;:86;;;;:14;;;;;;;;;;:86;6015:12;;-1:-1:-1;;;;;6037:26:35;;;5919:22;6037:26;;;:14;:26;;;;;;;;6001:76;;-1:-1:-1;;;6001:76:35;;6015:12;;;;6001:35;;:76;;6037:26;;6065:11;;6001:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5951:126;;;;;;;;;;;;-1:-1:-1;5951:126:35;-1:-1:-1;6112:37:35;;5951:126;;6112:37;:::i;:::-;6088:61;;;;;;:21;;;:61;-1:-1:-1;;5573:585:35;6169:7;6165:125;;;6208:24;6216:15;6208:7;:24::i;:::-;6188:17;;;:44;6165:125;;;6257:24;6264:17;;;6257:24;6165:125;4954:1342;;4787:1509;4668:1632;;;:::o;1422:96:61:-;1474:4;1493:20;:5;1508:4;1493:14;:20::i;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;754:10:::1;:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;873:140:61:-;-1:-1:-1;;;;;978:21:61;;;;;;:15;:21;;;;;940:22;;978:30;;:28;:30::i;7478:873:35:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;;;;;;;;;1680:1;2389:7;:18;7614:41:35::1;:20;7644:10:::0;7614:29:::1;:41::i;:::-;7609:80;;7664:25;;-1:-1:-1::0;;;7664:25:35::1;;;;;;;;;;;7609:80;7700:20;:5;7715:4:::0;7700:14:::1;:20::i;:::-;7695:50;;7729:16;;-1:-1:-1::0;;;7729:16:35::1;;;;;;;;;;;7695:50;-1:-1:-1::0;;;;;7752:21:35;::::1;;::::0;;;:15:::1;:21;::::0;;;;:37:::1;::::0;7778:10;7752:25:::1;:37::i;:::-;;7796:27;7818:4;7796:21;:27::i;:::-;7909:16;::::0;-1:-1:-1;;;;;7850:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;7834:72:::1;::::0;7850:43:::1;::::0;7886:7;;7850:43:::1;:::i;:::-;7895:10;7834:15;:72::i;:::-;:91;7830:129;;;7934:25;;-1:-1:-1::0;;;7934:25:35::1;;;;;;;;;;;7830:129;-1:-1:-1::0;;;;;7971:99:35;::::1;8000:16;::::0;;;:10:::1;:16;::::0;;;;;;;;8018:20:::1;:26:::0;;;;;;8046:17:::1;:23:::0;;;;;;;7971:99;;10168:25:84;;;10209:18;;;10202:34;;;;10252:18;;10245:34;7971:99:35::1;::::0;10156:2:84;10141:18;7971:99:35::1;;;;;;;8077:71;-1:-1:-1::0;;;;;8077:35:35;::::1;8113:10;8133:4;8140:7:::0;8077:35:::1;:71::i;:::-;-1:-1:-1::0;;;;;8154:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:44;;8191:7;;8154:21;:44:::1;::::0;8191:7;;8154:44:::1;:::i;:::-;::::0;;;-1:-1:-1;8231:48:35::1;::::0;-1:-1:-1;8242:36:35::1;8258:7:::0;8267:10;8242:15:::1;:36::i;8231:48::-;-1:-1:-1::0;;;;;8204:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;:75;;:23;;;:75:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;8290:56:35::1;::::0;9342:25:84;;;8326:10:35::1;::::0;-1:-1:-1;;;;;8290:56:35;;::::1;::::0;;;::::1;::::0;::::1;::::0;9330:2:84;9315:18;8290:56:35::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;7478:873:35:o;973:834:34:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;1108:20:34::1;:5;1123:4:::0;1108:14:::1;:20::i;:::-;1103:50;;1137:16;;-1:-1:-1::0;;;1137:16:34::1;;;;;;;;;;;1103:50;1229:8;::::0;-1:-1:-1;;;;;1219:18:34;;::::1;1229:8:::0;::::1;1219:18;1215:47;;;1246:16;;-1:-1:-1::0;;;1246:16:34::1;;;;;;;;;;;1215:47;1286:39;::::0;-1:-1:-1;;;1286:39:34;;1268:15:::1;::::0;-1:-1:-1;;;;;1286:24:34;::::1;::::0;::::1;::::0;:39:::1;::::0;1319:4:::1;::::0;1286:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1268:57:::0;-1:-1:-1;1331:67:34::1;-1:-1:-1::0;;;;;1331:31:34;::::1;1363:10;1383:4;1390:7:::0;1331:31:::1;:67::i;:::-;1404:17;1466:7;1431:6;-1:-1:-1::0;;;;;1424:24:34::1;;1457:4;1424:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;;:::i;:::-;1404:69;;1479:17;1238:6:31;1512:3:34;;1500:9;:15;;;;:::i;:::-;1499:25;;;;:::i;:::-;1479:45:::0;-1:-1:-1;1563:21:34::1;1479:45:::0;1563:9;:21:::1;:::i;:::-;-1:-1:-1::0;;;;;1530:21:34;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;;:54;;:29;;:21;:54:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;1590:28:34;;::::1;;::::0;;;:22:::1;:28;::::0;;;;;;;:36;;::::1;::::0;;;;;;;;1629:15:::1;1590:54:::0;;1678:10:::1;::::0;1650:50:::1;::::0;1678:10:::1;1690:9:::0;1650:27:::1;:50::i;:::-;-1:-1:-1::0;;;;;1706:16:34;::::1;;::::0;;;:10:::1;:16;::::0;;;;:28:::1;::::0;1727:6;1706:20:::1;:28::i;:::-;;1780:10;-1:-1:-1::0;;;;;1746:56:34::1;1772:6;-1:-1:-1::0;;;;;1746:56:34::1;1766:4;-1:-1:-1::0;;;;;1746:56:34::1;;1792:9;1746:56;;;;9342:25:84::0;;9330:2;9315:18;;9196:177;1746:56:34::1;;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;;;973:834:34:o;423:204:38:-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;527:21:38;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;-1:-1:-1;;;;;;527:33:38::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;596:14:38;;;;;;;571:51;;527:33;;596:14:::1;::::0;527:21;571:51:::1;::::0;::::1;423:204:::0;;;:::o;669:279::-;-1:-1:-1;;;;;1132:21:38;;;;;;;:15;:21;;;;;;;;;1118:10;:35;1114:69;;1162:21;;-1:-1:-1;;;1162:21:38;;;;;;;;;;;1114:69;-1:-1:-1;;;;;786:14:38;;::::1;761:22;786:14:::0;;;:8:::1;:14;::::0;;;;;;;;;824:15:::1;:21:::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;;807:38:38;;::::1;::::0;;;::::1;::::0;;;851:28;;;;::::1;::::0;;891:52;786:14;::::1;::::0;;;;910:10:::1;::::0;891:52:::1;::::0;761:22;891:52:::1;755:193;669:279:::0;;:::o;7219:209:35:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;7308:39:35::1;:20;7336:10:::0;7308:27:::1;:39::i;:::-;7303:78;;7356:25;;-1:-1:-1::0;;;7356:25:35::1;;;;;;;;;;;7303:78;7392:31;7412:10;7392:31;;;;;;:::i;533:194:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;4195:110:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4264:3:31::1;:10:::0;;;4285:15:::1;::::0;9342:25:84;;;4285:15:31::1;::::0;9330:2:84;9315:18;4285:15:31::1;9196:177:84::0;1587:691:35;1657:22;1692:9;1687:587;-1:-1:-1;;;;;1707:21:35;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;1703:1;:34;1687:587;;;-1:-1:-1;;;;;1773:21:35;;1752:18;1773:21;;;:15;:21;;;;;:27;;1798:1;1773:24;:27::i;:::-;1752:48;-1:-1:-1;1812:41:35;:20;1752:48;1812:29;:41::i;:::-;1808:460;;;1865:27;1895:28;1912:10;1895:16;:28::i;:::-;1865:58;;1937:10;:17;;;1958:1;1937:22;1933:327;;-1:-1:-1;;;;;1997:25:35;;1973:21;1997:25;;;:13;:25;;;;;;;;:74;;2050:10;:21;;;2049:22;;;:::i;:::-;1997:74;;;2025:10;:21;;;1997:74;2139:12;;-1:-1:-1;;;;;2168:21:35;;;2139:12;2168:21;;;:15;:21;;;;;;;;:33;;;;;;;;;;;;;2220:16;;2125:112;;-1:-1:-1;;;2125:112:35;;1973:98;;-1:-1:-1;2101:148:35;;2139:12;;;;;2125:42;;:112;;1973:98;;2125:112;;;:::i;2101:148::-;2083:166;;;;:::i;:::-;;;1961:299;1933:327;1855:413;1808:460;-1:-1:-1;1739:3:35;;;;:::i;:::-;;;;1687:587;;;;1587:691;;;:::o;1788:223:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1879:27:31;::::1;1875:53;;1915:13;;-1:-1:-1::0;;;1915:13:31::1;;;;;;;;;;;1875:53;1934:12;:28:::0;;-1:-1:-1;;;;;;1934:28:31::1;-1:-1:-1::0;;;;;1934:28:31;::::1;;::::0;;1973:33:::1;::::0;::::1;::::0;::::1;::::0;1934:28;;1973:33:::1;:::i;2385:105:29:-:0;2433:22;2471:14;:5;:12;:14::i;2328:828:35:-;2401:25;2434:22;2459;2476:4;2459:16;:22::i;:::-;2588:16;;-1:-1:-1;;;;;2568:16:35;;;;;;:10;:16;;;;;;2434:47;;-1:-1:-1;2588:16:35;2550:34;;:15;:34;:::i;:::-;2549:55;2545:607;;;2729:1;2712:14;:18;:220;;-1:-1:-1;;;;;2906:26:35;;;;;;:20;:26;;;;;;2712:220;;;-1:-1:-1;;;;;2789:23:35;;;;;;:17;:23;;;;;;;;;2742:20;:26;;;;;;;:43;;2771:14;;2742:43;:::i;:::-;2741:71;;;;:::i;:::-;2692:240;;2545:607;;3140:152:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3223:10:31::1;:24:::0;;;3258:29:::1;::::0;9342:25:84;;;3258:29:31::1;::::0;9315:18:84;3258:29:31::1;9196:177:84::0;666:319:37;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;783:6:37::1;-1:-1:-1::0;;;;;771:18:37::1;:8;-1:-1:-1::0;;;;;771:18:37::1;;767:55;;;798:24;;-1:-1:-1::0;;;798:24:37::1;;;;;;;;;;;767:55;-1:-1:-1::0;;;;;829:30:37;;::::1;;::::0;;;:20:::1;:30;::::0;;;;;;;:39;;-1:-1:-1;;;;;;829:39:37::1;::::0;;::::1;::::0;;::::1;::::0;;874:19:::1;:29:::0;;;;;:37;;;;;;;;;914:15:::1;874:55:::0;;941:39;;::::1;::::0;::::1;::::0;829;;941::::1;:::i;:::-;;;;;;;;666:319:::0;;;:::o;2531:111:29:-;2582:22;2620:17;:8;:15;:17::i;999:203:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;9024:681:35:-:0;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;9174:23:35;::::1;9170:49;;9206:13;;-1:-1:-1::0;;;9206:13:35::1;;;;;;;;;;;9170:49;-1:-1:-1::0;;;;;9229:20:35;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;;;;;;9225:69:::1;;9275:19;;-1:-1:-1::0;;;9275:19:35::1;;;;;;;;;;;9225:69;-1:-1:-1::0;;;;;9304:22:35;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;:34;;::::1;::::0;;;;;;;9342:15:::1;-1:-1:-1::0;9300:81:35::1;;9366:15;;-1:-1:-1::0;;;9366:15:35::1;;;;;;;;;;;9300:81;-1:-1:-1::0;;;;;9391:14:35;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;9387:37;;;9414:10;;-1:-1:-1::0;;;9414:10:35::1;;;;;;;;;;;9387:37;-1:-1:-1::0;;;;;9449:20:35;;::::1;9431:15;9449:20:::0;;;:14:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;;;;;;;;;;9488:39;;;;9540:22;;;:16:::1;:22:::0;;;;;:34;;;;;;;;9533:41;9449:32;9581:51:::1;::::0;9613:9;9449:32;9581:31:::1;:51::i;:::-;9681:9;-1:-1:-1::0;;;;;9643:57:35::1;9669:10;-1:-1:-1::0;;;;;9643:57:35::1;9663:4;-1:-1:-1::0;;;;;9643:57:35::1;;9692:7;9643:57;;;;9342:25:84::0;;9330:2;9315:18;;9196:177;9643:57:35::1;;;;;;;;9164:541;9024:681:::0;;;;:::o;762:202:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;1027:1856:37:-:0;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;1138:18:37;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;::::0;:38:::1;;-1:-1:-1::0;;;;;;1160:16:37;::::1;;::::0;;;:8:::1;:16;::::0;;;;;::::1;;1138:38;1134:64;;;1185:13;;-1:-1:-1::0;;;1185:13:37::1;;;;;;;;;;;1134:64;-1:-1:-1::0;;;;;1208:30:37;;::::1;;::::0;;;:20:::1;:30;::::0;;;;;;::::1;:40:::0;;::::1;;1204:78;;1257:25;;-1:-1:-1::0;;;1257:25:37::1;;;;;;;;;;;1204:78;-1:-1:-1::0;;;;;1310:29:37;;::::1;;::::0;;;:19:::1;:29;::::0;;;;;;;:37;;::::1;::::0;;;;;;;:59:::1;::::0;427:9:::1;::::0;1310:59:::1;:::i;:::-;1292:15;:77;1288:110;;;1378:20;;-1:-1:-1::0;;;1378:20:37::1;;;;;;;;;;;1288:110;1451:31;1473:8;1451:21;:31::i;:::-;1488:29;1510:6;1488:21;:29::i;:::-;-1:-1:-1::0;;;;;1553:20:37;::::1;1585:1;1553:20:::0;;;:10:::1;:20;::::0;;;;:29:::1;::::0;:27:::1;:29::i;:::-;:33;1546:359;;;-1:-1:-1::0;;;;;1622:20:37;::::1;1596:23;1622:20:::0;;;:10:::1;:20;::::0;;;;:26:::1;::::0;1596:23;1622::::1;:26::i;:::-;-1:-1:-1::0;;;;;1700:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:42;;::::1;::::0;;;;;;;;;;1656:23;;::::1;::::0;;;;;;;;:40;;;;;;;;:86;;1596:52;;-1:-1:-1;1700:42:37;;1656:86:::1;::::0;1700:42;;1656:86:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;1757:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:42;;::::1;::::0;;;;;;;;1750:49;;;1807:20;;;:10:::1;:20:::0;;;;:44:::1;::::0;1783:15;1807:27:::1;:44::i;:::-;-1:-1:-1::0;;;;;;1859:18:37;::::1;;::::0;;;:10:::1;:18;::::0;;;;:39:::1;::::0;1882:15;1859:22:::1;:39::i;:::-;;1588:317;1546:359;;;-1:-1:-1::0;;;;;1945:25:37;::::1;1982:1;1945:25:::0;;;:15:::1;:25;::::0;;;;:34:::1;::::0;:32:::1;:34::i;:::-;:38;1938:351;;;-1:-1:-1::0;;;;;2014:25:37;::::1;1993:18;2014:25:::0;;;:15:::1;:25;::::0;;;;:31:::1;::::0;1993:18;2014:28:::1;:31::i;:::-;-1:-1:-1::0;;;;;2093:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:37;;::::1;::::0;;;;;;;;;;2054:23;;::::1;::::0;;;;;;;;:35;;;;;;;;:76;;1993:52;;-1:-1:-1;2093:37:37;;2054:76:::1;::::0;2093:37;;2054:76:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2145:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:37;;::::1;::::0;;;;;;;2138:44;;;2191:23;;::::1;::::0;;:15:::1;:23:::0;;;:39:::1;::::0;2171:10;2191:27:::1;:39::i;:::-;-1:-1:-1::0;;;;;;2238:25:37;::::1;;::::0;;;:15:::1;:25;::::0;;;;:44:::1;::::0;2271:10;2238:32:::1;:44::i;:::-;;1985:304;1938:351;;;-1:-1:-1::0;;;;;2352:27:37;;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;2323:25;;::::1;::::0;;;;:56;;:25;;2352:27;2323:56:::1;::::0;2352:27;;2323:56:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2392:27:37;;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;;2385:34;;;2458:20:::1;:30:::0;;;;;;;2426:28;;::::1;::::0;;;;:62;;:28;;2392:27;2426:62:::1;::::0;2458:30;;2426:62:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2501:30:37;::::1;;::::0;;;:20:::1;:30;::::0;;;;;;;2494:37;;;2583:10:::1;:20:::0;;;;;2576:27;2609:22:::1;:5;2522:8:::0;2609:12:::1;:22::i;:::-;-1:-1:-1::0;;;;;;2677:18:37;;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;;2670:25;;-1:-1:-1;;;;;;2670:25:37;;::::1;::::0;;;2708:15:::1;:25:::0;;;;;2701:32;;;::::1;::::0;;2746:19:::1;:29:::0;;;;;:37;;::::1;::::0;;;;;;;;;2739:44;;;2796:30;;;:20:::1;:30:::0;;;;;;;2789:37;;;;::::1;::::0;;;2838:40;::::1;::::0;::::1;::::0;2686:8;;2838:40:::1;:::i;3973:182:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4066:15:31::1;:34:::0;;;4111:39:::1;::::0;9342:25:84;;;4111:39:31::1;::::0;9330:2:84;9315:18;4111:39:31::1;9196:177:84::0;6736:433:35;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;6834:36:35::1;:20;6859:10:::0;6834:24:::1;:36::i;:::-;6829:73;;6879:23;;-1:-1:-1::0;;;6879:23:35::1;;;;;;;;;;;6829:73;6950:10;-1:-1:-1::0;;;;;6937:29:35::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6908:26:35;;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;:60;;-1:-1:-1;;;;;;6908:60:35::1;::::0;;::::1;::::0;;::::1;::::0;;7016:12:::1;::::0;7002:68;;-1:-1:-1;;;7002:68:35;;7016:12;::::1;::::0;7002:40:::1;::::0;:68:::1;::::0;6908:60;7002:68:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6974:25:35;::::1;;::::0;;;:13:::1;:25;::::0;;;;:96;;-1:-1:-1;;6974:96:35::1;::::0;::::1;;::::0;;;::::1;::::0;;7096:28:::1;6974:25:::0;7096:16:::1;:28::i;:::-;-1:-1:-1::0;;;;;7076:17:35;::::1;;::::0;;;:5:::1;:17;::::0;;;;;;;;:48;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;;7076:48:35::1;-1:-1:-1::0;;;;;;7076:48:35;;;;;;::::1;;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;7135:29;::::1;::::0;::::1;::::0;7082:10;;7135:29:::1;:::i;2960:140:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3039:8:31::1;:20:::0;;;3070:25:::1;::::0;9342::84;;;3070::31::1;::::0;9330:2:84;9315:18;3070:25:31::1;9196:177:84::0;628:116:61;-1:-1:-1;;;;;702:21:61;;;;;;:15;:21;;;;;:37;;728:10;702:25;:37::i;:::-;;628:116;;:::o;2286:230:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2379:28:31;::::1;2375:54;;2416:13;;-1:-1:-1::0;;;2416:13:31::1;;;;;;;;;;;2375:54;2435:13;:30:::0;;-1:-1:-1;;;;;;2435:30:31::1;-1:-1:-1::0;;;;;2435:30:31;::::1;;::::0;;2476:35:::1;::::0;::::1;::::0;::::1;::::0;2435:30;;2476:35:::1;:::i;3666:267::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1341:6:31::1;3765:17;:43;3761:73;;;3817:17;;-1:-1:-1::0;;;3817:17:31::1;;;;;;;;;;;3761:73;3840:16;:36:::0;;;3887:41:::1;::::0;9342:25:84;;;3887:41:31::1;::::0;9330:2:84;9315:18;3887:41:31::1;9196:177:84::0;1855:695:34;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;-1:-1:-1;;;;;1012:14:38;;::::1;::::0;;:8:::1;:14;::::0;;;;;;;;::::1;998:10;:28;994:55;;1035:14;;-1:-1:-1::0;;;1035:14:38::1;;;;;;;;;;;994:55;-1:-1:-1::0;;;;;2057:28:34;;::::2;;::::0;;;:22:::2;:28;::::0;;;;;;;:36;;::::2;::::0;;;;;;;:64:::2;::::0;780:9:::2;::::0;2057:64:::2;:::i;:::-;2038:15;:83;2034:119;;2130:23;;-1:-1:-1::0;;;2130:23:34::2;;;;;;;;;;;2034:119;-1:-1:-1::0;;;;;2163:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;:39;-1:-1:-1;2159:81:34::2;;;2211:29;;-1:-1:-1::0;;;2211:29:34::2;;;;;;;;;;;2159:81;-1:-1:-1::0;;;;;2250:14:34;::::2;;::::0;;;:8:::2;:14;::::0;;;;;::::2;;2246:40;;;2273:13;;-1:-1:-1::0;;;2273:13:34::2;;;;;;;;;;;2246:40;-1:-1:-1::0;;;;;2293:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;;:40;;2326:7;;2293:21;:40:::2;::::0;2326:7;;2293:40:::2;:::i;:::-;::::0;;;-1:-1:-1;2339:47:34::2;::::0;-1:-1:-1;;;;;;2339:27:34;::::2;2367:9:::0;2378:7;2339:27:::2;:47::i;:::-;-1:-1:-1::0;;;;;2397:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;2393:86:::2;;-1:-1:-1::0;;;;;2441:16:34;::::2;;::::0;;;:10:::2;:16;::::0;;;;:31:::2;::::0;2465:6;2441:23:::2;:31::i;:::-;;2393:86;2526:9;-1:-1:-1::0;;;;;2490:55:34::2;2518:6;-1:-1:-1::0;;;;;2490:55:34::2;2512:4;-1:-1:-1::0;;;;;2490:55:34::2;;2537:7;2490:55;;;;9342:25:84::0;;9330:2;9315:18;;9196:177;2490:55:34::2;;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;;1855:695:34:o;525:99:61:-;-1:-1:-1;;;;;591:16:61;;;;;;:10;:16;;;;;:28;;612:6;591:20;:28::i;3332:188:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3427:16:31::1;:36:::0;;;3474:41:::1;::::0;9342:25:84;;;3474:41:31::1;::::0;9330:2:84;9315:18;3474:41:31::1;9196:177:84::0;2051:195:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2134:23:31;::::1;2130:49;;2166:13;;-1:-1:-1::0;;;2166:13:31::1;;;;;;;;;;;2130:49;2185:8;:20:::0;;-1:-1:-1;;;;;;2185:20:31::1;-1:-1:-1::0;;;;;2185:20:31;::::1;;::::0;;2216:25:::1;::::0;::::1;::::0;::::1;::::0;2185:20;;2216:25:::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;748:121:61:-:0;-1:-1:-1;;;;;839:16:61;;817:7;839:16;;;:10;:16;;;;;:25;;:23;:25::i;6364:322:35:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;6475:20:35::1;:5;6490:4:::0;6475:14:::1;:20::i;:::-;6470:50;;6504:16;;-1:-1:-1::0;;;6504:16:35::1;;;;;;;;;;;6470:50;6526:27;6548:4;6526:21;:27::i;:::-;-1:-1:-1::0;;;;;6559:26:35;::::1;;::::0;;;:20:::1;:26;::::0;;;;:37;;6589:7;;6559:26;:37:::1;::::0;6589:7;;6559:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;6607:74:35;::::1;6636:16;::::0;;;:10:::1;:16;::::0;;;;;;;;6654:20:::1;:26:::0;;;;;;;;6607:74;;::::1;::::0;::::1;::::0;9887:25:84;;9943:2;9928:18;;9921:34;9875:2;9860:18;;9713:248;6607:74:35::1;;;;;;;;6364:322:::0;;:::o;14272:148::-;14332:24;14398:16;;14385:10;:29;;;;:::i;:::-;14371:44;;:10;:44;:::i;13953:243::-;14034:15;14075:16;;14061:11;:30;14057:134;;;14141:16;;14112:25;14126:11;14112;:25;:::i;:::-;14111:46;;;;:::i;:::-;14101:56;;14057:134;;9499:257:8;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;:::-;9590:44;9499:257;-1:-1:-1;;;9499:257:8:o;8100:165::-;-1:-1:-1;;;;;8233:23:8;;8180:4;3767:19;;;:12;;;:19;;;;;;:24;;8203:55;3671:127;14499:163:35;14563:16;14594:63;14610:11;14623:16;;14641:15;;14594;:63::i;12794:1028::-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;-1:-1:-1;;;;;12927:21:35;::::1;::::0;;:15:::1;:21;::::0;;;;:42:::1;::::0;12958:10;12927:30:::1;:42::i;:::-;12922:80;;12978:24;;-1:-1:-1::0;;;12978:24:35::1;;;;;;;;;;;12922:80;-1:-1:-1::0;;;;;13012:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;:43;-1:-1:-1;13008:82:35::1;;;13064:26;;-1:-1:-1::0;;;13064:26:35::1;;;;;;;;;;;13008:82;13145:22;13162:4;13145:16;:22::i;:::-;13173:30;13206:48;13217:36;13233:7;13242:10;13217:15;:36::i;13206:48::-;-1:-1:-1::0;;;;;13337:23:35;::::1;13363:1;13337:23:::0;;;:17:::1;:23;::::0;;;;;13173:81;;-1:-1:-1;13337:27:35;13333:330:::1;;-1:-1:-1::0;;;;;13576:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;;13521:20:::1;:26:::0;;;;;;;:51:::1;::::0;13550:22;;13521:51:::1;:::i;:::-;13520:79;;;;:::i;:::-;-1:-1:-1::0;;;;;13490:26:35;::::1;;::::0;;;:20:::1;:26;::::0;;;;:109;;:26;;;:109:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;13607:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;:49;;13634:22;;13607:23;:49:::1;::::0;13634:22;;13607:49:::1;:::i;:::-;::::0;;;-1:-1:-1;;13333:330:35::1;-1:-1:-1::0;;;;;13669:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:44;;13706:7;;13669:21;:44:::1;::::0;13706:7;;13669:44:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;13723:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;13719:99:::1;;-1:-1:-1::0;;;;;13771:21:35;::::1;;::::0;;;:15:::1;:21;::::0;;;;:40:::1;::::0;13800:10;13771:28:::1;:40::i;:::-;;13719:99;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;12794:1028:35:o;14740:384::-;-1:-1:-1;;;;;14859:17:35;;14833:14;14859:17;;;:5;:17;;;;;:24;;;:29;14855:265;;-1:-1:-1;;;;;14922:25:35;;14898:21;14922:25;;;:13;:25;;;;;;;;:88;;-1:-1:-1;;;;;14982:17:35;;;;;;:5;:17;;;;;:28;14981:29;;-1:-1:-1;;;14982:28:35;;;;14981:29;:::i;:::-;14922:88;;;-1:-1:-1;;;;;14950:17:35;;;;;;:5;:17;;;;;:28;-1:-1:-1;;;14950:28:35;;;;14922:88;15041:12;;15096:16;;15027:86;;-1:-1:-1;;;15027:86:35;;14898:112;;-1:-1:-1;;;;;;15041:12:35;;;;15027:42;;:86;;15070:7;;14898:112;;15027:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7545:150:8:-;7615:4;7638:50;7643:3;-1:-1:-1;;;;;7663:23:8;;7638:4;:50::i;1522:111:61:-;-1:-1:-1;;;;;1591:35:61;;;;;;:29;:35;;;;;:37;;;;;;:::i;:::-;;;;;;1522:111;:::o;845:241:4:-;1010:68;;-1:-1:-1;;;;;4866:15:84;;;1010:68:4;;;4848:34:84;4918:15;;4898:18;;;4891:43;4950:18;;;4943:34;;;983:96:4;;1003:5;;-1:-1:-1;;;1033:27:4;4783:18:84;;1010:68:4;;;;-1:-1:-1;;1010:68:4;;;;;;;;;;;;;;-1:-1:-1;;;;;1010:68:4;-1:-1:-1;;;;;;1010:68:4;;;;;;;;;;983:19;:96::i;:::-;845:241;;;;:::o;634:205::-;773:58;;-1:-1:-1;;;;;5929:32:84;;773:58:4;;;5911:51:84;5978:18;;;5971:34;;;746:86:4;;766:5;;-1:-1:-1;;;796:23:4;5884:18:84;;773:58:4;5737:274:84;7863:156:8;7936:4;7959:53;7967:3;-1:-1:-1;;;;;7987:23:8;;7959:7;:53::i;8346:115::-;8409:7;8435:19;8443:3;3961:18;;3879:107;8803:156;8877:7;8927:22;8931:3;8943:5;8927:3;:22::i;4986:109::-;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;735:3600:23:-;833:14;;;-1:-1:-1;;1336:1:23;1333;1326:20;1371:1;1368;1364:9;1355:18;;1418:5;1414:2;1411:13;1403:5;1399:2;1395:14;1391:34;1382:43;;;1501:5;1510:1;1501:10;1497:155;;;1545:1;1531:11;:15;1523:24;;;;;;-1:-1:-1;1588:23:23;;;;-1:-1:-1;1630:13:23;;1497:155;1773:5;1759:11;:19;1751:28;;;;;;2044:17;2114:11;2111:1;2108;2101:25;3338:1;3319;2473;2458:12;;:16;;2457:32;;2575:22;;;;3319:15;;;3318:21;;3557:17;;;3553:21;;3546:28;3613:17;;;3609:21;;3602:28;3670:17;;;3666:21;;3659:28;3727:17;;;3723:21;;3716:28;3784:17;;;3780:21;;3773:28;3842:17;;;3838:21;;;3831:28;2442:12;2923;;;2919:23;;;2915:31;;;2233:20;;;2222:32;;;2970:12;;;;2272:21;;2693:16;;;;2961:21;;;;4292:11;;735:3600;-1:-1:-1;;;;735:3600:23:o;11656:118:35:-;11737:32;11764:4;11737:26;:32::i;:::-;-1:-1:-1;;;;;11711:23:35;;;;;;;:17;:23;;;;;:58;11656:118::o;1630:404:8:-;1693:4;3767:19;;;:12;;;:19;;;;;;1709:319;;-1:-1:-1;1751:23:8;;;;;;;;:11;:23;;;;;;;;;;;;;1931:18;;1909:19;;;:12;;;:19;;;;;;:40;;;;1963:11;;1709:319;-1:-1:-1;2012:5:8;2005:12;;3140:706:4;3559:23;3585:69;3613:4;3585:69;;;;;;;;;;;;;;;;;3593:5;-1:-1:-1;;;;;3585:27:4;;;:69;;;;;:::i;:::-;3668:17;;3559:95;;-1:-1:-1;3668:21:4;3664:176;;3763:10;3752:30;;;;;;;;;;;;:::i;:::-;3744:85;;;;-1:-1:-1;;;3744:85:4;;8226:2:84;3744:85:4;;;8208:21:84;8265:2;8245:18;;;8238:30;8304:34;8284:18;;;8277:62;-1:-1:-1;;;8355:18:84;;;8348:40;8405:19;;3744:85:4;8024:406:84;2202:1388:8;2268:4;2405:19;;;:12;;;:19;;;;;;2439:15;;2435:1149;;2808:21;2832:14;2845:1;2832:10;:14;:::i;:::-;2880:18;;2808:38;;-1:-1:-1;2860:17:8;;2880:22;;2901:1;;2880:22;:::i;:::-;2860:42;;2934:13;2921:9;:26;2917:398;;2967:17;2987:3;:11;;2999:9;2987:22;;;;;;;;:::i;:::-;;;;;;;;;2967:42;;3138:9;3109:3;:11;;3121:13;3109:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3221:23;;;:12;;;:23;;;;;:36;;;2917:398;3393:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3485:3;:12;;:19;3498:5;3485:19;;;;;;;;;;;3478:26;;;3526:4;3519:11;;;;;;;2435:1149;3568:5;3561:12;;;;;4328:118;4395:7;4421:3;:11;;4433:5;4421:18;;;;;;;;:::i;:::-;;;;;;;;;4414:25;;4328:118;;;;:::o;11943:753:35:-;12011:22;12075:24;12083:15;12075:7;:24::i;:::-;12051:12;;-1:-1:-1;;;;;12051:12:35;12045:19;;;;:5;:19;;;;;12051:12;12045:26;;:54;12041:170;;12191:12;;12174:30;;-1:-1:-1;;;;;12191:12:35;12174:16;:30::i;:::-;12158:12;;-1:-1:-1;;;;;12158:12:35;12152:19;;;;:5;:19;;;;;;;;;:52;;;;;;;;;;;;;;;;-1:-1:-1;;;12152:52:35;-1:-1:-1;;;;;;12152:52:35;;;;;;;;;;;;;;;;;;12158:12;12152:52;;;;;12041:170;12222:9;12217:475;-1:-1:-1;;;;;12237:21:35;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;12233:1;:34;12217:475;;;-1:-1:-1;;;;;12303:21:35;;12282:18;12303:21;;;:15;:21;;;;;:27;;12328:1;12303:24;:27::i;:::-;12282:48;-1:-1:-1;12342:41:35;:20;12282:48;12342:29;:41::i;:::-;12338:348;;;12427:24;12435:15;12427:7;:24::i;:::-;-1:-1:-1;;;;;12399:17:35;;;;;;:5;:17;;;;;:24;;;:52;12395:181;;12537:28;12554:10;12537:16;:28::i;:::-;-1:-1:-1;;;;;12517:17:35;;;;;;:5;:17;;;;;;;;;:48;;;;;;;;;;;;;;;;-1:-1:-1;;;12517:48:35;-1:-1:-1;;;;;;12517:48:35;;;;;;;;;;;;;;;;;;;;;;;12395:181;-1:-1:-1;;;;;12630:21:35;;;;;;;:15;:21;;;;;;;;:33;;;;;;;;;;12603:74;;12614:62;;12652:10;12614:15;:62::i;12603:74::-;12585:92;;;;:::i;:::-;;;12338:348;-1:-1:-1;12269:3:35;;;;:::i;:::-;;;;12217:475;;3461:223:5;3594:12;3625:52;3647:6;3655:4;3661:1;3664:12;3594;1034:20;;4828:60;;;;-1:-1:-1;;;4828:60:5;;7868:2:84;4828:60:5;;;7850:21:84;7907:2;7887:18;;;7880:30;7946:31;7926:18;;;7919:59;7995:18;;4828:60:5;7666:353:84;4828:60:5;4900:12;4914:23;4941:6;-1:-1:-1;;;;;4941:11:5;4960:5;4967:4;4941:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4899:73;;;;4989:51;5006:7;5015:10;5027:12;4989:16;:51::i;:::-;4982:58;4548:499;-1:-1:-1;;;;;;;4548:499:5:o;7161:692::-;7307:12;7335:7;7331:516;;;-1:-1:-1;7365:10:5;7358:17;;7331:516;7476:17;;:21;7472:365;;7670:10;7664:17;7730:15;7717:10;7713:2;7709:19;7702:44;7472:365;7809:12;7802:20;;-1:-1:-1;;;7802:20:5;;;;;;;;:::i;14:164:84:-;90:13;;139;;132:21;122:32;;112:60;;168:1;165;158:12;183:164;260:13;;313:1;302:20;;;292:31;;282:59;;337:1;334;327:12;352:247;411:6;464:2;452:9;443:7;439:23;435:32;432:52;;;480:1;477;470:12;432:52;519:9;506:23;538:31;563:5;538:31;:::i;604:251::-;674:6;727:2;715:9;706:7;702:23;698:32;695:52;;;743:1;740;733:12;695:52;775:9;769:16;794:31;819:5;794:31;:::i;860:388::-;928:6;936;989:2;977:9;968:7;964:23;960:32;957:52;;;1005:1;1002;995:12;957:52;1044:9;1031:23;1063:31;1088:5;1063:31;:::i;:::-;1113:5;-1:-1:-1;1170:2:84;1155:18;;1142:32;1183:33;1142:32;1183:33;:::i;:::-;1235:7;1225:17;;;860:388;;;;;:::o;1253:529::-;1330:6;1338;1346;1399:2;1387:9;1378:7;1374:23;1370:32;1367:52;;;1415:1;1412;1405:12;1367:52;1454:9;1441:23;1473:31;1498:5;1473:31;:::i;:::-;1523:5;-1:-1:-1;1580:2:84;1565:18;;1552:32;1593:33;1552:32;1593:33;:::i;:::-;1645:7;-1:-1:-1;1704:2:84;1689:18;;1676:32;1717:33;1676:32;1717:33;:::i;:::-;1769:7;1759:17;;;1253:529;;;;;:::o;1787:456::-;1864:6;1872;1880;1933:2;1921:9;1912:7;1908:23;1904:32;1901:52;;;1949:1;1946;1939:12;1901:52;1988:9;1975:23;2007:31;2032:5;2007:31;:::i;:::-;2057:5;-1:-1:-1;2114:2:84;2099:18;;2086:32;2127:33;2086:32;2127:33;:::i;:::-;1787:456;;2179:7;;-1:-1:-1;;;2233:2:84;2218:18;;;;2205:32;;1787:456::o;2248:598::-;2334:6;2342;2350;2358;2411:3;2399:9;2390:7;2386:23;2382:33;2379:53;;;2428:1;2425;2418:12;2379:53;2467:9;2454:23;2486:31;2511:5;2486:31;:::i;:::-;2536:5;-1:-1:-1;2593:2:84;2578:18;;2565:32;2606:33;2565:32;2606:33;:::i;:::-;2658:7;-1:-1:-1;2712:2:84;2697:18;;2684:32;;-1:-1:-1;2768:2:84;2753:18;;2740:32;2781:33;2740:32;2781:33;:::i;:::-;2248:598;;;;-1:-1:-1;2248:598:84;;-1:-1:-1;;2248:598:84:o;2851:315::-;2919:6;2927;2980:2;2968:9;2959:7;2955:23;2951:32;2948:52;;;2996:1;2993;2986:12;2948:52;3035:9;3022:23;3054:31;3079:5;3054:31;:::i;:::-;3104:5;3156:2;3141:18;;;;3128:32;;-1:-1:-1;;;2851:315:84:o;3171:202::-;3238:6;3291:2;3279:9;3270:7;3266:23;3262:32;3259:52;;;3307:1;3304;3297:12;3259:52;3330:37;3357:9;3330:37;:::i;3378:364::-;3459:6;3467;3475;3528:2;3516:9;3507:7;3503:23;3499:32;3496:52;;;3544:1;3541;3534:12;3496:52;3567:38;3595:9;3567:38;:::i;:::-;3557:48;;3624:47;3667:2;3656:9;3652:18;3624:47;:::i;:::-;3614:57;;3690:46;3732:2;3721:9;3717:18;3690:46;:::i;:::-;3680:56;;3378:364;;;;;:::o;3747:180::-;3806:6;3859:2;3847:9;3838:7;3834:23;3830:32;3827:52;;;3875:1;3872;3865:12;3827:52;-1:-1:-1;3898:23:84;;3747:180;-1:-1:-1;3747:180:84:o;3932:184::-;4002:6;4055:2;4043:9;4034:7;4030:23;4026:32;4023:52;;;4071:1;4068;4061:12;4023:52;-1:-1:-1;4094:16:84;;3932:184;-1:-1:-1;3932:184:84:o;4121:274::-;4250:3;4288:6;4282:13;4304:53;4350:6;4345:3;4338:4;4330:6;4326:17;4304:53;:::i;:::-;4373:16;;;;;4121:274;-1:-1:-1;;4121:274:84:o;4400:203::-;-1:-1:-1;;;;;4564:32:84;;;;4546:51;;4534:2;4519:18;;4400:203::o;4988:744::-;-1:-1:-1;;;;;5234:32:84;;5216:51;;5204:2;5286;5304:18;;;5297:30;;;5376:13;;5189:18;;;5398:22;;;5156:4;;5477:15;;;;5286:2;5451;5436:18;;;5156:4;5520:186;5534:6;5531:1;5528:13;5520:186;;;5599:13;;5614:10;5595:30;5583:43;;5681:15;;;;5646:12;;;;5556:1;5549:9;5520:186;;;-1:-1:-1;5723:3:84;;4988:744;-1:-1:-1;;;;;;;4988:744:84:o;6016:658::-;6187:2;6239:21;;;6309:13;;6212:18;;;6331:22;;;6158:4;;6187:2;6410:15;;;;6384:2;6369:18;;;6158:4;6453:195;6467:6;6464:1;6461:13;6453:195;;;6532:13;;-1:-1:-1;;;;;6528:39:84;6516:52;;6623:15;;;;6588:12;;;;6564:1;6482:9;6453:195;;;-1:-1:-1;6665:3:84;;6016:658;-1:-1:-1;;;;;;6016:658:84:o;6871:383::-;7020:2;7009:9;7002:21;6983:4;7052:6;7046:13;7095:6;7090:2;7079:9;7075:18;7068:34;7111:66;7170:6;7165:2;7154:9;7150:18;7145:2;7137:6;7133:15;7111:66;:::i;:::-;7238:2;7217:15;-1:-1:-1;;7213:29:84;7198:45;;;;7245:2;7194:54;;6871:383;-1:-1:-1;;6871:383:84:o;8435:355::-;8637:2;8619:21;;;8676:2;8656:18;;;8649:30;8715:33;8710:2;8695:18;;8688:61;8781:2;8766:18;;8435:355::o;9378:330::-;9576:25;;;9648:1;9637:21;;;;9632:2;9617:18;;9610:49;9690:2;9675:18;;9668:34;9564:2;9549:18;;9378:330::o;10290:128::-;10330:3;10361:1;10357:6;10354:1;10351:13;10348:39;;;10367:18;;:::i;:::-;-1:-1:-1;10403:9:84;;10290:128::o;10423:120::-;10463:1;10489;10479:35;;10494:18;;:::i;:::-;-1:-1:-1;10528:9:84;;10423:120::o;10548:168::-;10588:7;10654:1;10650;10646:6;10642:14;10639:1;10636:21;10631:1;10624:9;10617:17;10613:45;10610:71;;;10661:18;;:::i;:::-;-1:-1:-1;10701:9:84;;10548:168::o;10721:359::-;10759:4;10803:1;10800;10789:16;10839:1;10836;10825:16;10869:1;10864:3;10860:11;10935:3;10916:16;10912:21;10908:31;10903:3;10899:41;10894:2;10887:10;10883:58;10880:84;;;10944:18;;:::i;:::-;11015:3;10997:16;10993:26;10988:3;10984:36;10980:2;10976:45;10973:71;;;11024:18;;:::i;:::-;-1:-1:-1;11061:13:84;;;10721:359;-1:-1:-1;;;10721:359:84:o;11085:125::-;11125:4;11153:1;11150;11147:8;11144:34;;;11158:18;;:::i;:::-;-1:-1:-1;11195:9:84;;11085:125::o;11215:258::-;11287:1;11297:113;11311:6;11308:1;11305:13;11297:113;;;11387:11;;;11381:18;11368:11;;;11361:39;11333:2;11326:10;11297:113;;;11428:6;11425:1;11422:13;11419:48;;;-1:-1:-1;;11463:1:84;11445:16;;11438:27;11215:258::o;11478:135::-;11517:3;-1:-1:-1;;11538:17:84;;11535:43;;;11558:18;;:::i;:::-;-1:-1:-1;11605:1:84;11594:13;;11478:135::o;11618:112::-;11650:1;11676;11666:35;;11681:18;;:::i;:::-;-1:-1:-1;11715:9:84;;11618:112::o;11735:193::-;11769:3;11816:5;11813:1;11802:20;11850:16;11846:21;11837:7;11834:34;11831:60;;;11871:18;;:::i;:::-;11911:1;11907:15;;11735:193;-1:-1:-1;;11735:193:84:o;11933:127::-;11994:10;11989:3;11985:20;11982:1;11975:31;12025:4;12022:1;12015:15;12049:4;12046:1;12039:15;12065:127;12126:10;12121:3;12117:20;12114:1;12107:31;12157:4;12154:1;12147:15;12181:4;12178:1;12171:15;12197:127;12258:10;12253:3;12249:20;12246:1;12239:31;12289:4;12286:1;12279:15;12313:4;12310:1;12303:15;12329:127;12390:10;12385:3;12381:20;12378:1;12371:31;12421:4;12418:1;12411:15;12445:4;12442:1;12435:15;12593:131;-1:-1:-1;;;;;12668:31:84;;12658:42;;12648:70;;12714:1;12711;12704:12;12648:70;12593:131;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "3394800",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "52192",
                "acceptJobMigration(address,address)": "infinite",
                "acceptJobOwnership(address)": "55190",
                "addDisputer(address)": "30149",
                "addLiquidityToJob(address,address,uint256)": "infinite",
                "addSlasher(address)": "30215",
                "addTokenCreditsToJob(address,address,uint256)": "infinite",
                "approveLiquidity(address)": "infinite",
                "approvedLiquidities()": "infinite",
                "bondTime()": "2351",
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "changeJobOwnership(address,address)": "infinite",
                "disputers(address)": "2857",
                "disputes(address)": "2768",
                "fee()": "2394",
                "firstSeen(address)": "2656",
                "forceLiquidityCreditsToJob(address,uint256)": "60019",
                "governance()": "2406",
                "hasBonded(address)": "2878",
                "inflationPeriod()": "2680",
                "isJob(address)": "infinite",
                "jobLiquidityCredits(address)": "infinite",
                "jobOwner(address)": "2885",
                "jobPendingOwner(address)": "2621",
                "jobPeriodCredits(address)": "infinite",
                "jobTokenCredits(address,address)": "infinite",
                "jobTokenCreditsAddedAt(address,address)": "infinite",
                "jobs()": "infinite",
                "keep3rHelper()": "2647",
                "keep3rV1()": "2627",
                "keep3rV1Proxy()": "2758",
                "keepers()": "infinite",
                "kp3rWethPool()": "2626",
                "liquidityAmount(address,address)": "infinite",
                "liquidityMinimum()": "2373",
                "migrateJob(address,address)": "infinite",
                "observeLiquidity(address)": "infinite",
                "pendingBonds(address,address)": "infinite",
                "pendingGovernance()": "2713",
                "pendingJobMigrations(address)": "2818",
                "pendingUnbonds(address,address)": "infinite",
                "quoteLiquidity(address,uint256)": "infinite",
                "removeDisputer(address)": "30337",
                "removeSlasher(address)": "30250",
                "revokeLiquidity(address)": "infinite",
                "rewardPeriodTime()": "2527",
                "rewardedAt(address)": "2635",
                "setBondTime(uint256)": "25872",
                "setFee(uint256)": "25718",
                "setGovernance(address)": "28008",
                "setInflationPeriod(uint256)": "25806",
                "setJobLiquidity(address,address)": "infinite",
                "setJobToken(address,address)": "infinite",
                "setKeep3rHelper(address)": "28065",
                "setKeep3rV1(address)": "28064",
                "setKeep3rV1Proxy(address)": "27866",
                "setKp3rWethPool(address)": "infinite",
                "setLiquidityMinimum(uint256)": "25739",
                "setRewardPeriodTime(uint256)": "25611",
                "setUnbondTime(uint256)": "25913",
                "settleJobAccountanceCallCount(address)": "2899",
                "slashers(address)": "2878",
                "totalJobCredits(address)": "infinite",
                "unbondLiquidityFromJob(address,address,uint256)": "infinite",
                "unbondTime()": "2439",
                "viewJobLiquidityCredits(address)": "2696",
                "viewJobLiquidityList(address)": "infinite",
                "viewJobPeriodCredits(address)": "2894",
                "viewJobTokenListLength(address)": "infinite",
                "viewMigrationCreatedAt(address,address)": "infinite",
                "withdrawLiquidityFromJob(address,address,address)": "infinite",
                "withdrawTokenCreditsFromJob(address,address,uint256,address)": "infinite",
                "workCompleted(address)": "2724",
                "workedAt(address)": "2810"
              },
              "internal": {
                "_settleJobAccountance(address)": "24393"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobMigration(address,address)": "af320e81",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addSlasher(address)": "68a9f19c",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "isJob(address)": "1cd5c01f",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityAmount(address,address)": "694798e6",
              "liquidityMinimum()": "633fb68f",
              "migrateJob(address,address)": "90a4684e",
              "observeLiquidity(address)": "165e62e7",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingJobMigrations(address)": "ec8ca643",
              "pendingUnbonds(address,address)": "21040b01",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardPeriodTime()": "768b5d90",
              "rewardedAt(address)": "a676f9ff",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setJobLiquidity(address,address)": "cacdf93d",
              "setJobToken(address,address)": "e01f857c",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "settleJobAccountanceCallCount(address)": "9035654f",
              "slashers(address)": "b87fcbff",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "unbondTime()": "a7d2e784",
              "viewJobLiquidityCredits(address)": "e7f0cbf8",
              "viewJobLiquidityList(address)": "46d8908d",
              "viewJobPeriodCredits(address)": "f6bb2032",
              "viewJobTokenListLength(address)": "f22150c8",
              "viewMigrationCreatedAt(address,address)": "bea2b827",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workCompleted(address)": "1b44555e",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kph\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationImpossible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationSuccessful\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"acceptJobMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"isJob\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"migrateJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingJobMigrations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"setJobLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"setJobToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"settleJobAccountanceCallCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"viewJobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"viewJobLiquidityList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"viewJobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"viewJobTokenListLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"viewMigrationCreatedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobMigration(address,address)\":{\"details\":\"Unbond/withdraw process doesn't get migrated\",\"params\":{\"_fromJob\":\"The address of the job that requested to migrate\",\"_toJob\":\"The address to which the job wants to migrate to\"}},\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_liquidityCredits\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_periodCredits\":\"The credits the given job has at the current period\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"migrateJob(address,address)\":{\"params\":{\"_fromJob\":\"The address of the job that is requesting to migrate\",\"_toJob\":\"The address at which the job is requesting to migrate\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_credits\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobMigrationImpossible()\":[{\"notice\":\"Throws when the address of the job that requests to migrate wants to migrate to its same address\"}],\"JobMigrationLocked()\":[{\"notice\":\"Throws when cooldown between migrations has not yet passed\"}],\"JobMigrationUnavailable()\":[{\"notice\":\"Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobMigrationRequested(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#migrateJob function is called\"},\"JobMigrationSuccessful(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#acceptJobMigration function is called\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobMigration(address,address)\":{\"notice\":\"Completes the migration process for a job\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"migrateJob(address,address)\":{\"notice\":\"Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingJobMigrations(address)\":{\"notice\":\"Maps the jobs that have requested a migration to the address they have requested to migrate to\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol\":\"Keep3rJobMigrationForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableCredits is IKeep3rJobFundableCredits, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice Cooldown between withdrawals\\n  uint256 internal constant _WITHDRAW_TOKENS_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  mapping(address => mapping(address => uint256)) public override jobTokenCreditsAddedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    // KP3R shouldn't be used for direct token payments\\n    if (_token == keep3rV1) revert TokenUnallowed();\\n    uint256 _before = IERC20(_token).balanceOf(address(this));\\n    IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\\n    uint256 _received = IERC20(_token).balanceOf(address(this)) - _before;\\n    uint256 _tokenFee = (_received * fee) / _BASE;\\n    jobTokenCredits[_job][_token] += _received - _tokenFee;\\n    jobTokenCreditsAddedAt[_job][_token] = block.timestamp;\\n    IERC20(_token).safeTransfer(governance, _tokenFee);\\n    _jobTokens[_job].add(_token);\\n\\n    emit TokenCreditAddition(_job, _token, msg.sender, _received);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external override nonReentrant onlyJobOwner(_job) {\\n    if (block.timestamp <= jobTokenCreditsAddedAt[_job][_token] + _WITHDRAW_TOKENS_COOLDOWN) revert JobTokenCreditsLocked();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientJobTokenCredits();\\n    if (disputes[_job]) revert JobDisputed();\\n\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_receiver, _amount);\\n\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit TokenCreditWithdrawal(_job, _token, _receiver, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0xb600d18903a008a1ca03743de7cef8330c2d5e66db52c900822551a4be75f7a5\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/IPairManager.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '../../libraries/FullMath.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableLiquidity is IKeep3rJobFundableLiquidity, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice List of liquidities that are accepted in the system\\n  EnumerableSet.AddressSet internal _approvedLiquidities;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => mapping(address => uint256)) public override liquidityAmount;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override rewardedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override workedAt;\\n\\n  /// @notice Tracks an address and returns its TickCache\\n  mapping(address => TickCache) internal _tick;\\n\\n  // Views\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approvedLiquidities() external view override returns (address[] memory _list) {\\n    _list = _approvedLiquidities.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobPeriodCredits(address _job) public view override returns (uint256 _periodCredits) {\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        TickCache memory _tickCache = observeLiquidity(_liquidity);\\n        if (_tickCache.period != 0) {\\n          int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n          _periodCredits += _getReward(\\n            IKeep3rHelper(keep3rHelper).getKP3RsAtTick(liquidityAmount[_job][_liquidity], _tickDifference, rewardPeriodTime)\\n          );\\n        }\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobLiquidityCredits(address _job) public view override returns (uint256 _liquidityCredits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n\\n    // If the job was rewarded in the past 1 period time\\n    if ((block.timestamp - rewardedAt[_job]) < rewardPeriodTime) {\\n      // If the job has period credits, update minted job credits to new twap\\n      _liquidityCredits = _periodCredits > 0\\n        ? (_jobLiquidityCredits[_job] * _periodCredits) / _jobPeriodCredits[_job] // If the job has period credits, return remaining job credits updated to new twap\\n        : _jobLiquidityCredits[_job]; // If not, return remaining credits, forced credits should not be updated\\n    } else {\\n      // Else return a full period worth of credits if current credits have expired\\n      _liquidityCredits = _periodCredits;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function totalJobCredits(address _job) external view override returns (uint256 _credits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n    uint256 _cooldown = block.timestamp;\\n\\n    if ((rewardedAt[_job] > _period(block.timestamp - rewardPeriodTime))) {\\n      // Will calculate cooldown if it outdated\\n      if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will calculate cooldown from last reward reference in this period\\n        _cooldown -= (rewardedAt[_job] + rewardPeriodTime);\\n      } else {\\n        // Will calculate cooldown from last reward timestamp\\n        _cooldown -= rewardedAt[_job];\\n      }\\n    } else {\\n      // Will calculate cooldown from period start if expired\\n      _cooldown -= _period(block.timestamp);\\n    }\\n    _credits = jobLiquidityCredits(_job) + _phase(_cooldown, _periodCredits);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view override returns (uint256 _periodCredits) {\\n    if (_approvedLiquidities.contains(_liquidity)) {\\n      TickCache memory _tickCache = observeLiquidity(_liquidity);\\n      if (_tickCache.period != 0) {\\n        int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n        return _getReward(IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime));\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function observeLiquidity(address _liquidity) public view virtual override returns (TickCache memory _tickCache) {\\n    if (_tick[_liquidity].period == _period(block.timestamp)) {\\n      // Will return cached twaps if liquidity is updated\\n      _tickCache = _tick[_liquidity];\\n    } else {\\n      bool success;\\n      uint256 lastPeriod = _period(block.timestamp - rewardPeriodTime);\\n\\n      if (_tick[_liquidity].period == lastPeriod) {\\n        // Will only ask for current period accumulator if liquidity is outdated\\n        uint32[] memory _secondsAgo = new uint32[](1);\\n        int56 previousTick = _tick[_liquidity].current;\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n\\n        (_tickCache.current, , success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - previousTick;\\n      } else if (_tick[_liquidity].period < lastPeriod) {\\n        // Will ask for 2 accumulators if liquidity is expired\\n        uint32[] memory _secondsAgo = new uint32[](2);\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n        _secondsAgo[1] = uint32(block.timestamp - _period(block.timestamp) + rewardPeriodTime);\\n\\n        int56 _tickCumulative2;\\n        (_tickCache.current, _tickCumulative2, success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - _tickCumulative2;\\n      }\\n      if (success) {\\n        _tickCache.period = _period(block.timestamp);\\n      } else {\\n        delete _tickCache.period;\\n      }\\n    }\\n  }\\n\\n  // Methods\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external override onlyGovernance {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    _settleJobAccountance(_job);\\n    _jobLiquidityCredits[_job] += _amount;\\n    emit LiquidityCreditsForced(_job, rewardedAt[_job], _jobLiquidityCredits[_job]);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approveLiquidity(address _liquidity) external virtual override onlyGovernance {\\n    if (!_approvedLiquidities.add(_liquidity)) revert LiquidityPairApproved();\\n    _liquidityPool[_liquidity] = IPairManager(_liquidity).pool();\\n    _isKP3RToken0[_liquidity] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_liquidityPool[_liquidity]);\\n    _tick[_liquidity] = observeLiquidity(_liquidity);\\n    emit LiquidityApproval(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function revokeLiquidity(address _liquidity) external override onlyGovernance {\\n    if (!_approvedLiquidities.remove(_liquidity)) revert LiquidityPairUnexistent();\\n    emit LiquidityRevocation(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_approvedLiquidities.contains(_liquidity)) revert LiquidityPairUnapproved();\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n\\n    _jobLiquidities[_job].add(_liquidity);\\n\\n    _settleJobAccountance(_job);\\n\\n    if (_quoteLiquidity(liquidityAmount[_job][_liquidity] + _amount, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n    IERC20(_liquidity).safeTransferFrom(msg.sender, address(this), _amount);\\n    liquidityAmount[_job][_liquidity] += _amount;\\n    _jobPeriodCredits[_job] += _getReward(_quoteLiquidity(_amount, _liquidity));\\n    emit LiquidityAddition(_job, _liquidity, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlyJobOwner(_job) {\\n    canWithdrawAfter[_job][_liquidity] = block.timestamp + unbondTime;\\n    pendingUnbonds[_job][_liquidity] += _amount;\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n\\n    uint256 _remainingLiquidity = liquidityAmount[_job][_liquidity];\\n    if (_remainingLiquidity > 0 && _quoteLiquidity(_remainingLiquidity, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit Unbonding(_job, _liquidity, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external override onlyJobOwner(_job) {\\n    if (_receiver == address(0)) revert ZeroAddress();\\n    if (pendingUnbonds[_job][_liquidity] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[_job][_liquidity] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[_job]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[_job][_liquidity];\\n\\n    delete pendingUnbonds[_job][_liquidity];\\n    delete canWithdrawAfter[_job][_liquidity];\\n\\n    IERC20(_liquidity).safeTransfer(_receiver, _amount);\\n    emit LiquidityWithdrawal(_job, _liquidity, _receiver, _amount);\\n  }\\n\\n  // Internal functions\\n\\n  /// @notice Updates or rewards job liquidity credits depending on time since last job reward\\n  function _updateJobCreditsIfNeeded(address _job) internal returns (bool _rewarded) {\\n    if (rewardedAt[_job] < _period(block.timestamp)) {\\n      // Will exit function if job has been rewarded in current period\\n      if (rewardedAt[_job] <= _period(block.timestamp - rewardPeriodTime)) {\\n        // Will reset job to period syncronicity if a full period passed without rewards\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] = _period(block.timestamp);\\n        _rewarded = true;\\n      } else if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will reset job's syncronicity if last reward was more than epoch ago\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] += rewardPeriodTime;\\n        _rewarded = true;\\n      } else if (workedAt[_job] < _period(block.timestamp)) {\\n        // First keeper on period has to update job accountance to current twaps\\n        uint256 previousPeriodCredits = _jobPeriodCredits[_job];\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = (_jobLiquidityCredits[_job] * _jobPeriodCredits[_job]) / previousPeriodCredits;\\n        // Updating job accountance does not reward job\\n      }\\n    }\\n  }\\n\\n  /// @notice Only called if _jobLiquidityCredits < payment\\n  function _rewardJobCredits(address _job) internal {\\n    /// @notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)\\n    /* WARNING: this allows to top up _jobLiquidityCredits to a max of 1.99 but have to spend at least 1 */\\n    _jobLiquidityCredits[_job] += _phase(block.timestamp - rewardedAt[_job], _jobPeriodCredits[_job]);\\n    rewardedAt[_job] = block.timestamp;\\n  }\\n\\n  /// @notice Updates accountance for _jobPeriodCredits\\n  function _updateJobPeriod(address _job) internal {\\n    _jobPeriodCredits[_job] = _calculateJobPeriodCredits(_job);\\n  }\\n\\n  /// @notice Quotes the outdated job liquidities and calculates _periodCredits\\n  /// @dev This function is also responsible for keeping the KP3R/WETH quote updated\\n  function _calculateJobPeriodCredits(address _job) internal returns (uint256 _periodCredits) {\\n    if (_tick[kp3rWethPool].period != _period(block.timestamp)) {\\n      // Updates KP3R/WETH quote if needed\\n      _tick[kp3rWethPool] = observeLiquidity(kp3rWethPool);\\n    }\\n\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        if (_tick[_liquidity].period != _period(block.timestamp)) {\\n          // Updates liquidity cache only if needed\\n          _tick[_liquidity] = observeLiquidity(_liquidity);\\n        }\\n        _periodCredits += _getReward(_quoteLiquidity(liquidityAmount[_job][_liquidity], _liquidity));\\n      }\\n    }\\n  }\\n\\n  /// @notice Updates job accountance calculating the impact of the unbonded liquidity amount\\n  function _unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) internal nonReentrant {\\n    if (!_jobLiquidities[_job].contains(_liquidity)) revert JobLiquidityUnexistent();\\n    if (liquidityAmount[_job][_liquidity] < _amount) revert JobLiquidityInsufficient();\\n\\n    // Ensures current twaps in job liquidities\\n    _updateJobPeriod(_job);\\n    uint256 _periodCreditsToRemove = _getReward(_quoteLiquidity(_amount, _liquidity));\\n\\n    // A liquidity can be revoked causing a job to have 0 periodCredits\\n    if (_jobPeriodCredits[_job] > 0) {\\n      // Removes a % correspondant to a full rewardPeriodTime for the liquidity withdrawn vs all of the liquidities\\n      _jobLiquidityCredits[_job] -= (_jobLiquidityCredits[_job] * _periodCreditsToRemove) / _jobPeriodCredits[_job];\\n      _jobPeriodCredits[_job] -= _periodCreditsToRemove;\\n    }\\n\\n    liquidityAmount[_job][_liquidity] -= _amount;\\n    if (liquidityAmount[_job][_liquidity] == 0) {\\n      _jobLiquidities[_job].remove(_liquidity);\\n    }\\n  }\\n\\n  /// @notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed\\n  function _phase(uint256 _timePassed, uint256 _multiplier) internal view returns (uint256 _result) {\\n    if (_timePassed < rewardPeriodTime) {\\n      _result = (_timePassed * _multiplier) / rewardPeriodTime;\\n    } else _result = _multiplier;\\n  }\\n\\n  /// @notice Returns the start of the period of the provided timestamp\\n  function _period(uint256 _timestamp) internal view returns (uint256 _periodTimestamp) {\\n    return _timestamp - (_timestamp % rewardPeriodTime);\\n  }\\n\\n  /// @notice Calculates relation between rewardPeriod and inflationPeriod\\n  function _getReward(uint256 _baseAmount) internal view returns (uint256 _credits) {\\n    return FullMath.mulDiv(_baseAmount, rewardPeriodTime, inflationPeriod);\\n  }\\n\\n  /// @notice Returns underlying KP3R amount for a given liquidity amount\\n  function _quoteLiquidity(uint256 _amount, address _liquidity) internal view virtual returns (uint256 _quote) {\\n    if (_tick[_liquidity].period != 0) {\\n      int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tick[_liquidity].difference : -_tick[_liquidity].difference;\\n      _quote = IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime);\\n    }\\n  }\\n\\n  /// @notice Updates job credits to current quotes and rewards job's pending minted credits\\n  /// @dev Ensures a maximum of 1 period of credits\\n  function _settleJobAccountance(address _job) internal virtual {\\n    _updateJobCreditsIfNeeded(_job);\\n    _rewardJobCredits(_job);\\n    _jobLiquidityCredits[_job] = Math.min(_jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n  }\\n}\\n\",\"keccak256\":\"0x7747b2a0ee0c4e3322e92a3e1fc0f6f03be63942bc398009726b58f8c9f79cf0\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\nimport './Keep3rJobFundableCredits.sol';\\nimport './Keep3rJobFundableLiquidity.sol';\\n\\nabstract contract Keep3rJobMigration is IKeep3rJobMigration, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  uint256 internal constant _MIGRATION_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  mapping(address => address) public override pendingJobMigrations;\\n  mapping(address => mapping(address => uint256)) internal _migrationCreatedAt;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function migrateJob(address _fromJob, address _toJob) external override onlyJobOwner(_fromJob) {\\n    if (_fromJob == _toJob) revert JobMigrationImpossible();\\n\\n    pendingJobMigrations[_fromJob] = _toJob;\\n    _migrationCreatedAt[_fromJob][_toJob] = block.timestamp;\\n\\n    emit JobMigrationRequested(_fromJob, _toJob);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function acceptJobMigration(address _fromJob, address _toJob) external override onlyJobOwner(_toJob) {\\n    if (disputes[_fromJob] || disputes[_toJob]) revert JobDisputed();\\n    if (pendingJobMigrations[_fromJob] != _toJob) revert JobMigrationUnavailable();\\n    if (block.timestamp < _migrationCreatedAt[_fromJob][_toJob] + _MIGRATION_COOLDOWN) revert JobMigrationLocked();\\n\\n    // force job credits update for both jobs\\n    _settleJobAccountance(_fromJob);\\n    _settleJobAccountance(_toJob);\\n\\n    // migrate tokens\\n    while (_jobTokens[_fromJob].length() > 0) {\\n      address _tokenToMigrate = _jobTokens[_fromJob].at(0);\\n      jobTokenCredits[_toJob][_tokenToMigrate] += jobTokenCredits[_fromJob][_tokenToMigrate];\\n      delete jobTokenCredits[_fromJob][_tokenToMigrate];\\n      _jobTokens[_fromJob].remove(_tokenToMigrate);\\n      _jobTokens[_toJob].add(_tokenToMigrate);\\n    }\\n\\n    // migrate liquidities\\n    while (_jobLiquidities[_fromJob].length() > 0) {\\n      address _liquidity = _jobLiquidities[_fromJob].at(0);\\n\\n      liquidityAmount[_toJob][_liquidity] += liquidityAmount[_fromJob][_liquidity];\\n      delete liquidityAmount[_fromJob][_liquidity];\\n\\n      _jobLiquidities[_toJob].add(_liquidity);\\n      _jobLiquidities[_fromJob].remove(_liquidity);\\n    }\\n\\n    // migrate job balances\\n    _jobPeriodCredits[_toJob] += _jobPeriodCredits[_fromJob];\\n    delete _jobPeriodCredits[_fromJob];\\n\\n    _jobLiquidityCredits[_toJob] += _jobLiquidityCredits[_fromJob];\\n    delete _jobLiquidityCredits[_fromJob];\\n\\n    // stop _fromJob from being a job\\n    delete rewardedAt[_fromJob];\\n    _jobs.remove(_fromJob);\\n\\n    // delete unused data slots\\n    delete jobOwner[_fromJob];\\n    delete jobPendingOwner[_fromJob];\\n    delete _migrationCreatedAt[_fromJob][_toJob];\\n    delete pendingJobMigrations[_fromJob];\\n\\n    emit JobMigrationSuccessful(_fromJob, _toJob);\\n  }\\n}\\n\",\"keccak256\":\"0xd46c3c9ce970098d8d75f11966894a341824aceb40583fcfbbc0ebda93d869f9\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../contracts/peripherals/jobs/Keep3rJobMigration.sol';\\n\\ncontract Keep3rJobMigrationForTest is Keep3rJobMigration {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  mapping(address => uint256) public settleJobAccountanceCallCount;\\n\\n  constructor(\\n    address _kph,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) Keep3rParameters(_kph, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\\n\\n  function setJobToken(address _job, address _token) external {\\n    _jobTokens[_job].add(_token);\\n  }\\n\\n  function setJobLiquidity(address _job, address _liquidity) external {\\n    _jobLiquidities[_job].add(_liquidity);\\n  }\\n\\n  function viewJobTokenListLength(address _job) external view returns (uint256) {\\n    return _jobTokens[_job].length();\\n  }\\n\\n  function viewJobLiquidityList(address _job) external view returns (address[] memory _list) {\\n    _list = _jobLiquidities[_job].values();\\n  }\\n\\n  function viewJobPeriodCredits(address _job) external view returns (uint256) {\\n    return _jobPeriodCredits[_job];\\n  }\\n\\n  function viewJobLiquidityCredits(address _job) external view returns (uint256) {\\n    return _jobLiquidityCredits[_job];\\n  }\\n\\n  function viewMigrationCreatedAt(address _fromJob, address _toJob) external view returns (uint256) {\\n    return _migrationCreatedAt[_fromJob][_toJob];\\n  }\\n\\n  function isJob(address _job) external view returns (bool) {\\n    return _jobs.contains(_job);\\n  }\\n\\n  function _settleJobAccountance(address _job) internal override {\\n    settleJobAccountanceCallCount[_job]++;\\n  }\\n}\\n\",\"keccak256\":\"0xd723ecb6391c1c857bd011849109a476d4dccff8004fe0a175ae00a05835c423\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6297,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "jobTokenCreditsAddedAt",
                "offset": 0,
                "slot": "37",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6540,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "_approvedLiquidities",
                "offset": 0,
                "slot": "38",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 6548,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "liquidityAmount",
                "offset": 0,
                "slot": "40",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6554,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "rewardedAt",
                "offset": 0,
                "slot": "41",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6560,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "workedAt",
                "offset": 0,
                "slot": "42",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6566,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "_tick",
                "offset": 0,
                "slot": "43",
                "type": "t_mapping(t_address,t_struct(TickCache)13178_storage)"
              },
              {
                "astId": 8024,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "pendingJobMigrations",
                "offset": 0,
                "slot": "44",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8030,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "_migrationCreatedAt",
                "offset": 0,
                "slot": "45",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 10964,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                "label": "settleJobAccountanceCallCount",
                "offset": 0,
                "slot": "46",
                "type": "t_mapping(t_address,t_uint256)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_int56": {
                "encoding": "inplace",
                "label": "int56",
                "numberOfBytes": "7"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_struct(TickCache)13178_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)",
                "numberOfBytes": "32",
                "value": "t_struct(TickCache)13178_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(TickCache)13178_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rJobFundableLiquidity.TickCache",
                "members": [
                  {
                    "astId": 13173,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                    "label": "current",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13175,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                    "label": "difference",
                    "offset": 7,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13177,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol:Keep3rJobMigrationForTest",
                    "label": "period",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobMigrationImpossible()": [
                {
                  "notice": "Throws when the address of the job that requests to migrate wants to migrate to its same address"
                }
              ],
              "JobMigrationLocked()": [
                {
                  "notice": "Throws when cooldown between migrations has not yet passed"
                }
              ],
              "JobMigrationUnavailable()": [
                {
                  "notice": "Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobMigrationRequested(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#migrateJob function is called"
              },
              "JobMigrationSuccessful(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#acceptJobMigration function is called"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobMigration(address,address)": {
                "notice": "Completes the migration process for a job"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "migrateJob(address,address)": {
                "notice": "Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingJobMigrations(address)": {
                "notice": "Maps the jobs that have requested a migration to the address they have requested to migrate to"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobOwnershipForTest.sol": {
        "Keep3rJobOwnershipForTest": {
          "abi": [
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506102e2806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063594a3a931461005157806359a2255e14610066578063878c723e1461007957806398e90a0f146100be575b600080fd5b61006461005f366004610279565b6100e7565b005b610064610074366004610257565b61018b565b6100a2610087366004610257565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100a26100cc366004610257565b6001602052600090815260409020546001600160a01b031681565b6001600160a01b03828116600090815260208190526040902054839116331461012357604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260016020908152604080832080546001600160a01b0319168887169081179091559183905280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526001602052604090205482911633146101c75760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b0382811660008181526020818152604080832080546001909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b80356001600160a01b038116811461025257600080fd5b919050565b60006020828403121561026957600080fd5b6102728261023b565b9392505050565b6000806040838503121561028c57600080fd5b6102958361023b565b91506102a36020840161023b565b9050925092905056fea26469706673582212202580cca8c1a7143d2162e20bc9b53990266c4bf25ccac38b05c0742ddedd8d8364736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2E2 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x79 JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0xBE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x279 JUMP JUMPDEST PUSH2 0xE7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x74 CALLDATASIZE PUSH1 0x4 PUSH2 0x257 JUMP JUMPDEST PUSH2 0x18B JUMP JUMPDEST PUSH2 0xA2 PUSH2 0x87 CALLDATASIZE PUSH1 0x4 PUSH2 0x257 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA2 PUSH2 0xCC CALLDATASIZE PUSH1 0x4 PUSH2 0x257 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x123 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 DUP4 SWAP1 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x1C7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x272 DUP3 PUSH2 0x23B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x28C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x295 DUP4 PUSH2 0x23B JUMP JUMPDEST SWAP2 POP PUSH2 0x2A3 PUSH1 0x20 DUP5 ADD PUSH2 0x23B JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 DUP1 0xCC 0xA8 0xC1 0xA7 EQ RETURNDATASIZE 0x21 PUSH3 0xE20BC9 0xB5 CODECOPY SWAP1 0x26 PUSH13 0x4BF25CCAC38B05C0742DDEDD8D DUP4 PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "135:59:62:-:0;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@acceptJobOwnership_8373": {
                  "entryPoint": 395,
                  "id": 8373,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@changeJobOwnership_8336": {
                  "entryPoint": 231,
                  "id": 8336,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@jobOwner_8303": {
                  "entryPoint": null,
                  "id": 8303,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPendingOwner_8309": {
                  "entryPoint": null,
                  "id": 8309,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_address": {
                  "entryPoint": 571,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 599,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 633,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:853:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "111:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "262:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "308:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "317:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "320:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "310:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "310:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "310:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "292:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "279:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "275:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "272:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "333:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "362:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "333:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "228:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "239:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "251:6:84",
                            "type": ""
                          }
                        ],
                        "src": "192:186:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "470:173:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "516:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "525:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "528:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "518:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "518:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "518:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "491:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "500:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "487:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "487:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "512:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "480:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "541:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "570:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "551:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "551:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "541:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "589:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "622:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "633:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "618:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "618:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "599:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "599:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "589:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "428:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "439:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "451:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "459:6:84",
                            "type": ""
                          }
                        ],
                        "src": "383:260:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "749:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "759:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "771:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "782:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "767:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "767:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "759:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "801:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "816:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "832:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "837:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "828:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "828:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "841:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "824:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "824:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "812:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "812:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "794:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "794:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "794:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "718:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "729:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "740:4:84",
                            "type": ""
                          }
                        ],
                        "src": "648:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c8063594a3a931461005157806359a2255e14610066578063878c723e1461007957806398e90a0f146100be575b600080fd5b61006461005f366004610279565b6100e7565b005b610064610074366004610257565b61018b565b6100a2610087366004610257565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100a26100cc366004610257565b6001602052600090815260409020546001600160a01b031681565b6001600160a01b03828116600090815260208190526040902054839116331461012357604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260016020908152604080832080546001600160a01b0319168887169081179091559183905280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b0381811660009081526001602052604090205482911633146101c75760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b0382811660008181526020818152604080832080546001909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b80356001600160a01b038116811461025257600080fd5b919050565b60006020828403121561026957600080fd5b6102728261023b565b9392505050565b6000806040838503121561028c57600080fd5b6102958361023b565b91506102a36020840161023b565b9050925092905056fea26469706673582212202580cca8c1a7143d2162e20bc9b53990266c4bf25ccac38b05c0742ddedd8d8364736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x79 JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0xBE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x279 JUMP JUMPDEST PUSH2 0xE7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x74 CALLDATASIZE PUSH1 0x4 PUSH2 0x257 JUMP JUMPDEST PUSH2 0x18B JUMP JUMPDEST PUSH2 0xA2 PUSH2 0x87 CALLDATASIZE PUSH1 0x4 PUSH2 0x257 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA2 PUSH2 0xCC CALLDATASIZE PUSH1 0x4 PUSH2 0x257 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x123 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 DUP4 SWAP1 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x1C7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x272 DUP3 PUSH2 0x23B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x28C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x295 DUP4 PUSH2 0x23B JUMP JUMPDEST SWAP2 POP PUSH2 0x2A3 PUSH1 0x20 DUP5 ADD PUSH2 0x23B JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 DUP1 0xCC 0xA8 0xC1 0xA7 EQ RETURNDATASIZE 0x21 PUSH3 0xE20BC9 0xB5 CODECOPY SWAP1 0x26 PUSH13 0x4BF25CCAC38B05C0742DDEDD8D DUP4 PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "135:59:62:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;423:204:38;;;;;;:::i;:::-;;:::i;:::-;;669:279;;;;;;:::i;:::-;;:::i;226:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;226:52:38;;;;;;-1:-1:-1;;;;;812:32:84;;;794:51;;782:2;767:18;226:52:38;;;;;;;321:59;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;321:59:38;;;423:204;-1:-1:-1;;;;;1012:14:38;;;:8;:14;;;;;;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;527:21:38;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;-1:-1:-1;;;;;;527:33:38::1;::::0;;::::1;::::0;;::::1;::::0;;;596:14;;;;;;;;571:51;;527:33;;596:14:::1;::::0;527:21;571:51:::1;::::0;::::1;423:204:::0;;;:::o;669:279::-;-1:-1:-1;;;;;1132:21:38;;;;;;;:15;:21;;;;;;;;;1118:10;:35;1114:69;;1162:21;;-1:-1:-1;;;1162:21:38;;;;;;;;;;;1114:69;-1:-1:-1;;;;;786:14:38;;::::1;761:22;786:14:::0;;;::::1;::::0;;;;;;;;;;824:21;;;;;;;;;::::1;-1:-1:-1::0;;;;;;807:38:38;;::::1;::::0;;;::::1;::::0;;;851:28;;;;::::1;::::0;;891:52;786:14;::::1;::::0;;;;910:10:::1;::::0;891:52:::1;::::0;761:22;891:52:::1;755:193;669:279:::0;;:::o;14:173:84:-;82:20;;-1:-1:-1;;;;;131:31:84;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:84:o;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "147600",
                "executionCost": "196",
                "totalCost": "147796"
              },
              "external": {
                "acceptJobOwnership(address)": "55170",
                "changeJobOwnership(address,address)": "infinite",
                "jobOwner(address)": "2571",
                "jobPendingOwner(address)": "2590"
              }
            },
            "methodIdentifiers": {
              "acceptJobOwnership(address)": "59a2255e",
              "changeJobOwnership(address,address)": "594a3a93",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}]},\"events\":{\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"}},\"kind\":\"user\",\"methods\":{\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/jobs/Keep3rJobOwnershipForTest.sol\":\"Keep3rJobOwnershipForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/jobs/Keep3rJobOwnershipForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../contracts/peripherals/jobs/Keep3rJobOwnership.sol';\\n\\ncontract Keep3rJobOwnershipForTest is Keep3rJobOwnership {}\\n\",\"keccak256\":\"0xd007e3ba02c9e8c68eb2cf752d8cda40951b2b9d6143155e7360c9e8518cee92\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 8303,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobOwnershipForTest.sol:Keep3rJobOwnershipForTest",
                "label": "jobOwner",
                "offset": 0,
                "slot": "0",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobOwnershipForTest.sol:Keep3rJobOwnershipForTest",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              }
            }
          },
          "userdoc": {
            "errors": {
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ]
            },
            "events": {
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              }
            },
            "kind": "user",
            "methods": {
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol": {
        "Keep3rJobWorkableForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientFunds",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationImpossible",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationSuccessful",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperValidation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperWork",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "acceptJobMigration",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                }
              ],
              "name": "bondedPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "directTokenPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_minBond",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_earned",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_age",
                  "type": "uint256"
                }
              ],
              "name": "isBondedKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isBondedKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "isKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "migrateJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingJobMigrations",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "setApprovedLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "setJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "setJobLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "setKeeper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_credits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "viewGas",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "viewJobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "viewJobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "viewTickCache",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "worked",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "stateMutability": "payable",
              "type": "receive"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobMigration(address,address)": {
                "details": "Unbond/withdraw process doesn't get migrated",
                "params": {
                  "_fromJob": "The address of the job that requested to migrate",
                  "_toJob": "The address to which the job wants to migrate to"
                }
              },
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "bondedPayment(address,uint256)": {
                "details": "Pays the keeper that performs the work with KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work",
                  "_payment": "The reward that should be allocated for the job"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "directTokenPayment(address,address,uint256)": {
                "details": "Pays the keeper that performs the work with a specific token",
                "params": {
                  "_amount": "The reward that should be allocated",
                  "_keeper": "Address of the keeper that performed the work",
                  "_token": "The asset being awarded to the keeper"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "details": "Should be used for protected functions",
                "params": {
                  "_age": "The minimum keeper age required",
                  "_bond": "The bond token being evaluated",
                  "_earned": "The minimum funds earned in the keepers lifetime",
                  "_keeper": "The keeper to check",
                  "_minBond": "The minimum amount of bonded tokens"
                },
                "returns": {
                  "_isBondedKeeper": "Whether the `_keeper` meets the given requirements"
                }
              },
              "isKeeper(address)": {
                "details": "Can be used for general (non critical) functions",
                "params": {
                  "_keeper": "The keeper being investigated"
                },
                "returns": {
                  "_isKeeper": "Whether the address passed as a parameter is a keeper or not"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_liquidityCredits": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_periodCredits": "The credits the given job has at the current period"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "migrateJob(address,address)": {
                "params": {
                  "_fromJob": "The address of the job that is requesting to migrate",
                  "_toJob": "The address at which the job is requesting to migrate"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_credits": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              },
              "worked(address)": {
                "details": "Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_11150": {
                  "entryPoint": null,
                  "id": 11150,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_18": {
                  "entryPoint": null,
                  "id": 18,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5689": {
                  "entryPoint": null,
                  "id": 5689,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 423,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory": {
                  "entryPoint": 452,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 545,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1152:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "328:332:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "375:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "384:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "387:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "377:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "377:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "377:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "349:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "358:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "345:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "345:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "370:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "341:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "341:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "338:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "400:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "440:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "410:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "410:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "400:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "459:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "503:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "514:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "499:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "499:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "469:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "469:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "459:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "527:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "571:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "582:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "567:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "567:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "537:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "537:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "527:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "595:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "639:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "650:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "635:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "635:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "605:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "605:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "595:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "270:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "281:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "293:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "301:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "309:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "317:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:464:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "743:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "789:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "798:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "801:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "791:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "791:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "791:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "764:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "773:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "760:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "760:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "785:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "756:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "756:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "753:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "814:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "833:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "827:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "827:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "818:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "896:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "905:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "908:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "898:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "898:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "898:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "865:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "886:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "879:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "879:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "872:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "872:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "862:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "855:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "855:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "852:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "921:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "931:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "921:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "709:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "720:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "732:6:84",
                            "type": ""
                          }
                        ],
                        "src": "665:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1048:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1058:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1070:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1081:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1066:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1066:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1058:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1100:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1115:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1131:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1136:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1127:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1127:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1140:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1123:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1123:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1111:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1111:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1093:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1093:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1093:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1017:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1028:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1039:4:84",
                            "type": ""
                          }
                        ],
                        "src": "947:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526203f480601f55621275006020556729a2241af62c000060215562069780602255622cd300602355601e6024553480156200003e57600080fd5b5060405162005491380380620054918339810160408190526200006191620001c4565b6001600055838383833380806200008a5760405162b293ed60e81b815260040160405180910390fd5b601780546001600160a01b03199081166001600160a01b0393841617909155601d80548216888416178155601b80548316888516179055601c80548316878516179055601e8054831686851690811782556000818152600e602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200013557600080fd5b505afa1580156200014a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000170919062000221565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055506200024c95505050505050565b80516001600160a01b0381168114620001bf57600080fd5b919050565b60008060008060808587031215620001db57600080fd5b620001e685620001a7565b9350620001f660208601620001a7565b92506200020660408601620001a7565b91506200021660608601620001a7565b905092959194509250565b6000602082840312156200023457600080fd5b815180151581146200024557600080fd5b9392505050565b615235806200025c6000396000f3fe6080604052600436106103b75760003560e01c806390a4684e116101ea578063cb4be2bb11610109578063cb4be2bb14610c7b578063cb54694d14610c9b578063cd22af1b14610cbb578063d55995fe14610cf3578063dd2080d614610d13578063ddca3f4314610d33578063e326ac4314610d49578063e485dc0e14610d76578063e7f0cbf814610d96578063ebbb619414610dcc578063ec00cdfc14610dec578063ec8ca64314610e0c578063f0f346b914610e42578063f11a1d1a14610e62578063f136a09d14610e82578063f39c38a014610eaf578063f6bb203214610ecf578063f9d46cf214610f05578063fc253d2b14610f25578063fe75bc4614610f3b57600080fd5b806390a4684e1461099d578063951dc22c146109bd57806398e90a0f146109d25780639d5c33d814610a08578063a214580914610a28578063a39744b514610a48578063a662031b14610a80578063a676f9ff14610aa0578063a7d2e78414610acd578063aac6aa9c14610ae3578063ab033ea914610b03578063af320e8114610b23578063b0103b1a14610b43578063b239223314610b73578063b440027f14610b93578063b600702a14610bcb578063b7e7734014610beb578063b87fcbff14610c0b578063c7ae40d014610c3b578063cacdf93d14610c5b57600080fd5b806359a2255e116102d657806359a2255e146107085780635aa6e675146107285780635ebe23f0146107485780635feeb7941461075e578063633fb68f1461077e57806364bb43ee1461079457806368a9f19c146107b4578063694798e6146107d457806369fe0e2d1461080c5780636ba42aaa1461082c5780636cf262bc1461084c57806372da828a1461086c578063748747e61461088c578063768b5d90146108ac5780637b40c913146108c25780637c8fce23146108e2578063878c723e146108f75780638bb6dfa81461092d5780638cb22b761461094d5780638fe204dd1461097d57600080fd5b8063034d4c61146103c357806307b435c2146103f65780630c620bce1461042e5780630d6a1f87146104505780631101eb411461047057806311466d721461049257806315006b82146104b2578063160e1e31146104ea578063165e62e71461050a578063168f92e7146105545780631b44555e1461058c5780631ef94b91146105b957806321040b01146105e6578063238efcbc1461061e578063274a8db414610633578063280b656c146106735780634a8d13481461069357806352a4de29146106a8578063575288bf146106c8578063594a3a93146106e857600080fd5b366103be57005b600080fd5b3480156103cf57600080fd5b506103e36103de366004614c1c565b610f5b565b6040519081526020015b60405180910390f35b34801561040257600080fd5b506103e3610411366004614c56565b601260209081526000928352604080842090915290825290205481565b34801561043a57600080fd5b50610443611061565b6040516103ed9190614f35565b34801561045c57600080fd5b506103e361046b366004614dbf565b611072565b34801561047c57600080fd5b5061049061048b366004614cda565b611178565b005b34801561049e57600080fd5b506104906104ad366004614dbf565b6112d2565b3480156104be57600080fd5b506103e36104cd366004614c56565b601060209081526000928352604080842090915290825290205481565b3480156104f657600080fd5b50610490610505366004614c1c565b611461565b34801561051657600080fd5b5061052a610525366004614c1c565b6115c7565b604080518251600690810b825260208085015190910b9082015291810151908201526060016103ed565b34801561056057600080fd5b506103e361056f366004614c56565b600960209081526000928352604080842090915290825290205481565b34801561059857600080fd5b506103e36105a7366004614c1c565b60056020526000908152604090205481565b3480156105c557600080fd5b50601b546105d9906001600160a01b031681565b6040516103ed9190614ec5565b3480156105f257600080fd5b506103e3610601366004614c56565b601360209081526000928352604080842090915290825290205481565b34801561062a57600080fd5b50610490611978565b34801561063f57600080fd5b5061066361064e366004614c1c565b601a6020526000908152604090205460ff1681565b60405190151581526020016103ed565b34801561067f57600080fd5b5061049061068e366004614c1c565b611a04565b34801561069f57600080fd5b50602e546103e3565b3480156106b457600080fd5b506104906106c3366004614cda565b611a13565b3480156106d457600080fd5b506104906106e3366004614cda565b611c4d565b3480156106f457600080fd5b50610490610703366004614c56565b611f10565b34801561071457600080fd5b50610490610723366004614c1c565b611fb5565b34801561073457600080fd5b506017546105d9906001600160a01b031681565b34801561075457600080fd5b506103e3601f5481565b34801561076a57600080fd5b50610490610779366004614c1c565b612067565b34801561078a57600080fd5b506103e360215481565b3480156107a057600080fd5b506104906107af366004614c1c565b6122d1565b3480156107c057600080fd5b506104906107cf366004614c1c565b612353565b3480156107e057600080fd5b506103e36107ef366004614c56565b602860209081526000928352604080842090915290825290205481565b34801561081857600080fd5b50610490610827366004614e49565b61240b565b34801561083857600080fd5b50610663610847366004614c1c565b61246b565b34801561085857600080fd5b506103e3610867366004614c1c565b6124cb565b34801561087857600080fd5b50610490610887366004614c1c565b612601565b34801561089857600080fd5b506104906108a7366004614c1c565b61269e565b3480156108b857600080fd5b506103e360225481565b3480156108ce57600080fd5b50601e546105d9906001600160a01b031681565b3480156108ee57600080fd5b506104436126a9565b34801561090357600080fd5b506105d9610912366004614c1c565b6001602052600090815260409020546001600160a01b031681565b34801561093957600080fd5b506103e3610948366004614c1c565b6126b5565b34801561095957600080fd5b50610663610968366004614c1c565b60146020526000908152604090205460ff1681565b34801561098957600080fd5b50610490610998366004614e49565b612758565b3480156109a957600080fd5b506104906109b8366004614c56565b6127b6565b3480156109c957600080fd5b506104436128a4565b3480156109de57600080fd5b506105d96109ed366004614c1c565b6002602052600090815260409020546001600160a01b031681565b348015610a1457600080fd5b50610490610a23366004614c1c565b6128b0565b348015610a3457600080fd5b50610490610a43366004614c8f565b612968565b348015610a5457600080fd5b506103e3610a63366004614c56565b600860209081526000928352604080842090915290825290205481565b348015610a8c57600080fd5b50610490610a9b366004614c1c565b612b38565b348015610aac57600080fd5b506103e3610abb366004614c1c565b60296020526000908152604090205481565b348015610ad957600080fd5b506103e360205481565b348015610aef57600080fd5b50610490610afe366004614c1c565b612b43565b348015610b0f57600080fd5b50610490610b1e366004614c1c565b612bf7565b348015610b2f57600080fd5b50610490610b3e366004614c56565b612c6d565b348015610b4f57600080fd5b50610663610b5e366004614c1c565b60076020526000908152604090205460ff1681565b348015610b7f57600080fd5b50610490610b8e366004614e49565b6130ec565b348015610b9f57600080fd5b506103e3610bae366004614c56565b602560209081526000928352604080842090915290825290205481565b348015610bd757600080fd5b50610490610be6366004614c1c565b61314c565b348015610bf757600080fd5b50610490610c06366004614e49565b613371565b348015610c1757600080fd5b50610663610c26366004614c1c565b60196020526000908152604090205460ff1681565b348015610c4757600080fd5b50601c546105d9906001600160a01b031681565b348015610c6757600080fd5b50610490610c76366004614c56565b6133d1565b348015610c8757600080fd5b50610490610c96366004614c1c565b6133f8565b348015610ca757600080fd5b50610490610cb6366004614e49565b613495565b348015610cc757600080fd5b506103e3610cd6366004614c56565b601160209081526000928352604080842090915290825290205481565b348015610cff57600080fd5b50610490610d0e366004614d1b565b613519565b348015610d1f57600080fd5b50610490610d2e366004614cda565b613750565b348015610d3f57600080fd5b506103e360245481565b348015610d5557600080fd5b506103e3610d64366004614c1c565b60066020526000908152604090205481565b348015610d8257600080fd5b5061052a610d91366004614c1c565b6138cd565b348015610da257600080fd5b506103e3610db1366004614c1c565b6001600160a01b03166000908152600a602052604090205490565b348015610dd857600080fd5b50610490610de7366004614e49565b613929565b348015610df857600080fd5b50610490610e07366004614c1c565b613989565b348015610e1857600080fd5b506105d9610e27366004614c1c565b602c602052600090815260409020546001600160a01b031681565b348015610e4e57600080fd5b50610490610e5d366004614c1c565b613a26565b348015610e6e57600080fd5b50601d546105d9906001600160a01b031681565b348015610e8e57600080fd5b506103e3610e9d366004614c1c565b602a6020526000908152604090205481565b348015610ebb57600080fd5b506018546105d9906001600160a01b031681565b348015610edb57600080fd5b506103e3610eea366004614c1c565b6001600160a01b03166000908152600b602052604090205490565b348015610f1157600080fd5b50610663610f20366004614d6e565b613ada565b348015610f3157600080fd5b506103e360235481565b348015610f4757600080fd5b50610490610f56366004614dbf565b613bc3565b600080610f67836124cb565b6022549091504290610f8290610f7d90836150b6565b613cb3565b6001600160a01b0385166000908152602960205260409020541115611026576022546001600160a01b038516600090815260296020526040902054610fc790426150b6565b10611003576022546001600160a01b038516600090815260296020526040902054610ff2919061501b565b610ffc90826150b6565b905061103c565b6001600160a01b038416600090815260296020526040902054610ffc90826150b6565b61102f42613cb3565b61103990826150b6565b90505b6110468183613ccd565b61104f856126b5565b611059919061501b565b949350505050565b606061106d6026613cf7565b905090565b600061107f602684613d0b565b1561117257600061108f846115c7565b90508060400151600014611170576001600160a01b0384166000908152600f602052604081205460ff166110d05781602001516110cb90615128565b6110d6565b81602001515b601d5460225460405163a0d2710760e01b8152929350611167926001600160a01b039092169163a0d27107916111129189918791600401614fec565b60206040518083038186803b15801561112a57600080fd5b505afa15801561113e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111629190614e62565b613d2d565b92505050611172565b505b92915050565b6001600160a01b0383811660009081526001602052604090205484911633146111b457604051636efb4f4160e11b815260040160405180910390fd5b6020546111c1904261501b565b6001600160a01b0380861660008181526012602090815260408083209489168084529482528083209590955591815260138252838120928152919052908120805484929061121090849061501b565b909155506112219050848484613d3e565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590611260575060215461125e8286613f4c565b105b1561127e57604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de856040516112c391815260200190565b60405180910390a35050505050565b3360008181526007602052604090205460ff16156113035760405163ad2fdf3b60e01b815260040160405180910390fd5b61130e601582613d0b565b61132a5760405162941a5760e11b815260040160405180910390fd5b6113338161406a565b1561138e576001600160a01b038116600081815260296020908152604080832054600a835281842054600b909352928190205490516000805160206151e0833981519152936113859390929091615005565b60405180910390a25b6001600160a01b0381166000908152600a602052604090205482111561140d576113b781614240565b6001600160a01b038116600081815260296020908152604080832054600a835281842054600b909352928190205490516000805160206151e0833981519152936114049390929091615005565b60405180910390a25b6114188184846142ce565b601b546001600160a01b038085169183821691166000805160206151c0833981519152856114446143b2565b6040805192835260208301919091520160405180910390a4505050565b6017546001600160a01b0316331461148c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166114b35760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b90611514908490600401614ec5565b60206040518083038186803b15801561152c57600080fd5b505afa158015611540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115649190614deb565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa906115bc908390614ec5565b60405180910390a150565b6115cf614bda565b6115d842613cb3565b6001600160a01b0383166000908152602b6020526040902060010154141561164e57506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b60008061166260225442610f7d91906150b6565b6001600160a01b0385166000908152602b60205260409020600101549091508114156117c657604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b6116cf42613cb3565b6116d990426150b6565b826000815181106116ec576116ec615191565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926117489291909116908690600401614ed9565b60606040518083038186803b15801561176057600080fd5b505afa158015611774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117989190614e06565b600692830b90920b8088529195506117b291839150615066565b600690810b900b60208601525061194f9050565b6001600160a01b0384166000908152602b602052604090206001015481111561194f5760408051600280825260608201835260009260208301908036833701905050905061181342613cb3565b61181d90426150b6565b8160008151811061183057611830615191565b602002602001019063ffffffff16908163ffffffff168152505060225461185642613cb3565b61186090426150b6565b61186a919061501b565b8160018151811061187d5761187d615191565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d91926118d59216908690600401614ed9565b60606040518083038186803b1580156118ed57600080fd5b505afa158015611901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119259190614e06565b600692830b90920b8088529195509150611940908290615066565b600690810b900b602086015250505b81156119685761195e42613cb3565b6040840152611970565b600060408401525b50505b919050565b6018546001600160a01b031633146119a357604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916119fa91614ec5565b60405180910390a1565b611a0f6026826143cc565b5050565b60026000541415611a3f5760405162461bcd60e51b8152600401611a3690614fb5565b60405180910390fd5b6002600055611a4f602683613d0b565b611a6c5760405163e0b6aead60e01b815260040160405180910390fd5b611a77601584613d0b565b611a9457604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611ab690836143cc565b50611ac0836143e1565b6021546001600160a01b03808516600090815260286020908152604080832093871683529290522054611afe90611af890849061501b565b84613f4c565b1015611b1d57604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b909352928190205490516000805160206151e083398151915293611b6a9390929091615005565b60405180910390a2611b876001600160a01b03831633308461443f565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611bbe90849061501b565b90915550611bd190506111628284613f4c565b6001600160a01b0384166000908152600b602052604081208054909190611bf990849061501b565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b60026000541415611c705760405162461bcd60e51b8152600401611a3690614fb5565b6002600055611c80601584613d0b565b611c9d57604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b0383811691161415611ccb5760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611cfa903090600401614ec5565b60206040518083038186803b158015611d1257600080fd5b505afa158015611d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4a9190614e62565b9050611d616001600160a01b03841633308561443f565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611d909190614ec5565b60206040518083038186803b158015611da857600080fd5b505afa158015611dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de09190614e62565b611dea91906150b6565b9050600061271060245483611dff9190615047565b611e099190615033565b9050611e1581836150b6565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190611e4c90849061501b565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611e899216836144b0565b6001600160a01b0386166000908152600c60205260409020611eab90866143cc565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb85604051611efb91815260200190565b60405180910390a45050600160005550505050565b6001600160a01b038281166000908152600160205260409020548391163314611f4c57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b038181166000908152600260205260409020548291163314611ff15760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b3360008181526007602052604090205460ff16156120985760405163ad2fdf3b60e01b815260040160405180910390fd5b6120a3601582613d0b565b6120bf5760405162941a5760e11b815260040160405180910390fd5b6120c88161406a565b15612123576001600160a01b038116600081815260296020908152604080832054600a835281842054600b909352928190205490516000805160206151e08339815191529361211a9390929091615005565b60405180910390a25b601d546001600160a01b038381166000908152600860209081526040808320601b548516845290915280822054905163435b21c160e01b8152600481019190915290928392839291169063435b21c19060240160606040518083038186803b15801561218e57600080fd5b505afa1580156121a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c69190614e7b565b92509250925060006121d66143b2565b905060006121e6828486886144e0565b6001600160a01b0387166000908152600a60205260409020549091508111156122805761221286614240565b6001600160a01b038616600081815260296020908152604080832054600a835281842054600b909352928190205490516000805160206151e08339815191529361225f9390929091615005565b60405180910390a261226f6143b2565b915061227d828486886144e0565b90505b61228b8688836142ce565b601b5460408051838152602081018590526001600160a01b038a8116938a8216939116916000805160206151c0833981519152910160405180910390a450505050505050565b6017546001600160a01b031633146122fc576040516354348f0360e01b815260040160405180910390fd5b61230760268261453d565b61232457604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e56816040516115bc9190614ec5565b6017546001600160a01b0316331461237e576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16156123b85760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b906115bc908390614ec5565b6017546001600160a01b03163314612436576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d906020016115bc565b60006124756143b2565b602e55612483600383613d0b565b15611973577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e546040516124bb91815260200190565b60405180910390a1506001919050565b6000805b6001600160a01b0383166000908152600d602052604090206124f090614552565b8110156125fb576001600160a01b0383166000908152600d60205260408120612519908361455c565b9050612526602682613d0b565b156125e8576000612536826115c7565b905080604001516000146125e6576001600160a01b0382166000908152600f602052604081205460ff1661257757816020015161257290615128565b61257d565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b81529495506125d894929093169263a0d2710792611112928791600401614fec565b6125e2908661501b565b9450505b505b50806125f3816150f9565b9150506124cf565b50919050565b6017546001600160a01b0316331461262c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166126535760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b0906115bc908390614ec5565b611a0f6003826143cc565b606061106d6015613cf7565b6000806126c1836124cb565b6022546001600160a01b038516600090815260296020526040902054919250906126eb90426150b6565b10156111725760008111612717576001600160a01b0383166000908152600a6020526040902054612751565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054612747908390615047565b6127519190615033565b91506125fb565b6017546001600160a01b03163314612783576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee291016115bc565b6001600160a01b0382811660009081526001602052604090205483911633146127f257604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b031614156128255760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d825280832094835293905282902042905590517fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c90612897908590614ec5565b60405180910390a2505050565b606061106d6003613cf7565b6017546001600160a01b031633146128db576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff16156129155760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f906115bc908390614ec5565b6001600160a01b0383811660009081526001602052604090205484911633146129a457604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b0382166129cb5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260136020908152604080832093871683529290522054612a0e5760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211612a53576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615612a8d576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590612ada9084836144b0565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051612b2991815260200190565b60405180910390a45050505050565b611a0f6015826143cc565b6017546001600160a01b03163314612b6e576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16612ba7576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d025906115bc908390614ec5565b6017546001600160a01b03163314612c22576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906115bc908390614ec5565b6001600160a01b038181166000908152600160205260409020548291163314612ca957604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff1680612ce857506001600160a01b03821660009081526007602052604090205460ff165b15612d065760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c6020526040902054811690831614612d4357604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d6020908152604080832093861683529290522054612d7590603c9061501b565b421015612d95576040516356248e9760e01b815260040160405180910390fd5b612d9e836143e1565b612da7826143e1565b6001600160a01b0383166000908152600c60205260408120612dc890614552565b1115612eaa576001600160a01b0383166000908152600c60205260408120612df0908261455c565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a168552928252808420928452919052812080549394509192612e3e90849061501b565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c90915220612e80908261453d565b506001600160a01b0383166000908152600c60205260409020612ea390826143cc565b5050612da7565b6001600160a01b0383166000908152600d60205260408120612ecb90614552565b1115612fad576001600160a01b0383166000908152600d60205260408120612ef3908261455c565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a168552928252808420928452919052812080549394509192612f4190849061501b565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d905220612f8390826143cc565b506001600160a01b0384166000908152600d60205260409020612fa6908261453d565b5050612eaa565b6001600160a01b038084166000908152600b602052604080822054928516825281208054909190612fdf90849061501b565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a9091528082205492851682528120805490919061302390849061501b565b90915550506001600160a01b0383166000908152600a60209081526040808320839055602990915281205561305960158461453d565b506001600160a01b03808416600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055938352602c909152908190208054909216909155517f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f290612897908690614ec5565b6017546001600160a01b03163314613117576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb69906020016115bc565b6017546001600160a01b03163314613177576040516354348f0360e01b815260040160405180910390fd5b6131826026826143cc565b61319f5760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156131d857600080fd5b505afa1580156131ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132109190614c39565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b916132649190600401614ec5565b60206040518083038186803b15801561327c57600080fd5b505afa158015613290573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b49190614deb565b6001600160a01b0382166000908152600f60205260409020805460ff19169115159190911790556132e4816115c7565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b906115bc908390614ec5565b6017546001600160a01b0316331461339c576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b43906020016115bc565b6001600160a01b0382166000908152600d602052604090206133f390826143cc565b505050565b6017546001600160a01b03163314613423576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811661344a5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae250906115bc908390614ec5565b6017546001600160a01b031633146134c0576040516354348f0360e01b815260040160405180910390fd5b620151808110156134e457604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d9906020016115bc565b6002600054141561353c5760405162461bcd60e51b8152600401611a3690614fb5565b600260009081556001600160a01b0385811682526001602052604090912054859116331461357d57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038086166000908152602560209081526040808320938816835292905220546135af90603c9061501b565b42116135ce57604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b038086166000908152600960209081526040808320938816835292905220548311156136145760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff161561364e5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038086166000908152600960209081526040808320938816835292905290812080548592906136859084906150b6565b9091555061369f90506001600160a01b03851683856144b0565b6001600160a01b038086166000908152600960209081526040808320938816835292905220546136ed576001600160a01b0385166000908152600c602052604090206136eb908561453d565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe8660405161373c91815260200190565b60405180910390a450506001600055505050565b3360008181526007602052604090205460ff16156137815760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16156137bb576040516362e6201d60e01b815260040160405180910390fd5b6137c6601582613d0b565b6137e25760405162941a5760e11b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905220548211156138285760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0380821660009081526009602090815260408083209388168352929052908120805484929061385f9084906150b6565b9091555061387990506001600160a01b03851684846144b0565b826001600160a01b0316816001600160a01b0316856001600160a01b03166000805160206151c0833981519152856138af6143b2565b6040805192835260208301919091520160405180910390a450505050565b6138d5614bda565b506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b6017546001600160a01b03163314613954576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e7906020016115bc565b6017546001600160a01b031633146139b4576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166139db5760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf906115bc908390614ec5565b6017546001600160a01b03163314613a51576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff16613a8a57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e906115bc908390614ec5565b6000613ae46143b2565b602e55613af2600387613d0b565b8015613b2357506001600160a01b038087166000908152600860209081526040808320938916835292905220548411155b8015613b4757506001600160a01b0386166000908152600560205260409020548311155b8015613b7657506001600160a01b0386166000908152600660205260409020548290613b7390426150b6565b10155b15613bba577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e54604051613bae91815260200190565b60405180910390a15060015b95945050505050565b6017546001600160a01b03163314613bee576040516354348f0360e01b815260040160405180910390fd5b613bf9601583613d0b565b613c1657604051636211d34960e01b815260040160405180910390fd5b613c1f826143e1565b6001600160a01b0382166000908152600a602052604081208054839290613c4790849061501b565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d192613ca7928252602082015260400190565b60405180910390a25050565b600060225482613cc39190615114565b61117290836150b6565b60006022548310156125fb57602254613ce68385615047565b613cf09190615033565b9050611172565b60606000613d0483614568565b9392505050565b6001600160a01b03811660009081526001830160205260408120541515613d04565b6000611172826022546023546145c4565b60026000541415613d615760405162461bcd60e51b8152600401611a3690614fb5565b600260009081556001600160a01b0384168152600d60205260409020613d879083613d0b565b613da3576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b03808416600090815260286020908152604080832093861683529290522054811115613de95760405163435b562560e01b815260040160405180910390fd5b613df283614672565b6000613e016111628385613f4c565b6001600160a01b0385166000908152600b602052604090205490915015613eb7576001600160a01b0384166000908152600b6020908152604080832054600a90925290912054613e52908390615047565b613e5c9190615033565b6001600160a01b0385166000908152600a602052604081208054909190613e849084906150b6565b90915550506001600160a01b0384166000908152600b602052604081208054839290613eb19084906150b6565b90915550505b6001600160a01b03808516600090815260286020908152604080832093871683529290529081208054849290613eee9084906150b6565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054613f41576001600160a01b0384166000908152600d60205260409020613f3f908461453d565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415611172576001600160a01b0382166000908152600f602052604081205460ff16613fbe576001600160a01b0383166000908152602b6020526040902054613fb990600160381b900460060b615128565b613fe2565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d271079161401a9188918691600401614fec565b60206040518083038186803b15801561403257600080fd5b505afa158015614046573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110599190614e62565b600061407542613cb3565b6001600160a01b0383166000908152602960205260409020541015611973576140a560225442610f7d91906150b6565b6001600160a01b0383166000908152602960205260409020541161411b576140cc82614672565b6001600160a01b0382166000908152600b6020908152604080832054600a909252909120556140fa42613cb3565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b03831660009081526029602052604090205461414190426150b6565b1061419d5761414f82614672565b6001600160a01b0382166000908152600b6020908152604080832054600a8352818420556022546029909252822080549192909161418e90849061501b565b90915550600191506119739050565b6141a642613cb3565b6001600160a01b0383166000908152602a60205260409020541015611973576001600160a01b0382166000908152600b60205260409020546141e783614672565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054829161421791615047565b6142219190615033565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b0381166000908152602960205260409020546142859061426790426150b6565b6001600160a01b0383166000908152600b6020526040902054613ccd565b6001600160a01b0382166000908152600a6020526040812080549091906142ad90849061501b565b90915550506001600160a01b03166000908152602960205260409020429055565b6001600160a01b0383166000908152600a60205260409020548111156143075760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0383166000908152602a60209081526040808320429055600a9091528120805483929061433c9084906150b6565b90915550506001600160a01b038083166000908152600860209081526040808320601b549094168352929052908120805483929061437b90849061501b565b90915550506001600160a01b038216600090815260056020526040812080548392906143a890849061501b565b9091555050505050565b6000603f5a6143c2906040615047565b61106d9190615033565b6000613d04836001600160a01b038416614697565b6143ea8161406a565b506143f481614240565b6001600160a01b0381166000908152600a6020908152604080832054600b9092529091205461442391906146e6565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b03808516602483015283166044820152606481018290526144aa9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526146fc565b50505050565b6040516001600160a01b0383166024820152604481018290526133f390849063a9059cbb60e01b90606401614473565b6000808486602e546144f291906150b6565b6144fc919061501b565b9050670de0b6b3a7640000846127106145158685615047565b61451f9190615033565b6145299190615047565b6145339190615033565b9695505050505050565b6000613d04836001600160a01b0384166147ce565b6000611172825490565b6000613d0483836148c1565b6060816000018054806020026020016040519081016040528092919081815260200182805480156145b857602002820191906000526020600020905b8154815260200190600101908083116145a4575b50505050509050919050565b6000808060001985870985870292508281108382030391505080600014156145fe57600084116145f357600080fd5b508290049050613d04565b80841161460a57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b61467b816148eb565b6001600160a01b039091166000908152600b6020526040902055565b60008181526001830160205260408120546146de57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611172565b506000611172565b60008183106146f55781613d04565b5090919050565b6000614751826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614acf9092919063ffffffff16565b8051909150156133f3578080602001905181019061476f9190614deb565b6133f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611a36565b600081815260018301602052604081205480156148b75760006147f26001836150b6565b8554909150600090614806906001906150b6565b905081811461486b57600086600001828154811061482657614826615191565b906000526020600020015490508087600001848154811061484957614849615191565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061487c5761487c61517b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611172565b6000915050611172565b60008260000182815481106148d8576148d8615191565b9060005260206000200154905092915050565b60006148f642613cb3565b601e546001600160a01b03166000908152602b60205260409020600101541461498d57601e5461492e906001600160a01b03166115c7565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d602052604090206149b190614552565b8110156125fb576001600160a01b0383166000908152600d602052604081206149da908361455c565b90506149e7602682613d0b565b15614abc576149f542613cb3565b6001600160a01b0382166000908152602b602052604090206001015414614a7b57614a1f816115c7565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b03808516600090815260286020908152604080832093851683529290522054614aaf906111629083613f4c565b614ab9908461501b565b92505b5080614ac7816150f9565b915050614990565b6060611059848460008585843b614b285760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611a36565b600080866001600160a01b03168587604051614b449190614ea9565b60006040518083038185875af1925050503d8060008114614b81576040519150601f19603f3d011682016040523d82523d6000602084013e614b86565b606091505b5091509150614b96828286614ba1565b979650505050505050565b60608315614bb0575081613d04565b825115614bc05782518084602001fd5b8160405162461bcd60e51b8152600401611a369190614f82565b604080516060810182526000808252602082018190529181019190915290565b8051801515811461197357600080fd5b8051600681900b811461197357600080fd5b600060208284031215614c2e57600080fd5b8135613d04816151a7565b600060208284031215614c4b57600080fd5b8151613d04816151a7565b60008060408385031215614c6957600080fd5b8235614c74816151a7565b91506020830135614c84816151a7565b809150509250929050565b600080600060608486031215614ca457600080fd5b8335614caf816151a7565b92506020840135614cbf816151a7565b91506040840135614ccf816151a7565b809150509250925092565b600080600060608486031215614cef57600080fd5b8335614cfa816151a7565b92506020840135614d0a816151a7565b929592945050506040919091013590565b60008060008060808587031215614d3157600080fd5b8435614d3c816151a7565b93506020850135614d4c816151a7565b9250604085013591506060850135614d63816151a7565b939692955090935050565b600080600080600060a08688031215614d8657600080fd5b8535614d91816151a7565b94506020860135614da1816151a7565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215614dd257600080fd5b8235614ddd816151a7565b946020939093013593505050565b600060208284031215614dfd57600080fd5b613d0482614bfa565b600080600060608486031215614e1b57600080fd5b614e2484614c0a565b9250614e3260208501614c0a565b9150614e4060408501614bfa565b90509250925092565b600060208284031215614e5b57600080fd5b5035919050565b600060208284031215614e7457600080fd5b5051919050565b600080600060608486031215614e9057600080fd5b8351925060208401519150604084015190509250925092565b60008251614ebb8184602087016150cd565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015614f2857845163ffffffff1683529383019391830191600101614f06565b5090979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614f765783516001600160a01b031683529284019291840191600101614f51565b50909695505050505050565b6020815260008251806020840152614fa18160408501602087016150cd565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b9283526020830191909152604082015260600190565b6000821982111561502e5761502e61514f565b500190565b60008261504257615042615165565b500490565b60008160001904831182151516156150615761506161514f565b500290565b60008160060b8360060b6000811281667fffffffffffff19018312811516156150915761509161514f565b81667fffffffffffff0183138116156150ac576150ac61514f565b5090039392505050565b6000828210156150c8576150c861514f565b500390565b60005b838110156150e85781810151838201526020016150d0565b838111156144aa5750506000910152565b600060001982141561510d5761510d61514f565b5060010190565b60008261512357615123615165565b500690565b60008160060b667fffffffffffff198114156151465761514661514f565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146151bc57600080fd5b5056fe46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfaee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c3820a2646970667358221220e76a24d5ac93c336cee0e33e01cdb71776079ab50ebf16b2817c47b4495564c864736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x3F480 PUSH1 0x1F SSTORE PUSH3 0x127500 PUSH1 0x20 SSTORE PUSH8 0x29A2241AF62C0000 PUSH1 0x21 SSTORE PUSH3 0x69780 PUSH1 0x22 SSTORE PUSH3 0x2CD300 PUSH1 0x23 SSTORE PUSH1 0x1E PUSH1 0x24 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x5491 CODESIZE SUB DUP1 PUSH3 0x5491 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x61 SWAP2 PUSH3 0x1C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE DUP4 DUP4 DUP4 DUP4 CALLER DUP1 DUP1 PUSH3 0x8A JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1D DUP1 SLOAD DUP3 AND DUP9 DUP5 AND OR DUP2 SSTORE PUSH1 0x1B DUP1 SLOAD DUP4 AND DUP9 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1C DUP1 SLOAD DUP4 AND DUP8 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1E DUP1 SLOAD DUP4 AND DUP7 DUP6 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP6 AND SWAP1 SWAP2 OR SWAP1 SWAP4 SSTORE SWAP1 SLOAD SWAP1 SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x696A437B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x14A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x170 SWAP2 SWAP1 PUSH3 0x221 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x24C SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E6 DUP6 PUSH3 0x1A7 JUMP JUMPDEST SWAP4 POP PUSH3 0x1F6 PUSH1 0x20 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP3 POP PUSH3 0x206 PUSH1 0x40 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP2 POP PUSH3 0x216 PUSH1 0x60 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5235 DUP1 PUSH3 0x25C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3B7 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90A4684E GT PUSH2 0x1EA JUMPI DUP1 PUSH4 0xCB4BE2BB GT PUSH2 0x109 JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0xC7B JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0xC9B JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0xCBB JUMPI DUP1 PUSH4 0xD55995FE EQ PUSH2 0xCF3 JUMPI DUP1 PUSH4 0xDD2080D6 EQ PUSH2 0xD13 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0xD33 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0xD49 JUMPI DUP1 PUSH4 0xE485DC0E EQ PUSH2 0xD76 JUMPI DUP1 PUSH4 0xE7F0CBF8 EQ PUSH2 0xD96 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0xDCC JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0xDEC JUMPI DUP1 PUSH4 0xEC8CA643 EQ PUSH2 0xE0C JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0xE42 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0xE62 JUMPI DUP1 PUSH4 0xF136A09D EQ PUSH2 0xE82 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0xEAF JUMPI DUP1 PUSH4 0xF6BB2032 EQ PUSH2 0xECF JUMPI DUP1 PUSH4 0xF9D46CF2 EQ PUSH2 0xF05 JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0xF25 JUMPI DUP1 PUSH4 0xFE75BC46 EQ PUSH2 0xF3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x90A4684E EQ PUSH2 0x99D JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x9BD JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x9D2 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0xA08 JUMPI DUP1 PUSH4 0xA2145809 EQ PUSH2 0xA28 JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0xA48 JUMPI DUP1 PUSH4 0xA662031B EQ PUSH2 0xA80 JUMPI DUP1 PUSH4 0xA676F9FF EQ PUSH2 0xAA0 JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0xACD JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0xAE3 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0xB03 JUMPI DUP1 PUSH4 0xAF320E81 EQ PUSH2 0xB23 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0xB43 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0xB73 JUMPI DUP1 PUSH4 0xB440027F EQ PUSH2 0xB93 JUMPI DUP1 PUSH4 0xB600702A EQ PUSH2 0xBCB JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0xBEB JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0xC0B JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0xC3B JUMPI DUP1 PUSH4 0xCACDF93D EQ PUSH2 0xC5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x59A2255E GT PUSH2 0x2D6 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x708 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x728 JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x748 JUMPI DUP1 PUSH4 0x5FEEB794 EQ PUSH2 0x75E JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x77E JUMPI DUP1 PUSH4 0x64BB43EE EQ PUSH2 0x794 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x7B4 JUMPI DUP1 PUSH4 0x694798E6 EQ PUSH2 0x7D4 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x80C JUMPI DUP1 PUSH4 0x6BA42AAA EQ PUSH2 0x82C JUMPI DUP1 PUSH4 0x6CF262BC EQ PUSH2 0x84C JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x86C JUMPI DUP1 PUSH4 0x748747E6 EQ PUSH2 0x88C JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x8AC JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x8C2 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x8E2 JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x8F7 JUMPI DUP1 PUSH4 0x8BB6DFA8 EQ PUSH2 0x92D JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x94D JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34D4C61 EQ PUSH2 0x3C3 JUMPI DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x3F6 JUMPI DUP1 PUSH4 0xC620BCE EQ PUSH2 0x42E JUMPI DUP1 PUSH4 0xD6A1F87 EQ PUSH2 0x450 JUMPI DUP1 PUSH4 0x1101EB41 EQ PUSH2 0x470 JUMPI DUP1 PUSH4 0x11466D72 EQ PUSH2 0x492 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x4B2 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x4EA JUMPI DUP1 PUSH4 0x165E62E7 EQ PUSH2 0x50A JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x554 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x5B9 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x5E6 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x61E JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x633 JUMPI DUP1 PUSH4 0x280B656C EQ PUSH2 0x673 JUMPI DUP1 PUSH4 0x4A8D1348 EQ PUSH2 0x693 JUMPI DUP1 PUSH4 0x52A4DE29 EQ PUSH2 0x6A8 JUMPI DUP1 PUSH4 0x575288BF EQ PUSH2 0x6C8 JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x6E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x3BE JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x3DE CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0xF5B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x402 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x411 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x443 PUSH2 0x1061 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3ED SWAP2 SWAP1 PUSH2 0x4F35 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x46B CALLDATASIZE PUSH1 0x4 PUSH2 0x4DBF JUMP JUMPDEST PUSH2 0x1072 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x48B CALLDATASIZE PUSH1 0x4 PUSH2 0x4CDA JUMP JUMPDEST PUSH2 0x1178 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x49E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x4AD CALLDATASIZE PUSH1 0x4 PUSH2 0x4DBF JUMP JUMPDEST PUSH2 0x12D2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x4CD CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x505 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x1461 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x52A PUSH2 0x525 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND DUP3 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 SIGNEXTEND SWAP1 DUP3 ADD MSTORE SWAP2 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x3ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x560 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x56F CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x5A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1B SLOAD PUSH2 0x5D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3ED SWAP2 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x601 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x1978 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x663 PUSH2 0x64E CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x68E CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x1A04 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x69F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2E SLOAD PUSH2 0x3E3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x6C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CDA JUMP JUMPDEST PUSH2 0x1A13 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x6E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CDA JUMP JUMPDEST PUSH2 0x1C4D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x703 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH2 0x1F10 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x714 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x723 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x1FB5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x734 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x17 SLOAD PUSH2 0x5D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x754 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x76A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x779 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x2067 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x78A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x7AF CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x22D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x7CF CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x2353 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x7EF CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x827 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E49 JUMP JUMPDEST PUSH2 0x240B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x838 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x663 PUSH2 0x847 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x246B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x858 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x867 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x24CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x878 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x887 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x2601 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x898 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x8A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x269E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1E SLOAD PUSH2 0x5D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x443 PUSH2 0x26A9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x903 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D9 PUSH2 0x912 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x939 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x948 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x26B5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x959 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x663 PUSH2 0x968 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x989 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x998 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E49 JUMP JUMPDEST PUSH2 0x2758 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x9B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH2 0x27B6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x443 PUSH2 0x28A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D9 PUSH2 0x9ED CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xA23 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x28B0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xA43 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C8F JUMP JUMPDEST PUSH2 0x2968 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xA63 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xA9B CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x2B38 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xABB CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xAFE CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x2B43 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xB1E CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x2BF7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xB3E CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH2 0x2C6D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x663 PUSH2 0xB5E CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xB8E CALLDATASIZE PUSH1 0x4 PUSH2 0x4E49 JUMP JUMPDEST PUSH2 0x30EC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xBAE CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xBE6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x314C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xC06 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E49 JUMP JUMPDEST PUSH2 0x3371 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x663 PUSH2 0xC26 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1C SLOAD PUSH2 0x5D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xC76 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH2 0x33D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xC96 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x33F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xCB6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E49 JUMP JUMPDEST PUSH2 0x3495 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xCD6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xD0E CALLDATASIZE PUSH1 0x4 PUSH2 0x4D1B JUMP JUMPDEST PUSH2 0x3519 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xD2E CALLDATASIZE PUSH1 0x4 PUSH2 0x4CDA JUMP JUMPDEST PUSH2 0x3750 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xD64 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x52A PUSH2 0xD91 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x38CD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xDB1 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xDE7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E49 JUMP JUMPDEST PUSH2 0x3929 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xE07 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x3989 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D9 PUSH2 0xE27 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xE5D CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x3A26 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1D SLOAD PUSH2 0x5D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xE9D CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x18 SLOAD PUSH2 0x5D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xEEA CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x663 PUSH2 0xF20 CALLDATASIZE PUSH1 0x4 PUSH2 0x4D6E JUMP JUMPDEST PUSH2 0x3ADA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xF56 CALLDATASIZE PUSH1 0x4 PUSH2 0x4DBF JUMP JUMPDEST PUSH2 0x3BC3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF67 DUP4 PUSH2 0x24CB JUMP JUMPDEST PUSH1 0x22 SLOAD SWAP1 SWAP2 POP TIMESTAMP SWAP1 PUSH2 0xF82 SWAP1 PUSH2 0xF7D SWAP1 DUP4 PUSH2 0x50B6 JUMP JUMPDEST PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO PUSH2 0x1026 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xFC7 SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST LT PUSH2 0x1003 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xFF2 SWAP2 SWAP1 PUSH2 0x501B JUMP JUMPDEST PUSH2 0xFFC SWAP1 DUP3 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 POP PUSH2 0x103C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xFFC SWAP1 DUP3 PUSH2 0x50B6 JUMP JUMPDEST PUSH2 0x102F TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH2 0x1039 SWAP1 DUP3 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x1046 DUP2 DUP4 PUSH2 0x3CCD JUMP JUMPDEST PUSH2 0x104F DUP6 PUSH2 0x26B5 JUMP JUMPDEST PUSH2 0x1059 SWAP2 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x106D PUSH1 0x26 PUSH2 0x3CF7 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x107F PUSH1 0x26 DUP5 PUSH2 0x3D0B JUMP JUMPDEST ISZERO PUSH2 0x1172 JUMPI PUSH1 0x0 PUSH2 0x108F DUP5 PUSH2 0x15C7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x1170 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x10D0 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x10CB SWAP1 PUSH2 0x5128 JUMP JUMPDEST PUSH2 0x10D6 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH2 0x1167 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x1112 SWAP2 DUP10 SWAP2 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x4FEC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x112A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x113E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1162 SWAP2 SWAP1 PUSH2 0x4E62 JUMP JUMPDEST PUSH2 0x3D2D JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1172 JUMP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x11B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 SLOAD PUSH2 0x11C1 SWAP1 TIMESTAMP PUSH2 0x501B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x1210 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1221 SWAP1 POP DUP5 DUP5 DUP5 PUSH2 0x3D3E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1260 JUMPI POP PUSH1 0x21 SLOAD PUSH2 0x125E DUP3 DUP7 PUSH2 0x3F4C JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0x127E JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE DUP6 PUSH1 0x40 MLOAD PUSH2 0x12C3 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1303 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x130E PUSH1 0x15 DUP3 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x132A JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1333 DUP2 PUSH2 0x406A JUMP JUMPDEST ISZERO PUSH2 0x138E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51E0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1385 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5005 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x140D JUMPI PUSH2 0x13B7 DUP2 PUSH2 0x4240 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51E0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1404 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5005 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH2 0x1418 DUP2 DUP5 DUP5 PUSH2 0x42CE JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 DUP4 DUP3 AND SWAP2 AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51C0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH2 0x1444 PUSH2 0x43B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x148C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x14B3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x1514 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x152C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1540 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1564 SWAP2 SWAP1 PUSH2 0x4DEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x15CF PUSH2 0x4BDA JUMP JUMPDEST PUSH2 0x15D8 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ ISZERO PUSH2 0x164E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1662 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xF7D SWAP2 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 SWAP2 POP DUP2 EQ ISZERO PUSH2 0x17C6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x6 SIGNEXTEND PUSH2 0x16CF TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH2 0x16D9 SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x16EC JUMPI PUSH2 0x16EC PUSH2 0x5191 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD SWAP3 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP2 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x1748 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4ED9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1760 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1774 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1798 SWAP2 SWAP1 PUSH2 0x4E06 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP PUSH2 0x17B2 SWAP2 DUP4 SWAP2 POP PUSH2 0x5066 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP PUSH2 0x194F SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 GT ISZERO PUSH2 0x194F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x1813 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH2 0x181D SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1830 JUMPI PUSH2 0x1830 PUSH2 0x5191 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x22 SLOAD PUSH2 0x1856 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH2 0x1860 SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST PUSH2 0x186A SWAP2 SWAP1 PUSH2 0x501B JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x187D JUMPI PUSH2 0x187D PUSH2 0x5191 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP3 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x18D5 SWAP3 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4ED9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1901 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1925 SWAP2 SWAP1 PUSH2 0x4E06 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP SWAP2 POP PUSH2 0x1940 SWAP1 DUP3 SWAP1 PUSH2 0x5066 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x1968 JUMPI PUSH2 0x195E TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1970 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP5 ADD MSTORE JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x19A3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x19FA SWAP2 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x1A0F PUSH1 0x26 DUP3 PUSH2 0x43CC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x1A3F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A36 SWAP1 PUSH2 0x4FB5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1A4F PUSH1 0x26 DUP4 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x1A6C JUMPI PUSH1 0x40 MLOAD PUSH4 0xE0B6AEAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1A77 PUSH1 0x15 DUP5 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x1A94 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1AB6 SWAP1 DUP4 PUSH2 0x43CC JUMP JUMPDEST POP PUSH2 0x1AC0 DUP4 PUSH2 0x43E1 JUMP JUMPDEST PUSH1 0x21 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1AFE SWAP1 PUSH2 0x1AF8 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST DUP5 PUSH2 0x3F4C JUMP JUMPDEST LT ISZERO PUSH2 0x1B1D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51E0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1B6A SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5005 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x1B87 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x443F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1BBE SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1BD1 SWAP1 POP PUSH2 0x1162 DUP3 DUP5 PUSH2 0x3F4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1BF9 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 SWAP1 DUP7 AND SWAP1 PUSH32 0x4E186BC75A2220191B826BAFF3EE63C3E970E94E58A9007FF94C9A7B8E6EBB3F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x1C70 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A36 SWAP1 PUSH2 0x4FB5 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1C80 PUSH1 0x15 DUP5 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x1C9D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1CCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x822D97 PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1CFA SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D26 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D4A SWAP2 SWAP1 PUSH2 0x4E62 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D61 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x443F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1D90 SWAP2 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DBC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DE0 SWAP2 SWAP1 PUSH2 0x4E62 JUMP JUMPDEST PUSH2 0x1DEA SWAP2 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2710 PUSH1 0x24 SLOAD DUP4 PUSH2 0x1DFF SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x1E09 SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E15 DUP2 DUP4 PUSH2 0x50B6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1E4C SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x17 SLOAD PUSH2 0x1E89 SWAP3 AND DUP4 PUSH2 0x44B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1EAB SWAP1 DUP7 PUSH2 0x43CC JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEC1A37D4A331A5059081E0FB5DA1735E7890900CD215A4FB1E9F2779FD7B83EB DUP6 PUSH1 0x40 MLOAD PUSH2 0x1EFB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x1F4C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x1FF1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2098 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x20A3 PUSH1 0x15 DUP3 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x20BF JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x20C8 DUP2 PUSH2 0x406A JUMP JUMPDEST ISZERO PUSH2 0x2123 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51E0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x211A SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5005 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1B SLOAD DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0x435B21C1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP3 DUP4 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x435B21C1 SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x218E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21A2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21C6 SWAP2 SWAP1 PUSH2 0x4E7B JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x21D6 PUSH2 0x43B2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x21E6 DUP3 DUP5 DUP7 DUP9 PUSH2 0x44E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 GT ISZERO PUSH2 0x2280 JUMPI PUSH2 0x2212 DUP7 PUSH2 0x4240 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51E0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x225F SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5005 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x226F PUSH2 0x43B2 JUMP JUMPDEST SWAP2 POP PUSH2 0x227D DUP3 DUP5 DUP7 DUP9 PUSH2 0x44E0 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x228B DUP7 DUP9 DUP4 PUSH2 0x42CE JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP4 DUP11 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51C0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x22FC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2307 PUSH1 0x26 DUP3 PUSH2 0x453D JUMP JUMPDEST PUSH2 0x2324 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8D08B1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x51199D699BDFD516FA88DD0D2F8487C40C147B4867ACAA23ADC8D4DF6B098E56 DUP2 PUSH1 0x40 MLOAD PUSH2 0x15BC SWAP2 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x237E JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x23B8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2436 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2475 PUSH2 0x43B2 JUMP JUMPDEST PUSH1 0x2E SSTORE PUSH2 0x2483 PUSH1 0x3 DUP4 PUSH2 0x3D0B JUMP JUMPDEST ISZERO PUSH2 0x1973 JUMPI PUSH32 0x4851CAD52E624C8F7A1D44C28A80DB05988BA2451FC0DB6B0EC338D8ECA95AFB PUSH1 0x2E SLOAD PUSH1 0x40 MLOAD PUSH2 0x24BB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x24F0 SWAP1 PUSH2 0x4552 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x25FB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2519 SWAP1 DUP4 PUSH2 0x455C JUMP JUMPDEST SWAP1 POP PUSH2 0x2526 PUSH1 0x26 DUP3 PUSH2 0x3D0B JUMP JUMPDEST ISZERO PUSH2 0x25E8 JUMPI PUSH1 0x0 PUSH2 0x2536 DUP3 PUSH2 0x15C7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x25E6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2577 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x2572 SWAP1 PUSH2 0x5128 JUMP JUMPDEST PUSH2 0x257D JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SLOAD PUSH1 0x22 SLOAD SWAP2 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH2 0x25D8 SWAP5 SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0xA0D27107 SWAP3 PUSH2 0x1112 SWAP3 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x4FEC JUMP JUMPDEST PUSH2 0x25E2 SWAP1 DUP7 PUSH2 0x501B JUMP JUMPDEST SWAP5 POP POP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x25F3 DUP2 PUSH2 0x50F9 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x24CF JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x262C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2653 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH2 0x1A0F PUSH1 0x3 DUP3 PUSH2 0x43CC JUMP JUMPDEST PUSH1 0x60 PUSH2 0x106D PUSH1 0x15 PUSH2 0x3CF7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x26C1 DUP4 PUSH2 0x24CB JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x26EB SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST LT ISZERO PUSH2 0x1172 JUMPI PUSH1 0x0 DUP2 GT PUSH2 0x2717 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2751 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x2747 SWAP1 DUP4 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x2751 SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST SWAP2 POP PUSH2 0x25FB JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2783 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x27F2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2825 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAFE7AD49 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP6 DUP9 AND SWAP6 DUP7 OR SWAP1 SSTORE PUSH1 0x2D DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE SWAP1 MLOAD PUSH32 0xFF0456758201108DE53C0FF04C69988D4678FF455B2CE6F733328CF85722C04C SWAP1 PUSH2 0x2897 SWAP1 DUP6 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x106D PUSH1 0x3 PUSH2 0x3CF7 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x28DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2915 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x29A4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x29CB JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2A0E JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x2A53 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2A8D JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x12 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE SWAP1 PUSH2 0x2ADA SWAP1 DUP5 DUP4 PUSH2 0x44B0 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFDB7893BF11F50C621E59CC7F1CF540E94295CB27CA869EC7ED7618CA7928862 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2B29 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1A0F PUSH1 0x15 DUP3 PUSH2 0x43CC JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2B6E JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2BA7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2C22 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x2CA9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x2CE8 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x2D06 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 AND SWAP1 DUP4 AND EQ PUSH2 0x2D43 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCED616B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2D75 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x501B JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x2D95 JUMPI PUSH1 0x40 MLOAD PUSH4 0x56248E97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D9E DUP4 PUSH2 0x43E1 JUMP JUMPDEST PUSH2 0x2DA7 DUP3 PUSH2 0x43E1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2DC8 SWAP1 PUSH2 0x4552 JUMP JUMPDEST GT ISZERO PUSH2 0x2EAA JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2DF0 SWAP1 DUP3 PUSH2 0x455C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x2E3E SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP3 SWAP1 SSTORE SWAP2 DUP2 MSTORE PUSH1 0xC SWAP1 SWAP2 MSTORE KECCAK256 PUSH2 0x2E80 SWAP1 DUP3 PUSH2 0x453D JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2EA3 SWAP1 DUP3 PUSH2 0x43CC JUMP JUMPDEST POP POP PUSH2 0x2DA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2ECB SWAP1 PUSH2 0x4552 JUMP JUMPDEST GT ISZERO PUSH2 0x2FAD JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2EF3 SWAP1 DUP3 PUSH2 0x455C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x2F41 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE SWAP3 DUP7 AND DUP3 MSTORE PUSH1 0xD SWAP1 MSTORE KECCAK256 PUSH2 0x2F83 SWAP1 DUP3 PUSH2 0x43CC JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2FA6 SWAP1 DUP3 PUSH2 0x453D JUMP JUMPDEST POP POP PUSH2 0x2EAA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x2FDF SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x3023 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0x29 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x3059 PUSH1 0x15 DUP5 PUSH2 0x453D JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x2D DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 DUP9 AND DUP1 DUP6 MSTORE SWAP6 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x2C SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9B712B63E3FB1325FA042D3C238CE8144937875065900528EA1E4F3B00F379F2 SWAP1 PUSH2 0x2897 SWAP1 DUP7 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3117 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3177 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3182 PUSH1 0x26 DUP3 PUSH2 0x43CC JUMP JUMPDEST PUSH2 0x319F JUMPI PUSH1 0x40 MLOAD PUSH4 0xF25E6B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x31D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x31EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3210 SWAP2 SWAP1 PUSH2 0x4C39 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 DUP4 AND SWAP4 DUP5 OR SWAP1 SSTORE PUSH1 0x1D SLOAD SWAP1 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0x696A437B SWAP2 PUSH2 0x3264 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x327C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3290 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32B4 SWAP2 SWAP1 PUSH2 0x4DEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x32E4 DUP2 PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 DUP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xABFA8DB4D238FA78BF4E15FCC91328DD35F3978F200E2857A56BB719732B7B0B SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x339C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x33F3 SWAP1 DUP3 PUSH2 0x43CC JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3423 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x344A JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x34C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x34E4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x353C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A36 SWAP1 PUSH2 0x4FB5 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 AND CALLER EQ PUSH2 0x357D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x35AF SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x501B JUMP JUMPDEST TIMESTAMP GT PUSH2 0x35CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E0B4075 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP4 GT ISZERO PUSH2 0x3614 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24AE82D PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x364E JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x3685 SWAP1 DUP5 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x369F SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP4 DUP6 PUSH2 0x44B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x36ED JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x36EB SWAP1 DUP6 PUSH2 0x453D JUMP JUMPDEST POP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x53E982DD9EC088D634C74C98FBBC161F808B4B6469A26C657120B9A31CB34BFE DUP7 PUSH1 0x40 MLOAD PUSH2 0x373C SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3781 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x37BB JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x37C6 PUSH1 0x15 DUP3 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x37E2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x3828 JUMPI PUSH1 0x40 MLOAD PUSH4 0x356680B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x385F SWAP1 DUP5 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x3879 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 DUP5 PUSH2 0x44B0 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51C0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH2 0x38AF PUSH2 0x43B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH2 0x38D5 PUSH2 0x4BDA JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3954 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x39B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x39DB JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3A51 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3A8A JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AE4 PUSH2 0x43B2 JUMP JUMPDEST PUSH1 0x2E SSTORE PUSH2 0x3AF2 PUSH1 0x3 DUP8 PUSH2 0x3D0B JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3B23 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP10 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP5 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x3B47 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x3B76 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH2 0x3B73 SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST LT ISZERO JUMPDEST ISZERO PUSH2 0x3BBA JUMPI PUSH32 0x4851CAD52E624C8F7A1D44C28A80DB05988BA2451FC0DB6B0EC338D8ECA95AFB PUSH1 0x2E SLOAD PUSH1 0x40 MLOAD PUSH2 0x3BAE SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3BEE JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3BF9 PUSH1 0x15 DUP4 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x3C16 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3C1F DUP3 PUSH2 0x43E1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x3C47 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x5ABCF5031FDBD3BADB9D1E09094208DE329AEE72730E87650F346584205D23D1 SWAP3 PUSH2 0x3CA7 SWAP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP3 PUSH2 0x3CC3 SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST PUSH2 0x1172 SWAP1 DUP4 PUSH2 0x50B6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP4 LT ISZERO PUSH2 0x25FB JUMPI PUSH1 0x22 SLOAD PUSH2 0x3CE6 DUP4 DUP6 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x3CF0 SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST SWAP1 POP PUSH2 0x1172 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x3D04 DUP4 PUSH2 0x4568 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x3D04 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1172 DUP3 PUSH1 0x22 SLOAD PUSH1 0x23 SLOAD PUSH2 0x45C4 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x3D61 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A36 SWAP1 PUSH2 0x4FB5 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3D87 SWAP1 DUP4 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x3DA3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x41CFA5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x3DE9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x435B5625 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3DF2 DUP4 PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E01 PUSH2 0x1162 DUP4 DUP6 PUSH2 0x3F4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x3EB7 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x3E52 SWAP1 DUP4 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x3E5C SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x3E84 SWAP1 DUP5 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x3EB1 SWAP1 DUP5 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x3EEE SWAP1 DUP5 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3F41 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3F3F SWAP1 DUP5 PUSH2 0x453D JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0x1172 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3FBE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3FB9 SWAP1 PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND PUSH2 0x5128 JUMP JUMPDEST PUSH2 0x3FE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x401A SWAP2 DUP9 SWAP2 DUP7 SWAP2 PUSH1 0x4 ADD PUSH2 0x4FEC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4032 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4046 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1059 SWAP2 SWAP1 PUSH2 0x4E62 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4075 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1973 JUMPI PUSH2 0x40A5 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xF7D SWAP2 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT PUSH2 0x411B JUMPI PUSH2 0x40CC DUP3 PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x40FA TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4141 SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST LT PUSH2 0x419D JUMPI PUSH2 0x414F DUP3 PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SSTORE PUSH1 0x22 SLOAD PUSH1 0x29 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x418E SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x1 SWAP2 POP PUSH2 0x1973 SWAP1 POP JUMP JUMPDEST PUSH2 0x41A6 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1973 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x41E7 DUP4 PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP3 SWAP2 PUSH2 0x4217 SWAP2 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x4221 SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4285 SWAP1 PUSH2 0x4267 SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3CCD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x42AD SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x4307 JUMPI PUSH1 0x40 MLOAD PUSH4 0x356680B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x433C SWAP1 DUP5 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1B SLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x437B SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x43A8 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3F GAS PUSH2 0x43C2 SWAP1 PUSH1 0x40 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x106D SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D04 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x4697 JUMP JUMPDEST PUSH2 0x43EA DUP2 PUSH2 0x406A JUMP JUMPDEST POP PUSH2 0x43F4 DUP2 PUSH2 0x4240 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x4423 SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x44AA SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x46FC JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x33F3 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x4473 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 DUP7 PUSH1 0x2E SLOAD PUSH2 0x44F2 SWAP2 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST PUSH2 0x44FC SWAP2 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP5 PUSH2 0x2710 PUSH2 0x4515 DUP7 DUP6 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x451F SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST PUSH2 0x4529 SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x4533 SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D04 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x47CE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1172 DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D04 DUP4 DUP4 PUSH2 0x48C1 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x45B8 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x45A4 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x45FE JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x45F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x3D04 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x460A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x467B DUP2 PUSH2 0x48EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x46DE JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1172 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1172 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x46F5 JUMPI DUP2 PUSH2 0x3D04 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4751 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4ACF SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x33F3 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x476F SWAP2 SWAP1 PUSH2 0x4DEB JUMP JUMPDEST PUSH2 0x33F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1A36 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x48B7 JUMPI PUSH1 0x0 PUSH2 0x47F2 PUSH1 0x1 DUP4 PUSH2 0x50B6 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x4806 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x486B JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x4826 JUMPI PUSH2 0x4826 PUSH2 0x5191 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x4849 JUMPI PUSH2 0x4849 PUSH2 0x5191 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x487C JUMPI PUSH2 0x487C PUSH2 0x517B JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0x1172 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x1172 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x48D8 JUMPI PUSH2 0x48D8 PUSH2 0x5191 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48F6 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x498D JUMPI PUSH1 0x1E SLOAD PUSH2 0x492E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x49B1 SWAP1 PUSH2 0x4552 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x25FB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x49DA SWAP1 DUP4 PUSH2 0x455C JUMP JUMPDEST SWAP1 POP PUSH2 0x49E7 PUSH1 0x26 DUP3 PUSH2 0x3D0B JUMP JUMPDEST ISZERO PUSH2 0x4ABC JUMPI PUSH2 0x49F5 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x4A7B JUMPI PUSH2 0x4A1F DUP2 PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x4AAF SWAP1 PUSH2 0x1162 SWAP1 DUP4 PUSH2 0x3F4C JUMP JUMPDEST PUSH2 0x4AB9 SWAP1 DUP5 PUSH2 0x501B JUMP JUMPDEST SWAP3 POP JUMPDEST POP DUP1 PUSH2 0x4AC7 DUP2 PUSH2 0x50F9 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x4990 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1059 DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 DUP5 EXTCODESIZE PUSH2 0x4B28 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1A36 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x4B44 SWAP2 SWAP1 PUSH2 0x4EA9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4B81 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4B86 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x4B96 DUP3 DUP3 DUP7 PUSH2 0x4BA1 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4BB0 JUMPI POP DUP2 PUSH2 0x3D04 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x4BC0 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A36 SWAP2 SWAP1 PUSH2 0x4F82 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1973 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x6 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x1973 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3D04 DUP2 PUSH2 0x51A7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3D04 DUP2 PUSH2 0x51A7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4C74 DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4C84 DUP2 PUSH2 0x51A7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4CA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4CAF DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4CBF DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x4CCF DUP2 PUSH2 0x51A7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4CEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4CFA DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4D0A DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4D31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4D3C DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x4D4C DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x4D63 DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4D86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4D91 DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4DA1 DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4DD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4DDD DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4DFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3D04 DUP3 PUSH2 0x4BFA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4E1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E24 DUP5 PUSH2 0x4C0A JUMP JUMPDEST SWAP3 POP PUSH2 0x4E32 PUSH1 0x20 DUP6 ADD PUSH2 0x4C0A JUMP JUMPDEST SWAP2 POP PUSH2 0x4E40 PUSH1 0x40 DUP6 ADD PUSH2 0x4BFA JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4E5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4E74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4E90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x4EBB DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x50CD JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 DUP3 ADD SWAP2 SWAP1 PUSH1 0x60 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4F28 JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4F06 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4F76 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4F51 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x4FA1 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x50CD JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x6 SWAP2 SWAP1 SWAP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x502E JUMPI PUSH2 0x502E PUSH2 0x514F JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5042 JUMPI PUSH2 0x5042 PUSH2 0x5165 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5061 JUMPI PUSH2 0x5061 PUSH2 0x514F JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x5091 JUMPI PUSH2 0x5091 PUSH2 0x514F JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x50AC JUMPI PUSH2 0x50AC PUSH2 0x514F JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x50C8 JUMPI PUSH2 0x50C8 PUSH2 0x514F JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x50E8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x50D0 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x44AA JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x510D JUMPI PUSH2 0x510D PUSH2 0x514F JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5123 JUMPI PUSH2 0x5123 PUSH2 0x5165 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x5146 JUMPI PUSH2 0x5146 PUSH2 0x514F JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x51BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID CHAINID CALLCODE XOR ADDMOD PUSH26 0xA7123A197CC3828C28955D70D661C70ACBDC02450DAF5F9A9C1C STATICCALL 0xEE EXTCODEHASH 0xD 0xAB 0xA9 DUP4 PUSH30 0x1AB0597ACF34328550E4832D02E24E467825E7C2DD318C3820A264697066 PUSH20 0x58221220E76A24D5AC93C336CEE0E33E01CDB717 PUSH23 0x79AB50EBF16B2817C47B4495564C864736F6C63430008 SMOD STOP CALLER ",
              "sourceMap": "134:1220:63:-:0;;;702:6:31;667:41;;786:7;749:44;;877:7;834:50;;968:6;925:49;;1057:7;1015:49;;1135:2;1105:32;;246:221:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1637:1:0;1742:7;:22;384:13:63;399:9;410:14;426:13;453:10;;357:25:28;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;;;-1:-1:-1;;;;;422:24:28;;;;;;;1479:12:31;:28;;;;;;;;;;1513:8;:20;;;;;;;;;;1539:13;:30;;;;;;;;;;1575:12;:28;;;;;;;;;;;;-1:-1:-1;1609:28:31;;;:14;:28;;;;;;;:43;;;;;;;;;;;1703:12;;1730;;1689:54;;-1:-1:-1;;;1689:54:31;;1730:12;;;1689:54;;;1093:51:84;1703:12:31;;;;-1:-1:-1;1689:40:31;;1066:18:84;;1689:54:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1658:28:31;;;;;;;;:13;:28;;;;;:85;;-1:-1:-1;;1658:85:31;;;;;;;;;;-1:-1:-1;134:1220:63;;-1:-1:-1;;;;;;134:1220:63;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:464::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;469:49;514:2;503:9;499:18;469:49;:::i;:::-;459:59;;537:49;582:2;571:9;567:18;537:49;:::i;:::-;527:59;;605:49;650:2;639:9;635:18;605:49;:::i;:::-;595:59;;196:464;;;;;;;:::o;665:277::-;732:6;785:2;773:9;764:7;760:23;756:32;753:52;;;801:1;798;791:12;753:52;833:9;827:16;886:5;879:13;872:21;865:5;862:32;852:60;;908:1;905;898:12;852:60;931:5;665:277;-1:-1:-1;;;665:277:84:o;947:203::-;134:1220:63;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_11252": {
                  "entryPoint": null,
                  "id": 11252,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_add_1372": {
                  "entryPoint": 18071,
                  "id": 1372,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_at_1506": {
                  "entryPoint": 18625,
                  "id": 1506,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_bondedPayment_8852": {
                  "entryPoint": 17102,
                  "id": 8852,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_calculateJobPeriodCredits_7702": {
                  "entryPoint": 18667,
                  "id": 7702,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_calculatePayment_8890": {
                  "entryPoint": 17632,
                  "id": 8890,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@_callOptionalReturn_911": {
                  "entryPoint": 18172,
                  "id": 911,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_contains_1475": {
                  "entryPoint": null,
                  "id": 1475,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_getGasLeft_8907": {
                  "entryPoint": 17330,
                  "id": 8907,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@_getReward_7863": {
                  "entryPoint": 15661,
                  "id": 7863,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_length_1489": {
                  "entryPoint": null,
                  "id": 1489,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_period_7847": {
                  "entryPoint": 15539,
                  "id": 7847,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_phase_7831": {
                  "entryPoint": 15565,
                  "id": 7831,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_quoteLiquidity_7909": {
                  "entryPoint": 16204,
                  "id": 7909,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_remove_1456": {
                  "entryPoint": 18382,
                  "id": 1456,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_rewardJobCredits_7597": {
                  "entryPoint": 16960,
                  "id": 7597,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_settleJobAccountance_7938": {
                  "entryPoint": 17377,
                  "id": 7938,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_unbondLiquidityFromJob_7802": {
                  "entryPoint": 15678,
                  "id": 7802,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@_updateJobCreditsIfNeeded_7567": {
                  "entryPoint": 16490,
                  "id": 7567,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@_updateJobPeriod_7612": {
                  "entryPoint": 18034,
                  "id": 7612,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_values_1520": {
                  "entryPoint": 17768,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 6520,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@acceptJobMigration_8291": {
                  "entryPoint": 11373,
                  "id": 8291,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@acceptJobOwnership_8373": {
                  "entryPoint": 8117,
                  "id": 8373,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 10416,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addLiquidityToJob_7283": {
                  "entryPoint": 6675,
                  "id": 7283,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 9043,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addTokenCreditsToJob_6417": {
                  "entryPoint": 7245,
                  "id": 6417,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@add_1658": {
                  "entryPoint": 17356,
                  "id": 1658,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@approveLiquidity_7148": {
                  "entryPoint": 12620,
                  "id": 7148,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@approvedLiquidities_6581": {
                  "entryPoint": 4193,
                  "id": 6581,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@at_1754": {
                  "entryPoint": 17756,
                  "id": 1754,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@bondTime_5611": {
                  "entryPoint": null,
                  "id": 5611,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bondedPayment_8730": {
                  "entryPoint": 4818,
                  "id": 8730,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@changeJobOwnership_8336": {
                  "entryPoint": 7952,
                  "id": 8336,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@contains_1712": {
                  "entryPoint": 15627,
                  "id": 1712,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@directTokenPayment_8806": {
                  "entryPoint": 14160,
                  "id": 8806,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_5636": {
                  "entryPoint": null,
                  "id": 5636,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@forceLiquidityCreditsToJob_7094": {
                  "entryPoint": 15299,
                  "id": 7094,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@functionCallWithValue_1073": {
                  "entryPoint": null,
                  "id": 1073,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@functionCall_1003": {
                  "entryPoint": 19151,
                  "id": 1003,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@inflationPeriod_5631": {
                  "entryPoint": null,
                  "id": 5631,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@isBondedKeeper_8512": {
                  "entryPoint": 15066,
                  "id": 8512,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "@isContract_932": {
                  "entryPoint": null,
                  "id": 932,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@isKeeper_8454": {
                  "entryPoint": 9323,
                  "id": 8454,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobLiquidityCredits_6715": {
                  "entryPoint": 9909,
                  "id": 6715,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobOwner_8303": {
                  "entryPoint": null,
                  "id": 8303,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPendingOwner_8309": {
                  "entryPoint": null,
                  "id": 8309,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobPeriodCredits_6663": {
                  "entryPoint": 9419,
                  "id": 6663,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobTokenCreditsAddedAt_6297": {
                  "entryPoint": null,
                  "id": 6297,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 9897,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keep3rHelper_5602": {
                  "entryPoint": null,
                  "id": 5602,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1Proxy_5598": {
                  "entryPoint": null,
                  "id": 5598,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1_5594": {
                  "entryPoint": null,
                  "id": 5594,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keepers_5506": {
                  "entryPoint": 10404,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@kp3rWethPool_5606": {
                  "entryPoint": null,
                  "id": 5606,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@length_1727": {
                  "entryPoint": 17746,
                  "id": 1727,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@liquidityAmount_6548": {
                  "entryPoint": null,
                  "id": 6548,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@liquidityMinimum_5621": {
                  "entryPoint": null,
                  "id": 5621,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@migrateJob_8070": {
                  "entryPoint": 10166,
                  "id": 8070,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@min_1270": {
                  "entryPoint": 18150,
                  "id": 1270,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@mulDiv_4263": {
                  "entryPoint": 17860,
                  "id": 4263,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@observeLiquidity_7053": {
                  "entryPoint": 5575,
                  "id": 7053,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingJobMigrations_8024": {
                  "entryPoint": null,
                  "id": 8024,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@quoteLiquidity_6849": {
                  "entryPoint": 4210,
                  "id": 6849,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@removeDisputer_6072": {
                  "entryPoint": 14886,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 11075,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@remove_1685": {
                  "entryPoint": 17725,
                  "id": 1685,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@revokeLiquidity_7171": {
                  "entryPoint": 8913,
                  "id": 7171,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@rewardPeriodTime_5626": {
                  "entryPoint": null,
                  "id": 5626,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@rewardedAt_6554": {
                  "entryPoint": null,
                  "id": 6554,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@safeTransferFrom_745": {
                  "entryPoint": 17471,
                  "id": 745,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@safeTransfer_719": {
                  "entryPoint": 17584,
                  "id": 719,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@setApprovedLiquidity_11186": {
                  "entryPoint": 6660,
                  "id": 11186,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setBondTime_5836": {
                  "entryPoint": 13169,
                  "id": 5836,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setFee_5933": {
                  "entryPoint": 9227,
                  "id": 5933,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 11255,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setInflationPeriod_5915": {
                  "entryPoint": 12524,
                  "id": 5915,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setJobLiquidity_11201": {
                  "entryPoint": 13265,
                  "id": 11201,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@setJob_11162": {
                  "entryPoint": 11064,
                  "id": 11162,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rHelper_5717": {
                  "entryPoint": 9729,
                  "id": 5717,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1Proxy_5773": {
                  "entryPoint": 13304,
                  "id": 5773,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1_5745": {
                  "entryPoint": 14729,
                  "id": 5745,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeeper_11174": {
                  "entryPoint": 9886,
                  "id": 11174,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_5818": {
                  "entryPoint": 5217,
                  "id": 5818,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setLiquidityMinimum_5872": {
                  "entryPoint": 14633,
                  "id": 5872,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRewardPeriodTime_5897": {
                  "entryPoint": 13461,
                  "id": 5897,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setUnbondTime_5854": {
                  "entryPoint": 10072,
                  "id": 5854,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@totalJobCredits_6795": {
                  "entryPoint": 3931,
                  "id": 6795,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@unbondLiquidityFromJob_7351": {
                  "entryPoint": 4472,
                  "id": 7351,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@unbondTime_5616": {
                  "entryPoint": null,
                  "id": 5616,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 15607,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@verifyCallResult_1208": {
                  "entryPoint": 19361,
                  "id": 1208,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@viewGas_11248": {
                  "entryPoint": null,
                  "id": 11248,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@viewJobLiquidityCredits_11213": {
                  "entryPoint": null,
                  "id": 11213,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@viewJobPeriodCredits_11225": {
                  "entryPoint": null,
                  "id": 11225,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@viewTickCache_11240": {
                  "entryPoint": 14541,
                  "id": 11240,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@withdrawLiquidityFromJob_7443": {
                  "entryPoint": 10600,
                  "id": 7443,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@withdrawTokenCreditsFromJob_6507": {
                  "entryPoint": 13593,
                  "id": 6507,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@workedAt_6560": {
                  "entryPoint": null,
                  "id": 6560,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@worked_8642": {
                  "entryPoint": 8295,
                  "id": 8642,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_bool_fromMemory": {
                  "entryPoint": 19450,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_int56_fromMemory": {
                  "entryPoint": 19466,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 19484,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address_fromMemory": {
                  "entryPoint": 19513,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 19542,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_address": {
                  "entryPoint": 19599,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256": {
                  "entryPoint": 19674,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_address": {
                  "entryPoint": 19739,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256": {
                  "entryPoint": 19822,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 5
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 19903,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 19947,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_int56t_int56t_bool_fromMemory": {
                  "entryPoint": 19974,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 20041,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256_fromMemory": {
                  "entryPoint": 20066,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory": {
                  "entryPoint": 20091,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 3
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 20137,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 20165,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 20185,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 20277,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 20354,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 20405,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed": {
                  "entryPoint": 20460,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": {
                  "entryPoint": 20485,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 20507,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_div_t_uint256": {
                  "entryPoint": 20531,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_mul_t_uint256": {
                  "entryPoint": 20551,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_int56": {
                  "entryPoint": 20582,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 20662,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 20685,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "increment_t_uint256": {
                  "entryPoint": 20729,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mod_t_uint256": {
                  "entryPoint": 20756,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "negate_t_int56": {
                  "entryPoint": 20776,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 20815,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x12": {
                  "entryPoint": 20837,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x31": {
                  "entryPoint": 20859,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x32": {
                  "entryPoint": 20881,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_address": {
                  "entryPoint": 20903,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:13636:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "71:107:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "81:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "96:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "90:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "90:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "81:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "156:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "165:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "168:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "158:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "158:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "158:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "125:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "146:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "139:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "139:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "132:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "132:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "122:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "122:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "115:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "115:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "112:60:84"
                            }
                          ]
                        },
                        "name": "abi_decode_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "50:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "61:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "241:106:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "251:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "266:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "260:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "260:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "251:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "325:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "334:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "337:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "327:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "327:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "327:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "295:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "313:1:84",
                                            "type": "",
                                            "value": "6"
                                          },
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "316:5:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "signextend",
                                          "nodeType": "YulIdentifier",
                                          "src": "302:10:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "302:20:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "292:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "292:31:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "285:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "285:39:84"
                              },
                              "nodeType": "YulIf",
                              "src": "282:59:84"
                            }
                          ]
                        },
                        "name": "abi_decode_int56_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "220:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "231:5:84",
                            "type": ""
                          }
                        ],
                        "src": "183:164:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "422:177:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "468:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "477:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "480:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "470:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "470:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "470:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "443:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "452:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "439:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "439:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "464:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "435:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "435:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "432:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "493:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "519:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "506:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "506:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "497:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "563:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "538:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "538:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "538:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "578:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "588:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "578:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "388:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "399:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "411:6:84",
                            "type": ""
                          }
                        ],
                        "src": "352:247:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "685:170:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "731:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "740:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "743:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "733:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "733:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "733:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "706:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "715:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "702:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "702:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "727:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "698:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "698:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "695:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "756:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "775:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "769:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "769:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "760:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "819:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "794:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "794:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "794:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "834:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "844:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "834:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "651:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "662:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "674:6:84",
                            "type": ""
                          }
                        ],
                        "src": "604:251:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "947:301:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "993:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1002:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1005:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "995:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "995:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "995:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "968:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "977:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "964:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "964:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "989:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "960:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "960:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "957:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1018:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1044:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1031:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1031:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1022:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1088:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1063:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1063:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1063:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1103:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1113:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1103:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1127:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1159:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1170:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1155:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1155:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1142:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1142:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1131:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1208:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1183:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1183:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1183:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1225:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1235:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1225:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "905:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "916:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "928:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "936:6:84",
                            "type": ""
                          }
                        ],
                        "src": "860:388:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1357:425:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1403:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1412:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1415:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1405:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1405:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1405:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1378:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1387:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1374:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1374:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1399:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1370:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1370:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1367:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1428:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1454:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1441:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1441:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1432:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1498:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1473:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1473:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1473:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1513:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1523:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1513:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1537:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1569:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1580:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1565:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1565:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1552:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1552:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1541:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1618:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1593:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1593:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1593:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1635:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "1645:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1635:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1661:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1693:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1704:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1689:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1689:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1676:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1676:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1665:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1742:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1717:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1717:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1717:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1759:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "1769:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1759:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1307:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1318:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1330:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1338:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1346:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1253:529:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1891:352:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1937:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1946:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1949:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1939:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1939:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1939:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1912:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1921:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1908:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1908:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1933:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1904:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1904:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1901:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1962:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1988:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1975:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1975:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1966:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2032:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2007:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2007:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2007:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2047:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2057:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2047:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2071:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2103:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2114:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2099:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2099:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2086:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2086:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2075:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2152:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2127:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2127:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2127:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2169:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "2179:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2169:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2195:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2222:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2233:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2218:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2218:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2205:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2205:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2195:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1841:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1852:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1864:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1872:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1880:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1787:456:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2369:477:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2416:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2425:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2428:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2418:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2418:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2418:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2390:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2399:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2386:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2386:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2411:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2382:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2382:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2379:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2441:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2467:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2454:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2454:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2445:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "2511:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2486:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2486:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2486:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2526:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2536:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2526:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2550:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2582:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2593:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2578:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2578:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2565:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2565:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2554:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2631:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2606:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2606:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2606:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2648:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "2658:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2648:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2674:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2701:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2712:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2697:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2697:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2684:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2684:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2674:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2725:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2757:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2768:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2753:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2753:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2740:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2740:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_2",
                                  "nodeType": "YulTypedName",
                                  "src": "2729:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2806:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2781:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2781:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2781:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2823:17:84",
                              "value": {
                                "name": "value_2",
                                "nodeType": "YulIdentifier",
                                "src": "2833:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "2823:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2311:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2322:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2334:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2342:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2350:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2358:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2248:598:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2989:456:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3036:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3045:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3048:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3038:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3038:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3038:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3010:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3019:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3006:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3006:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3031:3:84",
                                    "type": "",
                                    "value": "160"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3002:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3002:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "2999:53:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3061:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3087:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3074:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3074:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3065:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3131:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3106:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3106:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3106:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3146:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3156:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3146:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3170:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3202:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3213:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3198:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3198:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3185:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3185:32:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3174:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3251:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3226:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3226:33:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3226:33:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3268:17:84",
                              "value": {
                                "name": "value_1",
                                "nodeType": "YulIdentifier",
                                "src": "3278:7:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3268:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3294:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3321:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3332:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3317:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3317:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3304:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3304:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "3294:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3345:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3372:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3383:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3368:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3368:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3355:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3355:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "3345:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3396:43:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3423:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3434:3:84",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3419:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3419:19:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3406:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3406:33:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3396:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2923:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2934:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2946:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2954:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2962:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2970:6:84",
                            "type": ""
                          },
                          {
                            "name": "value4",
                            "nodeType": "YulTypedName",
                            "src": "2978:6:84",
                            "type": ""
                          }
                        ],
                        "src": "2851:594:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3537:228:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3583:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3592:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3595:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3585:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3585:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3585:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3558:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3567:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3554:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3554:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3579:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3550:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3550:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3547:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3608:36:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3634:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3621:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3621:23:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3612:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3678:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3653:24:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3653:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3653:31:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3693:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3703:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3693:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3717:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3744:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3755:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3740:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3740:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3727:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3727:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3717:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3495:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3506:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3518:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3526:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3450:315:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3848:124:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3894:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3903:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3906:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3896:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3896:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3896:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3869:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3878:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3865:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3865:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3890:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3861:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3861:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "3858:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3919:47:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3956:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3929:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3929:37:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3919:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3814:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3825:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3837:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3770:202:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4085:256:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4131:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4140:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4143:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4133:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4133:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4133:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4106:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4115:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4102:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4102:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4127:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4098:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4098:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4095:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4156:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4194:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_int56_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4166:27:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4166:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4156:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4213:57:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4255:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4266:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4251:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4251:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_int56_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4223:27:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4223:47:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4213:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4279:56:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4320:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4331:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4316:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4316:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_bool_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4289:26:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4289:46:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4279:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_int56t_int56t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4035:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4046:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4058:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4066:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4074:6:84",
                            "type": ""
                          }
                        ],
                        "src": "3977:364:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4416:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4462:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4471:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4474:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4464:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4464:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4464:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4437:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4446:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4433:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4433:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4458:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4429:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4429:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4426:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4487:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4510:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4497:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4497:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4487:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4382:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4393:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4405:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4346:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4612:103:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4658:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4667:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4670:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4660:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4660:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4660:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4633:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4642:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4629:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4629:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4654:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4625:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4625:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4622:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4683:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4699:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4693:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4693:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4683:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4578:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4589:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4601:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4531:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4835:191:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4881:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4890:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4893:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4883:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4883:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4883:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4856:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4865:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4852:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4852:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4877:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4848:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4848:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "4845:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4906:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4922:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4916:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4916:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4906:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4941:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4961:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4972:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4957:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4957:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4951:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4951:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4941:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4985:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5005:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5016:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5001:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5001:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4995:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4995:25:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4985:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4785:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4796:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4808:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4816:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4824:6:84",
                            "type": ""
                          }
                        ],
                        "src": "4720:306:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5168:137:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5178:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5198:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5192:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5192:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "5182:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5240:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5248:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5236:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5236:17:84"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5255:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5260:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5214:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5214:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5214:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5276:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5287:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5292:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5283:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5283:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "5276:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "5144:3:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5149:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "5160:3:84",
                            "type": ""
                          }
                        ],
                        "src": "5031:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5411:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5421:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5433:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5444:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5429:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5429:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5421:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5463:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5478:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5494:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5499:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "5490:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5490:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5503:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "5486:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5486:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5474:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5474:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5456:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5456:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5456:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5380:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5391:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5402:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5310:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5675:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5685:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5697:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5708:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5693:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5693:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5685:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5720:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5738:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5743:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "5734:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5734:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5747:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "5730:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5730:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5724:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5765:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "5780:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5788:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5776:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5776:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5758:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5758:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5758:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5812:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5823:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5808:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5808:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5832:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5840:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "5828:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5828:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5801:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5801:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5801:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5864:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5875:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5860:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5860:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "5880:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5853:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5853:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5853:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5628:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "5639:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "5647:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5655:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5666:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5518:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6075:567:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6085:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6103:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6114:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6099:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6099:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6089:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6133:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6148:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6164:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6169:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "6160:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6160:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6173:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "6156:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6156:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6144:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6144:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6126:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6126:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6126:51:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6186:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6196:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6190:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6218:9:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6229:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6214:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6214:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6234:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6207:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6207:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6207:30:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6246:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "6257:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "6250:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6272:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6292:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6286:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6286:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6276:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6315:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6323:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6308:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6308:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6308:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6339:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6350:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6361:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6346:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6346:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "6339:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6373:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6391:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6399:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6387:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6387:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "6377:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6411:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6420:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6415:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6479:137:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "6500:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6515:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "6509:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6509:13:84"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "6524:10:84",
                                              "type": "",
                                              "value": "0xffffffff"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "6505:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6505:30:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6493:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6493:43:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6493:43:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6549:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "6560:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "6565:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6556:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6556:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6549:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6581:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "6595:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "6603:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6591:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6591:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6581:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6441:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6444:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6438:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6438:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "6452:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6454:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "6463:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6466:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6459:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6459:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "6454:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6434:3:84",
                                "statements": []
                              },
                              "src": "6430:186:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6625:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "6633:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6625:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6036:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6047:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6055:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6066:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5898:744:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6776:145:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6786:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6798:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6809:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6794:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6794:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6786:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6828:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6843:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6859:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "6864:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "6855:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "6855:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "6868:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "6851:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "6851:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "6839:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6839:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6821:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6821:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6821:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "6892:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6903:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6888:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6888:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6908:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6881:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6881:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6881:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "6737:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6748:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6756:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "6767:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6647:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7077:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7087:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7097:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7091:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7108:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7126:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7137:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7122:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7122:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "7112:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7156:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7167:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7149:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7149:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7149:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7179:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "7190:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "7183:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7205:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7225:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7219:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7219:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "7209:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7248:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7256:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7241:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7241:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7241:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7272:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7283:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7294:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7279:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7279:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "7272:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7306:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7324:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7332:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7320:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7320:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "7310:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7344:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7353:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "7348:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7412:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "7433:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "7448:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "7442:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "7442:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "7465:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "7470:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "7461:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "7461:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "7474:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "7457:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "7457:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "7438:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "7438:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "7426:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7426:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7426:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7491:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "7502:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "7507:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7498:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7498:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "7491:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7523:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "7537:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "7545:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7533:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7533:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "7523:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "7374:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7377:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "7371:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7371:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "7385:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "7387:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "7396:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7399:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "7392:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7392:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "7387:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "7367:3:84",
                                "statements": []
                              },
                              "src": "7363:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7567:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "7575:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7567:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7046:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7057:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7068:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6926:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7684:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7694:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7706:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7717:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7702:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7702:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7694:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7736:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "7761:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "7754:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7754:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "7747:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7747:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7729:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7729:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7729:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7653:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7664:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7675:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7589:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7902:262:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7919:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7930:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7912:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7912:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7912:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7942:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7962:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7956:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7956:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "7946:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "7989:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8000:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7985:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7985:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8005:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7978:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7978:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7978:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8047:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8055:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8043:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8043:15:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8064:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8075:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8060:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8060:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "8080:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "8021:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8021:66:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8021:66:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8096:62:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8112:9:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "8131:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8139:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "8127:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8127:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "8148:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "8144:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8144:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "8123:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8123:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8108:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8108:45:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8155:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8104:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8104:54:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8096:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7871:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7882:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7893:4:84",
                            "type": ""
                          }
                        ],
                        "src": "7781:383:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8343:228:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8360:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8371:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8353:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8353:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8353:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8394:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8405:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8390:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8390:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8410:2:84",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8383:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8383:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8383:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8433:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8444:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8429:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8429:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8449:34:84",
                                    "type": "",
                                    "value": "Address: insufficient balance fo"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8422:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8422:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8422:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8504:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8515:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8500:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8500:18:84"
                                  },
                                  {
                                    "hexValue": "722063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8520:8:84",
                                    "type": "",
                                    "value": "r call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8493:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8493:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8493:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8538:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8550:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8561:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8546:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8546:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8538:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8320:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8334:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8169:402:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8750:179:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8767:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8778:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8760:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8760:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8760:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8801:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8812:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8797:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8797:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8817:2:84",
                                    "type": "",
                                    "value": "29"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8790:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8790:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8790:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8840:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8851:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8836:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8836:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "8856:31:84",
                                    "type": "",
                                    "value": "Address: call to non-contract"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8829:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8829:59:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8829:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8897:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8909:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8920:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8905:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8905:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8897:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8727:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8741:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8576:353:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9108:232:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9125:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9136:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9118:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9118:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9159:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9170:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9155:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9155:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9175:2:84",
                                    "type": "",
                                    "value": "42"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9148:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9148:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9148:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9198:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9209:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9194:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9194:18:84"
                                  },
                                  {
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9214:34:84",
                                    "type": "",
                                    "value": "SafeERC20: ERC20 operation did n"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9187:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9187:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9187:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9269:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9280:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9265:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9265:18:84"
                                  },
                                  {
                                    "hexValue": "6f742073756363656564",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9285:12:84",
                                    "type": "",
                                    "value": "ot succeed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9258:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9258:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9258:40:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9307:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9319:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9330:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9315:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9315:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9307:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9085:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9099:4:84",
                            "type": ""
                          }
                        ],
                        "src": "8934:406:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9519:181:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9536:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9547:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9529:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9529:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9529:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9570:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9581:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9566:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9566:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9586:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9559:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9559:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9559:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9609:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9620:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9605:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9605:18:84"
                                  },
                                  {
                                    "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9625:33:84",
                                    "type": "",
                                    "value": "ReentrancyGuard: reentrant call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9598:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9598:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9598:61:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9668:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9680:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9691:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9676:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9676:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9668:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9496:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9510:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9345:355:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9862:239:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9872:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9884:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9895:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9880:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9880:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9872:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9914:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9936:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "9945:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "9939:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "9939:13:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9925:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9925:28:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9907:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9907:47:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9907:47:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9974:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9985:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9970:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9970:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10003:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value0",
                                                "nodeType": "YulIdentifier",
                                                "src": "10016:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "10024:4:84",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "10012:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "10012:17:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "10006:5:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10006:24:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "9992:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9992:39:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9963:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9963:69:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9963:69:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10052:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10063:4:84",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10048:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10048:20:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "10080:6:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "10088:4:84",
                                            "type": "",
                                            "value": "0x40"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "10076:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "10076:17:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "10070:5:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10070:24:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10041:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10041:54:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10041:54:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9831:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "9842:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9853:4:84",
                            "type": ""
                          }
                        ],
                        "src": "9705:396:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10207:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10217:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10229:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10240:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10225:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10225:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10217:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10259:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "10270:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10252:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10252:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10252:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10176:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10187:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10198:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10106:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10441:177:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10451:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10463:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10474:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10459:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10459:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10451:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10493:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "10504:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10486:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10486:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10486:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10531:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10542:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10527:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10527:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10558:1:84",
                                        "type": "",
                                        "value": "6"
                                      },
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "10561:6:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "signextend",
                                      "nodeType": "YulIdentifier",
                                      "src": "10547:10:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10547:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10520:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10520:49:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10520:49:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10589:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10600:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10585:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10585:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "10605:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10578:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10578:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10578:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10394:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "10405:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "10413:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10421:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10432:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10288:330:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10752:119:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10762:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10774:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10785:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10770:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10770:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10762:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10804:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "10815:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10797:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10797:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10797:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10842:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10853:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10838:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10838:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "10858:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10831:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10831:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10831:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10713:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "10724:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10732:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10743:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10623:248:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11033:162:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11043:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11055:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11066:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11051:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11051:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "11043:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "11085:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "11096:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11078:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11078:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11078:25:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11123:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11134:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11119:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11119:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11139:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11112:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11112:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11112:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "11166:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11177:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "11162:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11162:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "11182:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11155:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11155:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11155:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10986:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "10997:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "11005:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "11013:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "11024:4:84",
                            "type": ""
                          }
                        ],
                        "src": "10876:319:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11248:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11275:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11277:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11277:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11277:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11264:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "11271:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "11267:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11267:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11261:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11261:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11258:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11306:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11317:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11320:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "11313:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11313:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "11306:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "11231:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "11234:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "11240:3:84",
                            "type": ""
                          }
                        ],
                        "src": "11200:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11379:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11402:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "11404:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11404:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11404:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11399:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "11392:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11392:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11389:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11433:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11442:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11445:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "11438:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11438:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "11433:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "11364:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "11367:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "11373:1:84",
                            "type": ""
                          }
                        ],
                        "src": "11333:120:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11510:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11569:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11571:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11571:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11571:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "11541:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "11534:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11534:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "11527:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11527:17:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "11549:1:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11560:1:84",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "11556:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11556:6:84"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "11564:1:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "11552:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11552:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "11546:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11546:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "11523:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11523:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11520:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11600:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11615:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11618:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "11611:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11611:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "11600:7:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "11489:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "11492:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "11498:7:84",
                            "type": ""
                          }
                        ],
                        "src": "11458:168:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11678:312:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11688:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11710:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11713:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "11699:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11699:16:84"
                              },
                              "variables": [
                                {
                                  "name": "x_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11692:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11724:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11746:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11749:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "11735:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11735:16:84"
                              },
                              "variables": [
                                {
                                  "name": "y_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11728:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11760:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11774:3:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11779:1:84",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11770:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11770:11:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "11764:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11852:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11854:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11854:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11854:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "11804:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "11797:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11797:10:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "11813:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11826:16:84",
                                                "type": "",
                                                "value": "0x7fffffffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "11822:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11822:21:84"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "11845:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "11818:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11818:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "11809:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11809:41:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "11793:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11793:58:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11790:84:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11932:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11934:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11934:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11934:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11890:2:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "x_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "11898:3:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "11907:16:84",
                                            "type": "",
                                            "value": "0x7fffffffffffff"
                                          },
                                          {
                                            "name": "y_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "11925:3:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "11903:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11903:26:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sgt",
                                      "nodeType": "YulIdentifier",
                                      "src": "11894:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11894:36:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "11886:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11886:45:84"
                              },
                              "nodeType": "YulIf",
                              "src": "11883:71:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11963:21:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11975:3:84"
                                  },
                                  {
                                    "name": "y_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "11980:3:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "11971:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11971:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "11963:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "11660:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "11663:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "11669:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11631:359:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12044:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12066:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "12068:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12068:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12068:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12060:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12063:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "12057:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12057:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12054:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12097:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12109:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12112:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "12105:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12105:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "12097:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "12026:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "12029:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "12035:4:84",
                            "type": ""
                          }
                        ],
                        "src": "11995:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12178:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12188:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "12197:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "12192:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12257:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "12282:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "12287:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "12278:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "12278:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12301:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "12306:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "12297:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "12297:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "12291:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "12291:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "12271:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12271:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12271:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "12218:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "12221:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "12215:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12215:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "12229:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "12231:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "12240:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "12243:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "12236:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12236:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "12231:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "12211:3:84",
                                "statements": []
                              },
                              "src": "12207:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12346:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "12359:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "12364:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "12355:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "12355:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "12373:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "12348:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12348:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12348:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "12335:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "12338:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "12332:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12332:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12329:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "12156:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "12161:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "12166:6:84",
                            "type": ""
                          }
                        ],
                        "src": "12125:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12435:88:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12466:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "12468:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12468:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12468:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "12451:5:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12462:1:84",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "12458:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12458:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "12448:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12448:17:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12445:43:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12497:20:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "12508:5:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12515:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "12504:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12504:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "12497:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "increment_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "12417:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "12427:3:84",
                            "type": ""
                          }
                        ],
                        "src": "12388:135:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12566:74:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12589:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "12591:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12591:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12591:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12586:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "12579:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12579:9:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12576:35:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12620:14:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "12629:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "12632:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "12625:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12625:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "12620:1:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "12551:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "12554:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "12560:1:84",
                            "type": ""
                          }
                        ],
                        "src": "12528:112:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12687:151:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "12697:35:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12723:1:84",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "12726:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "signextend",
                                  "nodeType": "YulIdentifier",
                                  "src": "12712:10:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12712:20:84"
                              },
                              "variables": [
                                {
                                  "name": "value_1",
                                  "nodeType": "YulTypedName",
                                  "src": "12701:7:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12779:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "12781:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12781:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12781:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "12747:7:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12760:16:84",
                                        "type": "",
                                        "value": "0x7fffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "12756:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12756:21:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "12744:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12744:34:84"
                              },
                              "nodeType": "YulIf",
                              "src": "12741:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "12810:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12821:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "value_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "12824:7:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "12817:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12817:15:84"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "12810:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "negate_t_int56",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "12669:5:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "12679:3:84",
                            "type": ""
                          }
                        ],
                        "src": "12645:193:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12875:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12892:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12899:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12904:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12895:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12895:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12885:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12885:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12885:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12932:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12935:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12925:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12925:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12925:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12956:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12959:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12949:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12949:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12949:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "12843:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13007:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13024:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13031:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13036:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "13027:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13027:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13017:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13017:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13017:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13064:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13067:4:84",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13057:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13057:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13057:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13088:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13091:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "13081:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13081:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13081:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "12975:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13139:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13156:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13163:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13168:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "13159:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13159:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13149:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13149:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13149:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13196:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13199:4:84",
                                    "type": "",
                                    "value": "0x31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13189:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13189:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13189:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13220:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13223:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "13213:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13213:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13213:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x31",
                        "nodeType": "YulFunctionDefinition",
                        "src": "13107:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13271:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13288:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13295:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13300:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "13291:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13291:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13281:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13281:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13281:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13328:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13331:4:84",
                                    "type": "",
                                    "value": "0x32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13321:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13321:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13321:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13352:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13355:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "13345:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13345:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13345:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x32",
                        "nodeType": "YulFunctionDefinition",
                        "src": "13239:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13403:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13420:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13427:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13432:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "13423:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13423:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13413:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13413:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13413:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13460:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13463:4:84",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "13453:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13453:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13453:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13484:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "13487:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "13477:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13477:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "13477:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "13371:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "13548:86:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "13612:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13621:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "13624:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "13614:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "13614:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "13614:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "13571:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "13582:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "13597:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "13602:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "13593:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "13593:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "13606:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "13589:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "13589:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "13578:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "13578:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "13568:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13568:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "13561:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13561:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "13558:70:84"
                            }
                          ]
                        },
                        "name": "validator_revert_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "13537:5:84",
                            "type": ""
                          }
                        ],
                        "src": "13503:131:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_bool_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_int56_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, signextend(6, value))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let value_2 := calldataload(add(headStart, 96))\n        validator_revert_address(value_2)\n        value3 := value_2\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_bool_fromMemory(headStart)\n    }\n    function abi_decode_tuple_t_int56t_int56t_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_int56_fromMemory(headStart)\n        value1 := abi_decode_int56_fromMemory(add(headStart, 32))\n        value2 := abi_decode_bool_fromMemory(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_array$_t_uint32_$dyn_memory_ptr__to_t_address_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let pos := tail_1\n        let length := mload(value1)\n        mstore(tail_1, length)\n        pos := add(headStart, 96)\n        let srcPtr := add(value1, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_struct$_TickCache_$13178_memory_ptr__to_t_struct$_TickCache_$13178_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, signextend(6, mload(value0)))\n        mstore(add(headStart, 0x20), signextend(6, mload(add(value0, 0x20))))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_int56_t_uint256__to_t_uint256_t_int56_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), signextend(6, value1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_int56(x, y) -> diff\n    {\n        let x_1 := signextend(6, x)\n        let y_1 := signextend(6, y)\n        let _1 := slt(y_1, 0)\n        if and(iszero(_1), slt(x_1, add(not(0x7fffffffffffff), y_1))) { panic_error_0x11() }\n        if and(_1, sgt(x_1, add(0x7fffffffffffff, y_1))) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function negate_t_int56(value) -> ret\n    {\n        let value_1 := signextend(6, value)\n        if eq(value_1, not(0x7fffffffffffff)) { panic_error_0x11() }\n        ret := sub(0, value_1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "6080604052600436106103b75760003560e01c806390a4684e116101ea578063cb4be2bb11610109578063cb4be2bb14610c7b578063cb54694d14610c9b578063cd22af1b14610cbb578063d55995fe14610cf3578063dd2080d614610d13578063ddca3f4314610d33578063e326ac4314610d49578063e485dc0e14610d76578063e7f0cbf814610d96578063ebbb619414610dcc578063ec00cdfc14610dec578063ec8ca64314610e0c578063f0f346b914610e42578063f11a1d1a14610e62578063f136a09d14610e82578063f39c38a014610eaf578063f6bb203214610ecf578063f9d46cf214610f05578063fc253d2b14610f25578063fe75bc4614610f3b57600080fd5b806390a4684e1461099d578063951dc22c146109bd57806398e90a0f146109d25780639d5c33d814610a08578063a214580914610a28578063a39744b514610a48578063a662031b14610a80578063a676f9ff14610aa0578063a7d2e78414610acd578063aac6aa9c14610ae3578063ab033ea914610b03578063af320e8114610b23578063b0103b1a14610b43578063b239223314610b73578063b440027f14610b93578063b600702a14610bcb578063b7e7734014610beb578063b87fcbff14610c0b578063c7ae40d014610c3b578063cacdf93d14610c5b57600080fd5b806359a2255e116102d657806359a2255e146107085780635aa6e675146107285780635ebe23f0146107485780635feeb7941461075e578063633fb68f1461077e57806364bb43ee1461079457806368a9f19c146107b4578063694798e6146107d457806369fe0e2d1461080c5780636ba42aaa1461082c5780636cf262bc1461084c57806372da828a1461086c578063748747e61461088c578063768b5d90146108ac5780637b40c913146108c25780637c8fce23146108e2578063878c723e146108f75780638bb6dfa81461092d5780638cb22b761461094d5780638fe204dd1461097d57600080fd5b8063034d4c61146103c357806307b435c2146103f65780630c620bce1461042e5780630d6a1f87146104505780631101eb411461047057806311466d721461049257806315006b82146104b2578063160e1e31146104ea578063165e62e71461050a578063168f92e7146105545780631b44555e1461058c5780631ef94b91146105b957806321040b01146105e6578063238efcbc1461061e578063274a8db414610633578063280b656c146106735780634a8d13481461069357806352a4de29146106a8578063575288bf146106c8578063594a3a93146106e857600080fd5b366103be57005b600080fd5b3480156103cf57600080fd5b506103e36103de366004614c1c565b610f5b565b6040519081526020015b60405180910390f35b34801561040257600080fd5b506103e3610411366004614c56565b601260209081526000928352604080842090915290825290205481565b34801561043a57600080fd5b50610443611061565b6040516103ed9190614f35565b34801561045c57600080fd5b506103e361046b366004614dbf565b611072565b34801561047c57600080fd5b5061049061048b366004614cda565b611178565b005b34801561049e57600080fd5b506104906104ad366004614dbf565b6112d2565b3480156104be57600080fd5b506103e36104cd366004614c56565b601060209081526000928352604080842090915290825290205481565b3480156104f657600080fd5b50610490610505366004614c1c565b611461565b34801561051657600080fd5b5061052a610525366004614c1c565b6115c7565b604080518251600690810b825260208085015190910b9082015291810151908201526060016103ed565b34801561056057600080fd5b506103e361056f366004614c56565b600960209081526000928352604080842090915290825290205481565b34801561059857600080fd5b506103e36105a7366004614c1c565b60056020526000908152604090205481565b3480156105c557600080fd5b50601b546105d9906001600160a01b031681565b6040516103ed9190614ec5565b3480156105f257600080fd5b506103e3610601366004614c56565b601360209081526000928352604080842090915290825290205481565b34801561062a57600080fd5b50610490611978565b34801561063f57600080fd5b5061066361064e366004614c1c565b601a6020526000908152604090205460ff1681565b60405190151581526020016103ed565b34801561067f57600080fd5b5061049061068e366004614c1c565b611a04565b34801561069f57600080fd5b50602e546103e3565b3480156106b457600080fd5b506104906106c3366004614cda565b611a13565b3480156106d457600080fd5b506104906106e3366004614cda565b611c4d565b3480156106f457600080fd5b50610490610703366004614c56565b611f10565b34801561071457600080fd5b50610490610723366004614c1c565b611fb5565b34801561073457600080fd5b506017546105d9906001600160a01b031681565b34801561075457600080fd5b506103e3601f5481565b34801561076a57600080fd5b50610490610779366004614c1c565b612067565b34801561078a57600080fd5b506103e360215481565b3480156107a057600080fd5b506104906107af366004614c1c565b6122d1565b3480156107c057600080fd5b506104906107cf366004614c1c565b612353565b3480156107e057600080fd5b506103e36107ef366004614c56565b602860209081526000928352604080842090915290825290205481565b34801561081857600080fd5b50610490610827366004614e49565b61240b565b34801561083857600080fd5b50610663610847366004614c1c565b61246b565b34801561085857600080fd5b506103e3610867366004614c1c565b6124cb565b34801561087857600080fd5b50610490610887366004614c1c565b612601565b34801561089857600080fd5b506104906108a7366004614c1c565b61269e565b3480156108b857600080fd5b506103e360225481565b3480156108ce57600080fd5b50601e546105d9906001600160a01b031681565b3480156108ee57600080fd5b506104436126a9565b34801561090357600080fd5b506105d9610912366004614c1c565b6001602052600090815260409020546001600160a01b031681565b34801561093957600080fd5b506103e3610948366004614c1c565b6126b5565b34801561095957600080fd5b50610663610968366004614c1c565b60146020526000908152604090205460ff1681565b34801561098957600080fd5b50610490610998366004614e49565b612758565b3480156109a957600080fd5b506104906109b8366004614c56565b6127b6565b3480156109c957600080fd5b506104436128a4565b3480156109de57600080fd5b506105d96109ed366004614c1c565b6002602052600090815260409020546001600160a01b031681565b348015610a1457600080fd5b50610490610a23366004614c1c565b6128b0565b348015610a3457600080fd5b50610490610a43366004614c8f565b612968565b348015610a5457600080fd5b506103e3610a63366004614c56565b600860209081526000928352604080842090915290825290205481565b348015610a8c57600080fd5b50610490610a9b366004614c1c565b612b38565b348015610aac57600080fd5b506103e3610abb366004614c1c565b60296020526000908152604090205481565b348015610ad957600080fd5b506103e360205481565b348015610aef57600080fd5b50610490610afe366004614c1c565b612b43565b348015610b0f57600080fd5b50610490610b1e366004614c1c565b612bf7565b348015610b2f57600080fd5b50610490610b3e366004614c56565b612c6d565b348015610b4f57600080fd5b50610663610b5e366004614c1c565b60076020526000908152604090205460ff1681565b348015610b7f57600080fd5b50610490610b8e366004614e49565b6130ec565b348015610b9f57600080fd5b506103e3610bae366004614c56565b602560209081526000928352604080842090915290825290205481565b348015610bd757600080fd5b50610490610be6366004614c1c565b61314c565b348015610bf757600080fd5b50610490610c06366004614e49565b613371565b348015610c1757600080fd5b50610663610c26366004614c1c565b60196020526000908152604090205460ff1681565b348015610c4757600080fd5b50601c546105d9906001600160a01b031681565b348015610c6757600080fd5b50610490610c76366004614c56565b6133d1565b348015610c8757600080fd5b50610490610c96366004614c1c565b6133f8565b348015610ca757600080fd5b50610490610cb6366004614e49565b613495565b348015610cc757600080fd5b506103e3610cd6366004614c56565b601160209081526000928352604080842090915290825290205481565b348015610cff57600080fd5b50610490610d0e366004614d1b565b613519565b348015610d1f57600080fd5b50610490610d2e366004614cda565b613750565b348015610d3f57600080fd5b506103e360245481565b348015610d5557600080fd5b506103e3610d64366004614c1c565b60066020526000908152604090205481565b348015610d8257600080fd5b5061052a610d91366004614c1c565b6138cd565b348015610da257600080fd5b506103e3610db1366004614c1c565b6001600160a01b03166000908152600a602052604090205490565b348015610dd857600080fd5b50610490610de7366004614e49565b613929565b348015610df857600080fd5b50610490610e07366004614c1c565b613989565b348015610e1857600080fd5b506105d9610e27366004614c1c565b602c602052600090815260409020546001600160a01b031681565b348015610e4e57600080fd5b50610490610e5d366004614c1c565b613a26565b348015610e6e57600080fd5b50601d546105d9906001600160a01b031681565b348015610e8e57600080fd5b506103e3610e9d366004614c1c565b602a6020526000908152604090205481565b348015610ebb57600080fd5b506018546105d9906001600160a01b031681565b348015610edb57600080fd5b506103e3610eea366004614c1c565b6001600160a01b03166000908152600b602052604090205490565b348015610f1157600080fd5b50610663610f20366004614d6e565b613ada565b348015610f3157600080fd5b506103e360235481565b348015610f4757600080fd5b50610490610f56366004614dbf565b613bc3565b600080610f67836124cb565b6022549091504290610f8290610f7d90836150b6565b613cb3565b6001600160a01b0385166000908152602960205260409020541115611026576022546001600160a01b038516600090815260296020526040902054610fc790426150b6565b10611003576022546001600160a01b038516600090815260296020526040902054610ff2919061501b565b610ffc90826150b6565b905061103c565b6001600160a01b038416600090815260296020526040902054610ffc90826150b6565b61102f42613cb3565b61103990826150b6565b90505b6110468183613ccd565b61104f856126b5565b611059919061501b565b949350505050565b606061106d6026613cf7565b905090565b600061107f602684613d0b565b1561117257600061108f846115c7565b90508060400151600014611170576001600160a01b0384166000908152600f602052604081205460ff166110d05781602001516110cb90615128565b6110d6565b81602001515b601d5460225460405163a0d2710760e01b8152929350611167926001600160a01b039092169163a0d27107916111129189918791600401614fec565b60206040518083038186803b15801561112a57600080fd5b505afa15801561113e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111629190614e62565b613d2d565b92505050611172565b505b92915050565b6001600160a01b0383811660009081526001602052604090205484911633146111b457604051636efb4f4160e11b815260040160405180910390fd5b6020546111c1904261501b565b6001600160a01b0380861660008181526012602090815260408083209489168084529482528083209590955591815260138252838120928152919052908120805484929061121090849061501b565b909155506112219050848484613d3e565b6001600160a01b038085166000908152602860209081526040808320938716835292905220548015801590611260575060215461125e8286613f4c565b105b1561127e57604051636f447fcd60e11b815260040160405180910390fd5b836001600160a01b0316856001600160a01b03167f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de856040516112c391815260200190565b60405180910390a35050505050565b3360008181526007602052604090205460ff16156113035760405163ad2fdf3b60e01b815260040160405180910390fd5b61130e601582613d0b565b61132a5760405162941a5760e11b815260040160405180910390fd5b6113338161406a565b1561138e576001600160a01b038116600081815260296020908152604080832054600a835281842054600b909352928190205490516000805160206151e0833981519152936113859390929091615005565b60405180910390a25b6001600160a01b0381166000908152600a602052604090205482111561140d576113b781614240565b6001600160a01b038116600081815260296020908152604080832054600a835281842054600b909352928190205490516000805160206151e0833981519152936114049390929091615005565b60405180910390a25b6114188184846142ce565b601b546001600160a01b038085169183821691166000805160206151c0833981519152856114446143b2565b6040805192835260208301919091520160405180910390a4505050565b6017546001600160a01b0316331461148c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166114b35760405163d92e233d60e01b815260040160405180910390fd5b601e80546001600160a01b038084166001600160a01b031992831681179093556000838152600e6020526040908190208054909316909317909155601d54915163696a437b60e01b815291169063696a437b90611514908490600401614ec5565b60206040518083038186803b15801561152c57600080fd5b505afa158015611540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115649190614deb565b6001600160a01b0382166000908152600f602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa906115bc908390614ec5565b60405180910390a150565b6115cf614bda565b6115d842613cb3565b6001600160a01b0383166000908152602b6020526040902060010154141561164e57506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b60008061166260225442610f7d91906150b6565b6001600160a01b0385166000908152602b60205260409020600101549091508114156117c657604080516001808252818301909252600091602080830190803683375050506001600160a01b0386166000908152602b602052604090205490915060060b6116cf42613cb3565b6116d990426150b6565b826000815181106116ec576116ec615191565b63ffffffff909216602092830291909101820152601d546001600160a01b038881166000908152600e90935260409283902054925163dc686d9160e01b81529181169263dc686d91926117489291909116908690600401614ed9565b60606040518083038186803b15801561176057600080fd5b505afa158015611774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117989190614e06565b600692830b90920b8088529195506117b291839150615066565b600690810b900b60208601525061194f9050565b6001600160a01b0384166000908152602b602052604090206001015481111561194f5760408051600280825260608201835260009260208301908036833701905050905061181342613cb3565b61181d90426150b6565b8160008151811061183057611830615191565b602002602001019063ffffffff16908163ffffffff168152505060225461185642613cb3565b61186090426150b6565b61186a919061501b565b8160018151811061187d5761187d615191565b63ffffffff909216602092830291909101820152601d546001600160a01b038781166000908152600e909352604080842054905163dc686d9160e01b81529282169263dc686d91926118d59216908690600401614ed9565b60606040518083038186803b1580156118ed57600080fd5b505afa158015611901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119259190614e06565b600692830b90920b8088529195509150611940908290615066565b600690810b900b602086015250505b81156119685761195e42613cb3565b6040840152611970565b600060408401525b50505b919050565b6018546001600160a01b031633146119a357604051637ef5703160e11b815260040160405180910390fd5b60188054601780546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916119fa91614ec5565b60405180910390a1565b611a0f6026826143cc565b5050565b60026000541415611a3f5760405162461bcd60e51b8152600401611a3690614fb5565b60405180910390fd5b6002600055611a4f602683613d0b565b611a6c5760405163e0b6aead60e01b815260040160405180910390fd5b611a77601584613d0b565b611a9457604051636211d34960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600d60205260409020611ab690836143cc565b50611ac0836143e1565b6021546001600160a01b03808516600090815260286020908152604080832093871683529290522054611afe90611af890849061501b565b84613f4c565b1015611b1d57604051636f447fcd60e11b815260040160405180910390fd5b6001600160a01b038316600081815260296020908152604080832054600a835281842054600b909352928190205490516000805160206151e083398151915293611b6a9390929091615005565b60405180910390a2611b876001600160a01b03831633308461443f565b6001600160a01b03808416600090815260286020908152604080832093861683529290529081208054839290611bbe90849061501b565b90915550611bd190506111628284613f4c565b6001600160a01b0384166000908152600b602052604081208054909190611bf990849061501b565b909155505060405181815233906001600160a01b0384811691908616907f4e186bc75a2220191b826baff3ee63c3e970e94e58a9007ff94c9a7b8e6ebb3f9060200160405180910390a45050600160005550565b60026000541415611c705760405162461bcd60e51b8152600401611a3690614fb5565b6002600055611c80601584613d0b565b611c9d57604051636211d34960e01b815260040160405180910390fd5b601b546001600160a01b0383811691161415611ccb5760405162822d9760e71b815260040160405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611cfa903090600401614ec5565b60206040518083038186803b158015611d1257600080fd5b505afa158015611d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4a9190614e62565b9050611d616001600160a01b03841633308561443f565b600081846001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611d909190614ec5565b60206040518083038186803b158015611da857600080fd5b505afa158015611dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de09190614e62565b611dea91906150b6565b9050600061271060245483611dff9190615047565b611e099190615033565b9050611e1581836150b6565b6001600160a01b038088166000908152600960209081526040808320938a1683529290529081208054909190611e4c90849061501b565b90915550506001600160a01b0380871660009081526025602090815260408083208985168085529252909120429055601754611e899216836144b0565b6001600160a01b0386166000908152600c60205260409020611eab90866143cc565b50336001600160a01b0316856001600160a01b0316876001600160a01b03167fec1a37d4a331a5059081e0fb5da1735e7890900cd215a4fb1e9f2779fd7b83eb85604051611efb91815260200190565b60405180910390a45050600160005550505050565b6001600160a01b038281166000908152600160205260409020548391163314611f4c57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260026020908152604080832080546001600160a01b031916888716908117909155600190925280832054905191941692917fa8bad3f0b781e1d954af9945167d5f80bfe5e57930f17c93843187c77557a6b891a4505050565b6001600160a01b038181166000908152600260205260409020548291163314611ff15760405163cfe9663360e01b815260040160405180910390fd5b6001600160a01b03828116600081815260016020908152604080832080546002909352818420805487166001600160a01b031980861691909117909255805490911690555193169283929133917fcf30c54296d5eee76168b564c59c50578d49c271733a470f32707c8cfbc88a8b9190a4505050565b3360008181526007602052604090205460ff16156120985760405163ad2fdf3b60e01b815260040160405180910390fd5b6120a3601582613d0b565b6120bf5760405162941a5760e11b815260040160405180910390fd5b6120c88161406a565b15612123576001600160a01b038116600081815260296020908152604080832054600a835281842054600b909352928190205490516000805160206151e08339815191529361211a9390929091615005565b60405180910390a25b601d546001600160a01b038381166000908152600860209081526040808320601b548516845290915280822054905163435b21c160e01b8152600481019190915290928392839291169063435b21c19060240160606040518083038186803b15801561218e57600080fd5b505afa1580156121a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c69190614e7b565b92509250925060006121d66143b2565b905060006121e6828486886144e0565b6001600160a01b0387166000908152600a60205260409020549091508111156122805761221286614240565b6001600160a01b038616600081815260296020908152604080832054600a835281842054600b909352928190205490516000805160206151e08339815191529361225f9390929091615005565b60405180910390a261226f6143b2565b915061227d828486886144e0565b90505b61228b8688836142ce565b601b5460408051838152602081018590526001600160a01b038a8116938a8216939116916000805160206151c0833981519152910160405180910390a450505050505050565b6017546001600160a01b031633146122fc576040516354348f0360e01b815260040160405180910390fd5b61230760268261453d565b61232457604051630a8d08b160e01b815260040160405180910390fd5b7f51199d699bdfd516fa88dd0d2f8487c40c147b4867acaa23adc8d4df6b098e56816040516115bc9190614ec5565b6017546001600160a01b0316331461237e576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16156123b85760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b906115bc908390614ec5565b6017546001600160a01b03163314612436576040516354348f0360e01b815260040160405180910390fd5b60248190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d906020016115bc565b60006124756143b2565b602e55612483600383613d0b565b15611973577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e546040516124bb91815260200190565b60405180910390a1506001919050565b6000805b6001600160a01b0383166000908152600d602052604090206124f090614552565b8110156125fb576001600160a01b0383166000908152600d60205260408120612519908361455c565b9050612526602682613d0b565b156125e8576000612536826115c7565b905080604001516000146125e6576001600160a01b0382166000908152600f602052604081205460ff1661257757816020015161257290615128565b61257d565b81602001515b601d546001600160a01b03888116600090815260286020908152604080832089851684529091529081902054602254915163a0d2710760e01b81529495506125d894929093169263a0d2710792611112928791600401614fec565b6125e2908661501b565b9450505b505b50806125f3816150f9565b9150506124cf565b50919050565b6017546001600160a01b0316331461262c576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166126535760405163d92e233d60e01b815260040160405180910390fd5b601d80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b0906115bc908390614ec5565b611a0f6003826143cc565b606061106d6015613cf7565b6000806126c1836124cb565b6022546001600160a01b038516600090815260296020526040902054919250906126eb90426150b6565b10156111725760008111612717576001600160a01b0383166000908152600a6020526040902054612751565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054612747908390615047565b6127519190615033565b91506125fb565b6017546001600160a01b03163314612783576040516354348f0360e01b815260040160405180910390fd5b60208181556040518281527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee291016115bc565b6001600160a01b0382811660009081526001602052604090205483911633146127f257604051636efb4f4160e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b031614156128255760405163afe7ad4960e01b815260040160405180910390fd5b6001600160a01b038381166000818152602c6020908152604080832080546001600160a01b0319169588169586179055602d825280832094835293905282902042905590517fff0456758201108de53c0ff04c69988d4678ff455b2ce6f733328cf85722c04c90612897908590614ec5565b60405180910390a2505050565b606061106d6003613cf7565b6017546001600160a01b031633146128db576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff16156129155760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f906115bc908390614ec5565b6001600160a01b0383811660009081526001602052604090205484911633146129a457604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b0382166129cb5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516600090815260136020908152604080832093871683529290522054612a0e5760405163184c088160e21b815260040160405180910390fd5b6001600160a01b038085166000908152601260209081526040808320938716835292905220544211612a53576040516327cfdcb760e01b815260040160405180910390fd5b6001600160a01b03841660009081526007602052604090205460ff1615612a8d576040516362e6201d60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526013602090815260408083209488168084529482528083208054908490559383526012825280832085845290915281205590612ada9084836144b0565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffdb7893bf11f50c621e59cc7f1cf540e94295cb27ca869ec7ed7618ca792886284604051612b2991815260200190565b60405180910390a45050505050565b611a0f6015826143cc565b6017546001600160a01b03163314612b6e576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090205460ff16612ba7576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526019602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d025906115bc908390614ec5565b6017546001600160a01b03163314612c22576040516354348f0360e01b815260040160405180910390fd5b601880546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906115bc908390614ec5565b6001600160a01b038181166000908152600160205260409020548291163314612ca957604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff1680612ce857506001600160a01b03821660009081526007602052604090205460ff165b15612d065760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038381166000908152602c6020526040902054811690831614612d4357604051630ced616b60e21b815260040160405180910390fd5b6001600160a01b038084166000908152602d6020908152604080832093861683529290522054612d7590603c9061501b565b421015612d95576040516356248e9760e01b815260040160405180910390fd5b612d9e836143e1565b612da7826143e1565b6001600160a01b0383166000908152600c60205260408120612dc890614552565b1115612eaa576001600160a01b0383166000908152600c60205260408120612df0908261455c565b6001600160a01b03808616600090815260096020818152604080842085871680865290835281852054958a168552928252808420928452919052812080549394509192612e3e90849061501b565b90915550506001600160a01b0380851660008181526009602090815260408083209486168352938152838220829055918152600c90915220612e80908261453d565b506001600160a01b0383166000908152600c60205260409020612ea390826143cc565b5050612da7565b6001600160a01b0383166000908152600d60205260408120612ecb90614552565b1115612fad576001600160a01b0383166000908152600d60205260408120612ef3908261455c565b6001600160a01b03808616600090815260286020818152604080842085871680865290835281852054958a168552928252808420928452919052812080549394509192612f4190849061501b565b90915550506001600160a01b038085166000908152602860209081526040808320858516845282528083208390559286168252600d905220612f8390826143cc565b506001600160a01b0384166000908152600d60205260409020612fa6908261453d565b5050612eaa565b6001600160a01b038084166000908152600b602052604080822054928516825281208054909190612fdf90849061501b565b90915550506001600160a01b038084166000908152600b60209081526040808320839055600a9091528082205492851682528120805490919061302390849061501b565b90915550506001600160a01b0383166000908152600a60209081526040808320839055602990915281205561305960158461453d565b506001600160a01b03808416600081815260016020908152604080832080546001600160a01b031990811690915560028352818420805482169055602d8352818420958816808552958352818420849055938352602c909152908190208054909216909155517f9b712b63e3fb1325fa042d3c238ce8144937875065900528ea1e4f3b00f379f290612897908690614ec5565b6017546001600160a01b03163314613117576040516354348f0360e01b815260040160405180910390fd5b60238190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb69906020016115bc565b6017546001600160a01b03163314613177576040516354348f0360e01b815260040160405180910390fd5b6131826026826143cc565b61319f5760405163f25e6b9f60e01b815260040160405180910390fd5b806001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156131d857600080fd5b505afa1580156131ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132109190614c39565b6001600160a01b038281166000908152600e60205260409081902080546001600160a01b0319169383169384179055601d54905163696a437b60e01b815291169163696a437b916132649190600401614ec5565b60206040518083038186803b15801561327c57600080fd5b505afa158015613290573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b49190614deb565b6001600160a01b0382166000908152600f60205260409020805460ff19169115159190911790556132e4816115c7565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b161791909117815591810151600190920191909155517fabfa8db4d238fa78bf4e15fcc91328dd35f3978f200e2857a56bb719732b7b0b906115bc908390614ec5565b6017546001600160a01b0316331461339c576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b43906020016115bc565b6001600160a01b0382166000908152600d602052604090206133f390826143cc565b505050565b6017546001600160a01b03163314613423576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811661344a5760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae250906115bc908390614ec5565b6017546001600160a01b031633146134c0576040516354348f0360e01b815260040160405180910390fd5b620151808110156134e457604051633f384aad60e21b815260040160405180910390fd5b60228190556040518181527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d9906020016115bc565b6002600054141561353c5760405162461bcd60e51b8152600401611a3690614fb5565b600260009081556001600160a01b0385811682526001602052604090912054859116331461357d57604051636efb4f4160e11b815260040160405180910390fd5b6001600160a01b038086166000908152602560209081526040808320938816835292905220546135af90603c9061501b565b42116135ce57604051631e0b407560e01b815260040160405180910390fd5b6001600160a01b038086166000908152600960209081526040808320938816835292905220548311156136145760405163024ae82d60e61b815260040160405180910390fd5b6001600160a01b03851660009081526007602052604090205460ff161561364e5760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b038086166000908152600960209081526040808320938816835292905290812080548592906136859084906150b6565b9091555061369f90506001600160a01b03851683856144b0565b6001600160a01b038086166000908152600960209081526040808320938816835292905220546136ed576001600160a01b0385166000908152600c602052604090206136eb908561453d565b505b816001600160a01b0316846001600160a01b0316866001600160a01b03167f53e982dd9ec088d634c74c98fbbc161f808b4b6469a26c657120b9a31cb34bfe8660405161373c91815260200190565b60405180910390a450506001600055505050565b3360008181526007602052604090205460ff16156137815760405163ad2fdf3b60e01b815260040160405180910390fd5b6001600160a01b03831660009081526007602052604090205460ff16156137bb576040516362e6201d60e01b815260040160405180910390fd5b6137c6601582613d0b565b6137e25760405162941a5760e11b815260040160405180910390fd5b6001600160a01b038082166000908152600960209081526040808320938816835292905220548211156138285760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0380821660009081526009602090815260408083209388168352929052908120805484929061385f9084906150b6565b9091555061387990506001600160a01b03851684846144b0565b826001600160a01b0316816001600160a01b0316856001600160a01b03166000805160206151c0833981519152856138af6143b2565b6040805192835260208301919091520160405180910390a450505050565b6138d5614bda565b506001600160a01b03166000908152602b602090815260409182902082516060810184528154600681810b810b810b8352600160381b909104810b810b900b92810192909252600101549181019190915290565b6017546001600160a01b03163314613954576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e7906020016115bc565b6017546001600160a01b031633146139b4576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166139db5760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf906115bc908390614ec5565b6017546001600160a01b03163314613a51576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090205460ff16613a8a57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b0381166000908152601a602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e906115bc908390614ec5565b6000613ae46143b2565b602e55613af2600387613d0b565b8015613b2357506001600160a01b038087166000908152600860209081526040808320938916835292905220548411155b8015613b4757506001600160a01b0386166000908152600560205260409020548311155b8015613b7657506001600160a01b0386166000908152600660205260409020548290613b7390426150b6565b10155b15613bba577f4851cad52e624c8f7a1d44c28a80db05988ba2451fc0db6b0ec338d8eca95afb602e54604051613bae91815260200190565b60405180910390a15060015b95945050505050565b6017546001600160a01b03163314613bee576040516354348f0360e01b815260040160405180910390fd5b613bf9601583613d0b565b613c1657604051636211d34960e01b815260040160405180910390fd5b613c1f826143e1565b6001600160a01b0382166000908152600a602052604081208054839290613c4790849061501b565b90915550506001600160a01b038216600081815260296020908152604080832054600a909252918290205491517f5abcf5031fdbd3badb9d1e09094208de329aee72730e87650f346584205d23d192613ca7928252602082015260400190565b60405180910390a25050565b600060225482613cc39190615114565b61117290836150b6565b60006022548310156125fb57602254613ce68385615047565b613cf09190615033565b9050611172565b60606000613d0483614568565b9392505050565b6001600160a01b03811660009081526001830160205260408120541515613d04565b6000611172826022546023546145c4565b60026000541415613d615760405162461bcd60e51b8152600401611a3690614fb5565b600260009081556001600160a01b0384168152600d60205260409020613d879083613d0b565b613da3576040516241cfa560e21b815260040160405180910390fd5b6001600160a01b03808416600090815260286020908152604080832093861683529290522054811115613de95760405163435b562560e01b815260040160405180910390fd5b613df283614672565b6000613e016111628385613f4c565b6001600160a01b0385166000908152600b602052604090205490915015613eb7576001600160a01b0384166000908152600b6020908152604080832054600a90925290912054613e52908390615047565b613e5c9190615033565b6001600160a01b0385166000908152600a602052604081208054909190613e849084906150b6565b90915550506001600160a01b0384166000908152600b602052604081208054839290613eb19084906150b6565b90915550505b6001600160a01b03808516600090815260286020908152604080832093871683529290529081208054849290613eee9084906150b6565b90915550506001600160a01b03808516600090815260286020908152604080832093871683529290522054613f41576001600160a01b0384166000908152600d60205260409020613f3f908461453d565b505b505060016000555050565b6001600160a01b0381166000908152602b602052604081206001015415611172576001600160a01b0382166000908152600f602052604081205460ff16613fbe576001600160a01b0383166000908152602b6020526040902054613fb990600160381b900460060b615128565b613fe2565b6001600160a01b0383166000908152602b6020526040902054600160381b900460060b5b601d5460225460405163a0d2710760e01b81529293506001600160a01b039091169163a0d271079161401a9188918691600401614fec565b60206040518083038186803b15801561403257600080fd5b505afa158015614046573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110599190614e62565b600061407542613cb3565b6001600160a01b0383166000908152602960205260409020541015611973576140a560225442610f7d91906150b6565b6001600160a01b0383166000908152602960205260409020541161411b576140cc82614672565b6001600160a01b0382166000908152600b6020908152604080832054600a909252909120556140fa42613cb3565b6001600160a01b038316600090815260296020526040902055506001919050565b6022546001600160a01b03831660009081526029602052604090205461414190426150b6565b1061419d5761414f82614672565b6001600160a01b0382166000908152600b6020908152604080832054600a8352818420556022546029909252822080549192909161418e90849061501b565b90915550600191506119739050565b6141a642613cb3565b6001600160a01b0383166000908152602a60205260409020541015611973576001600160a01b0382166000908152600b60205260409020546141e783614672565b6001600160a01b0383166000908152600b6020908152604080832054600a90925290912054829161421791615047565b6142219190615033565b6001600160a01b0384166000908152600a602052604090205550919050565b6001600160a01b0381166000908152602960205260409020546142859061426790426150b6565b6001600160a01b0383166000908152600b6020526040902054613ccd565b6001600160a01b0382166000908152600a6020526040812080549091906142ad90849061501b565b90915550506001600160a01b03166000908152602960205260409020429055565b6001600160a01b0383166000908152600a60205260409020548111156143075760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0383166000908152602a60209081526040808320429055600a9091528120805483929061433c9084906150b6565b90915550506001600160a01b038083166000908152600860209081526040808320601b549094168352929052908120805483929061437b90849061501b565b90915550506001600160a01b038216600090815260056020526040812080548392906143a890849061501b565b9091555050505050565b6000603f5a6143c2906040615047565b61106d9190615033565b6000613d04836001600160a01b038416614697565b6143ea8161406a565b506143f481614240565b6001600160a01b0381166000908152600a6020908152604080832054600b9092529091205461442391906146e6565b6001600160a01b039091166000908152600a6020526040902055565b6040516001600160a01b03808516602483015283166044820152606481018290526144aa9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526146fc565b50505050565b6040516001600160a01b0383166024820152604481018290526133f390849063a9059cbb60e01b90606401614473565b6000808486602e546144f291906150b6565b6144fc919061501b565b9050670de0b6b3a7640000846127106145158685615047565b61451f9190615033565b6145299190615047565b6145339190615033565b9695505050505050565b6000613d04836001600160a01b0384166147ce565b6000611172825490565b6000613d0483836148c1565b6060816000018054806020026020016040519081016040528092919081815260200182805480156145b857602002820191906000526020600020905b8154815260200190600101908083116145a4575b50505050509050919050565b6000808060001985870985870292508281108382030391505080600014156145fe57600084116145f357600080fd5b508290049050613d04565b80841161460a57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b61467b816148eb565b6001600160a01b039091166000908152600b6020526040902055565b60008181526001830160205260408120546146de57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611172565b506000611172565b60008183106146f55781613d04565b5090919050565b6000614751826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614acf9092919063ffffffff16565b8051909150156133f3578080602001905181019061476f9190614deb565b6133f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611a36565b600081815260018301602052604081205480156148b75760006147f26001836150b6565b8554909150600090614806906001906150b6565b905081811461486b57600086600001828154811061482657614826615191565b906000526020600020015490508087600001848154811061484957614849615191565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061487c5761487c61517b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611172565b6000915050611172565b60008260000182815481106148d8576148d8615191565b9060005260206000200154905092915050565b60006148f642613cb3565b601e546001600160a01b03166000908152602b60205260409020600101541461498d57601e5461492e906001600160a01b03166115c7565b601e546001600160a01b03166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b1617919091178155910151600191909101555b60005b6001600160a01b0383166000908152600d602052604090206149b190614552565b8110156125fb576001600160a01b0383166000908152600d602052604081206149da908361455c565b90506149e7602682613d0b565b15614abc576149f542613cb3565b6001600160a01b0382166000908152602b602052604090206001015414614a7b57614a1f816115c7565b6001600160a01b0382166000908152602b60209081526040918290208351815492850151600690810b66ffffffffffffff908116600160381b026001600160701b03199095169290910b16179190911781559101516001909101555b6001600160a01b03808516600090815260286020908152604080832093851683529290522054614aaf906111629083613f4c565b614ab9908461501b565b92505b5080614ac7816150f9565b915050614990565b6060611059848460008585843b614b285760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611a36565b600080866001600160a01b03168587604051614b449190614ea9565b60006040518083038185875af1925050503d8060008114614b81576040519150601f19603f3d011682016040523d82523d6000602084013e614b86565b606091505b5091509150614b96828286614ba1565b979650505050505050565b60608315614bb0575081613d04565b825115614bc05782518084602001fd5b8160405162461bcd60e51b8152600401611a369190614f82565b604080516060810182526000808252602082018190529181019190915290565b8051801515811461197357600080fd5b8051600681900b811461197357600080fd5b600060208284031215614c2e57600080fd5b8135613d04816151a7565b600060208284031215614c4b57600080fd5b8151613d04816151a7565b60008060408385031215614c6957600080fd5b8235614c74816151a7565b91506020830135614c84816151a7565b809150509250929050565b600080600060608486031215614ca457600080fd5b8335614caf816151a7565b92506020840135614cbf816151a7565b91506040840135614ccf816151a7565b809150509250925092565b600080600060608486031215614cef57600080fd5b8335614cfa816151a7565b92506020840135614d0a816151a7565b929592945050506040919091013590565b60008060008060808587031215614d3157600080fd5b8435614d3c816151a7565b93506020850135614d4c816151a7565b9250604085013591506060850135614d63816151a7565b939692955090935050565b600080600080600060a08688031215614d8657600080fd5b8535614d91816151a7565b94506020860135614da1816151a7565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215614dd257600080fd5b8235614ddd816151a7565b946020939093013593505050565b600060208284031215614dfd57600080fd5b613d0482614bfa565b600080600060608486031215614e1b57600080fd5b614e2484614c0a565b9250614e3260208501614c0a565b9150614e4060408501614bfa565b90509250925092565b600060208284031215614e5b57600080fd5b5035919050565b600060208284031215614e7457600080fd5b5051919050565b600080600060608486031215614e9057600080fd5b8351925060208401519150604084015190509250925092565b60008251614ebb8184602087016150cd565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015614f2857845163ffffffff1683529383019391830191600101614f06565b5090979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614f765783516001600160a01b031683529284019291840191600101614f51565b50909695505050505050565b6020815260008251806020840152614fa18160408501602087016150cd565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b92835260069190910b6020830152604082015260600190565b9283526020830191909152604082015260600190565b6000821982111561502e5761502e61514f565b500190565b60008261504257615042615165565b500490565b60008160001904831182151516156150615761506161514f565b500290565b60008160060b8360060b6000811281667fffffffffffff19018312811516156150915761509161514f565b81667fffffffffffff0183138116156150ac576150ac61514f565b5090039392505050565b6000828210156150c8576150c861514f565b500390565b60005b838110156150e85781810151838201526020016150d0565b838111156144aa5750506000910152565b600060001982141561510d5761510d61514f565b5060010190565b60008261512357615123615165565b500690565b60008160060b667fffffffffffff198114156151465761514661514f565b60000392915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146151bc57600080fd5b5056fe46f2180879a7123a197cc3828c28955d70d661c70acbdc02450daf5f9a9c1cfaee3f0daba9837d1ab0597acf34328550e4832d02e24e467825e7c2dd318c3820a2646970667358221220e76a24d5ac93c336cee0e33e01cdb71776079ab50ebf16b2817c47b4495564c864736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3B7 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90A4684E GT PUSH2 0x1EA JUMPI DUP1 PUSH4 0xCB4BE2BB GT PUSH2 0x109 JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0xC7B JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0xC9B JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0xCBB JUMPI DUP1 PUSH4 0xD55995FE EQ PUSH2 0xCF3 JUMPI DUP1 PUSH4 0xDD2080D6 EQ PUSH2 0xD13 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0xD33 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0xD49 JUMPI DUP1 PUSH4 0xE485DC0E EQ PUSH2 0xD76 JUMPI DUP1 PUSH4 0xE7F0CBF8 EQ PUSH2 0xD96 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0xDCC JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0xDEC JUMPI DUP1 PUSH4 0xEC8CA643 EQ PUSH2 0xE0C JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0xE42 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0xE62 JUMPI DUP1 PUSH4 0xF136A09D EQ PUSH2 0xE82 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0xEAF JUMPI DUP1 PUSH4 0xF6BB2032 EQ PUSH2 0xECF JUMPI DUP1 PUSH4 0xF9D46CF2 EQ PUSH2 0xF05 JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0xF25 JUMPI DUP1 PUSH4 0xFE75BC46 EQ PUSH2 0xF3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x90A4684E EQ PUSH2 0x99D JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x9BD JUMPI DUP1 PUSH4 0x98E90A0F EQ PUSH2 0x9D2 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0xA08 JUMPI DUP1 PUSH4 0xA2145809 EQ PUSH2 0xA28 JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0xA48 JUMPI DUP1 PUSH4 0xA662031B EQ PUSH2 0xA80 JUMPI DUP1 PUSH4 0xA676F9FF EQ PUSH2 0xAA0 JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0xACD JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0xAE3 JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0xB03 JUMPI DUP1 PUSH4 0xAF320E81 EQ PUSH2 0xB23 JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0xB43 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0xB73 JUMPI DUP1 PUSH4 0xB440027F EQ PUSH2 0xB93 JUMPI DUP1 PUSH4 0xB600702A EQ PUSH2 0xBCB JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0xBEB JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0xC0B JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0xC3B JUMPI DUP1 PUSH4 0xCACDF93D EQ PUSH2 0xC5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x59A2255E GT PUSH2 0x2D6 JUMPI DUP1 PUSH4 0x59A2255E EQ PUSH2 0x708 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x728 JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x748 JUMPI DUP1 PUSH4 0x5FEEB794 EQ PUSH2 0x75E JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x77E JUMPI DUP1 PUSH4 0x64BB43EE EQ PUSH2 0x794 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x7B4 JUMPI DUP1 PUSH4 0x694798E6 EQ PUSH2 0x7D4 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x80C JUMPI DUP1 PUSH4 0x6BA42AAA EQ PUSH2 0x82C JUMPI DUP1 PUSH4 0x6CF262BC EQ PUSH2 0x84C JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x86C JUMPI DUP1 PUSH4 0x748747E6 EQ PUSH2 0x88C JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x8AC JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x8C2 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x8E2 JUMPI DUP1 PUSH4 0x878C723E EQ PUSH2 0x8F7 JUMPI DUP1 PUSH4 0x8BB6DFA8 EQ PUSH2 0x92D JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x94D JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x97D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34D4C61 EQ PUSH2 0x3C3 JUMPI DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x3F6 JUMPI DUP1 PUSH4 0xC620BCE EQ PUSH2 0x42E JUMPI DUP1 PUSH4 0xD6A1F87 EQ PUSH2 0x450 JUMPI DUP1 PUSH4 0x1101EB41 EQ PUSH2 0x470 JUMPI DUP1 PUSH4 0x11466D72 EQ PUSH2 0x492 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x4B2 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x4EA JUMPI DUP1 PUSH4 0x165E62E7 EQ PUSH2 0x50A JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x554 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x5B9 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x5E6 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x61E JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x633 JUMPI DUP1 PUSH4 0x280B656C EQ PUSH2 0x673 JUMPI DUP1 PUSH4 0x4A8D1348 EQ PUSH2 0x693 JUMPI DUP1 PUSH4 0x52A4DE29 EQ PUSH2 0x6A8 JUMPI DUP1 PUSH4 0x575288BF EQ PUSH2 0x6C8 JUMPI DUP1 PUSH4 0x594A3A93 EQ PUSH2 0x6E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x3BE JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x3DE CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0xF5B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x402 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x411 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x443 PUSH2 0x1061 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3ED SWAP2 SWAP1 PUSH2 0x4F35 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x46B CALLDATASIZE PUSH1 0x4 PUSH2 0x4DBF JUMP JUMPDEST PUSH2 0x1072 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x48B CALLDATASIZE PUSH1 0x4 PUSH2 0x4CDA JUMP JUMPDEST PUSH2 0x1178 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x49E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x4AD CALLDATASIZE PUSH1 0x4 PUSH2 0x4DBF JUMP JUMPDEST PUSH2 0x12D2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x4CD CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x505 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x1461 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x52A PUSH2 0x525 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND DUP3 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 SIGNEXTEND SWAP1 DUP3 ADD MSTORE SWAP2 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x3ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x560 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x56F CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x5A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1B SLOAD PUSH2 0x5D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3ED SWAP2 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x601 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x1978 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x663 PUSH2 0x64E CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x68E CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x1A04 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x69F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2E SLOAD PUSH2 0x3E3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x6C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CDA JUMP JUMPDEST PUSH2 0x1A13 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x6E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CDA JUMP JUMPDEST PUSH2 0x1C4D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x703 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH2 0x1F10 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x714 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x723 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x1FB5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x734 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x17 SLOAD PUSH2 0x5D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x754 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x76A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x779 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x2067 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x78A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x7AF CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x22D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x7CF CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x2353 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x7EF CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x827 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E49 JUMP JUMPDEST PUSH2 0x240B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x838 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x663 PUSH2 0x847 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x246B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x858 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x867 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x24CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x878 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x887 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x2601 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x898 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x8A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x269E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1E SLOAD PUSH2 0x5D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x443 PUSH2 0x26A9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x903 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D9 PUSH2 0x912 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x939 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0x948 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x26B5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x959 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x663 PUSH2 0x968 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x989 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x998 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E49 JUMP JUMPDEST PUSH2 0x2758 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0x9B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH2 0x27B6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x443 PUSH2 0x28A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D9 PUSH2 0x9ED CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xA23 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x28B0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xA43 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C8F JUMP JUMPDEST PUSH2 0x2968 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xA63 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xA9B CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x2B38 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xABB CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xAFE CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x2B43 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xB1E CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x2BF7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xB3E CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH2 0x2C6D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x663 PUSH2 0xB5E CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xB8E CALLDATASIZE PUSH1 0x4 PUSH2 0x4E49 JUMP JUMPDEST PUSH2 0x30EC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xBAE CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xBE6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x314C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xC06 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E49 JUMP JUMPDEST PUSH2 0x3371 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x663 PUSH2 0xC26 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1C SLOAD PUSH2 0x5D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xC76 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH2 0x33D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xC96 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x33F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xCB6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E49 JUMP JUMPDEST PUSH2 0x3495 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xCD6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C56 JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xD0E CALLDATASIZE PUSH1 0x4 PUSH2 0x4D1B JUMP JUMPDEST PUSH2 0x3519 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xD2E CALLDATASIZE PUSH1 0x4 PUSH2 0x4CDA JUMP JUMPDEST PUSH2 0x3750 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH1 0x24 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xD64 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x52A PUSH2 0xD91 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x38CD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xDB1 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xDE7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E49 JUMP JUMPDEST PUSH2 0x3929 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xE07 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x3989 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5D9 PUSH2 0xE27 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xE5D CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x3A26 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1D SLOAD PUSH2 0x5D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xE9D CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x18 SLOAD PUSH2 0x5D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH2 0xEEA CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x663 PUSH2 0xF20 CALLDATASIZE PUSH1 0x4 PUSH2 0x4D6E JUMP JUMPDEST PUSH2 0x3ADA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3E3 PUSH1 0x23 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x490 PUSH2 0xF56 CALLDATASIZE PUSH1 0x4 PUSH2 0x4DBF JUMP JUMPDEST PUSH2 0x3BC3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF67 DUP4 PUSH2 0x24CB JUMP JUMPDEST PUSH1 0x22 SLOAD SWAP1 SWAP2 POP TIMESTAMP SWAP1 PUSH2 0xF82 SWAP1 PUSH2 0xF7D SWAP1 DUP4 PUSH2 0x50B6 JUMP JUMPDEST PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT ISZERO PUSH2 0x1026 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xFC7 SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST LT PUSH2 0x1003 JUMPI PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xFF2 SWAP2 SWAP1 PUSH2 0x501B JUMP JUMPDEST PUSH2 0xFFC SWAP1 DUP3 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 POP PUSH2 0x103C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xFFC SWAP1 DUP3 PUSH2 0x50B6 JUMP JUMPDEST PUSH2 0x102F TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH2 0x1039 SWAP1 DUP3 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x1046 DUP2 DUP4 PUSH2 0x3CCD JUMP JUMPDEST PUSH2 0x104F DUP6 PUSH2 0x26B5 JUMP JUMPDEST PUSH2 0x1059 SWAP2 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x106D PUSH1 0x26 PUSH2 0x3CF7 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x107F PUSH1 0x26 DUP5 PUSH2 0x3D0B JUMP JUMPDEST ISZERO PUSH2 0x1172 JUMPI PUSH1 0x0 PUSH2 0x108F DUP5 PUSH2 0x15C7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x1170 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x10D0 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x10CB SWAP1 PUSH2 0x5128 JUMP JUMPDEST PUSH2 0x10D6 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH2 0x1167 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x1112 SWAP2 DUP10 SWAP2 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x4FEC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x112A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x113E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1162 SWAP2 SWAP1 PUSH2 0x4E62 JUMP JUMPDEST PUSH2 0x3D2D JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1172 JUMP JUMPDEST POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x11B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 SLOAD PUSH2 0x11C1 SWAP1 TIMESTAMP PUSH2 0x501B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP10 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP2 DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE DUP4 DUP2 KECCAK256 SWAP3 DUP2 MSTORE SWAP2 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x1210 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1221 SWAP1 POP DUP5 DUP5 DUP5 PUSH2 0x3D3E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1260 JUMPI POP PUSH1 0x21 SLOAD PUSH2 0x125E DUP3 DUP7 PUSH2 0x3F4C JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0x127E JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE DUP6 PUSH1 0x40 MLOAD PUSH2 0x12C3 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1303 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x130E PUSH1 0x15 DUP3 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x132A JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1333 DUP2 PUSH2 0x406A JUMP JUMPDEST ISZERO PUSH2 0x138E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51E0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1385 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5005 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x140D JUMPI PUSH2 0x13B7 DUP2 PUSH2 0x4240 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51E0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1404 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5005 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH2 0x1418 DUP2 DUP5 DUP5 PUSH2 0x42CE JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 DUP4 DUP3 AND SWAP2 AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51C0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH2 0x1444 PUSH2 0x43B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x148C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x14B3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1D SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x1514 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x152C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1540 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1564 SWAP2 SWAP1 PUSH2 0x4DEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x15CF PUSH2 0x4BDA JUMP JUMPDEST PUSH2 0x15D8 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ ISZERO PUSH2 0x164E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1662 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xF7D SWAP2 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 SWAP2 POP DUP2 EQ ISZERO PUSH2 0x17C6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x6 SIGNEXTEND PUSH2 0x16CF TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH2 0x16D9 SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x16EC JUMPI PUSH2 0x16EC PUSH2 0x5191 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD SWAP3 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP2 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x1748 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4ED9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1760 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1774 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1798 SWAP2 SWAP1 PUSH2 0x4E06 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP PUSH2 0x17B2 SWAP2 DUP4 SWAP2 POP PUSH2 0x5066 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP PUSH2 0x194F SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP2 GT ISZERO PUSH2 0x194F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x20 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0x1813 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH2 0x181D SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1830 JUMPI PUSH2 0x1830 PUSH2 0x5191 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH4 0xFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x22 SLOAD PUSH2 0x1856 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH2 0x1860 SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST PUSH2 0x186A SWAP2 SWAP1 PUSH2 0x501B JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x187D JUMPI PUSH2 0x187D PUSH2 0x5191 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD DUP3 ADD MSTORE PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xDC686D91 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 DUP3 AND SWAP3 PUSH4 0xDC686D91 SWAP3 PUSH2 0x18D5 SWAP3 AND SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x4ED9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1901 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1925 SWAP2 SWAP1 PUSH2 0x4E06 JUMP JUMPDEST PUSH1 0x6 SWAP3 DUP4 SIGNEXTEND SWAP1 SWAP3 SIGNEXTEND DUP1 DUP9 MSTORE SWAP2 SWAP6 POP SWAP2 POP PUSH2 0x1940 SWAP1 DUP3 SWAP1 PUSH2 0x5066 JUMP JUMPDEST PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND SWAP1 SIGNEXTEND PUSH1 0x20 DUP7 ADD MSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x1968 JUMPI PUSH2 0x195E TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1970 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP5 ADD MSTORE JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x18 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x19A3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x17 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x19FA SWAP2 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x1A0F PUSH1 0x26 DUP3 PUSH2 0x43CC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x1A3F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A36 SWAP1 PUSH2 0x4FB5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1A4F PUSH1 0x26 DUP4 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x1A6C JUMPI PUSH1 0x40 MLOAD PUSH4 0xE0B6AEAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1A77 PUSH1 0x15 DUP5 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x1A94 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1AB6 SWAP1 DUP4 PUSH2 0x43CC JUMP JUMPDEST POP PUSH2 0x1AC0 DUP4 PUSH2 0x43E1 JUMP JUMPDEST PUSH1 0x21 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x1AFE SWAP1 PUSH2 0x1AF8 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST DUP5 PUSH2 0x3F4C JUMP JUMPDEST LT ISZERO PUSH2 0x1B1D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6F447FCD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51E0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x1B6A SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5005 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x1B87 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x443F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1BBE SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1BD1 SWAP1 POP PUSH2 0x1162 DUP3 DUP5 PUSH2 0x3F4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1BF9 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 SWAP1 DUP7 AND SWAP1 PUSH32 0x4E186BC75A2220191B826BAFF3EE63C3E970E94E58A9007FF94C9A7B8E6EBB3F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x1C70 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A36 SWAP1 PUSH2 0x4FB5 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE PUSH2 0x1C80 PUSH1 0x15 DUP5 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x1C9D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1CCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x822D97 PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1CFA SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D26 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D4A SWAP2 SWAP1 PUSH2 0x4E62 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D61 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x443F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1D90 SWAP2 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DBC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DE0 SWAP2 SWAP1 PUSH2 0x4E62 JUMP JUMPDEST PUSH2 0x1DEA SWAP2 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2710 PUSH1 0x24 SLOAD DUP4 PUSH2 0x1DFF SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x1E09 SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E15 DUP2 DUP4 PUSH2 0x50B6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP11 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x1E4C SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0x17 SLOAD PUSH2 0x1E89 SWAP3 AND DUP4 PUSH2 0x44B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1EAB SWAP1 DUP7 PUSH2 0x43CC JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEC1A37D4A331A5059081E0FB5DA1735E7890900CD215A4FB1E9F2779FD7B83EB DUP6 PUSH1 0x40 MLOAD PUSH2 0x1EFB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x1F4C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP9 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SWAP1 SWAP3 MSTORE DUP1 DUP4 KECCAK256 SLOAD SWAP1 MLOAD SWAP2 SWAP5 AND SWAP3 SWAP2 PUSH32 0xA8BAD3F0B781E1D954AF9945167D5F80BFE5E57930F17C93843187C77557A6B8 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x1FF1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCFE96633 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x2 SWAP1 SWAP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP3 SSTORE DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE MLOAD SWAP4 AND SWAP3 DUP4 SWAP3 SWAP2 CALLER SWAP2 PUSH32 0xCF30C54296D5EEE76168B564C59C50578D49C271733A470F32707C8CFBC88A8B SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2098 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x20A3 PUSH1 0x15 DUP3 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x20BF JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x20C8 DUP2 PUSH2 0x406A JUMP JUMPDEST ISZERO PUSH2 0x2123 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51E0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x211A SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5005 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1B SLOAD DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0x435B21C1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP3 DUP4 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x435B21C1 SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x218E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21A2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21C6 SWAP2 SWAP1 PUSH2 0x4E7B JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x21D6 PUSH2 0x43B2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x21E6 DUP3 DUP5 DUP7 DUP9 PUSH2 0x44E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 GT ISZERO PUSH2 0x2280 JUMPI PUSH2 0x2212 DUP7 PUSH2 0x4240 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51E0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 PUSH2 0x225F SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH2 0x5005 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x226F PUSH2 0x43B2 JUMP JUMPDEST SWAP2 POP PUSH2 0x227D DUP3 DUP5 DUP7 DUP9 PUSH2 0x44E0 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x228B DUP7 DUP9 DUP4 PUSH2 0x42CE JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP4 DUP11 DUP3 AND SWAP4 SWAP2 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51C0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x22FC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2307 PUSH1 0x26 DUP3 PUSH2 0x453D JUMP JUMPDEST PUSH2 0x2324 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA8D08B1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x51199D699BDFD516FA88DD0D2F8487C40C147B4867ACAA23ADC8D4DF6B098E56 DUP2 PUSH1 0x40 MLOAD PUSH2 0x15BC SWAP2 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x237E JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x23B8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2436 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2475 PUSH2 0x43B2 JUMP JUMPDEST PUSH1 0x2E SSTORE PUSH2 0x2483 PUSH1 0x3 DUP4 PUSH2 0x3D0B JUMP JUMPDEST ISZERO PUSH2 0x1973 JUMPI PUSH32 0x4851CAD52E624C8F7A1D44C28A80DB05988BA2451FC0DB6B0EC338D8ECA95AFB PUSH1 0x2E SLOAD PUSH1 0x40 MLOAD PUSH2 0x24BB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x24F0 SWAP1 PUSH2 0x4552 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x25FB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2519 SWAP1 DUP4 PUSH2 0x455C JUMP JUMPDEST SWAP1 POP PUSH2 0x2526 PUSH1 0x26 DUP3 PUSH2 0x3D0B JUMP JUMPDEST ISZERO PUSH2 0x25E8 JUMPI PUSH1 0x0 PUSH2 0x2536 DUP3 PUSH2 0x15C7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x40 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x25E6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2577 JUMPI DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0x2572 SWAP1 PUSH2 0x5128 JUMP JUMPDEST PUSH2 0x257D JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 SLOAD PUSH1 0x22 SLOAD SWAP2 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP5 SWAP6 POP PUSH2 0x25D8 SWAP5 SWAP3 SWAP1 SWAP4 AND SWAP3 PUSH4 0xA0D27107 SWAP3 PUSH2 0x1112 SWAP3 DUP8 SWAP2 PUSH1 0x4 ADD PUSH2 0x4FEC JUMP JUMPDEST PUSH2 0x25E2 SWAP1 DUP7 PUSH2 0x501B JUMP JUMPDEST SWAP5 POP POP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x25F3 DUP2 PUSH2 0x50F9 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x24CF JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x262C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2653 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH2 0x1A0F PUSH1 0x3 DUP3 PUSH2 0x43CC JUMP JUMPDEST PUSH1 0x60 PUSH2 0x106D PUSH1 0x15 PUSH2 0x3CF7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x26C1 DUP4 PUSH2 0x24CB JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x26EB SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST LT ISZERO PUSH2 0x1172 JUMPI PUSH1 0x0 DUP2 GT PUSH2 0x2717 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2751 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x2747 SWAP1 DUP4 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x2751 SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST SWAP2 POP PUSH2 0x25FB JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2783 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP2 ADD PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x27F2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2825 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAFE7AD49 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP6 DUP9 AND SWAP6 DUP7 OR SWAP1 SSTORE PUSH1 0x2D DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE SWAP1 MLOAD PUSH32 0xFF0456758201108DE53C0FF04C69988D4678FF455B2CE6F733328CF85722C04C SWAP1 PUSH2 0x2897 SWAP1 DUP6 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x106D PUSH1 0x3 PUSH2 0x3CF7 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x28DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2915 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x29A4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x29CB JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2A0E JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x2A53 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2A8D JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x13 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP9 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x12 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE SWAP1 PUSH2 0x2ADA SWAP1 DUP5 DUP4 PUSH2 0x44B0 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFDB7893BF11F50C621E59CC7F1CF540E94295CB27CA869EC7ED7618CA7928862 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2B29 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1A0F PUSH1 0x15 DUP3 PUSH2 0x43CC JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2B6E JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2BA7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2C22 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x18 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP2 AND CALLER EQ PUSH2 0x2CA9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x2CE8 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x2D06 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 AND SWAP1 DUP4 AND EQ PUSH2 0x2D43 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCED616B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x2D75 SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x501B JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x2D95 JUMPI PUSH1 0x40 MLOAD PUSH4 0x56248E97 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D9E DUP4 PUSH2 0x43E1 JUMP JUMPDEST PUSH2 0x2DA7 DUP3 PUSH2 0x43E1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2DC8 SWAP1 PUSH2 0x4552 JUMP JUMPDEST GT ISZERO PUSH2 0x2EAA JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2DF0 SWAP1 DUP3 PUSH2 0x455C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x2E3E SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP3 SWAP1 SSTORE SWAP2 DUP2 MSTORE PUSH1 0xC SWAP1 SWAP2 MSTORE KECCAK256 PUSH2 0x2E80 SWAP1 DUP3 PUSH2 0x453D JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2EA3 SWAP1 DUP3 PUSH2 0x43CC JUMP JUMPDEST POP POP PUSH2 0x2DA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2ECB SWAP1 PUSH2 0x4552 JUMP JUMPDEST GT ISZERO PUSH2 0x2FAD JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x2EF3 SWAP1 DUP3 PUSH2 0x455C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP6 DUP8 AND DUP1 DUP7 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP6 KECCAK256 SLOAD SWAP6 DUP11 AND DUP6 MSTORE SWAP3 DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP3 DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH2 0x2F41 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE SWAP3 DUP7 AND DUP3 MSTORE PUSH1 0xD SWAP1 MSTORE KECCAK256 PUSH2 0x2F83 SWAP1 DUP3 PUSH2 0x43CC JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x2FA6 SWAP1 DUP3 PUSH2 0x453D JUMP JUMPDEST POP POP PUSH2 0x2EAA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x2FDF SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD SWAP3 DUP6 AND DUP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x3023 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE PUSH1 0x29 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SSTORE PUSH2 0x3059 PUSH1 0x15 DUP5 PUSH2 0x453D JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x2D DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 DUP9 AND DUP1 DUP6 MSTORE SWAP6 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x2C SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP3 AND SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9B712B63E3FB1325FA042D3C238CE8144937875065900528EA1E4F3B00F379F2 SWAP1 PUSH2 0x2897 SWAP1 DUP7 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3117 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x23 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3177 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3182 PUSH1 0x26 DUP3 PUSH2 0x43CC JUMP JUMPDEST PUSH2 0x319F JUMPI PUSH1 0x40 MLOAD PUSH4 0xF25E6B9F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x31D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x31EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3210 SWAP2 SWAP1 PUSH2 0x4C39 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP4 DUP4 AND SWAP4 DUP5 OR SWAP1 SSTORE PUSH1 0x1D SLOAD SWAP1 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0x696A437B SWAP2 PUSH2 0x3264 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x327C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3290 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32B4 SWAP2 SWAP1 PUSH2 0x4DEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x32E4 DUP2 PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 DUP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xABFA8DB4D238FA78BF4E15FCC91328DD35F3978F200E2857A56BB719732B7B0B SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x339C JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x33F3 SWAP1 DUP3 PUSH2 0x43CC JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3423 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x344A JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x34C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x34E4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP1 PUSH1 0x20 ADD PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x353C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A36 SWAP1 PUSH2 0x4FB5 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP6 SWAP2 AND CALLER EQ PUSH2 0x357D JUMPI PUSH1 0x40 MLOAD PUSH4 0x6EFB4F41 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x25 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x35AF SWAP1 PUSH1 0x3C SWAP1 PUSH2 0x501B JUMP JUMPDEST TIMESTAMP GT PUSH2 0x35CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E0B4075 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP4 GT ISZERO PUSH2 0x3614 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24AE82D PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x364E JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x3685 SWAP1 DUP5 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x369F SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP4 DUP6 PUSH2 0x44B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x36ED JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x36EB SWAP1 DUP6 PUSH2 0x453D JUMP JUMPDEST POP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x53E982DD9EC088D634C74C98FBBC161F808B4B6469A26C657120B9A31CB34BFE DUP7 PUSH1 0x40 MLOAD PUSH2 0x373C SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3781 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD2FDF3B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x37BB JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x37C6 PUSH1 0x15 DUP3 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x37E2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x941A57 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x3828 JUMPI PUSH1 0x40 MLOAD PUSH4 0x356680B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x385F SWAP1 DUP5 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x3879 SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 DUP5 PUSH2 0x44B0 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x51C0 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 PUSH2 0x38AF PUSH2 0x43B2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH2 0x38D5 PUSH2 0x4BDA JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0x6 DUP2 DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP2 SIGNEXTEND DUP4 MSTORE PUSH1 0x1 PUSH1 0x38 SHL SWAP1 SWAP2 DIV DUP2 SIGNEXTEND DUP2 SIGNEXTEND SWAP1 SIGNEXTEND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3954 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x15BC JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x39B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x39DB JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3A51 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3A8A JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x15BC SWAP1 DUP4 SWAP1 PUSH2 0x4EC5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AE4 PUSH2 0x43B2 JUMP JUMPDEST PUSH1 0x2E SSTORE PUSH2 0x3AF2 PUSH1 0x3 DUP8 PUSH2 0x3D0B JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3B23 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP10 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP5 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x3B47 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x3B76 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH2 0x3B73 SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST LT ISZERO JUMPDEST ISZERO PUSH2 0x3BBA JUMPI PUSH32 0x4851CAD52E624C8F7A1D44C28A80DB05988BA2451FC0DB6B0EC338D8ECA95AFB PUSH1 0x2E SLOAD PUSH1 0x40 MLOAD PUSH2 0x3BAE SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3BEE JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3BF9 PUSH1 0x15 DUP4 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x3C16 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6211D349 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3C1F DUP3 PUSH2 0x43E1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x3C47 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x5ABCF5031FDBD3BADB9D1E09094208DE329AEE72730E87650F346584205D23D1 SWAP3 PUSH2 0x3CA7 SWAP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP3 PUSH2 0x3CC3 SWAP2 SWAP1 PUSH2 0x5114 JUMP JUMPDEST PUSH2 0x1172 SWAP1 DUP4 PUSH2 0x50B6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x22 SLOAD DUP4 LT ISZERO PUSH2 0x25FB JUMPI PUSH1 0x22 SLOAD PUSH2 0x3CE6 DUP4 DUP6 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x3CF0 SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST SWAP1 POP PUSH2 0x1172 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x3D04 DUP4 PUSH2 0x4568 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0x3D04 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1172 DUP3 PUSH1 0x22 SLOAD PUSH1 0x23 SLOAD PUSH2 0x45C4 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x3D61 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A36 SWAP1 PUSH2 0x4FB5 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3D87 SWAP1 DUP4 PUSH2 0x3D0B JUMP JUMPDEST PUSH2 0x3DA3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x41CFA5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x3DE9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x435B5625 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3DF2 DUP4 PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E01 PUSH2 0x1162 DUP4 DUP6 PUSH2 0x3F4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x3EB7 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x3E52 SWAP1 DUP4 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x3E5C SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x3E84 SWAP1 DUP5 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x3EB1 SWAP1 DUP5 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x3EEE SWAP1 DUP5 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x3F41 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x3F3F SWAP1 DUP5 PUSH2 0x453D JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 ADD SLOAD ISZERO PUSH2 0x1172 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x3FBE JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3FB9 SWAP1 PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND PUSH2 0x5128 JUMP JUMPDEST PUSH2 0x3FE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x38 SHL SWAP1 DIV PUSH1 0x6 SIGNEXTEND JUMPDEST PUSH1 0x1D SLOAD PUSH1 0x22 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA0D27107 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0xA0D27107 SWAP2 PUSH2 0x401A SWAP2 DUP9 SWAP2 DUP7 SWAP2 PUSH1 0x4 ADD PUSH2 0x4FEC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4032 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4046 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1059 SWAP2 SWAP1 PUSH2 0x4E62 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4075 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1973 JUMPI PUSH2 0x40A5 PUSH1 0x22 SLOAD TIMESTAMP PUSH2 0xF7D SWAP2 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD GT PUSH2 0x411B JUMPI PUSH2 0x40CC DUP3 PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SSTORE PUSH2 0x40FA TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x22 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4141 SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST LT PUSH2 0x419D JUMPI PUSH2 0x414F DUP3 PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA DUP4 MSTORE DUP2 DUP5 KECCAK256 SSTORE PUSH1 0x22 SLOAD PUSH1 0x29 SWAP1 SWAP3 MSTORE DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH2 0x418E SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x1 SWAP2 POP PUSH2 0x1973 SWAP1 POP JUMP JUMPDEST PUSH2 0x41A6 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD LT ISZERO PUSH2 0x1973 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x41E7 DUP4 PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xA SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP3 SWAP2 PUSH2 0x4217 SWAP2 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x4221 SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x4285 SWAP1 PUSH2 0x4267 SWAP1 TIMESTAMP PUSH2 0x50B6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3CCD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x42AD SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x29 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x4307 JUMPI PUSH1 0x40 MLOAD PUSH4 0x356680B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 TIMESTAMP SWAP1 SSTORE PUSH1 0xA SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x433C SWAP1 DUP5 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1B SLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x437B SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x43A8 SWAP1 DUP5 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3F GAS PUSH2 0x43C2 SWAP1 PUSH1 0x40 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x106D SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D04 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x4697 JUMP JUMPDEST PUSH2 0x43EA DUP2 PUSH2 0x406A JUMP JUMPDEST POP PUSH2 0x43F4 DUP2 PUSH2 0x4240 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0xB SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x4423 SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x44AA SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x46FC JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x33F3 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x4473 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 DUP7 PUSH1 0x2E SLOAD PUSH2 0x44F2 SWAP2 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST PUSH2 0x44FC SWAP2 SWAP1 PUSH2 0x501B JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP5 PUSH2 0x2710 PUSH2 0x4515 DUP7 DUP6 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x451F SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST PUSH2 0x4529 SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x4533 SWAP2 SWAP1 PUSH2 0x5033 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D04 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x47CE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1172 DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D04 DUP4 DUP4 PUSH2 0x48C1 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x45B8 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x45A4 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH1 0x0 NOT DUP6 DUP8 MULMOD DUP6 DUP8 MUL SWAP3 POP DUP3 DUP2 LT DUP4 DUP3 SUB SUB SWAP2 POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x45FE JUMPI PUSH1 0x0 DUP5 GT PUSH2 0x45F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP3 SWAP1 DIV SWAP1 POP PUSH2 0x3D04 JUMP JUMPDEST DUP1 DUP5 GT PUSH2 0x460A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP7 DUP9 MULMOD PUSH1 0x2 PUSH1 0x3 PUSH1 0x1 DUP9 NOT DUP2 ADD DUP10 AND SWAP9 DUP10 SWAP1 DIV SWAP2 DUP3 MUL DUP4 XOR DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL DUP1 DUP4 MUL DUP5 SUB MUL SWAP2 DUP3 MUL SWAP1 SWAP3 SUB MUL PUSH1 0x0 DUP9 SWAP1 SUB DUP9 SWAP1 DIV SWAP1 SWAP2 ADD DUP6 DUP4 GT SWAP1 SWAP5 SUB SWAP4 SWAP1 SWAP4 MUL SWAP4 SUB SWAP5 SWAP1 SWAP5 DIV SWAP2 SWAP1 SWAP2 OR MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x467B DUP2 PUSH2 0x48EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x46DE JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x1172 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1172 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x46F5 JUMPI DUP2 PUSH2 0x3D04 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4751 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4ACF SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x33F3 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x476F SWAP2 SWAP1 PUSH2 0x4DEB JUMP JUMPDEST PUSH2 0x33F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1A36 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x48B7 JUMPI PUSH1 0x0 PUSH2 0x47F2 PUSH1 0x1 DUP4 PUSH2 0x50B6 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x4806 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x50B6 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x486B JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x4826 JUMPI PUSH2 0x4826 PUSH2 0x5191 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x4849 JUMPI PUSH2 0x4849 PUSH2 0x5191 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x487C JUMPI PUSH2 0x487C PUSH2 0x517B JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0x1172 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x1172 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x48D8 JUMPI PUSH2 0x48D8 PUSH2 0x5191 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48F6 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x498D JUMPI PUSH1 0x1E SLOAD PUSH2 0x492E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x49B1 SWAP1 PUSH2 0x4552 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x25FB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x49DA SWAP1 DUP4 PUSH2 0x455C JUMP JUMPDEST SWAP1 POP PUSH2 0x49E7 PUSH1 0x26 DUP3 PUSH2 0x3D0B JUMP JUMPDEST ISZERO PUSH2 0x4ABC JUMPI PUSH2 0x49F5 TIMESTAMP PUSH2 0x3CB3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD EQ PUSH2 0x4A7B JUMPI PUSH2 0x4A1F DUP2 PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD SWAP3 DUP6 ADD MLOAD PUSH1 0x6 SWAP1 DUP2 SIGNEXTEND PUSH7 0xFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x38 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0x70 SHL SUB NOT SWAP1 SWAP6 AND SWAP3 SWAP1 SWAP2 SIGNEXTEND AND OR SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE SWAP2 ADD MLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x28 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH2 0x4AAF SWAP1 PUSH2 0x1162 SWAP1 DUP4 PUSH2 0x3F4C JUMP JUMPDEST PUSH2 0x4AB9 SWAP1 DUP5 PUSH2 0x501B JUMP JUMPDEST SWAP3 POP JUMPDEST POP DUP1 PUSH2 0x4AC7 DUP2 PUSH2 0x50F9 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x4990 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1059 DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 DUP5 EXTCODESIZE PUSH2 0x4B28 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1A36 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x4B44 SWAP2 SWAP1 PUSH2 0x4EA9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4B81 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4B86 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x4B96 DUP3 DUP3 DUP7 PUSH2 0x4BA1 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4BB0 JUMPI POP DUP2 PUSH2 0x3D04 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x4BC0 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A36 SWAP2 SWAP1 PUSH2 0x4F82 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1973 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x6 DUP2 SWAP1 SIGNEXTEND DUP2 EQ PUSH2 0x1973 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3D04 DUP2 PUSH2 0x51A7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3D04 DUP2 PUSH2 0x51A7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4C74 DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4C84 DUP2 PUSH2 0x51A7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4CA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4CAF DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4CBF DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x4CCF DUP2 PUSH2 0x51A7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4CEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4CFA DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4D0A DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4D31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4D3C DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x4D4C DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x4D63 DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4D86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4D91 DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4DA1 DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4DD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4DDD DUP2 PUSH2 0x51A7 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4DFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3D04 DUP3 PUSH2 0x4BFA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4E1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E24 DUP5 PUSH2 0x4C0A JUMP JUMPDEST SWAP3 POP PUSH2 0x4E32 PUSH1 0x20 DUP6 ADD PUSH2 0x4C0A JUMP JUMPDEST SWAP2 POP PUSH2 0x4E40 PUSH1 0x40 DUP6 ADD PUSH2 0x4BFA JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4E5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4E74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4E90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x4EBB DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x50CD JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 DUP3 ADD SWAP2 SWAP1 PUSH1 0x60 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4F28 JUMPI DUP5 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4F06 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4F76 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4F51 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x4FA1 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x50CD JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x6 SWAP2 SWAP1 SWAP2 SIGNEXTEND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x502E JUMPI PUSH2 0x502E PUSH2 0x514F JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5042 JUMPI PUSH2 0x5042 PUSH2 0x5165 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5061 JUMPI PUSH2 0x5061 PUSH2 0x514F JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND DUP4 PUSH1 0x6 SIGNEXTEND PUSH1 0x0 DUP2 SLT DUP2 PUSH7 0x7FFFFFFFFFFFFF NOT ADD DUP4 SLT DUP2 ISZERO AND ISZERO PUSH2 0x5091 JUMPI PUSH2 0x5091 PUSH2 0x514F JUMP JUMPDEST DUP2 PUSH7 0x7FFFFFFFFFFFFF ADD DUP4 SGT DUP2 AND ISZERO PUSH2 0x50AC JUMPI PUSH2 0x50AC PUSH2 0x514F JUMP JUMPDEST POP SWAP1 SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x50C8 JUMPI PUSH2 0x50C8 PUSH2 0x514F JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x50E8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x50D0 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x44AA JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0x510D JUMPI PUSH2 0x510D PUSH2 0x514F JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x5123 JUMPI PUSH2 0x5123 PUSH2 0x5165 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x6 SIGNEXTEND PUSH7 0x7FFFFFFFFFFFFF NOT DUP2 EQ ISZERO PUSH2 0x5146 JUMPI PUSH2 0x5146 PUSH2 0x514F JUMP JUMPDEST PUSH1 0x0 SUB SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x51BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID CHAINID CALLCODE XOR ADDMOD PUSH26 0xA7123A197CC3828C28955D70D661C70ACBDC02450DAF5F9A9C1C STATICCALL 0xEE EXTCODEHASH 0xD 0xAB 0xA9 DUP4 PUSH30 0x1AB0597ACF34328550E4832D02E24E467825E7C2DD318C3820A264697066 PUSH20 0x58221220E76A24D5AC93C336CEE0E33E01CDB717 PUSH23 0x79AB50EBF16B2817C47B4495564C864736F6C63430008 SMOD STOP CALLER ",
              "sourceMap": "134:1220:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3206:848:35;;;;;;;;;;-1:-1:-1;3206:848:35;;;;;:::i;:::-;;:::i;:::-;;;10252:25:84;;;10240:2;10225:18;3206:848:35;;;;;;;;1968:80:29;;;;;;;;;;-1:-1:-1;1968:80:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1402:135:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4104:514::-;;;;;;;;;;-1:-1:-1;4104:514:35;;;;;:::i;:::-;;:::i;8401:573::-;;;;;;;;;;-1:-1:-1;8401:573:35;;;;;:::i;:::-;;:::i;:::-;;2423:690:39;;;;;;;;;;-1:-1:-1;2423:690:39;;;;;:::i;:::-;;:::i;1728:76:29:-;;;;;;;;;;-1:-1:-1;1728:76:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2556:364:31;;;;;;;;;;-1:-1:-1;2556:364:31;;;;;:::i;:::-;;:::i;4668:1632:35:-;;;;;;;;;;-1:-1:-1;4668:1632:35;;;;;:::i;:::-;;:::i;:::-;;;;9939:13:84;;9936:1;9925:28;;;9907:47;;10024:4;10012:17;;;10006:24;9992:39;;;9970:20;;;9963:69;10076:17;;;10070:24;10048:20;;;10041:54;9895:2;9880:18;4668:1632:35;9705:396:84;880:79:29;;;;;;;;;;-1:-1:-1;880:79:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;;;;;-1:-1:-1;435:57:29;;;;;:::i;:::-;;;;;;;;;;;;;;362:32:31;;;;;;;;;;-1:-1:-1;362:32:31;;;;-1:-1:-1;;;;;362:32:31;;;;;;;;;;:::i;2090:78:29:-;;;;;;;;;;-1:-1:-1;2090:78:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;;;;;;;;;;;:::i;384:50:32:-;;;;;;;;;;-1:-1:-1;384:50:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7754:14:84;;7747:22;7729:41;;7717:2;7702:18;384:50:32;7589:187:84;621:106:63;;;;;;;;;;-1:-1:-1;621:106:63;;;;;:::i;:::-;;:::i;1239:80::-;;;;;;;;;;-1:-1:-1;1303:11:63;;1239:80;;7478:873:35;;;;;;;;;;-1:-1:-1;7478:873:35;;;;;:::i;:::-;;:::i;973:834:34:-;;;;;;;;;;-1:-1:-1;973:834:34;;;;;:::i;:::-;;:::i;423:204:38:-;;;;;;;;;;-1:-1:-1;423:204:38;;;;;:::i;:::-;;:::i;669:279::-;;;;;;;;;;-1:-1:-1;669:279:38;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;;;;;;-1:-1:-1;199:34:28;;;;-1:-1:-1;;;;;199:34:28;;;667:41:31;;;;;;;;;;;;;;;;1340:1042:39;;;;;;;;;;-1:-1:-1;1340:1042:39;;;;;:::i;:::-;;:::i;834:50:31:-;;;;;;;;;;;;;;;;7219:209:35;;;;;;;;;;-1:-1:-1;7219:209:35;;;;;:::i;:::-;;:::i;533:194:32:-;;;;;;;;;;-1:-1:-1;533:194:32;;;;;:::i;:::-;;:::i;945:79:35:-;;;;;;;;;;-1:-1:-1;945:79:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4195:110:31;;;;;;;;;;-1:-1:-1;4195:110:31;;;;;:::i;:::-;;:::i;566:221:39:-;;;;;;;;;;-1:-1:-1;566:221:39;;;;;:::i;:::-;;:::i;1587:691:35:-;;;;;;;;;;-1:-1:-1;1587:691:35;;;;;:::i;:::-;;:::i;1788:223:31:-;;;;;;;;;;-1:-1:-1;1788:223:31;;;;;:::i;:::-;;:::i;540:77:63:-;;;;;;;;;;-1:-1:-1;540:77:63;;;;;:::i;:::-;;:::i;925:49:31:-;;;;;;;;;;;;;;;;590:36;;;;;;;;;;-1:-1:-1;590:36:31;;;;-1:-1:-1;;;;;590:36:31;;;2385:105:29;;;;;;;;;;;;;:::i;226:52:38:-;;;;;;;;;;-1:-1:-1;226:52:38;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;226:52:38;;;2328:828:35;;;;;;;;;;-1:-1:-1;2328:828:35;;;;;:::i;:::-;;:::i;2210:50:29:-;;;;;;;;;;-1:-1:-1;2210:50:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;3140:152:31;;;;;;;;;;-1:-1:-1;3140:152:31;;;;;:::i;:::-;;:::i;666:319:37:-;;;;;;;;;;-1:-1:-1;666:319:37;;;;;:::i;:::-;;:::i;2531:111:29:-;;;;;;;;;;;;;:::i;321:59:38:-;;;;;;;;;;-1:-1:-1;321:59:38;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;321:59:38;;;999:203:32;;;;;;;;;;-1:-1:-1;999:203:32;;;;;:::i;:::-;;:::i;9024:681:35:-;;;;;;;;;;-1:-1:-1;9024:681:35;;;;;:::i;:::-;;:::i;769:69:29:-;;;;;;;;;;-1:-1:-1;769:69:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;471:65:63;;;;;;;;;;-1:-1:-1;471:65:63;;;;;:::i;:::-;;:::i;1075:54:35:-;;;;;;;;;;-1:-1:-1;1075:54:35;;;;;:::i;:::-;;;;;;;;;;;;;;749:44:31;;;;;;;;;;;;;;;;762:202:32;;;;;;;;;;-1:-1:-1;762:202:32;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;;;;;-1:-1:-1;485:161:28;;;;;:::i;:::-;;:::i;1027:1856:37:-;;;;;;;;;;-1:-1:-1;1027:1856:37;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;;;;;-1:-1:-1;629:49:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;3973:182:31;;;;;;;;;;-1:-1:-1;3973:182:31;;;;;:::i;:::-;;:::i;838:86:34:-;;;;;;;;;;-1:-1:-1;838:86:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6736:433:35;;;;;;;;;;-1:-1:-1;6736:433:35;;;;;:::i;:::-;;:::i;2960:140:31:-;;;;;;;;;;-1:-1:-1;2960:140:31;;;;;:::i;:::-;;:::i;299:49:32:-;;;;;;;;;;-1:-1:-1;299:49:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;435:37:31;;;;;;;;;;-1:-1:-1;435:37:31;;;;-1:-1:-1;;;;;435:37:31;;;731:116:63;;;;;;;;;;-1:-1:-1;731:116:63;;;;;:::i;:::-;;:::i;2286:230:31:-;;;;;;;;;;-1:-1:-1;2286:230:31;;;;;:::i;:::-;;:::i;3666:267::-;;;;;;;;;;-1:-1:-1;3666:267:31;;;;;:::i;:::-;;:::i;1846:80:29:-;;;;;;;;;;-1:-1:-1;1846:80:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1855:695:34;;;;;;;;;;-1:-1:-1;1855:695:34;;;;;:::i;:::-;;:::i;3154:538:39:-;;;;;;;;;;-1:-1:-1;3154:538:39;;;;;:::i;:::-;;:::i;1105:32:31:-;;;;;;;;;;;;;;;;534:53:29;;;;;;;;;;-1:-1:-1;534:53:29;;;;;:::i;:::-;;;;;;;;;;;;;;1099:136:63;;;;;;;;;;-1:-1:-1;1099:136:63;;;;;:::i;:::-;;:::i;851:123::-;;;;;;;;;;-1:-1:-1;851:123:63;;;;;:::i;:::-;-1:-1:-1;;;;;943:26:63;921:7;943:26;;;:20;:26;;;;;;;851:123;3332:188:31;;;;;;;;;;-1:-1:-1;3332:188:31;;;;;:::i;:::-;;:::i;2051:195::-;;;;;;;;;;-1:-1:-1;2051:195:31;;;;;:::i;:::-;;:::i;479:64:37:-;;;;;;;;;;-1:-1:-1;479:64:37;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;479:64:37;;;1237:211:32;;;;;;;;;;-1:-1:-1;1237:211:32;;;;;:::i;:::-;;:::i;513:36:31:-;;;;;;;;;;-1:-1:-1;513:36:31;;;;-1:-1:-1;;;;;513:36:31;;;1180:52:35;;;;;;;;;;-1:-1:-1;1180:52:35;;;;;:::i;:::-;;;;;;;;;;;;;;268:41:28;;;;;;;;;;-1:-1:-1;268:41:28;;;;-1:-1:-1;;;;;268:41:28;;;978:117:63;;;;;;;;;;-1:-1:-1;978:117:63;;;;;:::i;:::-;-1:-1:-1;;;;;1067:23:63;1045:7;1067:23;;;:17;:23;;;;;;;978:117;828:471:39;;;;;;;;;;-1:-1:-1;828:471:39;;;;;:::i;:::-;;:::i;1015:49:31:-;;;;;;;;;;;;;;;;6364:322:35;;;;;;;;;;-1:-1:-1;6364:322:35;;;;;:::i;:::-;;:::i;3206:848::-;3277:16;3301:22;3326;3343:4;3326:16;:22::i;:::-;3446:16;;3301:47;;-1:-1:-1;3374:15:35;;3420:43;;3428:34;;3374:15;3428:34;:::i;:::-;3420:7;:43::i;:::-;-1:-1:-1;;;;;3401:16:35;;;;;;:10;:16;;;;;;:62;3396:576;;;3566:16;;-1:-1:-1;;;;;3545:16:35;;;;;;:10;:16;;;;;;3527:34;;:15;:34;:::i;:::-;3526:56;3522:324;;3704:16;;-1:-1:-1;;;;;3685:16:35;;;;;;:10;:16;;;;;;:35;;3704:16;3685:35;:::i;:::-;3671:50;;;;:::i;:::-;;;3396:576;;3522:324;-1:-1:-1;;;;;3821:16:35;;;;;;:10;:16;;;;;;3808:29;;;;:::i;3396:576::-;3941:24;3949:15;3941:7;:24::i;:::-;3928:37;;;;:::i;:::-;;;3396:576;4016:33;4023:9;4034:14;4016:6;:33::i;:::-;3988:25;4008:4;3988:19;:25::i;:::-;:61;;;;:::i;:::-;3977:72;3206:848;-1:-1:-1;;;;3206:848:35:o;1402:135::-;1465:22;1503:29;:20;:27;:29::i;:::-;1495:37;;1402:135;:::o;4104:514::-;4197:22;4231:41;:20;4261:10;4231:29;:41::i;:::-;4227:387;;;4282:27;4312:28;4329:10;4312:16;:28::i;:::-;4282:58;;4352:10;:17;;;4373:1;4352:22;4348:260;;-1:-1:-1;;;;;4410:25:35;;4386:21;4410:25;;;:13;:25;;;;;;;;:74;;4463:10;:21;;;4462:22;;;:::i;:::-;4410:74;;;4438:10;:21;;;4410:74;4526:12;;4581:16;;4512:86;;-1:-1:-1;;;4512:86:35;;4386:98;;-1:-1:-1;4501:98:35;;-1:-1:-1;;;;;4526:12:35;;;;4512:42;;:86;;4555:7;;4386:98;;4512:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:10;:98::i;:::-;4494:105;;;;;;4348:260;4274:340;4227:387;4104:514;;;;:::o;8401:573::-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;8598:10:35::1;::::0;8580:28:::1;::::0;:15:::1;:28;:::i;:::-;-1:-1:-1::0;;;;;8543:22:35;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;:34;;::::1;::::0;;;;;;;;;:65;;;;8614:20;;;:14:::1;:20:::0;;;;;:32;;;;;;;;;:43;;8650:7;;8543:22;8614:43:::1;::::0;8650:7;;8614:43:::1;:::i;:::-;::::0;;;-1:-1:-1;8663:50:35::1;::::0;-1:-1:-1;8687:4:35;8693:10;8705:7;8663:23:::1;:50::i;:::-;-1:-1:-1::0;;;;;8750:21:35;;::::1;8720:27;8750:21:::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;8793:23;;;;;:94:::1;;;8871:16;;8820:48;8836:19;8857:10;8820:15;:48::i;:::-;:67;8793:94;8789:132;;;8896:25;;-1:-1:-1::0;;;8896:25:35::1;;;;;;;;;;;8789:132;8949:10;-1:-1:-1::0;;;;;8933:36:35::1;8943:4;-1:-1:-1::0;;;;;8933:36:35::1;;8961:7;8933:36;;;;10252:25:84::0;;10240:2;10225:18;;10106:177;8933:36:35::1;;;;;;;;8537:437;8401:573:::0;;;;:::o;2423:690:39:-;2518:10;2503:12;2539:14;;;:8;:14;;;;;;;;2535:40;;;2562:13;;-1:-1:-1;;;2562:13:39;;;;;;;;;;;2535:40;2586:20;:5;2601:4;2586:14;:20::i;:::-;2581:49;;2615:15;;-1:-1:-1;;;2615:15:39;;;;;;;;;;;2581:49;2641:31;2667:4;2641:25;:31::i;:::-;2637:156;;;-1:-1:-1;;;;;2687:99:39;;2716:16;;;;:10;:16;;;;;;;;;2734:20;:26;;;;;;2762:17;:23;;;;;;;;2687:99;;-1:-1:-1;;;;;;;;;;;2687:99:39;;;2716:16;;2734:26;;2687:99;:::i;:::-;;;;;;;;2637:156;-1:-1:-1;;;;;2814:26:39;;;;;;:20;:26;;;;;;2803:37;;2799:193;;;2850:23;2868:4;2850:17;:23::i;:::-;-1:-1:-1;;;;;2886:99:39;;2915:16;;;;:10;:16;;;;;;;;;2933:20;:26;;;;;;2961:17;:23;;;;;;;;2886:99;;-1:-1:-1;;;;;;;;;;;2886:99:39;;;2915:16;;2933:26;;2886:99;:::i;:::-;;;;;;;;2799:193;2998:39;3013:4;3019:7;3028:8;2998:14;:39::i;:::-;3059:8;;-1:-1:-1;;;;;3048:60:39;;;;;;;;3059:8;-1:-1:-1;;;;;;;;;;;3084:8:39;3094:13;:11;:13::i;:::-;3048:60;;;10797:25:84;;;10853:2;10838:18;;10831:34;;;;10770:18;3048:60:39;;;;;;;2497:616;2423:690;;:::o;2556:364:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2647:27:31;::::1;2643:53;;2683:13;;-1:-1:-1::0;;;2683:13:31::1;;;;;;;;;;;2643:53;2702:12;:28:::0;;-1:-1:-1;;;;;2702:28:31;;::::1;-1:-1:-1::0;;;;;;2702:28:31;;::::1;::::0;::::1;::::0;;;:12:::1;2736:28:::0;;;:14:::1;:28;::::0;;;;;;:43;;;;::::1;::::0;;::::1;::::0;;;2830:12:::1;::::0;2816:55;;-1:-1:-1;;;2816:55:31;;2830:12;::::1;::::0;2816:40:::1;::::0;:55:::1;::::0;2717:13;;2816:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2785:28:31;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;:86;;-1:-1:-1;;2785:86:31::1;::::0;::::1;;::::0;;;::::1;::::0;;;2882:33;::::1;::::0;::::1;::::0;2785:28;;2882:33:::1;:::i;:::-;;;;;;;;2556:364:::0;:::o;4668:1632:35:-;4752:27;;:::i;:::-;4819:24;4827:15;4819:7;:24::i;:::-;-1:-1:-1;;;;;4791:17:35;;;;;;:5;:17;;;;;:24;;;:52;4787:1509;;;-1:-1:-1;;;;;;4924:17:35;;;;;:5;:17;;;;;;;;;4911:30;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4911:30:35;;;;;;;;;;;;;;;;;;;;;;;;;;;4668:1632::o;4787:1509::-;4962:12;4982:18;5003:43;5029:16;;5011:15;:34;;;;:::i;5003:43::-;-1:-1:-1;;;;;5059:17:35;;;;;;:5;:17;;;;;:24;;;4982:64;;-1:-1:-1;5059:38:35;;5055:1103;;;5220:15;;;5233:1;5220:15;;;;;;;;;5190:27;;5220:15;;;;;;;;;-1:-1:-1;;;;;;;;5266:17:35;;5245:18;5266:17;;;:5;:17;;;;;:25;5190:45;;-1:-1:-1;5266:25:35;;5344:24;5352:15;5344:7;:24::i;:::-;5326:42;;:15;:42;:::i;:::-;5302:11;5314:1;5302:14;;;;;;;;:::i;:::-;:67;;;;:14;;;;;;;;;;:67;5428:12;;-1:-1:-1;;;;;5450:26:35;;;5428:12;5450:26;;;:14;:26;;;;;;;;;5414:76;;-1:-1:-1;;;5414:76:35;;5428:12;;;;5414:35;;:76;;5450:26;;;;;5478:11;;5414:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5380:110;;;;;;;;;;;;-1:-1:-1;5525:33:35;;5546:12;;-1:-1:-1;5525:33:35;:::i;:::-;5501:57;;;;;;:21;;;:57;-1:-1:-1;5055:1103:35;;-1:-1:-1;5055:1103:35;;-1:-1:-1;;;;;5577:17:35;;;;;;:5;:17;;;;;:24;;;:37;-1:-1:-1;5573:585:35;;;5719:15;;;5732:1;5719:15;;;;;;;;5689:27;;5719:15;;;;;;;;;;-1:-1:-1;5719:15:35;5689:45;;5787:24;5795:15;5787:7;:24::i;:::-;5769:42;;:15;:42;:::i;:::-;5745:11;5757:1;5745:14;;;;;;;;:::i;:::-;;;;;;:67;;;;;;;;;;;5891:16;;5864:24;5872:15;5864:7;:24::i;:::-;5846:42;;:15;:42;:::i;:::-;:61;;;;:::i;:::-;5822:11;5834:1;5822:14;;;;;;;;:::i;:::-;:86;;;;:14;;;;;;;;;;:86;6015:12;;-1:-1:-1;;;;;6037:26:35;;;5919:22;6037:26;;;:14;:26;;;;;;;;6001:76;;-1:-1:-1;;;6001:76:35;;6015:12;;;;6001:35;;:76;;6037:26;;6065:11;;6001:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5951:126;;;;;;;;;;;;-1:-1:-1;5951:126:35;-1:-1:-1;6112:37:35;;5951:126;;6112:37;:::i;:::-;6088:61;;;;;;:21;;;:61;-1:-1:-1;;5573:585:35;6169:7;6165:125;;;6208:24;6216:15;6208:7;:24::i;:::-;6188:17;;;:44;6165:125;;;6257:24;6264:17;;;6257:24;6165:125;4954:1342;;4787:1509;4668:1632;;;:::o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;754:10:::1;:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;621:106:63:-;686:36;:20;711:10;686:24;:36::i;:::-;;621:106;:::o;7478:873:35:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;;;;;;;;;1680:1;2389:7;:18;7614:41:35::1;:20;7644:10:::0;7614:29:::1;:41::i;:::-;7609:80;;7664:25;;-1:-1:-1::0;;;7664:25:35::1;;;;;;;;;;;7609:80;7700:20;:5;7715:4:::0;7700:14:::1;:20::i;:::-;7695:50;;7729:16;;-1:-1:-1::0;;;7729:16:35::1;;;;;;;;;;;7695:50;-1:-1:-1::0;;;;;7752:21:35;::::1;;::::0;;;:15:::1;:21;::::0;;;;:37:::1;::::0;7778:10;7752:25:::1;:37::i;:::-;;7796:27;7818:4;7796:21;:27::i;:::-;7909:16;::::0;-1:-1:-1;;;;;7850:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;7834:72:::1;::::0;7850:43:::1;::::0;7886:7;;7850:43:::1;:::i;:::-;7895:10;7834:15;:72::i;:::-;:91;7830:129;;;7934:25;;-1:-1:-1::0;;;7934:25:35::1;;;;;;;;;;;7830:129;-1:-1:-1::0;;;;;7971:99:35;::::1;8000:16;::::0;;;:10:::1;:16;::::0;;;;;;;;8018:20:::1;:26:::0;;;;;;8046:17:::1;:23:::0;;;;;;;;7971:99;;-1:-1:-1;;;;;;;;;;;7971:99:35;::::1;::::0;8000:16;;8018:26;;7971:99:::1;:::i;:::-;;;;;;;;8077:71;-1:-1:-1::0;;;;;8077:35:35;::::1;8113:10;8133:4;8140:7:::0;8077:35:::1;:71::i;:::-;-1:-1:-1::0;;;;;8154:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:44;;8191:7;;8154:21;:44:::1;::::0;8191:7;;8154:44:::1;:::i;:::-;::::0;;;-1:-1:-1;8231:48:35::1;::::0;-1:-1:-1;8242:36:35::1;8258:7:::0;8267:10;8242:15:::1;:36::i;8231:48::-;-1:-1:-1::0;;;;;8204:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;:75;;:23;;;:75:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;8290:56:35::1;::::0;10252:25:84;;;8326:10:35::1;::::0;-1:-1:-1;;;;;8290:56:35;;::::1;::::0;;;::::1;::::0;::::1;::::0;10240:2:84;10225:18;8290:56:35::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;7478:873:35:o;973:834:34:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;1108:20:34::1;:5;1123:4:::0;1108:14:::1;:20::i;:::-;1103:50;;1137:16;;-1:-1:-1::0;;;1137:16:34::1;;;;;;;;;;;1103:50;1229:8;::::0;-1:-1:-1;;;;;1219:18:34;;::::1;1229:8:::0;::::1;1219:18;1215:47;;;1246:16;;-1:-1:-1::0;;;1246:16:34::1;;;;;;;;;;;1215:47;1286:39;::::0;-1:-1:-1;;;1286:39:34;;1268:15:::1;::::0;-1:-1:-1;;;;;1286:24:34;::::1;::::0;::::1;::::0;:39:::1;::::0;1319:4:::1;::::0;1286:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1268:57:::0;-1:-1:-1;1331:67:34::1;-1:-1:-1::0;;;;;1331:31:34;::::1;1363:10;1383:4;1390:7:::0;1331:31:::1;:67::i;:::-;1404:17;1466:7;1431:6;-1:-1:-1::0;;;;;1424:24:34::1;;1457:4;1424:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;;:::i;:::-;1404:69;;1479:17;1238:6:31;1512:3:34;;1500:9;:15;;;;:::i;:::-;1499:25;;;;:::i;:::-;1479:45:::0;-1:-1:-1;1563:21:34::1;1479:45:::0;1563:9;:21:::1;:::i;:::-;-1:-1:-1::0;;;;;1530:21:34;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:29;;::::1;::::0;;;;;;;;:54;;:29;;:21;:54:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;1590:28:34;;::::1;;::::0;;;:22:::1;:28;::::0;;;;;;;:36;;::::1;::::0;;;;;;;;1629:15:::1;1590:54:::0;;1678:10:::1;::::0;1650:50:::1;::::0;1678:10:::1;1690:9:::0;1650:27:::1;:50::i;:::-;-1:-1:-1::0;;;;;1706:16:34;::::1;;::::0;;;:10:::1;:16;::::0;;;;:28:::1;::::0;1727:6;1706:20:::1;:28::i;:::-;;1780:10;-1:-1:-1::0;;;;;1746:56:34::1;1772:6;-1:-1:-1::0;;;;;1746:56:34::1;1766:4;-1:-1:-1::0;;;;;1746:56:34::1;;1792:9;1746:56;;;;10252:25:84::0;;10240:2;10225:18;;10106:177;1746:56:34::1;;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;;;973:834:34:o;423:204:38:-;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;527:21:38;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;-1:-1:-1;;;;;;527:33:38::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;596:14:38;;;;;;;571:51;;527:33;;596:14:::1;::::0;527:21;571:51:::1;::::0;::::1;423:204:::0;;;:::o;669:279::-;-1:-1:-1;;;;;1132:21:38;;;;;;;:15;:21;;;;;;;;;1118:10;:35;1114:69;;1162:21;;-1:-1:-1;;;1162:21:38;;;;;;;;;;;1114:69;-1:-1:-1;;;;;786:14:38;;::::1;761:22;786:14:::0;;;:8:::1;:14;::::0;;;;;;;;;824:15:::1;:21:::0;;;;;;;;;::::1;-1:-1:-1::0;;;;;;807:38:38;;::::1;::::0;;;::::1;::::0;;;851:28;;;;::::1;::::0;;891:52;786:14;::::1;::::0;;;;910:10:::1;::::0;891:52:::1;::::0;761:22;891:52:::1;755:193;669:279:::0;;:::o;1340:1042:39:-;1420:10;1405:12;1440:14;;;:8;:14;;;;;;;;1436:40;;;1463:13;;-1:-1:-1;;;1463:13:39;;;;;;;;;;;1436:40;1487:20;:5;1502:4;1487:14;:20::i;:::-;1482:49;;1516:15;;-1:-1:-1;;;1516:15:39;;;;;;;;;;;1482:49;1542:31;1568:4;1542:25;:31::i;:::-;1538:156;;;-1:-1:-1;;;;;1588:99:39;;1617:16;;;;:10;:16;;;;;;;;;1635:20;:26;;;;;;1663:17;:23;;;;;;;;1588:99;;-1:-1:-1;;;;;;;;;;;1588:99:39;;;1617:16;;1635:26;;1588:99;:::i;:::-;;;;;;;;1538:156;1774:12;;-1:-1:-1;;;;;1805:14:39;;;1701;1805;;;:5;:14;;;;;;;;1820:8;;;;1805:24;;;;;;;;;1760:70;;-1:-1:-1;;;1760:70:39;;;;;10252:25:84;;;;1701:14:39;;;;;;1774:12;;;1760:44;;10225:18:84;;1760:70:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1700:130;;;;;;1837:16;1856:13;:11;:13::i;:::-;1837:32;;1875:16;1894:60;1912:8;1922:9;1933:12;1947:6;1894:17;:60::i;:::-;-1:-1:-1;;;;;1976:26:39;;;;;;:20;:26;;;;;;1875:79;;-1:-1:-1;1965:37:39;;1961:305;;;2012:23;2030:4;2012:17;:23::i;:::-;-1:-1:-1;;;;;2048:99:39;;2077:16;;;;:10;:16;;;;;;;;;2095:20;:26;;;;;;2123:17;:23;;;;;;;;2048:99;;-1:-1:-1;;;;;;;;;;;2048:99:39;;;2077:16;;2095:26;;2048:99;:::i;:::-;;;;;;;;2167:13;:11;:13::i;:::-;2156:24;;2199:60;2217:8;2227:9;2238:12;2252:6;2199:17;:60::i;:::-;2188:71;;1961:305;2272:39;2287:4;2293:7;2302:8;2272:14;:39::i;:::-;2333:8;;2322:55;;;10797:25:84;;;10853:2;10838:18;;10831:34;;;-1:-1:-1;;;;;2322:55:39;;;;;;;;2333:8;;;-1:-1:-1;;;;;;;;;;;2322:55:39;10770:18:84;2322:55:39;;;;;;;1399:983;;;;;;1340:1042;:::o;7219:209:35:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;7308:39:35::1;:20;7336:10:::0;7308:27:::1;:39::i;:::-;7303:78;;7356:25;;-1:-1:-1::0;;;7356:25:35::1;;;;;;;;;;;7303:78;7392:31;7412:10;7392:31;;;;;;:::i;533:194:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;4195:110:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4264:3:31::1;:10:::0;;;4285:15:::1;::::0;10252:25:84;;;4285:15:31::1;::::0;10240:2:84;10225:18;4285:15:31::1;10106:177:84::0;566:221:39;628:14;664:13;:11;:13::i;:::-;650:11;:27;687:26;:8;705:7;687:17;:26::i;:::-;683:100;;;728:29;745:11;;728:29;;;;10252:25:84;;10240:2;10225:18;;10106:177;728:29:39;;;;;;;;-1:-1:-1;772:4:39;;566:221;-1:-1:-1;566:221:39:o;1587:691:35:-;1657:22;1692:9;1687:587;-1:-1:-1;;;;;1707:21:35;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;1703:1;:34;1687:587;;;-1:-1:-1;;;;;1773:21:35;;1752:18;1773:21;;;:15;:21;;;;;:27;;1798:1;1773:24;:27::i;:::-;1752:48;-1:-1:-1;1812:41:35;:20;1752:48;1812:29;:41::i;:::-;1808:460;;;1865:27;1895:28;1912:10;1895:16;:28::i;:::-;1865:58;;1937:10;:17;;;1958:1;1937:22;1933:327;;-1:-1:-1;;;;;1997:25:35;;1973:21;1997:25;;;:13;:25;;;;;;;;:74;;2050:10;:21;;;2049:22;;;:::i;:::-;1997:74;;;2025:10;:21;;;1997:74;2139:12;;-1:-1:-1;;;;;2168:21:35;;;2139:12;2168:21;;;:15;:21;;;;;;;;:33;;;;;;;;;;;;;2220:16;;2125:112;;-1:-1:-1;;;2125:112:35;;1973:98;;-1:-1:-1;2101:148:35;;2139:12;;;;;2125:42;;:112;;1973:98;;2125:112;;;:::i;2101:148::-;2083:166;;;;:::i;:::-;;;1961:299;1933:327;1855:413;1808:460;-1:-1:-1;1739:3:35;;;;:::i;:::-;;;;1687:587;;;;1587:691;;;:::o;1788:223:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1879:27:31;::::1;1875:53;;1915:13;;-1:-1:-1::0;;;1915:13:31::1;;;;;;;;;;;1875:53;1934:12;:28:::0;;-1:-1:-1;;;;;;1934:28:31::1;-1:-1:-1::0;;;;;1934:28:31;::::1;;::::0;;1973:33:::1;::::0;::::1;::::0;::::1;::::0;1934:28;;1973:33:::1;:::i;540:77:63:-:0;591:21;:8;604:7;591:12;:21::i;2385:105:29:-;2433:22;2471:14;:5;:12;:14::i;2328:828:35:-;2401:25;2434:22;2459;2476:4;2459:16;:22::i;:::-;2588:16;;-1:-1:-1;;;;;2568:16:35;;;;;;:10;:16;;;;;;2434:47;;-1:-1:-1;2588:16:35;2550:34;;:15;:34;:::i;:::-;2549:55;2545:607;;;2729:1;2712:14;:18;:220;;-1:-1:-1;;;;;2906:26:35;;;;;;:20;:26;;;;;;2712:220;;;-1:-1:-1;;;;;2789:23:35;;;;;;:17;:23;;;;;;;;;2742:20;:26;;;;;;;:43;;2771:14;;2742:43;:::i;:::-;2741:71;;;;:::i;:::-;2692:240;;2545:607;;3140:152:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3223:10:31::1;:24:::0;;;3258:29:::1;::::0;10252:25:84;;;3258:29:31::1;::::0;10225:18:84;3258:29:31::1;10106:177:84::0;666:319:37;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;783:6:37::1;-1:-1:-1::0;;;;;771:18:37::1;:8;-1:-1:-1::0;;;;;771:18:37::1;;767:55;;;798:24;;-1:-1:-1::0;;;798:24:37::1;;;;;;;;;;;767:55;-1:-1:-1::0;;;;;829:30:37;;::::1;;::::0;;;:20:::1;:30;::::0;;;;;;;:39;;-1:-1:-1;;;;;;829:39:37::1;::::0;;::::1;::::0;;::::1;::::0;;874:19:::1;:29:::0;;;;;:37;;;;;;;;;914:15:::1;874:55:::0;;941:39;;::::1;::::0;::::1;::::0;829;;941::::1;:::i;:::-;;;;;;;;666:319:::0;;;:::o;2531:111:29:-;2582:22;2620:17;:8;:15;:17::i;999:203:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;9024:681:35:-:0;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;9174:23:35;::::1;9170:49;;9206:13;;-1:-1:-1::0;;;9206:13:35::1;;;;;;;;;;;9170:49;-1:-1:-1::0;;;;;9229:20:35;;::::1;;::::0;;;:14:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;;;;;;9225:69:::1;;9275:19;;-1:-1:-1::0;;;9275:19:35::1;;;;;;;;;;;9225:69;-1:-1:-1::0;;;;;9304:22:35;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;:34;;::::1;::::0;;;;;;;9342:15:::1;-1:-1:-1::0;9300:81:35::1;;9366:15;;-1:-1:-1::0;;;9366:15:35::1;;;;;;;;;;;9300:81;-1:-1:-1::0;;;;;9391:14:35;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;9387:37;;;9414:10;;-1:-1:-1::0;;;9414:10:35::1;;;;;;;;;;;9387:37;-1:-1:-1::0;;;;;9449:20:35;;::::1;9431:15;9449:20:::0;;;:14:::1;:20;::::0;;;;;;;:32;;::::1;::::0;;;;;;;;;;;9488:39;;;;9540:22;;;:16:::1;:22:::0;;;;;:34;;;;;;;;9533:41;9449:32;9581:51:::1;::::0;9613:9;9449:32;9581:31:::1;:51::i;:::-;9681:9;-1:-1:-1::0;;;;;9643:57:35::1;9669:10;-1:-1:-1::0;;;;;9643:57:35::1;9663:4;-1:-1:-1::0;;;;;9643:57:35::1;;9692:7;9643:57;;;;10252:25:84::0;;10240:2;10225:18;;10106:177;9643:57:35::1;;;;;;;;9164:541;9024:681:::0;;;;:::o;471:65:63:-;516:15;:5;526:4;516:9;:15::i;762:202:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;1027:1856:37:-:0;-1:-1:-1;;;;;1012:14:38;;;;;;;:8;:14;;;;;;;;;998:10;:28;994:55;;1035:14;;-1:-1:-1;;;1035:14:38;;;;;;;;;;;994:55;-1:-1:-1;;;;;1138:18:37;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;::::0;:38:::1;;-1:-1:-1::0;;;;;;1160:16:37;::::1;;::::0;;;:8:::1;:16;::::0;;;;;::::1;;1138:38;1134:64;;;1185:13;;-1:-1:-1::0;;;1185:13:37::1;;;;;;;;;;;1134:64;-1:-1:-1::0;;;;;1208:30:37;;::::1;;::::0;;;:20:::1;:30;::::0;;;;;;::::1;:40:::0;;::::1;;1204:78;;1257:25;;-1:-1:-1::0;;;1257:25:37::1;;;;;;;;;;;1204:78;-1:-1:-1::0;;;;;1310:29:37;;::::1;;::::0;;;:19:::1;:29;::::0;;;;;;;:37;;::::1;::::0;;;;;;;:59:::1;::::0;427:9:::1;::::0;1310:59:::1;:::i;:::-;1292:15;:77;1288:110;;;1378:20;;-1:-1:-1::0;;;1378:20:37::1;;;;;;;;;;;1288:110;1451:31;1473:8;1451:21;:31::i;:::-;1488:29;1510:6;1488:21;:29::i;:::-;-1:-1:-1::0;;;;;1553:20:37;::::1;1585:1;1553:20:::0;;;:10:::1;:20;::::0;;;;:29:::1;::::0;:27:::1;:29::i;:::-;:33;1546:359;;;-1:-1:-1::0;;;;;1622:20:37;::::1;1596:23;1622:20:::0;;;:10:::1;:20;::::0;;;;:26:::1;::::0;1596:23;1622::::1;:26::i;:::-;-1:-1:-1::0;;;;;1700:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:42;;::::1;::::0;;;;;;;;;;1656:23;;::::1;::::0;;;;;;;;:40;;;;;;;;:86;;1596:52;;-1:-1:-1;1700:42:37;;1656:86:::1;::::0;1700:42;;1656:86:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;1757:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:42;;::::1;::::0;;;;;;;;1750:49;;;1807:20;;;:10:::1;:20:::0;;;;:44:::1;::::0;1783:15;1807:27:::1;:44::i;:::-;-1:-1:-1::0;;;;;;1859:18:37;::::1;;::::0;;;:10:::1;:18;::::0;;;;:39:::1;::::0;1882:15;1859:22:::1;:39::i;:::-;;1588:317;1546:359;;;-1:-1:-1::0;;;;;1945:25:37;::::1;1982:1;1945:25:::0;;;:15:::1;:25;::::0;;;;:34:::1;::::0;:32:::1;:34::i;:::-;:38;1938:351;;;-1:-1:-1::0;;;;;2014:25:37;::::1;1993:18;2014:25:::0;;;:15:::1;:25;::::0;;;;:31:::1;::::0;1993:18;2014:28:::1;:31::i;:::-;-1:-1:-1::0;;;;;2093:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:37;;::::1;::::0;;;;;;;;;;2054:23;;::::1;::::0;;;;;;;;:35;;;;;;;;:76;;1993:52;;-1:-1:-1;2093:37:37;;2054:76:::1;::::0;2093:37;;2054:76:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2145:25:37;;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;;:37;;::::1;::::0;;;;;;;2138:44;;;2191:23;;::::1;::::0;;:15:::1;:23:::0;;;:39:::1;::::0;2171:10;2191:27:::1;:39::i;:::-;-1:-1:-1::0;;;;;;2238:25:37;::::1;;::::0;;;:15:::1;:25;::::0;;;;:44:::1;::::0;2271:10;2238:32:::1;:44::i;:::-;;1985:304;1938:351;;;-1:-1:-1::0;;;;;2352:27:37;;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;2323:25;;::::1;::::0;;;;:56;;:25;;2352:27;2323:56:::1;::::0;2352:27;;2323:56:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2392:27:37;;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;;2385:34;;;2458:20:::1;:30:::0;;;;;;;2426:28;;::::1;::::0;;;;:62;;:28;;2392:27;2426:62:::1;::::0;2458:30;;2426:62:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;2501:30:37;::::1;;::::0;;;:20:::1;:30;::::0;;;;;;;2494:37;;;2583:10:::1;:20:::0;;;;;2576:27;2609:22:::1;:5;2522:8:::0;2609:12:::1;:22::i;:::-;-1:-1:-1::0;;;;;;2677:18:37;;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;;2670:25;;-1:-1:-1;;;;;;2670:25:37;;::::1;::::0;;;2708:15:::1;:25:::0;;;;;2701:32;;;::::1;::::0;;2746:19:::1;:29:::0;;;;;:37;;::::1;::::0;;;;;;;;;2739:44;;;2796:30;;;:20:::1;:30:::0;;;;;;;2789:37;;;;::::1;::::0;;;2838:40;::::1;::::0;::::1;::::0;2686:8;;2838:40:::1;:::i;3973:182:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4066:15:31::1;:34:::0;;;4111:39:::1;::::0;10252:25:84;;;4111:39:31::1;::::0;10240:2:84;10225:18;4111:39:31::1;10106:177:84::0;6736:433:35;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;6834:36:35::1;:20;6859:10:::0;6834:24:::1;:36::i;:::-;6829:73;;6879:23;;-1:-1:-1::0;;;6879:23:35::1;;;;;;;;;;;6829:73;6950:10;-1:-1:-1::0;;;;;6937:29:35::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6908:26:35;;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;:60;;-1:-1:-1;;;;;;6908:60:35::1;::::0;;::::1;::::0;;::::1;::::0;;7016:12:::1;::::0;7002:68;;-1:-1:-1;;;7002:68:35;;7016:12;::::1;::::0;7002:40:::1;::::0;:68:::1;::::0;6908:60;7002:68:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6974:25:35;::::1;;::::0;;;:13:::1;:25;::::0;;;;:96;;-1:-1:-1;;6974:96:35::1;::::0;::::1;;::::0;;;::::1;::::0;;7096:28:::1;6974:25:::0;7096:16:::1;:28::i;:::-;-1:-1:-1::0;;;;;7076:17:35;::::1;;::::0;;;:5:::1;:17;::::0;;;;;;;;:48;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;;7076:48:35::1;-1:-1:-1::0;;;;;;7076:48:35;;;;;;::::1;;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;;7135:29;::::1;::::0;::::1;::::0;7082:10;;7135:29:::1;:::i;2960:140:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3039:8:31::1;:20:::0;;;3070:25:::1;::::0;10252::84;;;3070::31::1;::::0;10240:2:84;10225:18;3070:25:31::1;10106:177:84::0;731:116:63;-1:-1:-1;;;;;805:21:63;;;;;;:15;:21;;;;;:37;;831:10;805:25;:37::i;:::-;;731:116;;:::o;2286:230:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2379:28:31;::::1;2375:54;;2416:13;;-1:-1:-1::0;;;2416:13:31::1;;;;;;;;;;;2375:54;2435:13;:30:::0;;-1:-1:-1;;;;;;2435:30:31::1;-1:-1:-1::0;;;;;2435:30:31;::::1;;::::0;;2476:35:::1;::::0;::::1;::::0;::::1;::::0;2435:30;;2476:35:::1;:::i;3666:267::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1341:6:31::1;3765:17;:43;3761:73;;;3817:17;;-1:-1:-1::0;;;3817:17:31::1;;;;;;;;;;;3761:73;3840:16;:36:::0;;;3887:41:::1;::::0;10252:25:84;;;3887:41:31::1;::::0;10240:2:84;10225:18;3887:41:31::1;10106:177:84::0;1855:695:34;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;-1:-1:-1;;;;;1012:14:38;;::::1;::::0;;:8:::1;:14;::::0;;;;;;;;::::1;998:10;:28;994:55;;1035:14;;-1:-1:-1::0;;;1035:14:38::1;;;;;;;;;;;994:55;-1:-1:-1::0;;;;;2057:28:34;;::::2;;::::0;;;:22:::2;:28;::::0;;;;;;;:36;;::::2;::::0;;;;;;;:64:::2;::::0;780:9:::2;::::0;2057:64:::2;:::i;:::-;2038:15;:83;2034:119;;2130:23;;-1:-1:-1::0;;;2130:23:34::2;;;;;;;;;;;2034:119;-1:-1:-1::0;;;;;2163:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;:39;-1:-1:-1;2159:81:34::2;;;2211:29;;-1:-1:-1::0;;;2211:29:34::2;;;;;;;;;;;2159:81;-1:-1:-1::0;;;;;2250:14:34;::::2;;::::0;;;:8:::2;:14;::::0;;;;;::::2;;2246:40;;;2273:13;;-1:-1:-1::0;;;2273:13:34::2;;;;;;;;;;;2246:40;-1:-1:-1::0;;;;;2293:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;;:40;;2326:7;;2293:21;:40:::2;::::0;2326:7;;2293:40:::2;:::i;:::-;::::0;;;-1:-1:-1;2339:47:34::2;::::0;-1:-1:-1;;;;;;2339:27:34;::::2;2367:9:::0;2378:7;2339:27:::2;:47::i;:::-;-1:-1:-1::0;;;;;2397:21:34;;::::2;;::::0;;;:15:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;;;;;;2393:86:::2;;-1:-1:-1::0;;;;;2441:16:34;::::2;;::::0;;;:10:::2;:16;::::0;;;;:31:::2;::::0;2465:6;2441:23:::2;:31::i;:::-;;2393:86;2526:9;-1:-1:-1::0;;;;;2490:55:34::2;2518:6;-1:-1:-1::0;;;;;2490:55:34::2;2512:4;-1:-1:-1::0;;;;;2490:55:34::2;;2537:7;2490:55;;;;10252:25:84::0;;10240:2;10225:18;;10106:177;2490:55:34::2;;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;;1855:695:34:o;3154:538:39:-;3287:10;3272:12;3308:14;;;:8;:14;;;;;;;;3304:40;;;3331:13;;-1:-1:-1;;;3331:13:39;;;;;;;;;;;3304:40;-1:-1:-1;;;;;3354:17:39;;;;;;:8;:17;;;;;;;;3350:40;;;3380:10;;-1:-1:-1;;;3380:10:39;;;;;;;;;;;3350:40;3401:20;:5;3416:4;3401:14;:20::i;:::-;3396:49;;3430:15;;-1:-1:-1;;;3430:15:39;;;;;;;;;;;3396:49;-1:-1:-1;;;;;3455:21:39;;;;;;;:15;:21;;;;;;;;:29;;;;;;;;;;:39;-1:-1:-1;3451:71:39;;;3503:19;;-1:-1:-1;;;3503:19:39;;;;;;;;;;;3451:71;-1:-1:-1;;;;;3528:21:39;;;;;;;:15;:21;;;;;;;;:29;;;;;;;;;;;:40;;3561:7;;3528:21;:40;;3561:7;;3528:40;:::i;:::-;;;;-1:-1:-1;3574:45:39;;-1:-1:-1;;;;;;3574:27:39;;3602:7;3611;3574:27;:45::i;:::-;3655:7;-1:-1:-1;;;;;3630:57:39;3649:4;-1:-1:-1;;;;;3630:57:39;3641:6;-1:-1:-1;;;;;3630:57:39;-1:-1:-1;;;;;;;;;;;3664:7:39;3673:13;:11;:13::i;:::-;3630:57;;;10797:25:84;;;10853:2;10838:18;;10831:34;;;;10770:18;3630:57:39;;;;;;;3266:426;3154:538;;;:::o;1099:136:63:-;1165:27;;:::i;:::-;-1:-1:-1;;;;;;1213:17:63;;;;;:5;:17;;;;;;;;;1200:30;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1200:30:63;;;;;;;;;;;;;;;;;;;;;;;;;;;1099:136::o;3332:188:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3427:16:31::1;:36:::0;;;3474:41:::1;::::0;10252:25:84;;;3474:41:31::1;::::0;10240:2:84;10225:18;3474:41:31::1;10106:177:84::0;2051:195:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2134:23:31;::::1;2130:49;;2166:13;;-1:-1:-1::0;;;2166:13:31::1;;;;;;;;;;;2130:49;2185:8;:20:::0;;-1:-1:-1;;;;;;2185:20:31::1;-1:-1:-1::0;;;;;2185:20:31;::::1;;::::0;;2216:25:::1;::::0;::::1;::::0;::::1;::::0;2185:20;;2216:25:::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;828:471:39:-:0;982:20;1024:13;:11;:13::i;:::-;1010:11;:27;1054:26;:8;1072:7;1054:17;:26::i;:::-;:69;;;;-1:-1:-1;;;;;;1090:14:39;;;;;;;:5;:14;;;;;;;;:21;;;;;;;;;;:33;-1:-1:-1;1090:33:39;1054:69;:112;;;;-1:-1:-1;;;;;;1133:22:39;;;;;;:13;:22;;;;;;:33;-1:-1:-1;1133:33:39;1054:112;:166;;;;-1:-1:-1;;;;;;1194:18:39;;;;;;:9;:18;;;;;;1216:4;;1176:36;;:15;:36;:::i;:::-;:44;;1054:166;1043:252;;;1240:29;1257:11;;1240:29;;;;10252:25:84;;10240:2;10225:18;;10106:177;1240:29:39;;;;;;;;-1:-1:-1;1284:4:39;1043:252;828:471;;;;;;;:::o;6364:322:35:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;6475:20:35::1;:5;6490:4:::0;6475:14:::1;:20::i;:::-;6470:50;;6504:16;;-1:-1:-1::0;;;6504:16:35::1;;;;;;;;;;;6470:50;6526:27;6548:4;6526:21;:27::i;:::-;-1:-1:-1::0;;;;;6559:26:35;::::1;;::::0;;;:20:::1;:26;::::0;;;;:37;;6589:7;;6559:26;:37:::1;::::0;6589:7;;6559:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;6607:74:35;::::1;6636:16;::::0;;;:10:::1;:16;::::0;;;;;;;;6654:20:::1;:26:::0;;;;;;;;6607:74;;::::1;::::0;::::1;::::0;10797:25:84;;10853:2;10838:18;;10831:34;10785:2;10770:18;;10623:248;6607:74:35::1;;;;;;;;6364:322:::0;;:::o;14272:148::-;14332:24;14398:16;;14385:10;:29;;;;:::i;:::-;14371:44;;:10;:44;:::i;13953:243::-;14034:15;14075:16;;14061:11;:30;14057:134;;;14141:16;;14112:25;14126:11;14112;:25;:::i;:::-;14111:46;;;;:::i;:::-;14101:56;;14057:134;;9499:257:8;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;:::-;9590:44;9499:257;-1:-1:-1;;;9499:257:8:o;8100:165::-;-1:-1:-1;;;;;8233:23:8;;8180:4;3767:19;;;:12;;;:19;;;;;;:24;;8203:55;3671:127;14499:163:35;14563:16;14594:63;14610:11;14623:16;;14641:15;;14594;:63::i;12794:1028::-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;-1:-1:-1;;;;;12927:21:35;::::1;::::0;;:15:::1;:21;::::0;;;;:42:::1;::::0;12958:10;12927:30:::1;:42::i;:::-;12922:80;;12978:24;;-1:-1:-1::0;;;12978:24:35::1;;;;;;;;;;;12922:80;-1:-1:-1::0;;;;;13012:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;:43;-1:-1:-1;13008:82:35::1;;;13064:26;;-1:-1:-1::0;;;13064:26:35::1;;;;;;;;;;;13008:82;13145:22;13162:4;13145:16;:22::i;:::-;13173:30;13206:48;13217:36;13233:7;13242:10;13217:15;:36::i;13206:48::-;-1:-1:-1::0;;;;;13337:23:35;::::1;13363:1;13337:23:::0;;;:17:::1;:23;::::0;;;;;13173:81;;-1:-1:-1;13337:27:35;13333:330:::1;;-1:-1:-1::0;;;;;13576:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;;13521:20:::1;:26:::0;;;;;;;:51:::1;::::0;13550:22;;13521:51:::1;:::i;:::-;13520:79;;;;:::i;:::-;-1:-1:-1::0;;;;;13490:26:35;::::1;;::::0;;;:20:::1;:26;::::0;;;;:109;;:26;;;:109:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;13607:23:35;::::1;;::::0;;;:17:::1;:23;::::0;;;;:49;;13634:22;;13607:23;:49:::1;::::0;13634:22;;13607:49:::1;:::i;:::-;::::0;;;-1:-1:-1;;13333:330:35::1;-1:-1:-1::0;;;;;13669:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;;:44;;13706:7;;13669:21;:44:::1;::::0;13706:7;;13669:44:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;13723:21:35;;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;;;;;;13719:99:::1;;-1:-1:-1::0;;;;;13771:21:35;::::1;;::::0;;;:15:::1;:21;::::0;;;;:40:::1;::::0;13800:10;13771:28:::1;:40::i;:::-;;13719:99;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;;12794:1028:35:o;14740:384::-;-1:-1:-1;;;;;14859:17:35;;14833:14;14859:17;;;:5;:17;;;;;:24;;;:29;14855:265;;-1:-1:-1;;;;;14922:25:35;;14898:21;14922:25;;;:13;:25;;;;;;;;:88;;-1:-1:-1;;;;;14982:17:35;;;;;;:5;:17;;;;;:28;14981:29;;-1:-1:-1;;;14982:28:35;;;;14981:29;:::i;:::-;14922:88;;;-1:-1:-1;;;;;14950:17:35;;;;;;:5;:17;;;;;:28;-1:-1:-1;;;14950:28:35;;;;14922:88;15041:12;;15096:16;;15027:86;;-1:-1:-1;;;15027:86:35;;14898:112;;-1:-1:-1;;;;;;15041:12:35;;;;15027:42;;:86;;15070:7;;14898:112;;15027:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9829:1303::-;9896:14;9941:24;9949:15;9941:7;:24::i;:::-;-1:-1:-1;;;;;9922:16:35;;;;;;:10;:16;;;;;;:43;9918:1210;;;10070:43;10096:16;;10078:15;:34;;;;:::i;10070:43::-;-1:-1:-1;;;;;10050:16:35;;;;;;:10;:16;;;;;;:63;10046:1076;;10214:22;10231:4;10214:16;:22::i;:::-;-1:-1:-1;;;;;10275:23:35;;;;;;:17;:23;;;;;;;;;10246:20;:26;;;;;;:52;10327:24;10335:15;10327:7;:24::i;:::-;-1:-1:-1;;;;;10308:16:35;;;;;;:10;:16;;;;;:43;-1:-1:-1;10373:4:35;4668:1632;;;:::o;10046:1076::-;10436:16;;-1:-1:-1;;;;;10415:16:35;;;;;;:10;:16;;;;;;10397:34;;:15;:34;:::i;:::-;10396:56;10392:730;;10544:22;10561:4;10544:16;:22::i;:::-;-1:-1:-1;;;;;10605:23:35;;;;;;:17;:23;;;;;;;;;10576:20;:26;;;;;:52;10658:16;;10638:10;:16;;;;;:36;;10658:16;;10638;;:36;;10658:16;;10638:36;:::i;:::-;;;;-1:-1:-1;10696:4:35;;-1:-1:-1;10392:730:35;;-1:-1:-1;10392:730:35;;10736:24;10744:15;10736:7;:24::i;:::-;-1:-1:-1;;;;;10719:14:35;;;;;;:8;:14;;;;;;:41;10715:407;;;-1:-1:-1;;;;;10885:23:35;;10853:29;10885:23;;;:17;:23;;;;;;10918:22;10903:4;10918:16;:22::i;:::-;-1:-1:-1;;;;;11009:23:35;;;;;;:17;:23;;;;;;;;;10980:20;:26;;;;;;;11036:21;;10980:52;;;:::i;:::-;10979:78;;;;:::i;:::-;-1:-1:-1;;;;;10950:26:35;;;;;;:20;:26;;;;;:107;-1:-1:-1;9829:1303:35;;;:::o;11196:400::-;-1:-1:-1;;;;;11509:16:35;;;;;;:10;:16;;;;;;11484:67;;11491:34;;:15;:34;:::i;:::-;-1:-1:-1;;;;;11527:23:35;;;;;;:17;:23;;;;;;11484:6;:67::i;:::-;-1:-1:-1;;;;;11454:26:35;;;;;;:20;:26;;;;;:97;;:26;;;:97;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11557:16:35;;;;;:10;:16;;;;;11576:15;11557:34;;11196:400::o;3696:343:39:-;-1:-1:-1;;;;;3815:26:39;;;;;;:20;:26;;;;;;3804:37;;3800:69;;;3850:19;;-1:-1:-1;;;3850:19:39;;;;;;;;;;;3800:69;-1:-1:-1;;;;;3876:14:39;;;;;;:8;:14;;;;;;;;3893:15;3876:32;;3914:20;:26;;;;;:38;;3944:8;;3876:14;3914:38;;3944:8;;3914:38;:::i;:::-;;;;-1:-1:-1;;;;;;;3958:14:39;;;;;;;:5;:14;;;;;;;;3973:8;;;;;3958:24;;;;;;;;:36;;3986:8;;3958:14;:36;;3986:8;;3958:36;:::i;:::-;;;;-1:-1:-1;;;;;;;4000:22:39;;;;;;:13;:22;;;;;:34;;4026:8;;4000:22;:34;;4026:8;;4000:34;:::i;:::-;;;;-1:-1:-1;;;;;3696:343:39:o;4958:107::-;5004:16;5058:2;5040:9;:14;;5052:2;5040:14;:::i;:::-;5039:21;;;;:::i;7545:150:8:-;7615:4;7638:50;7643:3;-1:-1:-1;;;;;7663:23:8;;7638:4;:50::i;15273:229:35:-;15341:31;15367:4;15341:25;:31::i;:::-;;15378:23;15396:4;15378:17;:23::i;:::-;-1:-1:-1;;;;;15445:26:35;;;;;;:20;:26;;;;;;;;;15473:17;:23;;;;;;;15436:61;;15445:26;15436:8;:61::i;:::-;-1:-1:-1;;;;;15407:26:35;;;;;;;:20;:26;;;;;:90;15273:229::o;845:241:4:-;1010:68;;-1:-1:-1;;;;;5776:15:84;;;1010:68:4;;;5758:34:84;5828:15;;5808:18;;;5801:43;5860:18;;;5853:34;;;983:96:4;;1003:5;;-1:-1:-1;;;1033:27:4;5693:18:84;;1010:68:4;;;;-1:-1:-1;;1010:68:4;;;;;;;;;;;;;;-1:-1:-1;;;;;1010:68:4;-1:-1:-1;;;;;;1010:68:4;;;;;;;;;;983:19;:96::i;:::-;845:241;;;;:::o;634:205::-;773:58;;-1:-1:-1;;;;;6839:32:84;;773:58:4;;;6821:51:84;6888:18;;;6881:34;;;746:86:4;;766:5;;-1:-1:-1;;;796:23:4;6794:18:84;;773:58:4;6647:274:84;4451:310:39;4596:16;4620:21;4669:9;4658:8;4644:11;;:22;;;;:::i;:::-;:34;;;;:::i;:::-;4620:58;-1:-1:-1;4749:7:39;4733:12;1238:6:31;4698:22:39;4714:6;4620:58;4698:22;:::i;:::-;4697:32;;;;:::i;:::-;4696:49;;;;:::i;:::-;4695:61;;;;:::i;:::-;4684:72;4451:310;-1:-1:-1;;;;;;4451:310:39:o;7863:156:8:-;7936:4;7959:53;7967:3;-1:-1:-1;;;;;7987:23:8;;7959:7;:53::i;8346:115::-;8409:7;8435:19;8443:3;3961:18;;3879:107;8803:156;8877:7;8927:22;8931:3;8943:5;8927:3;:22::i;4986:109::-;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;735:3600:23:-;833:14;;;-1:-1:-1;;1336:1:23;1333;1326:20;1371:1;1368;1364:9;1355:18;;1418:5;1414:2;1411:13;1403:5;1399:2;1395:14;1391:34;1382:43;;;1501:5;1510:1;1501:10;1497:155;;;1545:1;1531:11;:15;1523:24;;;;;;-1:-1:-1;1588:23:23;;;;-1:-1:-1;1630:13:23;;1497:155;1773:5;1759:11;:19;1751:28;;;;;;2044:17;2114:11;2111:1;2108;2101:25;3338:1;3319;2473;2458:12;;:16;;2457:32;;2575:22;;;;3319:15;;;3318:21;;3557:17;;;3553:21;;3546:28;3613:17;;;3609:21;;3602:28;3670:17;;;3666:21;;3659:28;3727:17;;;3723:21;;3716:28;3784:17;;;3780:21;;3773:28;3842:17;;;3838:21;;;3831:28;2442:12;2923;;;2919:23;;;2915:31;;;2233:20;;;2222:32;;;2970:12;;;;2272:21;;2693:16;;;;2961:21;;;;4292:11;;735:3600;-1:-1:-1;;;;735:3600:23:o;11656:118:35:-;11737:32;11764:4;11737:26;:32::i;:::-;-1:-1:-1;;;;;11711:23:35;;;;;;;:17;:23;;;;;:58;11656:118::o;1630:404:8:-;1693:4;3767:19;;;:12;;;:19;;;;;;1709:319;;-1:-1:-1;1751:23:8;;;;;;;;:11;:23;;;;;;;;;;;;;1931:18;;1909:19;;;:12;;;:19;;;;;;:40;;;;1963:11;;1709:319;-1:-1:-1;2012:5:8;2005:12;;391:104:7;449:7;479:1;475;:5;:13;;487:1;475:13;;;-1:-1:-1;483:1:7;;391:104;-1:-1:-1;391:104:7:o;3140:706:4:-;3559:23;3585:69;3613:4;3585:69;;;;;;;;;;;;;;;;;3593:5;-1:-1:-1;;;;;3585:27:4;;;:69;;;;;:::i;:::-;3668:17;;3559:95;;-1:-1:-1;3668:21:4;3664:176;;3763:10;3752:30;;;;;;;;;;;;:::i;:::-;3744:85;;;;-1:-1:-1;;;3744:85:4;;9136:2:84;3744:85:4;;;9118:21:84;9175:2;9155:18;;;9148:30;9214:34;9194:18;;;9187:62;-1:-1:-1;;;9265:18:84;;;9258:40;9315:19;;3744:85:4;8934:406:84;2202:1388:8;2268:4;2405:19;;;:12;;;:19;;;;;;2439:15;;2435:1149;;2808:21;2832:14;2845:1;2832:10;:14;:::i;:::-;2880:18;;2808:38;;-1:-1:-1;2860:17:8;;2880:22;;2901:1;;2880:22;:::i;:::-;2860:42;;2934:13;2921:9;:26;2917:398;;2967:17;2987:3;:11;;2999:9;2987:22;;;;;;;;:::i;:::-;;;;;;;;;2967:42;;3138:9;3109:3;:11;;3121:13;3109:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3221:23;;;:12;;;:23;;;;;:36;;;2917:398;3393:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3485:3;:12;;:19;3498:5;3485:19;;;;;;;;;;;3478:26;;;3526:4;3519:11;;;;;;;2435:1149;3568:5;3561:12;;;;;4328:118;4395:7;4421:3;:11;;4433:5;4421:18;;;;;;;;:::i;:::-;;;;;;;;;4414:25;;4328:118;;;;:::o;11943:753:35:-;12011:22;12075:24;12083:15;12075:7;:24::i;:::-;12051:12;;-1:-1:-1;;;;;12051:12:35;12045:19;;;;:5;:19;;;;;12051:12;12045:26;;:54;12041:170;;12191:12;;12174:30;;-1:-1:-1;;;;;12191:12:35;12174:16;:30::i;:::-;12158:12;;-1:-1:-1;;;;;12158:12:35;12152:19;;;;:5;:19;;;;;;;;;:52;;;;;;;;;;;;;;;;-1:-1:-1;;;12152:52:35;-1:-1:-1;;;;;;12152:52:35;;;;;;;;;;;;;;;;;;12158:12;12152:52;;;;;12041:170;12222:9;12217:475;-1:-1:-1;;;;;12237:21:35;;;;;;:15;:21;;;;;:30;;:28;:30::i;:::-;12233:1;:34;12217:475;;;-1:-1:-1;;;;;12303:21:35;;12282:18;12303:21;;;:15;:21;;;;;:27;;12328:1;12303:24;:27::i;:::-;12282:48;-1:-1:-1;12342:41:35;:20;12282:48;12342:29;:41::i;:::-;12338:348;;;12427:24;12435:15;12427:7;:24::i;:::-;-1:-1:-1;;;;;12399:17:35;;;;;;:5;:17;;;;;:24;;;:52;12395:181;;12537:28;12554:10;12537:16;:28::i;:::-;-1:-1:-1;;;;;12517:17:35;;;;;;:5;:17;;;;;;;;;:48;;;;;;;;;;;;;;;;-1:-1:-1;;;12517:48:35;-1:-1:-1;;;;;;12517:48:35;;;;;;;;;;;;;;;;;;;;;;;12395:181;-1:-1:-1;;;;;12630:21:35;;;;;;;:15;:21;;;;;;;;:33;;;;;;;;;;12603:74;;12614:62;;12652:10;12614:15;:62::i;12603:74::-;12585:92;;;;:::i;:::-;;;12338:348;-1:-1:-1;12269:3:35;;;;:::i;:::-;;;;12217:475;;3461:223:5;3594:12;3625:52;3647:6;3655:4;3661:1;3664:12;3594;1034:20;;4828:60;;;;-1:-1:-1;;;4828:60:5;;8778:2:84;4828:60:5;;;8760:21:84;8817:2;8797:18;;;8790:30;8856:31;8836:18;;;8829:59;8905:18;;4828:60:5;8576:353:84;4828:60:5;4900:12;4914:23;4941:6;-1:-1:-1;;;;;4941:11:5;4960:5;4967:4;4941:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4899:73;;;;4989:51;5006:7;5015:10;5027:12;4989:16;:51::i;:::-;4982:58;4548:499;-1:-1:-1;;;;;;;4548:499:5:o;7161:692::-;7307:12;7335:7;7331:516;;;-1:-1:-1;7365:10:5;7358:17;;7331:516;7476:17;;:21;7472:365;;7670:10;7664:17;7730:15;7717:10;7713:2;7709:19;7702:44;7472:365;7809:12;7802:20;;-1:-1:-1;;;7802:20:5;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:164:84:-;90:13;;139;;132:21;122:32;;112:60;;168:1;165;158:12;183:164;260:13;;313:1;302:20;;;292:31;;282:59;;337:1;334;327:12;352:247;411:6;464:2;452:9;443:7;439:23;435:32;432:52;;;480:1;477;470:12;432:52;519:9;506:23;538:31;563:5;538:31;:::i;604:251::-;674:6;727:2;715:9;706:7;702:23;698:32;695:52;;;743:1;740;733:12;695:52;775:9;769:16;794:31;819:5;794:31;:::i;860:388::-;928:6;936;989:2;977:9;968:7;964:23;960:32;957:52;;;1005:1;1002;995:12;957:52;1044:9;1031:23;1063:31;1088:5;1063:31;:::i;:::-;1113:5;-1:-1:-1;1170:2:84;1155:18;;1142:32;1183:33;1142:32;1183:33;:::i;:::-;1235:7;1225:17;;;860:388;;;;;:::o;1253:529::-;1330:6;1338;1346;1399:2;1387:9;1378:7;1374:23;1370:32;1367:52;;;1415:1;1412;1405:12;1367:52;1454:9;1441:23;1473:31;1498:5;1473:31;:::i;:::-;1523:5;-1:-1:-1;1580:2:84;1565:18;;1552:32;1593:33;1552:32;1593:33;:::i;:::-;1645:7;-1:-1:-1;1704:2:84;1689:18;;1676:32;1717:33;1676:32;1717:33;:::i;:::-;1769:7;1759:17;;;1253:529;;;;;:::o;1787:456::-;1864:6;1872;1880;1933:2;1921:9;1912:7;1908:23;1904:32;1901:52;;;1949:1;1946;1939:12;1901:52;1988:9;1975:23;2007:31;2032:5;2007:31;:::i;:::-;2057:5;-1:-1:-1;2114:2:84;2099:18;;2086:32;2127:33;2086:32;2127:33;:::i;:::-;1787:456;;2179:7;;-1:-1:-1;;;2233:2:84;2218:18;;;;2205:32;;1787:456::o;2248:598::-;2334:6;2342;2350;2358;2411:3;2399:9;2390:7;2386:23;2382:33;2379:53;;;2428:1;2425;2418:12;2379:53;2467:9;2454:23;2486:31;2511:5;2486:31;:::i;:::-;2536:5;-1:-1:-1;2593:2:84;2578:18;;2565:32;2606:33;2565:32;2606:33;:::i;:::-;2658:7;-1:-1:-1;2712:2:84;2697:18;;2684:32;;-1:-1:-1;2768:2:84;2753:18;;2740:32;2781:33;2740:32;2781:33;:::i;:::-;2248:598;;;;-1:-1:-1;2248:598:84;;-1:-1:-1;;2248:598:84:o;2851:594::-;2946:6;2954;2962;2970;2978;3031:3;3019:9;3010:7;3006:23;3002:33;2999:53;;;3048:1;3045;3038:12;2999:53;3087:9;3074:23;3106:31;3131:5;3106:31;:::i;:::-;3156:5;-1:-1:-1;3213:2:84;3198:18;;3185:32;3226:33;3185:32;3226:33;:::i;:::-;2851:594;;3278:7;;-1:-1:-1;;;;3332:2:84;3317:18;;3304:32;;3383:2;3368:18;;3355:32;;3434:3;3419:19;;;3406:33;;-1:-1:-1;2851:594:84:o;3450:315::-;3518:6;3526;3579:2;3567:9;3558:7;3554:23;3550:32;3547:52;;;3595:1;3592;3585:12;3547:52;3634:9;3621:23;3653:31;3678:5;3653:31;:::i;:::-;3703:5;3755:2;3740:18;;;;3727:32;;-1:-1:-1;;;3450:315:84:o;3770:202::-;3837:6;3890:2;3878:9;3869:7;3865:23;3861:32;3858:52;;;3906:1;3903;3896:12;3858:52;3929:37;3956:9;3929:37;:::i;3977:364::-;4058:6;4066;4074;4127:2;4115:9;4106:7;4102:23;4098:32;4095:52;;;4143:1;4140;4133:12;4095:52;4166:38;4194:9;4166:38;:::i;:::-;4156:48;;4223:47;4266:2;4255:9;4251:18;4223:47;:::i;:::-;4213:57;;4289:46;4331:2;4320:9;4316:18;4289:46;:::i;:::-;4279:56;;3977:364;;;;;:::o;4346:180::-;4405:6;4458:2;4446:9;4437:7;4433:23;4429:32;4426:52;;;4474:1;4471;4464:12;4426:52;-1:-1:-1;4497:23:84;;4346:180;-1:-1:-1;4346:180:84:o;4531:184::-;4601:6;4654:2;4642:9;4633:7;4629:23;4625:32;4622:52;;;4670:1;4667;4660:12;4622:52;-1:-1:-1;4693:16:84;;4531:184;-1:-1:-1;4531:184:84:o;4720:306::-;4808:6;4816;4824;4877:2;4865:9;4856:7;4852:23;4848:32;4845:52;;;4893:1;4890;4883:12;4845:52;4922:9;4916:16;4906:26;;4972:2;4961:9;4957:18;4951:25;4941:35;;5016:2;5005:9;5001:18;4995:25;4985:35;;4720:306;;;;;:::o;5031:274::-;5160:3;5198:6;5192:13;5214:53;5260:6;5255:3;5248:4;5240:6;5236:17;5214:53;:::i;:::-;5283:16;;;;;5031:274;-1:-1:-1;;5031:274:84:o;5310:203::-;-1:-1:-1;;;;;5474:32:84;;;;5456:51;;5444:2;5429:18;;5310:203::o;5898:744::-;-1:-1:-1;;;;;6144:32:84;;6126:51;;6114:2;6196;6214:18;;;6207:30;;;6286:13;;6099:18;;;6308:22;;;6066:4;;6387:15;;;;6196:2;6361;6346:18;;;6066:4;6430:186;6444:6;6441:1;6438:13;6430:186;;;6509:13;;6524:10;6505:30;6493:43;;6591:15;;;;6556:12;;;;6466:1;6459:9;6430:186;;;-1:-1:-1;6633:3:84;;5898:744;-1:-1:-1;;;;;;;5898:744:84:o;6926:658::-;7097:2;7149:21;;;7219:13;;7122:18;;;7241:22;;;7068:4;;7097:2;7320:15;;;;7294:2;7279:18;;;7068:4;7363:195;7377:6;7374:1;7371:13;7363:195;;;7442:13;;-1:-1:-1;;;;;7438:39:84;7426:52;;7533:15;;;;7498:12;;;;7474:1;7392:9;7363:195;;;-1:-1:-1;7575:3:84;;6926:658;-1:-1:-1;;;;;;6926:658:84:o;7781:383::-;7930:2;7919:9;7912:21;7893:4;7962:6;7956:13;8005:6;8000:2;7989:9;7985:18;7978:34;8021:66;8080:6;8075:2;8064:9;8060:18;8055:2;8047:6;8043:15;8021:66;:::i;:::-;8148:2;8127:15;-1:-1:-1;;8123:29:84;8108:45;;;;8155:2;8104:54;;7781:383;-1:-1:-1;;7781:383:84:o;9345:355::-;9547:2;9529:21;;;9586:2;9566:18;;;9559:30;9625:33;9620:2;9605:18;;9598:61;9691:2;9676:18;;9345:355::o;10288:330::-;10486:25;;;10558:1;10547:21;;;;10542:2;10527:18;;10520:49;10600:2;10585:18;;10578:34;10474:2;10459:18;;10288:330::o;10876:319::-;11078:25;;;11134:2;11119:18;;11112:34;;;;11177:2;11162:18;;11155:34;11066:2;11051:18;;10876:319::o;11200:128::-;11240:3;11271:1;11267:6;11264:1;11261:13;11258:39;;;11277:18;;:::i;:::-;-1:-1:-1;11313:9:84;;11200:128::o;11333:120::-;11373:1;11399;11389:35;;11404:18;;:::i;:::-;-1:-1:-1;11438:9:84;;11333:120::o;11458:168::-;11498:7;11564:1;11560;11556:6;11552:14;11549:1;11546:21;11541:1;11534:9;11527:17;11523:45;11520:71;;;11571:18;;:::i;:::-;-1:-1:-1;11611:9:84;;11458:168::o;11631:359::-;11669:4;11713:1;11710;11699:16;11749:1;11746;11735:16;11779:1;11774:3;11770:11;11845:3;11826:16;11822:21;11818:31;11813:3;11809:41;11804:2;11797:10;11793:58;11790:84;;;11854:18;;:::i;:::-;11925:3;11907:16;11903:26;11898:3;11894:36;11890:2;11886:45;11883:71;;;11934:18;;:::i;:::-;-1:-1:-1;11971:13:84;;;11631:359;-1:-1:-1;;;11631:359:84:o;11995:125::-;12035:4;12063:1;12060;12057:8;12054:34;;;12068:18;;:::i;:::-;-1:-1:-1;12105:9:84;;11995:125::o;12125:258::-;12197:1;12207:113;12221:6;12218:1;12215:13;12207:113;;;12297:11;;;12291:18;12278:11;;;12271:39;12243:2;12236:10;12207:113;;;12338:6;12335:1;12332:13;12329:48;;;-1:-1:-1;;12373:1:84;12355:16;;12348:27;12125:258::o;12388:135::-;12427:3;-1:-1:-1;;12448:17:84;;12445:43;;;12468:18;;:::i;:::-;-1:-1:-1;12515:1:84;12504:13;;12388:135::o;12528:112::-;12560:1;12586;12576:35;;12591:18;;:::i;:::-;-1:-1:-1;12625:9:84;;12528:112::o;12645:193::-;12679:3;12726:5;12723:1;12712:20;12760:16;12756:21;12747:7;12744:34;12741:60;;;12781:18;;:::i;:::-;12821:1;12817:15;;12645:193;-1:-1:-1;;12645:193:84:o;12843:127::-;12904:10;12899:3;12895:20;12892:1;12885:31;12935:4;12932:1;12925:15;12959:4;12956:1;12949:15;12975:127;13036:10;13031:3;13027:20;13024:1;13017:31;13067:4;13064:1;13057:15;13091:4;13088:1;13081:15;13107:127;13168:10;13163:3;13159:20;13156:1;13149:31;13199:4;13196:1;13189:15;13223:4;13220:1;13213:15;13239:127;13300:10;13295:3;13291:20;13288:1;13281:31;13331:4;13328:1;13321:15;13355:4;13352:1;13345:15;13503:131;-1:-1:-1;;;;;13578:31:84;;13568:42;;13558:70;;13624:1;13621;13614:12;13558:70;13503:131;:::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "4209000",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "52192",
                "acceptJobMigration(address,address)": "infinite",
                "acceptJobOwnership(address)": "55190",
                "addDisputer(address)": "30171",
                "addLiquidityToJob(address,address,uint256)": "infinite",
                "addSlasher(address)": "30237",
                "addTokenCreditsToJob(address,address,uint256)": "infinite",
                "approveLiquidity(address)": "infinite",
                "approvedLiquidities()": "infinite",
                "bondTime()": "2351",
                "bondedPayment(address,uint256)": "infinite",
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "changeJobOwnership(address,address)": "infinite",
                "directTokenPayment(address,address,uint256)": "infinite",
                "disputers(address)": "2857",
                "disputes(address)": "2812",
                "fee()": "2416",
                "firstSeen(address)": "2656",
                "forceLiquidityCreditsToJob(address,uint256)": "infinite",
                "governance()": "2406",
                "hasBonded(address)": "2944",
                "inflationPeriod()": "2702",
                "isBondedKeeper(address,address,uint256,uint256,uint256)": "infinite",
                "isKeeper(address)": "infinite",
                "jobLiquidityCredits(address)": "infinite",
                "jobOwner(address)": "2951",
                "jobPendingOwner(address)": "2643",
                "jobPeriodCredits(address)": "infinite",
                "jobTokenCredits(address,address)": "infinite",
                "jobTokenCreditsAddedAt(address,address)": "infinite",
                "jobs()": "infinite",
                "keep3rHelper()": "2669",
                "keep3rV1()": "2627",
                "keep3rV1Proxy()": "2780",
                "keepers()": "infinite",
                "kp3rWethPool()": "2692",
                "liquidityAmount(address,address)": "infinite",
                "liquidityMinimum()": "2395",
                "migrateJob(address,address)": "infinite",
                "observeLiquidity(address)": "infinite",
                "pendingBonds(address,address)": "infinite",
                "pendingGovernance()": "2713",
                "pendingJobMigrations(address)": "2840",
                "pendingUnbonds(address,address)": "infinite",
                "quoteLiquidity(address,uint256)": "infinite",
                "removeDisputer(address)": "30359",
                "removeSlasher(address)": "30294",
                "revokeLiquidity(address)": "infinite",
                "rewardPeriodTime()": "2593",
                "rewardedAt(address)": "2679",
                "setApprovedLiquidity(address)": "infinite",
                "setBondTime(uint256)": "25916",
                "setFee(uint256)": "25740",
                "setGovernance(address)": "28052",
                "setInflationPeriod(uint256)": "25850",
                "setJob(address)": "infinite",
                "setJobLiquidity(address,address)": "infinite",
                "setKeep3rHelper(address)": "28109",
                "setKeep3rV1(address)": "28086",
                "setKeep3rV1Proxy(address)": "27866",
                "setKeeper(address)": "infinite",
                "setKp3rWethPool(address)": "infinite",
                "setLiquidityMinimum(uint256)": "25761",
                "setRewardPeriodTime(uint256)": "25611",
                "setUnbondTime(uint256)": "25979",
                "slashers(address)": "2922",
                "totalJobCredits(address)": "infinite",
                "unbondLiquidityFromJob(address,address,uint256)": "infinite",
                "unbondTime()": "2483",
                "viewGas()": "2657",
                "viewJobLiquidityCredits(address)": "2718",
                "viewJobPeriodCredits(address)": "2894",
                "viewTickCache(address)": "5193",
                "withdrawLiquidityFromJob(address,address,address)": "infinite",
                "withdrawTokenCreditsFromJob(address,address,uint256,address)": "infinite",
                "workCompleted(address)": "2746",
                "worked(address)": "infinite",
                "workedAt(address)": "2832"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptJobMigration(address,address)": "af320e81",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addSlasher(address)": "68a9f19c",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bondTime()": "5ebe23f0",
              "bondedPayment(address,uint256)": "11466d72",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "directTokenPayment(address,address,uint256)": "dd2080d6",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "isBondedKeeper(address,address,uint256,uint256,uint256)": "f9d46cf2",
              "isKeeper(address)": "6ba42aaa",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityAmount(address,address)": "694798e6",
              "liquidityMinimum()": "633fb68f",
              "migrateJob(address,address)": "90a4684e",
              "observeLiquidity(address)": "165e62e7",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingJobMigrations(address)": "ec8ca643",
              "pendingUnbonds(address,address)": "21040b01",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardPeriodTime()": "768b5d90",
              "rewardedAt(address)": "a676f9ff",
              "setApprovedLiquidity(address)": "280b656c",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setJob(address)": "a662031b",
              "setJobLiquidity(address,address)": "cacdf93d",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKeeper(address)": "748747e6",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "unbondTime()": "a7d2e784",
              "viewGas()": "4a8d1348",
              "viewJobLiquidityCredits(address)": "e7f0cbf8",
              "viewJobPeriodCredits(address)": "f6bb2032",
              "viewTickCache(address)": "e485dc0e",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workCompleted(address)": "1b44555e",
              "worked(address)": "5feeb794",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationImpossible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationSuccessful\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperValidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperWork\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"acceptJobMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"}],\"name\":\"bondedPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"directTokenPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_earned\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_age\",\"type\":\"uint256\"}],\"name\":\"isBondedKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isBondedKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"isKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"migrateJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingJobMigrations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"setApprovedLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"setJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"setJobLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"setKeeper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_credits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"viewGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"viewJobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"viewJobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"viewTickCache\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"worked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobMigration(address,address)\":{\"details\":\"Unbond/withdraw process doesn't get migrated\",\"params\":{\"_fromJob\":\"The address of the job that requested to migrate\",\"_toJob\":\"The address to which the job wants to migrate to\"}},\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"bondedPayment(address,uint256)\":{\"details\":\"Pays the keeper that performs the work with KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\",\"_payment\":\"The reward that should be allocated for the job\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"directTokenPayment(address,address,uint256)\":{\"details\":\"Pays the keeper that performs the work with a specific token\",\"params\":{\"_amount\":\"The reward that should be allocated\",\"_keeper\":\"Address of the keeper that performed the work\",\"_token\":\"The asset being awarded to the keeper\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"details\":\"Should be used for protected functions\",\"params\":{\"_age\":\"The minimum keeper age required\",\"_bond\":\"The bond token being evaluated\",\"_earned\":\"The minimum funds earned in the keepers lifetime\",\"_keeper\":\"The keeper to check\",\"_minBond\":\"The minimum amount of bonded tokens\"},\"returns\":{\"_isBondedKeeper\":\"Whether the `_keeper` meets the given requirements\"}},\"isKeeper(address)\":{\"details\":\"Can be used for general (non critical) functions\",\"params\":{\"_keeper\":\"The keeper being investigated\"},\"returns\":{\"_isKeeper\":\"Whether the address passed as a parameter is a keeper or not\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_liquidityCredits\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_periodCredits\":\"The credits the given job has at the current period\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"migrateJob(address,address)\":{\"params\":{\"_fromJob\":\"The address of the job that is requesting to migrate\",\"_toJob\":\"The address at which the job is requesting to migrate\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_credits\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}},\"worked(address)\":{\"details\":\"Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"InsufficientFunds()\":[{\"notice\":\"Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobMigrationImpossible()\":[{\"notice\":\"Throws when the address of the job that requests to migrate wants to migrate to its same address\"}],\"JobMigrationLocked()\":[{\"notice\":\"Throws when cooldown between migrations has not yet passed\"}],\"JobMigrationUnavailable()\":[{\"notice\":\"Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobUnapproved()\":[{\"notice\":\"Throws if the address claiming to be a job is not in the list of approved jobs\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobMigrationRequested(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#migrateJob function is called\"},\"JobMigrationSuccessful(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#acceptJobMigration function is called\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"KeeperValidation(uint256)\":{\"notice\":\"Emitted when a keeper is validated before a job\"},\"KeeperWork(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a keeper works a job\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"acceptJobMigration(address,address)\":{\"notice\":\"Completes the migration process for a job\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bondedPayment(address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"directTokenPayment(address,address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"notice\":\"Confirms if the current keeper is registered and has a minimum bond of any asset.\"},\"isKeeper(address)\":{\"notice\":\"Confirms if the current keeper is registered\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"migrateJob(address,address)\":{\"notice\":\"Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingJobMigrations(address)\":{\"notice\":\"Maps the jobs that have requested a migration to the address they have requested to migrate to\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"},\"worked(address)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol\":\"Keep3rJobWorkableForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a >= b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a / b + (a % b == 0 ? 0 : 1);\\n    }\\n}\\n\",\"keccak256\":\"0x49ebdac5d515aebb95168564158940b79d7d5d12fbfe59cec546a00d57fee64a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/libraries/FullMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Contains 512-bit math functions\\n/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\\n/// @dev Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\\nlibrary FullMath {\\n  /// @notice Calculates floor(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv\\n  function mulDiv(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      // 512-bit multiply [prod1 prod0] = a * b\\n      // Compute the product mod 2**256 and mod 2**256 - 1\\n      // then use the Chinese Remainder Theorem to reconstruct\\n      // the 512 bit result. The result is stored in two 256\\n      // variables such that product = prod1 * 2**256 + prod0\\n      uint256 prod0; // Least significant 256 bits of the product\\n      uint256 prod1; // Most significant 256 bits of the product\\n      assembly {\\n        let mm := mulmod(a, b, not(0))\\n        prod0 := mul(a, b)\\n        prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n      }\\n\\n      // Handle non-overflow cases, 256 by 256 division\\n      if (prod1 == 0) {\\n        require(denominator > 0);\\n        assembly {\\n          result := div(prod0, denominator)\\n        }\\n        return result;\\n      }\\n\\n      // Make sure the result is less than 2**256.\\n      // Also prevents denominator == 0\\n      require(denominator > prod1);\\n\\n      ///////////////////////////////////////////////\\n      // 512 by 256 division.\\n      ///////////////////////////////////////////////\\n\\n      // Make division exact by subtracting the remainder from [prod1 prod0]\\n      // Compute remainder using mulmod\\n      uint256 remainder;\\n      assembly {\\n        remainder := mulmod(a, b, denominator)\\n      }\\n      // Subtract 256 bit number from 512 bit number\\n      assembly {\\n        prod1 := sub(prod1, gt(remainder, prod0))\\n        prod0 := sub(prod0, remainder)\\n      }\\n\\n      // Factor powers of two out of denominator\\n      // Compute largest power of two divisor of denominator.\\n      // Always >= 1.\\n      uint256 twos = (~denominator + 1) & denominator;\\n      // Divide denominator by power of two\\n      assembly {\\n        denominator := div(denominator, twos)\\n      }\\n\\n      // Divide [prod1 prod0] by the factors of two\\n      assembly {\\n        prod0 := div(prod0, twos)\\n      }\\n      // Shift in bits from prod1 into prod0. For this we need\\n      // to flip `twos` such that it is 2**256 / twos.\\n      // If twos is zero, then it becomes one\\n      assembly {\\n        twos := add(div(sub(0, twos), twos), 1)\\n      }\\n      prod0 |= prod1 * twos;\\n\\n      // Invert denominator mod 2**256\\n      // Now that denominator is an odd number, it has an inverse\\n      // modulo 2**256 such that denominator * inv = 1 mod 2**256.\\n      // Compute the inverse by starting with a seed that is correct\\n      // correct for four bits. That is, denominator * inv = 1 mod 2**4\\n      uint256 inv = (3 * denominator) ^ 2;\\n      // Now use Newton-Raphson iteration to improve the precision.\\n      // Thanks to Hensel's lifting lemma, this also works in modular\\n      // arithmetic, doubling the correct bits in each step.\\n      inv *= 2 - denominator * inv; // inverse mod 2**8\\n      inv *= 2 - denominator * inv; // inverse mod 2**16\\n      inv *= 2 - denominator * inv; // inverse mod 2**32\\n      inv *= 2 - denominator * inv; // inverse mod 2**64\\n      inv *= 2 - denominator * inv; // inverse mod 2**128\\n      inv *= 2 - denominator * inv; // inverse mod 2**256\\n\\n      // Because the division is now exact we can divide by multiplying\\n      // with the modular inverse of denominator. This will give us the\\n      // correct result modulo 2**256. Since the precoditions guarantee\\n      // that the outcome is less than 2**256, this is the final result.\\n      // We don't need to compute the high bits of the result and prod1\\n      // is no longer required.\\n      result = prod0 * inv;\\n      return result;\\n    }\\n  }\\n\\n  /// @notice Calculates ceil(a\\u00d7b\\u00f7denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n  /// @param a The multiplicand\\n  /// @param b The multiplier\\n  /// @param denominator The divisor\\n  /// @return result The 256-bit result\\n  function mulDivRoundingUp(\\n    uint256 a,\\n    uint256 b,\\n    uint256 denominator\\n  ) internal pure returns (uint256 result) {\\n    unchecked {\\n      result = mulDiv(a, b, denominator);\\n      if (mulmod(a, b, denominator) > 0) {\\n        require(result < type(uint256).max);\\n        result++;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe1c595da02adf8ba2ae74ac579b9b3c966d1ecb2a99c25081a62ee8550f26569\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableCredits is IKeep3rJobFundableCredits, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice Cooldown between withdrawals\\n  uint256 internal constant _WITHDRAW_TOKENS_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  mapping(address => mapping(address => uint256)) public override jobTokenCreditsAddedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    // KP3R shouldn't be used for direct token payments\\n    if (_token == keep3rV1) revert TokenUnallowed();\\n    uint256 _before = IERC20(_token).balanceOf(address(this));\\n    IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);\\n    uint256 _received = IERC20(_token).balanceOf(address(this)) - _before;\\n    uint256 _tokenFee = (_received * fee) / _BASE;\\n    jobTokenCredits[_job][_token] += _received - _tokenFee;\\n    jobTokenCreditsAddedAt[_job][_token] = block.timestamp;\\n    IERC20(_token).safeTransfer(governance, _tokenFee);\\n    _jobTokens[_job].add(_token);\\n\\n    emit TokenCreditAddition(_job, _token, msg.sender, _received);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableCredits\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external override nonReentrant onlyJobOwner(_job) {\\n    if (block.timestamp <= jobTokenCreditsAddedAt[_job][_token] + _WITHDRAW_TOKENS_COOLDOWN) revert JobTokenCreditsLocked();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientJobTokenCredits();\\n    if (disputes[_job]) revert JobDisputed();\\n\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_receiver, _amount);\\n\\n    if (jobTokenCredits[_job][_token] == 0) {\\n      _jobTokens[_job].remove(_token);\\n    }\\n\\n    emit TokenCreditWithdrawal(_job, _token, _receiver, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0xb600d18903a008a1ca03743de7cef8330c2d5e66db52c900822551a4be75f7a5\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobOwnership.sol';\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/IPairManager.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '../../libraries/FullMath.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\nimport '@openzeppelin/contracts/utils/math/Math.sol';\\n\\nabstract contract Keep3rJobFundableLiquidity is IKeep3rJobFundableLiquidity, ReentrancyGuard, Keep3rJobOwnership, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @notice List of liquidities that are accepted in the system\\n  EnumerableSet.AddressSet internal _approvedLiquidities;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => mapping(address => uint256)) public override liquidityAmount;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override rewardedAt;\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  mapping(address => uint256) public override workedAt;\\n\\n  /// @notice Tracks an address and returns its TickCache\\n  mapping(address => TickCache) internal _tick;\\n\\n  // Views\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approvedLiquidities() external view override returns (address[] memory _list) {\\n    _list = _approvedLiquidities.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobPeriodCredits(address _job) public view override returns (uint256 _periodCredits) {\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        TickCache memory _tickCache = observeLiquidity(_liquidity);\\n        if (_tickCache.period != 0) {\\n          int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n          _periodCredits += _getReward(\\n            IKeep3rHelper(keep3rHelper).getKP3RsAtTick(liquidityAmount[_job][_liquidity], _tickDifference, rewardPeriodTime)\\n          );\\n        }\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function jobLiquidityCredits(address _job) public view override returns (uint256 _liquidityCredits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n\\n    // If the job was rewarded in the past 1 period time\\n    if ((block.timestamp - rewardedAt[_job]) < rewardPeriodTime) {\\n      // If the job has period credits, update minted job credits to new twap\\n      _liquidityCredits = _periodCredits > 0\\n        ? (_jobLiquidityCredits[_job] * _periodCredits) / _jobPeriodCredits[_job] // If the job has period credits, return remaining job credits updated to new twap\\n        : _jobLiquidityCredits[_job]; // If not, return remaining credits, forced credits should not be updated\\n    } else {\\n      // Else return a full period worth of credits if current credits have expired\\n      _liquidityCredits = _periodCredits;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function totalJobCredits(address _job) external view override returns (uint256 _credits) {\\n    uint256 _periodCredits = jobPeriodCredits(_job);\\n    uint256 _cooldown = block.timestamp;\\n\\n    if ((rewardedAt[_job] > _period(block.timestamp - rewardPeriodTime))) {\\n      // Will calculate cooldown if it outdated\\n      if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will calculate cooldown from last reward reference in this period\\n        _cooldown -= (rewardedAt[_job] + rewardPeriodTime);\\n      } else {\\n        // Will calculate cooldown from last reward timestamp\\n        _cooldown -= rewardedAt[_job];\\n      }\\n    } else {\\n      // Will calculate cooldown from period start if expired\\n      _cooldown -= _period(block.timestamp);\\n    }\\n    _credits = jobLiquidityCredits(_job) + _phase(_cooldown, _periodCredits);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view override returns (uint256 _periodCredits) {\\n    if (_approvedLiquidities.contains(_liquidity)) {\\n      TickCache memory _tickCache = observeLiquidity(_liquidity);\\n      if (_tickCache.period != 0) {\\n        int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tickCache.difference : -_tickCache.difference;\\n        return _getReward(IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime));\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function observeLiquidity(address _liquidity) public view virtual override returns (TickCache memory _tickCache) {\\n    if (_tick[_liquidity].period == _period(block.timestamp)) {\\n      // Will return cached twaps if liquidity is updated\\n      _tickCache = _tick[_liquidity];\\n    } else {\\n      bool success;\\n      uint256 lastPeriod = _period(block.timestamp - rewardPeriodTime);\\n\\n      if (_tick[_liquidity].period == lastPeriod) {\\n        // Will only ask for current period accumulator if liquidity is outdated\\n        uint32[] memory _secondsAgo = new uint32[](1);\\n        int56 previousTick = _tick[_liquidity].current;\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n\\n        (_tickCache.current, , success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - previousTick;\\n      } else if (_tick[_liquidity].period < lastPeriod) {\\n        // Will ask for 2 accumulators if liquidity is expired\\n        uint32[] memory _secondsAgo = new uint32[](2);\\n\\n        _secondsAgo[0] = uint32(block.timestamp - _period(block.timestamp));\\n        _secondsAgo[1] = uint32(block.timestamp - _period(block.timestamp) + rewardPeriodTime);\\n\\n        int56 _tickCumulative2;\\n        (_tickCache.current, _tickCumulative2, success) = IKeep3rHelper(keep3rHelper).observe(_liquidityPool[_liquidity], _secondsAgo);\\n\\n        _tickCache.difference = _tickCache.current - _tickCumulative2;\\n      }\\n      if (success) {\\n        _tickCache.period = _period(block.timestamp);\\n      } else {\\n        delete _tickCache.period;\\n      }\\n    }\\n  }\\n\\n  // Methods\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external override onlyGovernance {\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n    _settleJobAccountance(_job);\\n    _jobLiquidityCredits[_job] += _amount;\\n    emit LiquidityCreditsForced(_job, rewardedAt[_job], _jobLiquidityCredits[_job]);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function approveLiquidity(address _liquidity) external virtual override onlyGovernance {\\n    if (!_approvedLiquidities.add(_liquidity)) revert LiquidityPairApproved();\\n    _liquidityPool[_liquidity] = IPairManager(_liquidity).pool();\\n    _isKP3RToken0[_liquidity] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_liquidityPool[_liquidity]);\\n    _tick[_liquidity] = observeLiquidity(_liquidity);\\n    emit LiquidityApproval(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function revokeLiquidity(address _liquidity) external override onlyGovernance {\\n    if (!_approvedLiquidities.remove(_liquidity)) revert LiquidityPairUnexistent();\\n    emit LiquidityRevocation(_liquidity);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override nonReentrant {\\n    if (!_approvedLiquidities.contains(_liquidity)) revert LiquidityPairUnapproved();\\n    if (!_jobs.contains(_job)) revert JobUnavailable();\\n\\n    _jobLiquidities[_job].add(_liquidity);\\n\\n    _settleJobAccountance(_job);\\n\\n    if (_quoteLiquidity(liquidityAmount[_job][_liquidity] + _amount, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n    IERC20(_liquidity).safeTransferFrom(msg.sender, address(this), _amount);\\n    liquidityAmount[_job][_liquidity] += _amount;\\n    _jobPeriodCredits[_job] += _getReward(_quoteLiquidity(_amount, _liquidity));\\n    emit LiquidityAddition(_job, _liquidity, msg.sender, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external override onlyJobOwner(_job) {\\n    canWithdrawAfter[_job][_liquidity] = block.timestamp + unbondTime;\\n    pendingUnbonds[_job][_liquidity] += _amount;\\n    _unbondLiquidityFromJob(_job, _liquidity, _amount);\\n\\n    uint256 _remainingLiquidity = liquidityAmount[_job][_liquidity];\\n    if (_remainingLiquidity > 0 && _quoteLiquidity(_remainingLiquidity, _liquidity) < liquidityMinimum) revert JobLiquidityLessThanMin();\\n\\n    emit Unbonding(_job, _liquidity, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobFundableLiquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external override onlyJobOwner(_job) {\\n    if (_receiver == address(0)) revert ZeroAddress();\\n    if (pendingUnbonds[_job][_liquidity] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[_job][_liquidity] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[_job]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[_job][_liquidity];\\n\\n    delete pendingUnbonds[_job][_liquidity];\\n    delete canWithdrawAfter[_job][_liquidity];\\n\\n    IERC20(_liquidity).safeTransfer(_receiver, _amount);\\n    emit LiquidityWithdrawal(_job, _liquidity, _receiver, _amount);\\n  }\\n\\n  // Internal functions\\n\\n  /// @notice Updates or rewards job liquidity credits depending on time since last job reward\\n  function _updateJobCreditsIfNeeded(address _job) internal returns (bool _rewarded) {\\n    if (rewardedAt[_job] < _period(block.timestamp)) {\\n      // Will exit function if job has been rewarded in current period\\n      if (rewardedAt[_job] <= _period(block.timestamp - rewardPeriodTime)) {\\n        // Will reset job to period syncronicity if a full period passed without rewards\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] = _period(block.timestamp);\\n        _rewarded = true;\\n      } else if ((block.timestamp - rewardedAt[_job]) >= rewardPeriodTime) {\\n        // Will reset job's syncronicity if last reward was more than epoch ago\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = _jobPeriodCredits[_job];\\n        rewardedAt[_job] += rewardPeriodTime;\\n        _rewarded = true;\\n      } else if (workedAt[_job] < _period(block.timestamp)) {\\n        // First keeper on period has to update job accountance to current twaps\\n        uint256 previousPeriodCredits = _jobPeriodCredits[_job];\\n        _updateJobPeriod(_job);\\n        _jobLiquidityCredits[_job] = (_jobLiquidityCredits[_job] * _jobPeriodCredits[_job]) / previousPeriodCredits;\\n        // Updating job accountance does not reward job\\n      }\\n    }\\n  }\\n\\n  /// @notice Only called if _jobLiquidityCredits < payment\\n  function _rewardJobCredits(address _job) internal {\\n    /// @notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)\\n    /* WARNING: this allows to top up _jobLiquidityCredits to a max of 1.99 but have to spend at least 1 */\\n    _jobLiquidityCredits[_job] += _phase(block.timestamp - rewardedAt[_job], _jobPeriodCredits[_job]);\\n    rewardedAt[_job] = block.timestamp;\\n  }\\n\\n  /// @notice Updates accountance for _jobPeriodCredits\\n  function _updateJobPeriod(address _job) internal {\\n    _jobPeriodCredits[_job] = _calculateJobPeriodCredits(_job);\\n  }\\n\\n  /// @notice Quotes the outdated job liquidities and calculates _periodCredits\\n  /// @dev This function is also responsible for keeping the KP3R/WETH quote updated\\n  function _calculateJobPeriodCredits(address _job) internal returns (uint256 _periodCredits) {\\n    if (_tick[kp3rWethPool].period != _period(block.timestamp)) {\\n      // Updates KP3R/WETH quote if needed\\n      _tick[kp3rWethPool] = observeLiquidity(kp3rWethPool);\\n    }\\n\\n    for (uint256 i; i < _jobLiquidities[_job].length(); i++) {\\n      address _liquidity = _jobLiquidities[_job].at(i);\\n      if (_approvedLiquidities.contains(_liquidity)) {\\n        if (_tick[_liquidity].period != _period(block.timestamp)) {\\n          // Updates liquidity cache only if needed\\n          _tick[_liquidity] = observeLiquidity(_liquidity);\\n        }\\n        _periodCredits += _getReward(_quoteLiquidity(liquidityAmount[_job][_liquidity], _liquidity));\\n      }\\n    }\\n  }\\n\\n  /// @notice Updates job accountance calculating the impact of the unbonded liquidity amount\\n  function _unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) internal nonReentrant {\\n    if (!_jobLiquidities[_job].contains(_liquidity)) revert JobLiquidityUnexistent();\\n    if (liquidityAmount[_job][_liquidity] < _amount) revert JobLiquidityInsufficient();\\n\\n    // Ensures current twaps in job liquidities\\n    _updateJobPeriod(_job);\\n    uint256 _periodCreditsToRemove = _getReward(_quoteLiquidity(_amount, _liquidity));\\n\\n    // A liquidity can be revoked causing a job to have 0 periodCredits\\n    if (_jobPeriodCredits[_job] > 0) {\\n      // Removes a % correspondant to a full rewardPeriodTime for the liquidity withdrawn vs all of the liquidities\\n      _jobLiquidityCredits[_job] -= (_jobLiquidityCredits[_job] * _periodCreditsToRemove) / _jobPeriodCredits[_job];\\n      _jobPeriodCredits[_job] -= _periodCreditsToRemove;\\n    }\\n\\n    liquidityAmount[_job][_liquidity] -= _amount;\\n    if (liquidityAmount[_job][_liquidity] == 0) {\\n      _jobLiquidities[_job].remove(_liquidity);\\n    }\\n  }\\n\\n  /// @notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed\\n  function _phase(uint256 _timePassed, uint256 _multiplier) internal view returns (uint256 _result) {\\n    if (_timePassed < rewardPeriodTime) {\\n      _result = (_timePassed * _multiplier) / rewardPeriodTime;\\n    } else _result = _multiplier;\\n  }\\n\\n  /// @notice Returns the start of the period of the provided timestamp\\n  function _period(uint256 _timestamp) internal view returns (uint256 _periodTimestamp) {\\n    return _timestamp - (_timestamp % rewardPeriodTime);\\n  }\\n\\n  /// @notice Calculates relation between rewardPeriod and inflationPeriod\\n  function _getReward(uint256 _baseAmount) internal view returns (uint256 _credits) {\\n    return FullMath.mulDiv(_baseAmount, rewardPeriodTime, inflationPeriod);\\n  }\\n\\n  /// @notice Returns underlying KP3R amount for a given liquidity amount\\n  function _quoteLiquidity(uint256 _amount, address _liquidity) internal view virtual returns (uint256 _quote) {\\n    if (_tick[_liquidity].period != 0) {\\n      int56 _tickDifference = _isKP3RToken0[_liquidity] ? _tick[_liquidity].difference : -_tick[_liquidity].difference;\\n      _quote = IKeep3rHelper(keep3rHelper).getKP3RsAtTick(_amount, _tickDifference, rewardPeriodTime);\\n    }\\n  }\\n\\n  /// @notice Updates job credits to current quotes and rewards job's pending minted credits\\n  /// @dev Ensures a maximum of 1 period of credits\\n  function _settleJobAccountance(address _job) internal virtual {\\n    _updateJobCreditsIfNeeded(_job);\\n    _rewardJobCredits(_job);\\n    _jobLiquidityCredits[_job] = Math.min(_jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n  }\\n}\\n\",\"keccak256\":\"0x7747b2a0ee0c4e3322e92a3e1fc0f6f03be63942bc398009726b58f8c9f79cf0\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\nimport './Keep3rJobFundableCredits.sol';\\nimport './Keep3rJobFundableLiquidity.sol';\\n\\nabstract contract Keep3rJobMigration is IKeep3rJobMigration, Keep3rJobFundableCredits, Keep3rJobFundableLiquidity {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  uint256 internal constant _MIGRATION_COOLDOWN = 1 minutes;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  mapping(address => address) public override pendingJobMigrations;\\n  mapping(address => mapping(address => uint256)) internal _migrationCreatedAt;\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function migrateJob(address _fromJob, address _toJob) external override onlyJobOwner(_fromJob) {\\n    if (_fromJob == _toJob) revert JobMigrationImpossible();\\n\\n    pendingJobMigrations[_fromJob] = _toJob;\\n    _migrationCreatedAt[_fromJob][_toJob] = block.timestamp;\\n\\n    emit JobMigrationRequested(_fromJob, _toJob);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobMigration\\n  function acceptJobMigration(address _fromJob, address _toJob) external override onlyJobOwner(_toJob) {\\n    if (disputes[_fromJob] || disputes[_toJob]) revert JobDisputed();\\n    if (pendingJobMigrations[_fromJob] != _toJob) revert JobMigrationUnavailable();\\n    if (block.timestamp < _migrationCreatedAt[_fromJob][_toJob] + _MIGRATION_COOLDOWN) revert JobMigrationLocked();\\n\\n    // force job credits update for both jobs\\n    _settleJobAccountance(_fromJob);\\n    _settleJobAccountance(_toJob);\\n\\n    // migrate tokens\\n    while (_jobTokens[_fromJob].length() > 0) {\\n      address _tokenToMigrate = _jobTokens[_fromJob].at(0);\\n      jobTokenCredits[_toJob][_tokenToMigrate] += jobTokenCredits[_fromJob][_tokenToMigrate];\\n      delete jobTokenCredits[_fromJob][_tokenToMigrate];\\n      _jobTokens[_fromJob].remove(_tokenToMigrate);\\n      _jobTokens[_toJob].add(_tokenToMigrate);\\n    }\\n\\n    // migrate liquidities\\n    while (_jobLiquidities[_fromJob].length() > 0) {\\n      address _liquidity = _jobLiquidities[_fromJob].at(0);\\n\\n      liquidityAmount[_toJob][_liquidity] += liquidityAmount[_fromJob][_liquidity];\\n      delete liquidityAmount[_fromJob][_liquidity];\\n\\n      _jobLiquidities[_toJob].add(_liquidity);\\n      _jobLiquidities[_fromJob].remove(_liquidity);\\n    }\\n\\n    // migrate job balances\\n    _jobPeriodCredits[_toJob] += _jobPeriodCredits[_fromJob];\\n    delete _jobPeriodCredits[_fromJob];\\n\\n    _jobLiquidityCredits[_toJob] += _jobLiquidityCredits[_fromJob];\\n    delete _jobLiquidityCredits[_fromJob];\\n\\n    // stop _fromJob from being a job\\n    delete rewardedAt[_fromJob];\\n    _jobs.remove(_fromJob);\\n\\n    // delete unused data slots\\n    delete jobOwner[_fromJob];\\n    delete jobPendingOwner[_fromJob];\\n    delete _migrationCreatedAt[_fromJob][_toJob];\\n    delete pendingJobMigrations[_fromJob];\\n\\n    emit JobMigrationSuccessful(_fromJob, _toJob);\\n  }\\n}\\n\",\"keccak256\":\"0xd46c3c9ce970098d8d75f11966894a341824aceb40583fcfbbc0ebda93d869f9\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nabstract contract Keep3rJobOwnership is IKeep3rJobOwnership {\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  mapping(address => address) public override jobPendingOwner;\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) {\\n    jobPendingOwner[_job] = _newOwner;\\n    emit JobOwnershipChange(_job, jobOwner[_job], _newOwner);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobOwnership\\n  function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) {\\n    address _previousOwner = jobOwner[_job];\\n\\n    jobOwner[_job] = jobPendingOwner[_job];\\n    delete jobPendingOwner[_job];\\n\\n    emit JobOwnershipAssent(msg.sender, _job, _previousOwner);\\n  }\\n\\n  modifier onlyJobOwner(address _job) {\\n    if (msg.sender != jobOwner[_job]) revert OnlyJobOwner();\\n    _;\\n  }\\n\\n  modifier onlyPendingJobOwner(address _job) {\\n    if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0xa837590ade9cd5d25690e3f2d8b9a63e7202f7179b32e42eab4fa4c4324b9728\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rJobMigration.sol';\\nimport '../../../interfaces/IKeep3rHelper.sol';\\nimport '../../../interfaces/peripherals/IKeep3rJobs.sol';\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\n\\nabstract contract Keep3rJobWorkable is IKeep3rJobWorkable, Keep3rJobMigration {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  uint256 internal _initialGas;\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function isKeeper(address _keeper) external override returns (bool _isKeeper) {\\n    _initialGas = _getGasLeft();\\n    if (_keepers.contains(_keeper)) {\\n      emit KeeperValidation(_initialGas);\\n      return true;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) public override returns (bool _isBondedKeeper) {\\n    _initialGas = _getGasLeft();\\n    if (\\n      _keepers.contains(_keeper) &&\\n      bonds[_keeper][_bond] >= _minBond &&\\n      workCompleted[_keeper] >= _earned &&\\n      block.timestamp - firstSeen[_keeper] >= _age\\n    ) {\\n      emit KeeperValidation(_initialGas);\\n      return true;\\n    }\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function worked(address _keeper) external virtual override {\\n    address _job = msg.sender;\\n    if (disputes[_job]) revert JobDisputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n\\n    if (_updateJobCreditsIfNeeded(_job)) {\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    (uint256 _boost, uint256 _oneEthQuote, uint256 _extraGas) = IKeep3rHelper(keep3rHelper).getPaymentParams(bonds[_keeper][keep3rV1]);\\n\\n    uint256 _gasLeft = _getGasLeft();\\n    uint256 _payment = _calculatePayment(_gasLeft, _extraGas, _oneEthQuote, _boost);\\n\\n    if (_payment > _jobLiquidityCredits[_job]) {\\n      _rewardJobCredits(_job);\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n\\n      _gasLeft = _getGasLeft();\\n      _payment = _calculatePayment(_gasLeft, _extraGas, _oneEthQuote, _boost);\\n    }\\n\\n    _bondedPayment(_job, _keeper, _payment);\\n    emit KeeperWork(keep3rV1, _job, _keeper, _payment, _gasLeft);\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function bondedPayment(address _keeper, uint256 _payment) public override {\\n    address _job = msg.sender;\\n\\n    if (disputes[_job]) revert JobDisputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n\\n    if (_updateJobCreditsIfNeeded(_job)) {\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    if (_payment > _jobLiquidityCredits[_job]) {\\n      _rewardJobCredits(_job);\\n      emit LiquidityCreditsReward(_job, rewardedAt[_job], _jobLiquidityCredits[_job], _jobPeriodCredits[_job]);\\n    }\\n\\n    _bondedPayment(_job, _keeper, _payment);\\n    emit KeeperWork(keep3rV1, _job, _keeper, _payment, _getGasLeft());\\n  }\\n\\n  /// @inheritdoc IKeep3rJobWorkable\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external override {\\n    address _job = msg.sender;\\n\\n    if (disputes[_job]) revert JobDisputed();\\n    if (disputes[_keeper]) revert Disputed();\\n    if (!_jobs.contains(_job)) revert JobUnapproved();\\n    if (jobTokenCredits[_job][_token] < _amount) revert InsufficientFunds();\\n    jobTokenCredits[_job][_token] -= _amount;\\n    IERC20(_token).safeTransfer(_keeper, _amount);\\n    emit KeeperWork(_token, _job, _keeper, _amount, _getGasLeft());\\n  }\\n\\n  function _bondedPayment(\\n    address _job,\\n    address _keeper,\\n    uint256 _payment\\n  ) internal {\\n    if (_payment > _jobLiquidityCredits[_job]) revert InsufficientFunds();\\n\\n    workedAt[_job] = block.timestamp;\\n    _jobLiquidityCredits[_job] -= _payment;\\n    bonds[_keeper][keep3rV1] += _payment;\\n    workCompleted[_keeper] += _payment;\\n  }\\n\\n  /// @notice Calculate amount to be payed in KP3R, taking into account multiple parameters\\n  /// @param _gasLeft Amount of gas left after working the job\\n  /// @param _extraGas Amount of expected unaccounted gas\\n  /// @param _oneEthQuote Amount of KP3R equivalent to 1 ETH\\n  /// @param _boost Reward given to the keeper for having bonded KP3R tokens\\n  /// @return _payment Amount to be payed in KP3R tokens\\n  function _calculatePayment(\\n    uint256 _gasLeft,\\n    uint256 _extraGas,\\n    uint256 _oneEthQuote,\\n    uint256 _boost\\n  ) internal view returns (uint256 _payment) {\\n    uint256 _accountedGas = _initialGas - _gasLeft + _extraGas;\\n    _payment = (((_accountedGas * _boost) / _BASE) * _oneEthQuote) / 1 ether;\\n  }\\n\\n  /// @notice Return the gas left and add 1/64 in order to match real gas left at first level of depth (EIP-150)\\n  /// @return _gasLeft Amount of gas left recording taking into account EIP-150\\n  function _getGasLeft() internal view returns (uint256 _gasLeft) {\\n    _gasLeft = (gasleft() * 64) / 63;\\n  }\\n}\\n\",\"keccak256\":\"0x8f67c23ec95bbce4501ccb0667109a00eaab9413514c58ad62c8e03ba1ea077a\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../contracts/peripherals/jobs/Keep3rJobWorkable.sol';\\n\\ncontract Keep3rJobWorkableForTest is Keep3rJobWorkable {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) Keep3rParameters(_keep3rHelper, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\\n\\n  function setJob(address _job) external {\\n    _jobs.add(_job);\\n  }\\n\\n  function setKeeper(address _keeper) external {\\n    _keepers.add(_keeper);\\n  }\\n\\n  function setApprovedLiquidity(address _liquidity) external {\\n    _approvedLiquidities.add(_liquidity);\\n  }\\n\\n  function setJobLiquidity(address _job, address _liquidity) external {\\n    _jobLiquidities[_job].add(_liquidity);\\n  }\\n\\n  function viewJobLiquidityCredits(address _job) external view returns (uint256) {\\n    return _jobLiquidityCredits[_job];\\n  }\\n\\n  function viewJobPeriodCredits(address _job) external view returns (uint256) {\\n    return _jobPeriodCredits[_job];\\n  }\\n\\n  function viewTickCache(address _liquidity) external view returns (TickCache memory _tickCache) {\\n    _tickCache = _tick[_liquidity];\\n  }\\n\\n  function viewGas() external view returns (uint256) {\\n    return _initialGas;\\n  }\\n\\n  receive() external payable {}\\n}\\n\",\"keccak256\":\"0xdcc1bcc5c9982d7b0ff760ff05409640538a1199b29310f300666c563708fa04\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 8303,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "jobOwner",
                "offset": 0,
                "slot": "1",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8309,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "jobPendingOwner",
                "offset": 0,
                "slot": "2",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5368,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_keepers",
                "offset": 0,
                "slot": "3",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "workCompleted",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "firstSeen",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "disputes",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "bonds",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "19",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "hasBonded",
                "offset": 0,
                "slot": "20",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_jobs",
                "offset": 0,
                "slot": "21",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "governance",
                "offset": 0,
                "slot": "23",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "24",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "slashers",
                "offset": 0,
                "slot": "25",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "disputers",
                "offset": 0,
                "slot": "26",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "29",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "30",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "bondTime",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "unbondTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "35",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "fee",
                "offset": 0,
                "slot": "36",
                "type": "t_uint256"
              },
              {
                "astId": 6297,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "jobTokenCreditsAddedAt",
                "offset": 0,
                "slot": "37",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6540,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_approvedLiquidities",
                "offset": 0,
                "slot": "38",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 6548,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "liquidityAmount",
                "offset": 0,
                "slot": "40",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 6554,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "rewardedAt",
                "offset": 0,
                "slot": "41",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6560,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "workedAt",
                "offset": 0,
                "slot": "42",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 6566,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_tick",
                "offset": 0,
                "slot": "43",
                "type": "t_mapping(t_address,t_struct(TickCache)13178_storage)"
              },
              {
                "astId": 8024,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "pendingJobMigrations",
                "offset": 0,
                "slot": "44",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 8030,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_migrationCreatedAt",
                "offset": 0,
                "slot": "45",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 8427,
                "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                "label": "_initialGas",
                "offset": 0,
                "slot": "46",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_int56": {
                "encoding": "inplace",
                "label": "int56",
                "numberOfBytes": "7"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_struct(TickCache)13178_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)",
                "numberOfBytes": "32",
                "value": "t_struct(TickCache)13178_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(TickCache)13178_storage": {
                "encoding": "inplace",
                "label": "struct IKeep3rJobFundableLiquidity.TickCache",
                "members": [
                  {
                    "astId": 13173,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                    "label": "current",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13175,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                    "label": "difference",
                    "offset": 7,
                    "slot": "0",
                    "type": "t_int56"
                  },
                  {
                    "astId": 13177,
                    "contract": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol:Keep3rJobWorkableForTest",
                    "label": "period",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_uint256"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "InsufficientFunds()": [
                {
                  "notice": "Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobMigrationImpossible()": [
                {
                  "notice": "Throws when the address of the job that requests to migrate wants to migrate to its same address"
                }
              ],
              "JobMigrationLocked()": [
                {
                  "notice": "Throws when cooldown between migrations has not yet passed"
                }
              ],
              "JobMigrationUnavailable()": [
                {
                  "notice": "Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobUnapproved()": [
                {
                  "notice": "Throws if the address claiming to be a job is not in the list of approved jobs"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobMigrationRequested(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#migrateJob function is called"
              },
              "JobMigrationSuccessful(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#acceptJobMigration function is called"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "KeeperValidation(uint256)": {
                "notice": "Emitted when a keeper is validated before a job"
              },
              "KeeperWork(address,address,address,uint256,uint256)": {
                "notice": "Emitted when a keeper works a job"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "acceptJobMigration(address,address)": {
                "notice": "Completes the migration process for a job"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bondedPayment(address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "directTokenPayment(address,address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "notice": "Confirms if the current keeper is registered and has a minimum bond of any asset."
              },
              "isKeeper(address)": {
                "notice": "Confirms if the current keeper is registered"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "migrateJob(address,address)": {
                "notice": "Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingJobMigrations(address)": {
                "notice": "Maps the jobs that have requested a migration to the address they have requested to migrate to"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              },
              "worked(address)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol": {
        "Keep3rKeeperDisputableForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kph",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "AlreadyAJob",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "AlreadyDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Activation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "Dispute",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "KeeperRevoke",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "KeeperSlash",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_resolver",
                  "type": "address"
                }
              ],
              "name": "Resolve",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Withdrawal",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "activate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "bond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonded",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_bondAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_unbondAmount",
                  "type": "uint256"
                }
              ],
              "name": "internalSlash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_address",
                  "type": "address"
                }
              ],
              "name": "isKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "revoke",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "setKeeper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonded",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_bondAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_unbondAmount",
                  "type": "uint256"
                }
              ],
              "name": "slash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "activate(address)": {
                "params": {
                  "_bonding": "The asset being activated as bond collateral"
                }
              },
              "bond(address,uint256)": {
                "params": {
                  "_amount": "The amount of bonding asset being bonded",
                  "_bonding": "The asset being bonded"
                }
              },
              "dispute(address)": {
                "params": {
                  "_jobOrKeeper": "The address in dispute"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "resolve(address)": {
                "params": {
                  "_jobOrKeeper": "The address cleared"
                }
              },
              "revoke(address)": {
                "params": {
                  "_keeper": "The address being slashed"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "slash(address,address,uint256,uint256)": {
                "params": {
                  "_bondAmount": "The bonded amount being slashed",
                  "_bonded": "The asset being slashed",
                  "_keeper": "The address being slashed",
                  "_unbondAmount": "The pending unbond amount being slashed"
                }
              },
              "unbond(address,uint256)": {
                "params": {
                  "_amount": "Allows for partial unbonding",
                  "_bonding": "The asset being unbonded"
                }
              },
              "withdraw(address)": {
                "params": {
                  "_bonding": "The asset to withdraw from the bonding pool"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_11284": {
                  "entryPoint": null,
                  "id": 11284,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_18": {
                  "entryPoint": null,
                  "id": 18,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5689": {
                  "entryPoint": null,
                  "id": 5689,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 423,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory": {
                  "entryPoint": 452,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 545,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1152:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "328:332:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "375:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "384:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "387:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "377:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "377:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "377:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "349:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "358:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "345:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "345:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "370:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "341:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "341:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "338:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "400:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "440:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "410:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "410:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "400:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "459:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "503:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "514:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "499:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "499:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "469:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "469:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "459:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "527:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "571:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "582:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "567:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "567:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "537:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "537:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "527:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "595:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "639:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "650:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "635:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "635:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "605:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "605:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "595:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "270:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "281:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "293:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "301:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "309:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "317:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:464:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "743:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "789:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "798:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "801:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "791:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "791:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "791:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "764:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "773:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "760:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "760:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "785:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "756:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "756:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "753:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "814:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "833:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "827:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "827:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "818:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "896:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "905:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "908:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "898:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "898:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "898:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "865:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "886:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "879:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "879:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "872:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "872:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "862:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "855:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "855:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "852:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "921:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "931:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "921:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "709:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "720:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "732:6:84",
                            "type": ""
                          }
                        ],
                        "src": "665:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1048:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1058:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1070:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1081:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1066:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1066:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1058:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1100:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1115:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1131:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1136:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1127:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1127:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1140:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1123:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1123:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1111:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1111:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1093:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1093:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1093:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1017:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1028:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1039:4:84",
                            "type": ""
                          }
                        ],
                        "src": "947:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526203f480601d5562127500601e556729a2241af62c0000601f5562069780602055622cd300602155601e6022553480156200003e57600080fd5b506040516200275d3803806200275d8339810160408190526200006191620001c4565b6001600055838383833380806200008a5760405162b293ed60e81b815260040160405180910390fd5b601580546001600160a01b03199081166001600160a01b0393841617909155601b80548216888416178155601980548316888516179055601a80548316878516179055601c8054831686851690811782556000818152600c602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200013557600080fd5b505afa1580156200014a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000170919062000221565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055506200024c95505050505050565b80516001600160a01b0381168114620001bf57600080fd5b919050565b60008060008060808587031215620001db57600080fd5b620001e685620001a7565b9350620001f660208601620001a7565b92506200020660408601620001a7565b91506200021660608601620001a7565b905092959194509250565b6000602082840312156200023457600080fd5b815180151581146200024557600080fd5b9392505050565b612501806200025c6000396000f3fe608060405234801561001057600080fd5b50600436106102975760003560e01c80638fe204dd11610168578063c20297f0116100d4578063c20297f01461063c578063c7ae40d01461064f578063cb4be2bb14610662578063cb54694d14610675578063cd22af1b14610688578063ddca3f43146106b3578063e326ac43146106bc578063ebbb6194146106dc578063ec00cdfc146106ef578063f0f346b914610702578063f11a1d1a14610715578063f39c38a014610728578063f75f9f7b1461073b578063fc253d2b1461074e57600080fd5b80638fe204dd14610522578063951dc22c146105355780639d5c33d81461053d578063a39744b514610550578063a515366a1461057b578063a5d059ca1461058e578063a7d2e784146105a1578063aac6aa9c146105aa578063ab033ea9146105bd578063b0103b1a146105d0578063b2392233146105f3578063b7e7734014610606578063b87fcbff1461061957600080fd5b80635ebe23f0116102075780635ebe23f014610437578063633fb68f1461044057806368a9f19c1461044957806369fe0e2d1461045c5780636ba42aaa1461046f57806372da828a14610482578063748747e61461049557806374a8f103146104a857806375b9a542146104bb578063768b5d90146104ce5780637b40c913146104d75780637c8fce23146104ea5780638cb22b76146104ff57600080fd5b806307b435c21461029c57806315006b82146102da578063160e1e3114610305578063168f92e71461031a5780631b44555e146103455780631c5a9d9c146103655780631ef94b911461037857806321040b0114610398578063238efcbc146103c3578063274a8db4146103cb57806351cff8d9146103fe57806355ea6c47146104115780635aa6e67514610424575b600080fd5b6102c76102aa36600461223b565b601060209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6102c76102e836600461223b565b600e60209081526000928352604080842090915290825290205481565b610318610313366004612220565b610757565b005b6102c761032836600461223b565b600760209081526000928352604080842090915290825290205481565b6102c7610353366004612220565b60036020526000908152604090205481565b610318610373366004612220565b6108bd565b60195461038b906001600160a01b031681565b6040516102d1919061234a565b6102c76103a636600461223b565b601160209081526000928352604080842090915290825290205481565b6103186109f6565b6103ee6103d9366004612220565b60186020526000908152604090205460ff1681565b60405190151581526020016102d1565b61031861040c366004612220565b610a82565b61031861041f366004612220565b610c8b565b60155461038b906001600160a01b031681565b6102c7601d5481565b6102c7601f5481565b610318610457366004612220565b610d3f565b61031861046a3660046122fc565b610df7565b6103ee61047d366004612220565b610e57565b610318610490366004612220565b610e6a565b6103186104a3366004612220565b610f07565b6103186104b6366004612220565b610f16565b6103186104c936600461226e565b611011565b6102c760205481565b601c5461038b906001600160a01b031681565b6104f2611023565b6040516102d19190612377565b6103ee61050d366004612220565b60126020526000908152604090205460ff1681565b6103186105303660046122fc565b611034565b6104f2611094565b61031861054b366004612220565b6110a0565b6102c761055e36600461223b565b600660209081526000928352604080842090915290825290205481565b6103186105893660046122b0565b611158565b61031861059c3660046122b0565b6113b9565b6102c7601e5481565b6103186105b8366004612220565b61148c565b6103186105cb366004612220565b611540565b6103ee6105de366004612220565b60056020526000908152604090205460ff1681565b6103186106013660046122fc565b6115b6565b6103186106143660046122fc565b611616565b6103ee610627366004612220565b60176020526000908152604090205460ff1681565b61031861064a36600461226e565b611676565b601a5461038b906001600160a01b031681565b610318610670366004612220565b611738565b6103186106833660046122fc565b6117d5565b6102c761069636600461223b565b600f60209081526000928352604080842090915290825290205481565b6102c760225481565b6102c76106ca366004612220565b60046020526000908152604090205481565b6103186106ea3660046122fc565b611857565b6103186106fd366004612220565b6118b7565b610318610710366004612220565b611954565b601b5461038b906001600160a01b031681565b60165461038b906001600160a01b031681565b610318610749366004612220565b611a08565b6102c760215481565b6015546001600160a01b03163314610782576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166107a95760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b038084166001600160a01b031992831681179093556000838152600c6020526040908190208054909316909317909155601b54915163696a437b60e01b815291169063696a437b9061080a90849060040161234a565b60206040518083038186803b15801561082257600080fd5b505afa158015610836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085a91906122da565b6001600160a01b0382166000908152600d602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa906108b290839061234a565b60405180910390a150565b3360009081526005602052604090205460ff16156108ee576040516362e6201d60e01b815260040160405180910390fd5b336000908152600f602090815260408083206001600160a01b038516845290915290205461092f57604051636258f48160e01b815260040160405180910390fd5b336000908152600f602090815260408083206001600160a01b0385168452909152902054421161097257604051630fd0eeef60e11b815260040160405180910390fd5b336000818152600f602090815260408083206001600160a01b03861684529091528120819055906109a39083611ac0565b9050816001600160a01b0316336001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a75836040516109ea91815260200190565b60405180910390a35050565b6016546001600160a01b03163314610a2157604051637ef5703160e11b815260040160405180910390fd5b60168054601580546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b691610a789161234a565b60405180910390a1565b60026000541415610aae5760405162461bcd60e51b8152600401610aa5906123f7565b60405180910390fd5b600260009081553381526011602090815260408083206001600160a01b0385168452909152902054610af35760405163184c088160e21b815260040160405180910390fd5b3360009081526010602090815260408083206001600160a01b03851684529091529020544211610b36576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526005602052604090205460ff1615610b67576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b0385811680865291909352922054601954909291161415610bfa57601a5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b158015610be157600080fd5b505af1158015610bf5573d6000803e3d6000fd5b505050505b3360008181526011602090815260408083206001600160a01b03871680855290835281842084905584845260108352818420818552909252822091909155610c429183611bd7565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b3360009081526018602052604090205460ff16610cbb57604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff16610cf4576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260056020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b6015546001600160a01b03163314610d6a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff1615610da45760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b906108b290839061234a565b6015546001600160a01b03163314610e22576040516354348f0360e01b815260040160405180910390fd5b60228190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d906020016108b2565b6000610e64600183611c32565b92915050565b6015546001600160a01b03163314610e95576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610ebc5760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b0906108b290839061234a565b610f12600182611c57565b5050565b3360009081526017602052604090205460ff16610f4657604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff16610f7f576040516310cec38560e21b815260040160405180910390fd5b610f8a600182611c6c565b506019546001600160a01b03808316600081815260066020908152604080832094909516808352938152848220549282526011815284822084835290529290922054610fd892849291611c81565b60405133906001600160a01b038316907f038a17b9b553c0c3fc2ed14b957a5d8420a1666fd2efe5c1b3fe5f23eea61bb390600090a350565b61101d84848484611c81565b50505050565b606061102f6013611dd7565b905090565b6015546001600160a01b0316331461105f576040516354348f0360e01b815260040160405180910390fd5b601e8190556040518181527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee2906020016108b2565b606061102f6001611dd7565b6015546001600160a01b031633146110cb576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff16156111055760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f906108b290839061234a565b6002600054141561117b5760405162461bcd60e51b8152600401610aa5906123f7565b600260009081553381526005602052604090205460ff16156111b0576040516362e6201d60e01b815260040160405180910390fd5b6111bb601333611c32565b156111d95760405163d7229c4360e01b815260040160405180910390fd5b601d546111e6904261242e565b336000908152600f602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81529091906370a082319061123190309060040161234a565b60206040518083038186803b15801561124957600080fd5b505afa15801561125d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112819190612315565b90506112986001600160a01b038416333085611de4565b6040516370a0823160e01b815281906001600160a01b038516906370a08231906112c690309060040161234a565b60206040518083038186803b1580156112de57600080fd5b505afa1580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113169190612315565b6113209190612446565b336000908152601260209081526040808320805460ff19166001179055600e82528083206001600160a01b038816845290915281208054929450849290919061136a90849061242e565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b601e546113c6904261242e565b3360008181526010602090815260408083206001600160a01b03881680855290835281842095909555928252600681528282209382529290925281208054839290611412908490612446565b90915550503360009081526011602090815260408083206001600160a01b03861684529091528120805483929061144a90849061242e565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de906020016109ea565b6015546001600160a01b031633146114b7576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff166114f0576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d025906108b290839061234a565b6015546001600160a01b0316331461156b576040516354348f0360e01b815260040160405180910390fd5b601680546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906108b290839061234a565b6015546001600160a01b031633146115e1576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb69906020016108b2565b6015546001600160a01b03163314611641576040516354348f0360e01b815260040160405180910390fd5b601d8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b43906020016108b2565b3360009081526017602052604090205460ff166116a657604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03841660009081526005602052604090205460ff166116df576040516310cec38560e21b815260040160405180910390fd5b6116eb84848484611c81565b336001600160a01b0385167f10a73de7ab6e9023aa6e2bc23f7abf4dcef591487e7e55f44c00e34fe60d56db611721848661242e565b60405190815260200160405180910390a350505050565b6015546001600160a01b03163314611763576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811661178a5760405163d92e233d60e01b815260040160405180910390fd5b601a80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae250906108b290839061234a565b6015546001600160a01b03163314611800576040516354348f0360e01b815260040160405180910390fd5b6201518081101561182457604051633f384aad60e21b815260040160405180910390fd5b60208181556040518281527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d991016108b2565b6015546001600160a01b03163314611882576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e7906020016108b2565b6015546001600160a01b031633146118e2576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166119095760405163d92e233d60e01b815260040160405180910390fd5b601980546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf906108b290839061234a565b6015546001600160a01b0316331461197f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff166119b857604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e906108b290839061234a565b3360009081526018602052604090205460ff16611a3857604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615611a72576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260056020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b6001600160a01b038216600090815260046020526040812054611af9576001600160a01b03831660009081526004602052604090204290555b611b04600184611c57565b50506001600160a01b038083166000818152600e6020908152604080832094861680845294825280832080549084905593835260068252808320948352939052918220805491928392611b5890849061242e565b90915550506019546001600160a01b0383811691161415610e6457601954604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b158015611bb957600080fd5b505af1158015611bcd573d6000803e3d6000fd5b5050505092915050565b611c2d8363a9059cbb60e01b8484604051602401611bf692919061235e565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611e1c565b505050565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000611c50836001600160a01b038416611eee565b6000611c50836001600160a01b038416611f3d565b6019546001600160a01b03848116911614611d59576015546001600160a01b038085169163a9059cbb9116611cb6848661242e565b6040518363ffffffff1660e01b8152600401611cd392919061235e565b602060405180830381600087803b158015611ced57600080fd5b505af1925050508015611d1d575060408051601f3d908101601f19168201909252611d1a918101906122da565b60015b611d57573d808015611d4b576040519150601f19603f3d011682016040523d82523d6000602084013e611d50565b606091505b5050611d59565b505b6001600160a01b03808516600090815260066020908152604080832093871683529290529081208054849290611d90908490612446565b90915550506001600160a01b03808516600090815260116020908152604080832093871683529290529081208054839290611dcc908490612446565b909155505050505050565b60606000611c5083612030565b6040516001600160a01b038085166024830152831660448201526064810182905261101d9085906323b872dd60e01b90608401611bf6565b6000611e71826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661208c9092919063ffffffff16565b805190915015611c2d5780806020019051810190611e8f91906122da565b611c2d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610aa5565b6000818152600183016020526040812054611f3557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e64565b506000610e64565b60008181526001830160205260408120548015612026576000611f61600183612446565b8554909150600090611f7590600190612446565b9050818114611fda576000866000018281548110611f9557611f956124b5565b9060005260206000200154905080876000018481548110611fb857611fb86124b5565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611feb57611feb61249f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610e64565b6000915050610e64565b60608160000180548060200260200160405190810160405280929190818152602001828054801561208057602002820191906000526020600020905b81548152602001906001019080831161206c575b50505050509050919050565b606061209b84846000856120a3565b949350505050565b6060824710156121045760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610aa5565b843b6121525760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aa5565b600080866001600160a01b0316858760405161216e919061232e565b60006040518083038185875af1925050503d80600081146121ab576040519150601f19603f3d011682016040523d82523d6000602084013e6121b0565b606091505b50915091506121c08282866121cb565b979650505050505050565b606083156121da575081611c50565b8251156121ea5782518084602001fd5b8160405162461bcd60e51b8152600401610aa591906123c4565b80356001600160a01b038116811461221b57600080fd5b919050565b60006020828403121561223257600080fd5b611c5082612204565b6000806040838503121561224e57600080fd5b61225783612204565b915061226560208401612204565b90509250929050565b6000806000806080858703121561228457600080fd5b61228d85612204565b935061229b60208601612204565b93969395505050506040820135916060013590565b600080604083850312156122c357600080fd5b6122cc83612204565b946020939093013593505050565b6000602082840312156122ec57600080fd5b81518015158114611c5057600080fd5b60006020828403121561230e57600080fd5b5035919050565b60006020828403121561232757600080fd5b5051919050565b6000825161234081846020870161245d565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156123b85783516001600160a01b031683529284019291840191600101612393565b50909695505050505050565b60208152600082518060208401526123e381604085016020870161245d565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561244157612441612489565b500190565b60008282101561245857612458612489565b500390565b60005b83811015612478578181015183820152602001612460565b8381111561101d5750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea26469706673582212203f7865a1ea27897ef10d97169338dc1dd5de459c98e175ddd105a80b0444ad0064736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x3F480 PUSH1 0x1D SSTORE PUSH3 0x127500 PUSH1 0x1E SSTORE PUSH8 0x29A2241AF62C0000 PUSH1 0x1F SSTORE PUSH3 0x69780 PUSH1 0x20 SSTORE PUSH3 0x2CD300 PUSH1 0x21 SSTORE PUSH1 0x1E PUSH1 0x22 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x275D CODESIZE SUB DUP1 PUSH3 0x275D DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x61 SWAP2 PUSH3 0x1C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE DUP4 DUP4 DUP4 DUP4 CALLER DUP1 DUP1 PUSH3 0x8A JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1B DUP1 SLOAD DUP3 AND DUP9 DUP5 AND OR DUP2 SSTORE PUSH1 0x19 DUP1 SLOAD DUP4 AND DUP9 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1A DUP1 SLOAD DUP4 AND DUP8 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1C DUP1 SLOAD DUP4 AND DUP7 DUP6 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP6 AND SWAP1 SWAP2 OR SWAP1 SWAP4 SSTORE SWAP1 SLOAD SWAP1 SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x696A437B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x14A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x170 SWAP2 SWAP1 PUSH3 0x221 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x24C SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E6 DUP6 PUSH3 0x1A7 JUMP JUMPDEST SWAP4 POP PUSH3 0x1F6 PUSH1 0x20 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP3 POP PUSH3 0x206 PUSH1 0x40 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP2 POP PUSH3 0x216 PUSH1 0x60 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2501 DUP1 PUSH3 0x25C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x297 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8FE204DD GT PUSH2 0x168 JUMPI DUP1 PUSH4 0xC20297F0 GT PUSH2 0xD4 JUMPI DUP1 PUSH4 0xC20297F0 EQ PUSH2 0x63C JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x64F JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x662 JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x675 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x688 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x6B3 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x6BC JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0x6DC JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0x6EF JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x702 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0x715 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x728 JUMPI DUP1 PUSH4 0xF75F9F7B EQ PUSH2 0x73B JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0x74E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x535 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x53D JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x550 JUMPI DUP1 PUSH4 0xA515366A EQ PUSH2 0x57B JUMPI DUP1 PUSH4 0xA5D059CA EQ PUSH2 0x58E JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x5A1 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x5AA JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x5BD JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x5D0 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x5F3 JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x606 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x619 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5EBE23F0 GT PUSH2 0x207 JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x437 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x440 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x449 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0x6BA42AAA EQ PUSH2 0x46F JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x482 JUMPI DUP1 PUSH4 0x748747E6 EQ PUSH2 0x495 JUMPI DUP1 PUSH4 0x74A8F103 EQ PUSH2 0x4A8 JUMPI DUP1 PUSH4 0x75B9A542 EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x4CE JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x4EA JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x4FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x29C JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x31A JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x345 JUMPI DUP1 PUSH4 0x1C5A9D9C EQ PUSH2 0x365 JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x378 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x398 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x3C3 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x3FE JUMPI DUP1 PUSH4 0x55EA6C47 EQ PUSH2 0x411 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x424 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C7 PUSH2 0x2AA CALLDATASIZE PUSH1 0x4 PUSH2 0x223B JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2C7 PUSH2 0x2E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x223B JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x313 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x757 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2C7 PUSH2 0x328 CALLDATASIZE PUSH1 0x4 PUSH2 0x223B JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2C7 PUSH2 0x353 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x373 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x8BD JUMP JUMPDEST PUSH1 0x19 SLOAD PUSH2 0x38B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2D1 SWAP2 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH2 0x2C7 PUSH2 0x3A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x223B JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x9F6 JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x3D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2D1 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x40C CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xA82 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x41F CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xC8B JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH2 0x38B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2C7 PUSH1 0x1D SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2C7 PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x457 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xD3F JUMP JUMPDEST PUSH2 0x318 PUSH2 0x46A CALLDATASIZE PUSH1 0x4 PUSH2 0x22FC JUMP JUMPDEST PUSH2 0xDF7 JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x47D CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xE57 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x490 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xE6A JUMP JUMPDEST PUSH2 0x318 PUSH2 0x4A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xF07 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x4B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xF16 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x4C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x226E JUMP JUMPDEST PUSH2 0x1011 JUMP JUMPDEST PUSH2 0x2C7 PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x38B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x4F2 PUSH2 0x1023 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2D1 SWAP2 SWAP1 PUSH2 0x2377 JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x50D CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x530 CALLDATASIZE PUSH1 0x4 PUSH2 0x22FC JUMP JUMPDEST PUSH2 0x1034 JUMP JUMPDEST PUSH2 0x4F2 PUSH2 0x1094 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x54B CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x10A0 JUMP JUMPDEST PUSH2 0x2C7 PUSH2 0x55E CALLDATASIZE PUSH1 0x4 PUSH2 0x223B JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x589 CALLDATASIZE PUSH1 0x4 PUSH2 0x22B0 JUMP JUMPDEST PUSH2 0x1158 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x59C CALLDATASIZE PUSH1 0x4 PUSH2 0x22B0 JUMP JUMPDEST PUSH2 0x13B9 JUMP JUMPDEST PUSH2 0x2C7 PUSH1 0x1E SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x5B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x148C JUMP JUMPDEST PUSH2 0x318 PUSH2 0x5CB CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x1540 JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x5DE CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x601 CALLDATASIZE PUSH1 0x4 PUSH2 0x22FC JUMP JUMPDEST PUSH2 0x15B6 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x614 CALLDATASIZE PUSH1 0x4 PUSH2 0x22FC JUMP JUMPDEST PUSH2 0x1616 JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x627 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x64A CALLDATASIZE PUSH1 0x4 PUSH2 0x226E JUMP JUMPDEST PUSH2 0x1676 JUMP JUMPDEST PUSH1 0x1A SLOAD PUSH2 0x38B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x670 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x1738 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x683 CALLDATASIZE PUSH1 0x4 PUSH2 0x22FC JUMP JUMPDEST PUSH2 0x17D5 JUMP JUMPDEST PUSH2 0x2C7 PUSH2 0x696 CALLDATASIZE PUSH1 0x4 PUSH2 0x223B JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2C7 PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2C7 PUSH2 0x6CA CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x6EA CALLDATASIZE PUSH1 0x4 PUSH2 0x22FC JUMP JUMPDEST PUSH2 0x1857 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x6FD CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x710 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x1954 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x38B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH2 0x38B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x749 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x1A08 JUMP JUMPDEST PUSH2 0x2C7 PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x782 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1B SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x80A SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x234A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x836 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x85A SWAP2 SWAP1 PUSH2 0x22DA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x8EE JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x92F JUMPI PUSH1 0x40 MLOAD PUSH4 0x6258F481 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x972 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFD0EEEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP2 SWAP1 SSTORE SWAP1 PUSH2 0x9A3 SWAP1 DUP4 PUSH2 0x1AC0 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3673530133B6DA67E9854F605B0CFA7BB9798CD33C18036DFC10D8DA7C4D4A75 DUP4 PUSH1 0x40 MLOAD PUSH2 0x9EA SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA21 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0xA78 SWAP2 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0xAAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAA5 SWAP1 PUSH2 0x23F7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xAF3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0xB36 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB67 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP1 DUP7 MSTORE SWAP2 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SLOAD PUSH1 0x19 SLOAD SWAP1 SWAP3 SWAP2 AND EQ ISZERO PUSH2 0xBFA JUMPI PUSH1 0x1A SLOAD PUSH1 0x40 MLOAD PUSH4 0x140E25AD PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xA0712D68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBF5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x10 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP2 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xC42 SWAP2 DUP4 PUSH2 0x1BD7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x2717EAD6B9200DD235AAD468C9809EA400FE33AC69B5BFAA6D3E90FC922B6398 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xCBB JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xCF4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0xE02B2375D8FB4AEF3E5BC5D53BFFCF70B6F185C5C93E69DCBE8B6CFC58E837E2 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xDA4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE22 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x8B2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE64 PUSH1 0x1 DUP4 PUSH2 0x1C32 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE95 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xEBC JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH2 0xF12 PUSH1 0x1 DUP3 PUSH2 0x1C57 JUMP JUMPDEST POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xF46 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xF7F JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF8A PUSH1 0x1 DUP3 PUSH2 0x1C6C JUMP JUMPDEST POP PUSH1 0x19 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP6 AND DUP1 DUP4 MSTORE SWAP4 DUP2 MSTORE DUP5 DUP3 KECCAK256 SLOAD SWAP3 DUP3 MSTORE PUSH1 0x11 DUP2 MSTORE DUP5 DUP3 KECCAK256 DUP5 DUP4 MSTORE SWAP1 MSTORE SWAP3 SWAP1 SWAP3 KECCAK256 SLOAD PUSH2 0xFD8 SWAP3 DUP5 SWAP3 SWAP2 PUSH2 0x1C81 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x38A17B9B553C0C3FC2ED14B957A5D8420A1666FD2EFE5C1B3FE5F23EEA61BB3 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP JUMP JUMPDEST PUSH2 0x101D DUP5 DUP5 DUP5 DUP5 PUSH2 0x1C81 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x102F PUSH1 0x13 PUSH2 0x1DD7 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x105F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP1 PUSH1 0x20 ADD PUSH2 0x8B2 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x102F PUSH1 0x1 PUSH2 0x1DD7 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1105 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x117B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAA5 SWAP1 PUSH2 0x23F7 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x11B0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x11BB PUSH1 0x13 CALLER PUSH2 0x1C32 JUMP JUMPDEST ISZERO PUSH2 0x11D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD7229C43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x11E6 SWAP1 TIMESTAMP PUSH2 0x242E JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1231 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x234A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x125D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1281 SWAP2 SWAP1 PUSH2 0x2315 JUMP JUMPDEST SWAP1 POP PUSH2 0x1298 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x1DE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x12C6 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x234A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1316 SWAP2 SWAP1 PUSH2 0x2315 JUMP JUMPDEST PUSH2 0x1320 SWAP2 SWAP1 PUSH2 0x2446 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0xE DUP3 MSTORE DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP3 SWAP5 POP DUP5 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x136A SWAP1 DUP5 SWAP1 PUSH2 0x242E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 CALLER SWAP1 PUSH32 0xA7E66869262026842E8D81F5E6806CDC8D846E27C824E2E22F4FE51442771B34 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x13C6 SWAP1 TIMESTAMP PUSH2 0x242E JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x6 DUP2 MSTORE DUP3 DUP3 KECCAK256 SWAP4 DUP3 MSTORE SWAP3 SWAP1 SWAP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1412 SWAP1 DUP5 SWAP1 PUSH2 0x2446 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x144A SWAP1 DUP5 SWAP1 PUSH2 0x242E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE SWAP1 PUSH1 0x20 ADD PUSH2 0x9EA JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14B7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x14F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x156B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x15E1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x8B2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1641 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x8B2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x16A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x16DF JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x16EB DUP5 DUP5 DUP5 DUP5 PUSH2 0x1C81 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH32 0x10A73DE7AB6E9023AA6E2BC23F7ABF4DCEF591487E7E55F44C00E34FE60D56DB PUSH2 0x1721 DUP5 DUP7 PUSH2 0x242E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1763 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x178A JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1800 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x1824 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP2 ADD PUSH2 0x8B2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1882 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x8B2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x18E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1909 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x19 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x197F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x19B8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1A38 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1A72 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4EE891B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x70125A1C0F5202217AAE14EC399ABFAAA13C2FD98A91D43BD3A897DD4751E80 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1AF9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMPDEST PUSH2 0x1B04 PUSH1 0x1 DUP5 PUSH2 0x1C57 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x6 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE SWAP2 DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 DUP4 SWAP3 PUSH2 0x1B58 SWAP1 DUP5 SWAP1 PUSH2 0x242E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x19 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xE64 JUMPI PUSH1 0x19 SLOAD PUSH1 0x40 MLOAD PUSH4 0x852CD8D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x42966C68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1C2D DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1BF6 SWAP3 SWAP2 SWAP1 PUSH2 0x235E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x1E1C JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C50 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1EEE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C50 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1F3D JUMP JUMPDEST PUSH1 0x19 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x1D59 JUMPI PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 PUSH4 0xA9059CBB SWAP2 AND PUSH2 0x1CB6 DUP5 DUP7 PUSH2 0x242E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1CD3 SWAP3 SWAP2 SWAP1 PUSH2 0x235E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1D1D JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1D1A SWAP2 DUP2 ADD SWAP1 PUSH2 0x22DA JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1D57 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x1D4B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1D50 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP PUSH2 0x1D59 JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x1D90 SWAP1 DUP5 SWAP1 PUSH2 0x2446 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1DCC SWAP1 DUP5 SWAP1 PUSH2 0x2446 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1C50 DUP4 PUSH2 0x2030 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x101D SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x1BF6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E71 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x208C SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1C2D JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1E8F SWAP2 SWAP1 PUSH2 0x22DA JUMP JUMPDEST PUSH2 0x1C2D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xAA5 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1F35 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xE64 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xE64 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x2026 JUMPI PUSH1 0x0 PUSH2 0x1F61 PUSH1 0x1 DUP4 PUSH2 0x2446 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x1F75 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2446 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x1FDA JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1F95 JUMPI PUSH2 0x1F95 PUSH2 0x24B5 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1FB8 JUMPI PUSH2 0x1FB8 PUSH2 0x24B5 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x1FEB JUMPI PUSH2 0x1FEB PUSH2 0x249F JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xE64 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0xE64 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2080 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x206C JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x209B DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x20A3 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x2104 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xAA5 JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x2152 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xAA5 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x216E SWAP2 SWAP1 PUSH2 0x232E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x21AB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x21B0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x21C0 DUP3 DUP3 DUP7 PUSH2 0x21CB JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x21DA JUMPI POP DUP2 PUSH2 0x1C50 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x21EA JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAA5 SWAP2 SWAP1 PUSH2 0x23C4 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x221B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C50 DUP3 PUSH2 0x2204 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x224E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2257 DUP4 PUSH2 0x2204 JUMP JUMPDEST SWAP2 POP PUSH2 0x2265 PUSH1 0x20 DUP5 ADD PUSH2 0x2204 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x228D DUP6 PUSH2 0x2204 JUMP JUMPDEST SWAP4 POP PUSH2 0x229B PUSH1 0x20 DUP7 ADD PUSH2 0x2204 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x22C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22CC DUP4 PUSH2 0x2204 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x22EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x230E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2327 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2340 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x245D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x23B8 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2393 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x23E3 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x245D JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2441 JUMPI PUSH2 0x2441 PUSH2 0x2489 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2458 JUMPI PUSH2 0x2458 PUSH2 0x2489 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2478 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2460 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x101D JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODEHASH PUSH25 0x65A1EA27897EF10D97169338DC1DD5DE459C98E175DDD105A8 SIGNEXTEND DIV DIFFICULTY 0xAD STOP PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "142:734:64:-:0;;;702:6:31;667:41;;786:7;749:44;;877:7;834:50;;968:6;925:49;;1057:7;1015:49;;1135:2;1105:32;;264:203:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1637:1:0;1742:7;:22;393:4:64;399:9;410:14;426:13;453:10;;357:25:28;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;;;-1:-1:-1;;;;;422:24:28;;;;;;;1479:12:31;:28;;;;;;;;;;1513:8;:20;;;;;;;;;;1539:13;:30;;;;;;;;;;1575:12;:28;;;;;;;;;;;;-1:-1:-1;1609:28:31;;;:14;:28;;;;;;;:43;;;;;;;;;;;1703:12;;1730;;1689:54;;-1:-1:-1;;;1689:54:31;;1730:12;;;1689:54;;;1093:51:84;1703:12:31;;;;-1:-1:-1;1689:40:31;;1066:18:84;;1689:54:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1658:28:31;;;;;;;;:13;:28;;;;;:85;;-1:-1:-1;;1658:85:31;;;;;;;;;;-1:-1:-1;142:734:64;;-1:-1:-1;;;;;;142:734:64;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:464::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;469:49;514:2;503:9;499:18;469:49;:::i;:::-;459:59;;537:49;582:2;571:9;567:18;537:49;:::i;:::-;527:59;;605:49;650:2;639:9;635:18;605:49;:::i;:::-;595:59;;196:464;;;;;;;:::o;665:277::-;732:6;785:2;773:9;764:7;760:23;756:32;753:52;;;801:1;798;791:12;753:52;833:9;827:16;886:5;879:13;872:21;865:5;862:32;852:60;;908:1;905;898:12;852:60;931:5;665:277;-1:-1:-1;;;665:277:84:o;947:203::-;142:734:64;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_activate_9478": {
                  "entryPoint": 6848,
                  "id": 9478,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_add_1372": {
                  "entryPoint": 7918,
                  "id": 1372,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_callOptionalReturn_911": {
                  "entryPoint": 7708,
                  "id": 911,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_contains_1475": {
                  "entryPoint": null,
                  "id": 1475,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_remove_1456": {
                  "entryPoint": 7997,
                  "id": 1456,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_slash_9078": {
                  "entryPoint": 7297,
                  "id": 9078,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_values_1520": {
                  "entryPoint": 8240,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 2550,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@activate_9270": {
                  "entryPoint": 2237,
                  "id": 9270,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 4256,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 3391,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@add_1658": {
                  "entryPoint": 7255,
                  "id": 1658,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@bondTime_5611": {
                  "entryPoint": null,
                  "id": 5611,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bond_9206": {
                  "entryPoint": 4440,
                  "id": 9206,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@contains_1712": {
                  "entryPoint": 7218,
                  "id": 1712,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@dispute_5547": {
                  "entryPoint": 6664,
                  "id": 5547,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_5636": {
                  "entryPoint": null,
                  "id": 5636,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@functionCallWithValue_1073": {
                  "entryPoint": 8355,
                  "id": 1073,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@functionCall_1003": {
                  "entryPoint": 8332,
                  "id": 1003,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@inflationPeriod_5631": {
                  "entryPoint": null,
                  "id": 5631,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@internalSlash_11315": {
                  "entryPoint": 4113,
                  "id": 11315,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@isContract_932": {
                  "entryPoint": null,
                  "id": 932,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@isKeeper_11330": {
                  "entryPoint": 3671,
                  "id": 11330,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 4131,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keep3rHelper_5602": {
                  "entryPoint": null,
                  "id": 5602,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1Proxy_5598": {
                  "entryPoint": null,
                  "id": 5598,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1_5594": {
                  "entryPoint": null,
                  "id": 5594,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keepers_5506": {
                  "entryPoint": 4244,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@kp3rWethPool_5606": {
                  "entryPoint": null,
                  "id": 5606,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@liquidityMinimum_5621": {
                  "entryPoint": null,
                  "id": 5621,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@removeDisputer_6072": {
                  "entryPoint": 6484,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 5260,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@remove_1685": {
                  "entryPoint": 7276,
                  "id": 1685,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@resolve_5577": {
                  "entryPoint": 3211,
                  "id": 5577,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@revoke_9025": {
                  "entryPoint": 3862,
                  "id": 9025,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@rewardPeriodTime_5626": {
                  "entryPoint": null,
                  "id": 5626,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@safeTransferFrom_745": {
                  "entryPoint": 7652,
                  "id": 745,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@safeTransfer_719": {
                  "entryPoint": 7127,
                  "id": 719,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@setBondTime_5836": {
                  "entryPoint": 5654,
                  "id": 5836,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setFee_5933": {
                  "entryPoint": 3575,
                  "id": 5933,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 5440,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setInflationPeriod_5915": {
                  "entryPoint": 5558,
                  "id": 5915,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rHelper_5717": {
                  "entryPoint": 3690,
                  "id": 5717,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1Proxy_5773": {
                  "entryPoint": 5944,
                  "id": 5773,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1_5745": {
                  "entryPoint": 6327,
                  "id": 5745,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeeper_11296": {
                  "entryPoint": 3847,
                  "id": 11296,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_5818": {
                  "entryPoint": 1879,
                  "id": 5818,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setLiquidityMinimum_5872": {
                  "entryPoint": 6231,
                  "id": 5872,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRewardPeriodTime_5897": {
                  "entryPoint": 6101,
                  "id": 5897,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setUnbondTime_5854": {
                  "entryPoint": 4148,
                  "id": 5854,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@slash_8980": {
                  "entryPoint": 5750,
                  "id": 8980,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@unbondTime_5616": {
                  "entryPoint": null,
                  "id": 5616,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@unbond_9317": {
                  "entryPoint": 5049,
                  "id": 9317,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 7639,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@verifyCallResult_1208": {
                  "entryPoint": 8651,
                  "id": 1208,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@withdraw_9413": {
                  "entryPoint": 2690,
                  "id": 9413,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_address": {
                  "entryPoint": 8708,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 8736,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 8763,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_addresst_uint256t_uint256": {
                  "entryPoint": 8814,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 8880,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 8922,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 8956,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256_fromMemory": {
                  "entryPoint": 8981,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 9006,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 9034,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": 9054,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 9079,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 9156,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 9207,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 9262,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 9286,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 9309,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "panic_error_0x11": {
                  "entryPoint": 9353,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x31": {
                  "entryPoint": 9375,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x32": {
                  "entryPoint": 9397,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:6991:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "111:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "262:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "308:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "317:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "320:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "310:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "310:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "310:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "292:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "279:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "275:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "272:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "333:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "362:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "333:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "228:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "239:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "251:6:84",
                            "type": ""
                          }
                        ],
                        "src": "192:186:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "470:173:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "516:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "525:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "528:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "518:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "518:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "518:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "491:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "500:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "487:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "487:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "512:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "480:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "541:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "570:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "551:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "551:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "541:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "589:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "622:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "633:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "618:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "618:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "599:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "599:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "589:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "428:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "439:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "451:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "459:6:84",
                            "type": ""
                          }
                        ],
                        "src": "383:260:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "769:276:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "816:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "825:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "828:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "818:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "818:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "818:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "790:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "799:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "786:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "786:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "811:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "782:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "782:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "779:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "841:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "870:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "851:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "851:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "841:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "889:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "922:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "933:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "918:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "918:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "899:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "899:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "889:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "946:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "973:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "984:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "969:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "969:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "956:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "956:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "946:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "997:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1024:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1035:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1020:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1020:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1007:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1007:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "997:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "711:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "722:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "734:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "742:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "750:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "758:6:84",
                            "type": ""
                          }
                        ],
                        "src": "648:397:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1137:167:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1183:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1192:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1195:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1185:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1185:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1185:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1158:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1167:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1154:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1154:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1179:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1150:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1150:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1147:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1208:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1237:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1218:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1218:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1208:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1256:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1283:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1294:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1279:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1266:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1266:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1256:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1095:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1106:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1118:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1126:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1050:254:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1387:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1433:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1442:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1445:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1435:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1435:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1435:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1408:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1417:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1404:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1404:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1429:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1400:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1400:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1397:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1458:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1477:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1471:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1471:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1462:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1540:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1549:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1552:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1542:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1542:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1542:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1509:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "1530:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "1523:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1523:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "1516:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1516:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1506:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1506:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1499:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1499:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1496:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1565:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1575:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1565:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1353:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1364:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1376:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1309:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1661:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1707:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1716:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1719:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1709:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1709:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1709:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1682:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1691:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1678:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1678:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1703:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1674:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1674:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1671:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1732:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1755:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1742:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1742:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1732:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1627:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1638:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1650:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1591:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1857:103:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1903:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1912:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1915:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1905:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1905:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1905:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1878:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1887:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1874:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1874:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1899:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1870:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1870:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1867:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1928:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1944:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1938:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1938:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1928:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1823:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1834:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1846:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1776:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2102:137:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2112:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "2132:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2126:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2126:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "2116:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2174:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2182:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2170:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2170:17:84"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2189:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2194:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "2148:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2148:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2148:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2210:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "2221:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2226:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2217:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2217:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "2210:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "2078:3:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2083:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "2094:3:84",
                            "type": ""
                          }
                        ],
                        "src": "1965:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2345:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2355:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2367:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2378:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2363:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2363:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2355:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2397:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2412:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2428:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2433:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "2424:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2424:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2437:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "2420:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2420:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2408:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2408:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2390:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2390:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2390:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2314:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2325:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2336:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2244:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2609:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2619:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2631:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2642:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2627:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2627:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2619:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2654:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2672:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2677:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "2668:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2668:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2681:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "2664:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2664:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2658:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2699:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2714:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2722:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2710:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2710:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2692:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2692:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2692:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2746:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2757:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2742:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2742:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2766:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2774:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2762:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2762:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2735:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2735:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2735:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2798:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2809:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2794:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2794:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2814:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2787:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2787:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2787:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2562:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2573:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2581:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2589:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2600:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2452:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2961:145:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2971:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2983:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2994:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2979:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2979:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2971:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3013:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "3028:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3044:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3049:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "3040:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3040:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "3053:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "3036:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3036:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "3024:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3024:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3006:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3006:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3006:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3077:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3088:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3073:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3073:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3093:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3066:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3066:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3066:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2922:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2933:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2941:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2952:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2832:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3262:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3272:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3282:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3276:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3293:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3311:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3322:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3307:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3307:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "3297:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3341:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3352:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3334:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3334:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3334:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3364:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "3375:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "3368:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3390:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3410:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3404:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3404:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "3394:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3433:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3441:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3426:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3426:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3426:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3457:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3468:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3479:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3464:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3464:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "3457:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3491:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3509:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3517:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3505:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3505:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "3495:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3529:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3538:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "3533:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3597:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "3618:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3633:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "3627:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "3627:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "3650:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "3655:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3646:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "3646:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "3659:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "3642:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "3642:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "3623:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3623:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3611:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3611:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3611:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3676:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "3687:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3692:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3683:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3683:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3676:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3708:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "3722:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3730:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3718:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3718:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "3708:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "3559:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3562:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3556:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3556:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "3570:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3572:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "3581:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3584:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3577:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3577:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "3572:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "3552:3:84",
                                "statements": []
                              },
                              "src": "3548:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3752:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "3760:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3752:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3231:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3242:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3253:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3111:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3869:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3879:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3891:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3902:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3887:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3887:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3879:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3921:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "3946:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "3939:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3939:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "3932:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3932:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3914:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3914:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3914:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3838:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3849:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3860:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3774:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4087:262:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4104:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4115:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4097:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4097:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4097:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4127:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4147:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4141:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4141:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "4131:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4174:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4185:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4170:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4170:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4190:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4163:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4163:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4163:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4232:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4240:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4228:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4228:15:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4249:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4260:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4245:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4245:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4265:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4206:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4206:66:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4206:66:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4281:62:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4297:9:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "4316:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4324:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "4312:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4312:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4333:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "4329:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4329:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "4308:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4308:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4293:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4293:45:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4340:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4289:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4289:54:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4281:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4056:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4067:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4078:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3966:383:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4528:228:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4545:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4556:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4538:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4538:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4538:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4579:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4590:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4575:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4575:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4595:2:84",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4568:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4568:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4568:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4618:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4629:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4614:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4614:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4634:34:84",
                                    "type": "",
                                    "value": "Address: insufficient balance fo"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4607:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4607:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4607:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4689:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4700:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4685:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4685:18:84"
                                  },
                                  {
                                    "hexValue": "722063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4705:8:84",
                                    "type": "",
                                    "value": "r call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4678:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4678:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4678:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4723:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4735:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4746:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4731:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4731:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4723:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4505:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4519:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4354:402:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4935:179:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4952:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4963:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4945:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4945:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4945:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4986:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4997:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4982:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4982:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5002:2:84",
                                    "type": "",
                                    "value": "29"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4975:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4975:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4975:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5025:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5036:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5021:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5021:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5041:31:84",
                                    "type": "",
                                    "value": "Address: call to non-contract"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5014:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5014:59:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5014:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5082:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5094:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5105:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5090:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5090:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5082:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4912:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4926:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4761:353:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5293:232:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5310:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5321:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5303:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5303:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5303:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5344:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5355:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5340:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5340:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5360:2:84",
                                    "type": "",
                                    "value": "42"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5333:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5333:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5333:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5383:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5394:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5379:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5379:18:84"
                                  },
                                  {
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5399:34:84",
                                    "type": "",
                                    "value": "SafeERC20: ERC20 operation did n"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5372:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5372:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5372:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5454:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5465:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5450:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5450:18:84"
                                  },
                                  {
                                    "hexValue": "6f742073756363656564",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5470:12:84",
                                    "type": "",
                                    "value": "ot succeed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5443:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5443:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5443:40:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5492:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5504:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5515:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5500:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5500:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5492:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5270:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5284:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5119:406:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5704:181:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5721:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5732:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5714:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5714:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5714:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5755:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5766:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5751:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5751:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5771:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5744:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5744:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5744:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5794:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5805:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5790:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5790:18:84"
                                  },
                                  {
                                    "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5810:33:84",
                                    "type": "",
                                    "value": "ReentrancyGuard: reentrant call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5783:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5783:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5783:61:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5853:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5865:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5876:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5861:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5861:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5853:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5681:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5695:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5530:355:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5991:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6001:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6013:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6024:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6009:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6009:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "6001:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "6043:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6054:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6036:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6036:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6036:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5960:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5971:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5982:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5890:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6120:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6147:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "6149:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6149:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6149:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6136:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "6143:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "6139:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6139:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6133:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6133:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6130:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6178:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6189:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6192:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6185:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6185:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "6178:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "6103:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "6106:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "6112:3:84",
                            "type": ""
                          }
                        ],
                        "src": "6072:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6254:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6276:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "6278:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6278:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6278:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6270:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6273:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6267:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6267:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6264:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6307:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6319:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6322:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "6315:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6315:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "6307:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "6236:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "6239:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "6245:4:84",
                            "type": ""
                          }
                        ],
                        "src": "6205:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6388:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6398:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6407:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6402:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6467:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "6492:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "6497:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "6488:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6488:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6511:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6516:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "6507:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6507:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "6501:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6501:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6481:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6481:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6481:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6428:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6431:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6425:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6425:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "6439:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6441:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "6450:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6453:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6446:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6446:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "6441:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6421:3:84",
                                "statements": []
                              },
                              "src": "6417:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6556:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "6569:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "6574:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "6565:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6565:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6583:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6558:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6558:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6558:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6545:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6548:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6542:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6542:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6539:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "6366:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "6371:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "6376:6:84",
                            "type": ""
                          }
                        ],
                        "src": "6335:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6630:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6647:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6654:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6659:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6650:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6650:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6640:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6640:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6640:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6687:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6690:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6680:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6680:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6680:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6711:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6714:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "6704:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6704:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6704:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "6598:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6762:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6779:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6786:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6791:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6782:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6782:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6772:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6772:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6772:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6819:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6822:4:84",
                                    "type": "",
                                    "value": "0x31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6812:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6812:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6812:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6843:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6846:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "6836:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6836:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6836:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x31",
                        "nodeType": "YulFunctionDefinition",
                        "src": "6730:127:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6894:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6911:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6918:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6923:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6914:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6914:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6904:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6904:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6904:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6951:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6954:4:84",
                                    "type": "",
                                    "value": "0x32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6944:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6944:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6944:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6975:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6978:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "6968:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6968:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6968:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x32",
                        "nodeType": "YulFunctionDefinition",
                        "src": "6862:127:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106102975760003560e01c80638fe204dd11610168578063c20297f0116100d4578063c20297f01461063c578063c7ae40d01461064f578063cb4be2bb14610662578063cb54694d14610675578063cd22af1b14610688578063ddca3f43146106b3578063e326ac43146106bc578063ebbb6194146106dc578063ec00cdfc146106ef578063f0f346b914610702578063f11a1d1a14610715578063f39c38a014610728578063f75f9f7b1461073b578063fc253d2b1461074e57600080fd5b80638fe204dd14610522578063951dc22c146105355780639d5c33d81461053d578063a39744b514610550578063a515366a1461057b578063a5d059ca1461058e578063a7d2e784146105a1578063aac6aa9c146105aa578063ab033ea9146105bd578063b0103b1a146105d0578063b2392233146105f3578063b7e7734014610606578063b87fcbff1461061957600080fd5b80635ebe23f0116102075780635ebe23f014610437578063633fb68f1461044057806368a9f19c1461044957806369fe0e2d1461045c5780636ba42aaa1461046f57806372da828a14610482578063748747e61461049557806374a8f103146104a857806375b9a542146104bb578063768b5d90146104ce5780637b40c913146104d75780637c8fce23146104ea5780638cb22b76146104ff57600080fd5b806307b435c21461029c57806315006b82146102da578063160e1e3114610305578063168f92e71461031a5780631b44555e146103455780631c5a9d9c146103655780631ef94b911461037857806321040b0114610398578063238efcbc146103c3578063274a8db4146103cb57806351cff8d9146103fe57806355ea6c47146104115780635aa6e67514610424575b600080fd5b6102c76102aa36600461223b565b601060209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6102c76102e836600461223b565b600e60209081526000928352604080842090915290825290205481565b610318610313366004612220565b610757565b005b6102c761032836600461223b565b600760209081526000928352604080842090915290825290205481565b6102c7610353366004612220565b60036020526000908152604090205481565b610318610373366004612220565b6108bd565b60195461038b906001600160a01b031681565b6040516102d1919061234a565b6102c76103a636600461223b565b601160209081526000928352604080842090915290825290205481565b6103186109f6565b6103ee6103d9366004612220565b60186020526000908152604090205460ff1681565b60405190151581526020016102d1565b61031861040c366004612220565b610a82565b61031861041f366004612220565b610c8b565b60155461038b906001600160a01b031681565b6102c7601d5481565b6102c7601f5481565b610318610457366004612220565b610d3f565b61031861046a3660046122fc565b610df7565b6103ee61047d366004612220565b610e57565b610318610490366004612220565b610e6a565b6103186104a3366004612220565b610f07565b6103186104b6366004612220565b610f16565b6103186104c936600461226e565b611011565b6102c760205481565b601c5461038b906001600160a01b031681565b6104f2611023565b6040516102d19190612377565b6103ee61050d366004612220565b60126020526000908152604090205460ff1681565b6103186105303660046122fc565b611034565b6104f2611094565b61031861054b366004612220565b6110a0565b6102c761055e36600461223b565b600660209081526000928352604080842090915290825290205481565b6103186105893660046122b0565b611158565b61031861059c3660046122b0565b6113b9565b6102c7601e5481565b6103186105b8366004612220565b61148c565b6103186105cb366004612220565b611540565b6103ee6105de366004612220565b60056020526000908152604090205460ff1681565b6103186106013660046122fc565b6115b6565b6103186106143660046122fc565b611616565b6103ee610627366004612220565b60176020526000908152604090205460ff1681565b61031861064a36600461226e565b611676565b601a5461038b906001600160a01b031681565b610318610670366004612220565b611738565b6103186106833660046122fc565b6117d5565b6102c761069636600461223b565b600f60209081526000928352604080842090915290825290205481565b6102c760225481565b6102c76106ca366004612220565b60046020526000908152604090205481565b6103186106ea3660046122fc565b611857565b6103186106fd366004612220565b6118b7565b610318610710366004612220565b611954565b601b5461038b906001600160a01b031681565b60165461038b906001600160a01b031681565b610318610749366004612220565b611a08565b6102c760215481565b6015546001600160a01b03163314610782576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166107a95760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b038084166001600160a01b031992831681179093556000838152600c6020526040908190208054909316909317909155601b54915163696a437b60e01b815291169063696a437b9061080a90849060040161234a565b60206040518083038186803b15801561082257600080fd5b505afa158015610836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085a91906122da565b6001600160a01b0382166000908152600d602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa906108b290839061234a565b60405180910390a150565b3360009081526005602052604090205460ff16156108ee576040516362e6201d60e01b815260040160405180910390fd5b336000908152600f602090815260408083206001600160a01b038516845290915290205461092f57604051636258f48160e01b815260040160405180910390fd5b336000908152600f602090815260408083206001600160a01b0385168452909152902054421161097257604051630fd0eeef60e11b815260040160405180910390fd5b336000818152600f602090815260408083206001600160a01b03861684529091528120819055906109a39083611ac0565b9050816001600160a01b0316336001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a75836040516109ea91815260200190565b60405180910390a35050565b6016546001600160a01b03163314610a2157604051637ef5703160e11b815260040160405180910390fd5b60168054601580546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b691610a789161234a565b60405180910390a1565b60026000541415610aae5760405162461bcd60e51b8152600401610aa5906123f7565b60405180910390fd5b600260009081553381526011602090815260408083206001600160a01b0385168452909152902054610af35760405163184c088160e21b815260040160405180910390fd5b3360009081526010602090815260408083206001600160a01b03851684529091529020544211610b36576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526005602052604090205460ff1615610b67576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b0385811680865291909352922054601954909291161415610bfa57601a5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b158015610be157600080fd5b505af1158015610bf5573d6000803e3d6000fd5b505050505b3360008181526011602090815260408083206001600160a01b03871680855290835281842084905584845260108352818420818552909252822091909155610c429183611bd7565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b3360009081526018602052604090205460ff16610cbb57604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff16610cf4576040516310cec38560e21b815260040160405180910390fd5b6001600160a01b038116600081815260056020526040808220805460ff19169055513392917fe02b2375d8fb4aef3e5bc5d53bffcf70b6f185c5c93e69dcbe8b6cfc58e837e291a350565b6015546001600160a01b03163314610d6a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff1615610da45760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b906108b290839061234a565b6015546001600160a01b03163314610e22576040516354348f0360e01b815260040160405180910390fd5b60228190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d906020016108b2565b6000610e64600183611c32565b92915050565b6015546001600160a01b03163314610e95576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610ebc5760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b0906108b290839061234a565b610f12600182611c57565b5050565b3360009081526017602052604090205460ff16610f4657604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff16610f7f576040516310cec38560e21b815260040160405180910390fd5b610f8a600182611c6c565b506019546001600160a01b03808316600081815260066020908152604080832094909516808352938152848220549282526011815284822084835290529290922054610fd892849291611c81565b60405133906001600160a01b038316907f038a17b9b553c0c3fc2ed14b957a5d8420a1666fd2efe5c1b3fe5f23eea61bb390600090a350565b61101d84848484611c81565b50505050565b606061102f6013611dd7565b905090565b6015546001600160a01b0316331461105f576040516354348f0360e01b815260040160405180910390fd5b601e8190556040518181527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee2906020016108b2565b606061102f6001611dd7565b6015546001600160a01b031633146110cb576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff16156111055760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f906108b290839061234a565b6002600054141561117b5760405162461bcd60e51b8152600401610aa5906123f7565b600260009081553381526005602052604090205460ff16156111b0576040516362e6201d60e01b815260040160405180910390fd5b6111bb601333611c32565b156111d95760405163d7229c4360e01b815260040160405180910390fd5b601d546111e6904261242e565b336000908152600f602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81529091906370a082319061123190309060040161234a565b60206040518083038186803b15801561124957600080fd5b505afa15801561125d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112819190612315565b90506112986001600160a01b038416333085611de4565b6040516370a0823160e01b815281906001600160a01b038516906370a08231906112c690309060040161234a565b60206040518083038186803b1580156112de57600080fd5b505afa1580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113169190612315565b6113209190612446565b336000908152601260209081526040808320805460ff19166001179055600e82528083206001600160a01b038816845290915281208054929450849290919061136a90849061242e565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b601e546113c6904261242e565b3360008181526010602090815260408083206001600160a01b03881680855290835281842095909555928252600681528282209382529290925281208054839290611412908490612446565b90915550503360009081526011602090815260408083206001600160a01b03861684529091528120805483929061144a90849061242e565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de906020016109ea565b6015546001600160a01b031633146114b7576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff166114f0576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d025906108b290839061234a565b6015546001600160a01b0316331461156b576040516354348f0360e01b815260040160405180910390fd5b601680546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906108b290839061234a565b6015546001600160a01b031633146115e1576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb69906020016108b2565b6015546001600160a01b03163314611641576040516354348f0360e01b815260040160405180910390fd5b601d8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b43906020016108b2565b3360009081526017602052604090205460ff166116a657604051637e57b1e160e01b815260040160405180910390fd5b6001600160a01b03841660009081526005602052604090205460ff166116df576040516310cec38560e21b815260040160405180910390fd5b6116eb84848484611c81565b336001600160a01b0385167f10a73de7ab6e9023aa6e2bc23f7abf4dcef591487e7e55f44c00e34fe60d56db611721848661242e565b60405190815260200160405180910390a350505050565b6015546001600160a01b03163314611763576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811661178a5760405163d92e233d60e01b815260040160405180910390fd5b601a80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae250906108b290839061234a565b6015546001600160a01b03163314611800576040516354348f0360e01b815260040160405180910390fd5b6201518081101561182457604051633f384aad60e21b815260040160405180910390fd5b60208181556040518281527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d991016108b2565b6015546001600160a01b03163314611882576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e7906020016108b2565b6015546001600160a01b031633146118e2576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166119095760405163d92e233d60e01b815260040160405180910390fd5b601980546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf906108b290839061234a565b6015546001600160a01b0316331461197f576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff166119b857604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e906108b290839061234a565b3360009081526018602052604090205460ff16611a3857604051630942721960e31b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615611a72576040516304ee891b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260056020526040808220805460ff19166001179055513392917f070125a1c0f5202217aae14ec399abfaaa13c2fd98a91d43bd3a897dd4751e8091a350565b6001600160a01b038216600090815260046020526040812054611af9576001600160a01b03831660009081526004602052604090204290555b611b04600184611c57565b50506001600160a01b038083166000818152600e6020908152604080832094861680845294825280832080549084905593835260068252808320948352939052918220805491928392611b5890849061242e565b90915550506019546001600160a01b0383811691161415610e6457601954604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b158015611bb957600080fd5b505af1158015611bcd573d6000803e3d6000fd5b5050505092915050565b611c2d8363a9059cbb60e01b8484604051602401611bf692919061235e565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611e1c565b505050565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000611c50836001600160a01b038416611eee565b6000611c50836001600160a01b038416611f3d565b6019546001600160a01b03848116911614611d59576015546001600160a01b038085169163a9059cbb9116611cb6848661242e565b6040518363ffffffff1660e01b8152600401611cd392919061235e565b602060405180830381600087803b158015611ced57600080fd5b505af1925050508015611d1d575060408051601f3d908101601f19168201909252611d1a918101906122da565b60015b611d57573d808015611d4b576040519150601f19603f3d011682016040523d82523d6000602084013e611d50565b606091505b5050611d59565b505b6001600160a01b03808516600090815260066020908152604080832093871683529290529081208054849290611d90908490612446565b90915550506001600160a01b03808516600090815260116020908152604080832093871683529290529081208054839290611dcc908490612446565b909155505050505050565b60606000611c5083612030565b6040516001600160a01b038085166024830152831660448201526064810182905261101d9085906323b872dd60e01b90608401611bf6565b6000611e71826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661208c9092919063ffffffff16565b805190915015611c2d5780806020019051810190611e8f91906122da565b611c2d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610aa5565b6000818152600183016020526040812054611f3557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e64565b506000610e64565b60008181526001830160205260408120548015612026576000611f61600183612446565b8554909150600090611f7590600190612446565b9050818114611fda576000866000018281548110611f9557611f956124b5565b9060005260206000200154905080876000018481548110611fb857611fb86124b5565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611feb57611feb61249f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610e64565b6000915050610e64565b60608160000180548060200260200160405190810160405280929190818152602001828054801561208057602002820191906000526020600020905b81548152602001906001019080831161206c575b50505050509050919050565b606061209b84846000856120a3565b949350505050565b6060824710156121045760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610aa5565b843b6121525760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aa5565b600080866001600160a01b0316858760405161216e919061232e565b60006040518083038185875af1925050503d80600081146121ab576040519150601f19603f3d011682016040523d82523d6000602084013e6121b0565b606091505b50915091506121c08282866121cb565b979650505050505050565b606083156121da575081611c50565b8251156121ea5782518084602001fd5b8160405162461bcd60e51b8152600401610aa591906123c4565b80356001600160a01b038116811461221b57600080fd5b919050565b60006020828403121561223257600080fd5b611c5082612204565b6000806040838503121561224e57600080fd5b61225783612204565b915061226560208401612204565b90509250929050565b6000806000806080858703121561228457600080fd5b61228d85612204565b935061229b60208601612204565b93969395505050506040820135916060013590565b600080604083850312156122c357600080fd5b6122cc83612204565b946020939093013593505050565b6000602082840312156122ec57600080fd5b81518015158114611c5057600080fd5b60006020828403121561230e57600080fd5b5035919050565b60006020828403121561232757600080fd5b5051919050565b6000825161234081846020870161245d565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156123b85783516001600160a01b031683529284019291840191600101612393565b50909695505050505050565b60208152600082518060208401526123e381604085016020870161245d565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000821982111561244157612441612489565b500190565b60008282101561245857612458612489565b500390565b60005b83811015612478578181015183820152602001612460565b8381111561101d5750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea26469706673582212203f7865a1ea27897ef10d97169338dc1dd5de459c98e175ddd105a80b0444ad0064736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x297 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8FE204DD GT PUSH2 0x168 JUMPI DUP1 PUSH4 0xC20297F0 GT PUSH2 0xD4 JUMPI DUP1 PUSH4 0xC20297F0 EQ PUSH2 0x63C JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x64F JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x662 JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x675 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x688 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x6B3 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x6BC JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0x6DC JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0x6EF JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x702 JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0x715 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x728 JUMPI DUP1 PUSH4 0xF75F9F7B EQ PUSH2 0x73B JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0x74E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x535 JUMPI DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x53D JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x550 JUMPI DUP1 PUSH4 0xA515366A EQ PUSH2 0x57B JUMPI DUP1 PUSH4 0xA5D059CA EQ PUSH2 0x58E JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x5A1 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x5AA JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x5BD JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x5D0 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x5F3 JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x606 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x619 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5EBE23F0 GT PUSH2 0x207 JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x437 JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x440 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x449 JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0x6BA42AAA EQ PUSH2 0x46F JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x482 JUMPI DUP1 PUSH4 0x748747E6 EQ PUSH2 0x495 JUMPI DUP1 PUSH4 0x74A8F103 EQ PUSH2 0x4A8 JUMPI DUP1 PUSH4 0x75B9A542 EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x4CE JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x4EA JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x4FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x29C JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x31A JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x345 JUMPI DUP1 PUSH4 0x1C5A9D9C EQ PUSH2 0x365 JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x378 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x398 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x3C3 JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x3FE JUMPI DUP1 PUSH4 0x55EA6C47 EQ PUSH2 0x411 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x424 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C7 PUSH2 0x2AA CALLDATASIZE PUSH1 0x4 PUSH2 0x223B JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2C7 PUSH2 0x2E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x223B JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x313 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x757 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2C7 PUSH2 0x328 CALLDATASIZE PUSH1 0x4 PUSH2 0x223B JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2C7 PUSH2 0x353 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x373 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x8BD JUMP JUMPDEST PUSH1 0x19 SLOAD PUSH2 0x38B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2D1 SWAP2 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH2 0x2C7 PUSH2 0x3A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x223B JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x9F6 JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x3D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2D1 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x40C CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xA82 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x41F CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xC8B JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH2 0x38B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2C7 PUSH1 0x1D SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2C7 PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x457 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xD3F JUMP JUMPDEST PUSH2 0x318 PUSH2 0x46A CALLDATASIZE PUSH1 0x4 PUSH2 0x22FC JUMP JUMPDEST PUSH2 0xDF7 JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x47D CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xE57 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x490 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xE6A JUMP JUMPDEST PUSH2 0x318 PUSH2 0x4A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xF07 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x4B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0xF16 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x4C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x226E JUMP JUMPDEST PUSH2 0x1011 JUMP JUMPDEST PUSH2 0x2C7 PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x38B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x4F2 PUSH2 0x1023 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2D1 SWAP2 SWAP1 PUSH2 0x2377 JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x50D CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x530 CALLDATASIZE PUSH1 0x4 PUSH2 0x22FC JUMP JUMPDEST PUSH2 0x1034 JUMP JUMPDEST PUSH2 0x4F2 PUSH2 0x1094 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x54B CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x10A0 JUMP JUMPDEST PUSH2 0x2C7 PUSH2 0x55E CALLDATASIZE PUSH1 0x4 PUSH2 0x223B JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x589 CALLDATASIZE PUSH1 0x4 PUSH2 0x22B0 JUMP JUMPDEST PUSH2 0x1158 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x59C CALLDATASIZE PUSH1 0x4 PUSH2 0x22B0 JUMP JUMPDEST PUSH2 0x13B9 JUMP JUMPDEST PUSH2 0x2C7 PUSH1 0x1E SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x5B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x148C JUMP JUMPDEST PUSH2 0x318 PUSH2 0x5CB CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x1540 JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x5DE CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x601 CALLDATASIZE PUSH1 0x4 PUSH2 0x22FC JUMP JUMPDEST PUSH2 0x15B6 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x614 CALLDATASIZE PUSH1 0x4 PUSH2 0x22FC JUMP JUMPDEST PUSH2 0x1616 JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x627 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x64A CALLDATASIZE PUSH1 0x4 PUSH2 0x226E JUMP JUMPDEST PUSH2 0x1676 JUMP JUMPDEST PUSH1 0x1A SLOAD PUSH2 0x38B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x670 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x1738 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x683 CALLDATASIZE PUSH1 0x4 PUSH2 0x22FC JUMP JUMPDEST PUSH2 0x17D5 JUMP JUMPDEST PUSH2 0x2C7 PUSH2 0x696 CALLDATASIZE PUSH1 0x4 PUSH2 0x223B JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2C7 PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2C7 PUSH2 0x6CA CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x6EA CALLDATASIZE PUSH1 0x4 PUSH2 0x22FC JUMP JUMPDEST PUSH2 0x1857 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x6FD CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x710 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x1954 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x38B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH2 0x38B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x318 PUSH2 0x749 CALLDATASIZE PUSH1 0x4 PUSH2 0x2220 JUMP JUMPDEST PUSH2 0x1A08 JUMP JUMPDEST PUSH2 0x2C7 PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x782 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1B SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x80A SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x234A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x836 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x85A SWAP2 SWAP1 PUSH2 0x22DA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x8EE JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x92F JUMPI PUSH1 0x40 MLOAD PUSH4 0x6258F481 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x972 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFD0EEEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP2 SWAP1 SSTORE SWAP1 PUSH2 0x9A3 SWAP1 DUP4 PUSH2 0x1AC0 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3673530133B6DA67E9854F605B0CFA7BB9798CD33C18036DFC10D8DA7C4D4A75 DUP4 PUSH1 0x40 MLOAD PUSH2 0x9EA SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA21 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0xA78 SWAP2 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0xAAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAA5 SWAP1 PUSH2 0x23F7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xAF3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0xB36 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB67 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP1 DUP7 MSTORE SWAP2 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SLOAD PUSH1 0x19 SLOAD SWAP1 SWAP3 SWAP2 AND EQ ISZERO PUSH2 0xBFA JUMPI PUSH1 0x1A SLOAD PUSH1 0x40 MLOAD PUSH4 0x140E25AD PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xA0712D68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBF5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x10 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP2 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xC42 SWAP2 DUP4 PUSH2 0x1BD7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x2717EAD6B9200DD235AAD468C9809EA400FE33AC69B5BFAA6D3E90FC922B6398 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xCBB JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xCF4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0xE02B2375D8FB4AEF3E5BC5D53BFFCF70B6F185C5C93E69DCBE8B6CFC58E837E2 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xDA4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE22 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x8B2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE64 PUSH1 0x1 DUP4 PUSH2 0x1C32 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE95 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xEBC JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH2 0xF12 PUSH1 0x1 DUP3 PUSH2 0x1C57 JUMP JUMPDEST POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xF46 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xF7F JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF8A PUSH1 0x1 DUP3 PUSH2 0x1C6C JUMP JUMPDEST POP PUSH1 0x19 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP6 AND DUP1 DUP4 MSTORE SWAP4 DUP2 MSTORE DUP5 DUP3 KECCAK256 SLOAD SWAP3 DUP3 MSTORE PUSH1 0x11 DUP2 MSTORE DUP5 DUP3 KECCAK256 DUP5 DUP4 MSTORE SWAP1 MSTORE SWAP3 SWAP1 SWAP3 KECCAK256 SLOAD PUSH2 0xFD8 SWAP3 DUP5 SWAP3 SWAP2 PUSH2 0x1C81 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x38A17B9B553C0C3FC2ED14B957A5D8420A1666FD2EFE5C1B3FE5F23EEA61BB3 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP JUMP JUMPDEST PUSH2 0x101D DUP5 DUP5 DUP5 DUP5 PUSH2 0x1C81 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x102F PUSH1 0x13 PUSH2 0x1DD7 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x105F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP1 PUSH1 0x20 ADD PUSH2 0x8B2 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x102F PUSH1 0x1 PUSH2 0x1DD7 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1105 JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0x117B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAA5 SWAP1 PUSH2 0x23F7 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x11B0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x11BB PUSH1 0x13 CALLER PUSH2 0x1C32 JUMP JUMPDEST ISZERO PUSH2 0x11D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD7229C43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D SLOAD PUSH2 0x11E6 SWAP1 TIMESTAMP PUSH2 0x242E JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1231 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x234A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x125D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1281 SWAP2 SWAP1 PUSH2 0x2315 JUMP JUMPDEST SWAP1 POP PUSH2 0x1298 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x1DE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x12C6 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x234A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1316 SWAP2 SWAP1 PUSH2 0x2315 JUMP JUMPDEST PUSH2 0x1320 SWAP2 SWAP1 PUSH2 0x2446 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0xE DUP3 MSTORE DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP3 SWAP5 POP DUP5 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x136A SWAP1 DUP5 SWAP1 PUSH2 0x242E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 CALLER SWAP1 PUSH32 0xA7E66869262026842E8D81F5E6806CDC8D846E27C824E2E22F4FE51442771B34 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x13C6 SWAP1 TIMESTAMP PUSH2 0x242E JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x6 DUP2 MSTORE DUP3 DUP3 KECCAK256 SWAP4 DUP3 MSTORE SWAP3 SWAP1 SWAP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1412 SWAP1 DUP5 SWAP1 PUSH2 0x2446 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x144A SWAP1 DUP5 SWAP1 PUSH2 0x242E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE SWAP1 PUSH1 0x20 ADD PUSH2 0x9EA JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14B7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x14F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x156B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x15E1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x8B2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1641 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x8B2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x16A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7E57B1E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x16DF JUMPI PUSH1 0x40 MLOAD PUSH4 0x10CEC385 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x16EB DUP5 DUP5 DUP5 DUP5 PUSH2 0x1C81 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH32 0x10A73DE7AB6E9023AA6E2BC23F7ABF4DCEF591487E7E55F44C00E34FE60D56DB PUSH2 0x1721 DUP5 DUP7 PUSH2 0x242E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1763 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x178A JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1800 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x1824 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP2 ADD PUSH2 0x8B2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1882 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x8B2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x18E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1909 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x19 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x197F JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x19B8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x8B2 SWAP1 DUP4 SWAP1 PUSH2 0x234A JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1A38 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9427219 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1A72 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4EE891B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x70125A1C0F5202217AAE14EC399ABFAAA13C2FD98A91D43BD3A897DD4751E80 SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1AF9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMPDEST PUSH2 0x1B04 PUSH1 0x1 DUP5 PUSH2 0x1C57 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x6 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE SWAP2 DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 DUP4 SWAP3 PUSH2 0x1B58 SWAP1 DUP5 SWAP1 PUSH2 0x242E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x19 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xE64 JUMPI PUSH1 0x19 SLOAD PUSH1 0x40 MLOAD PUSH4 0x852CD8D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x42966C68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1C2D DUP4 PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1BF6 SWAP3 SWAP2 SWAP1 PUSH2 0x235E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x1E1C JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C50 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1EEE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C50 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1F3D JUMP JUMPDEST PUSH1 0x19 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x1D59 JUMPI PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 PUSH4 0xA9059CBB SWAP2 AND PUSH2 0x1CB6 DUP5 DUP7 PUSH2 0x242E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1CD3 SWAP3 SWAP2 SWAP1 PUSH2 0x235E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1D1D JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1D1A SWAP2 DUP2 ADD SWAP1 PUSH2 0x22DA JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1D57 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x1D4B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1D50 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP PUSH2 0x1D59 JUMP JUMPDEST POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x1D90 SWAP1 DUP5 SWAP1 PUSH2 0x2446 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1DCC SWAP1 DUP5 SWAP1 PUSH2 0x2446 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1C50 DUP4 PUSH2 0x2030 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x101D SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x1BF6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E71 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x208C SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1C2D JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1E8F SWAP2 SWAP1 PUSH2 0x22DA JUMP JUMPDEST PUSH2 0x1C2D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xAA5 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1F35 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xE64 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xE64 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x2026 JUMPI PUSH1 0x0 PUSH2 0x1F61 PUSH1 0x1 DUP4 PUSH2 0x2446 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x1F75 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2446 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x1FDA JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1F95 JUMPI PUSH2 0x1F95 PUSH2 0x24B5 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1FB8 JUMPI PUSH2 0x1FB8 PUSH2 0x24B5 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0x1FEB JUMPI PUSH2 0x1FEB PUSH2 0x249F JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xE64 JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0xE64 JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2080 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x206C JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x209B DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x20A3 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x2104 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xAA5 JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x2152 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xAA5 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x216E SWAP2 SWAP1 PUSH2 0x232E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x21AB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x21B0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x21C0 DUP3 DUP3 DUP7 PUSH2 0x21CB JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x21DA JUMPI POP DUP2 PUSH2 0x1C50 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x21EA JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAA5 SWAP2 SWAP1 PUSH2 0x23C4 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x221B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C50 DUP3 PUSH2 0x2204 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x224E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2257 DUP4 PUSH2 0x2204 JUMP JUMPDEST SWAP2 POP PUSH2 0x2265 PUSH1 0x20 DUP5 ADD PUSH2 0x2204 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x228D DUP6 PUSH2 0x2204 JUMP JUMPDEST SWAP4 POP PUSH2 0x229B PUSH1 0x20 DUP7 ADD PUSH2 0x2204 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x22C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22CC DUP4 PUSH2 0x2204 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x22EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x230E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2327 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2340 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x245D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x23B8 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2393 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x23E3 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x245D JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2441 JUMPI PUSH2 0x2441 PUSH2 0x2489 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2458 JUMPI PUSH2 0x2458 PUSH2 0x2489 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2478 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2460 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x101D JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODEHASH PUSH25 0x65A1EA27897EF10D97169338DC1DD5DE459C98E175DDD105A8 SIGNEXTEND DIV DIFFICULTY 0xAD STOP PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "142:734:64:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1968:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6036:25:84;;;6024:2;6009:18;1968:80:29;;;;;;;;1728:76;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2556:364:31;;;;;;:::i;:::-;;:::i;:::-;;880:79:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;:::i;:::-;;;;;;;;;;;;;;1374:436:42;;;;;;:::i;:::-;;:::i;362:32:31:-;;;;;-1:-1:-1;;;;;362:32:31;;;;;;;;;;:::i;2090:78:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;384:50:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3939:14:84;;3932:22;3914:41;;3902:2;3887:18;384:50:32;3774:187:84;2196:653:42;;;;;;:::i;:::-;;:::i;568:210:30:-;;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;-1:-1:-1;;;;;199:34:28;;;667:41:31;;;;;;834:50;;;;;;533:194:32;;;;;;:::i;:::-;;:::i;4195:110:31:-;;;;;;:::i;:::-;;:::i;749:125:64:-;;;;;;:::i;:::-;;:::i;1788:223:31:-;;;;;;:::i;:::-;;:::i;471:77:64:-;;;;;;:::i;:::-;;:::i;860:284:41:-;;;;;;:::i;:::-;;:::i;552:193:64:-;;;;;;:::i;:::-;;:::i;925:49:31:-;;;;;;590:36;;;;;-1:-1:-1;;;;;590:36:31;;;2385:105:29;;;:::i;:::-;;;;;;;:::i;2210:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3140:152:31;;;;;;:::i;:::-;;:::i;2531:111:29:-;;;:::i;999:203:32:-;;;;;;:::i;:::-;;:::i;769:69:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;721:609:42;;;;;;:::i;:::-;;:::i;1854:298::-;;;;;;:::i;:::-;;:::i;749:44:31:-;;;;;;762:202:32;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3973:182:31;;;;;;:::i;:::-;;:::i;2960:140::-;;;;;;:::i;:::-;;:::i;299:49:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;488:326:41;;;;;;:::i;:::-;;:::i;435:37:31:-;;;;;-1:-1:-1;;;;;435:37:31;;;2286:230;;;;;;:::i;:::-;;:::i;3666:267::-;;;;;;:::i;:::-;;:::i;1846:80:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1105:32:31;;;;;;534:53:29;;;;;;:::i;:::-;;;;;;;;;;;;;;3332:188:31;;;;;;:::i;:::-;;:::i;2051:195::-;;;;;;:::i;:::-;;:::i;1237:211:32:-;;;;;;:::i;:::-;;:::i;513:36:31:-;;;;;-1:-1:-1;;;;;513:36:31;;;268:41:28;;;;;-1:-1:-1;;;;;268:41:28;;;316:212:30;;;;;;:::i;:::-;;:::i;1015:49:31:-;;;;;;2556:364;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2647:27:31;::::1;2643:53;;2683:13;;-1:-1:-1::0;;;2683:13:31::1;;;;;;;;;;;2643:53;2702:12;:28:::0;;-1:-1:-1;;;;;2702:28:31;;::::1;-1:-1:-1::0;;;;;;2702:28:31;;::::1;::::0;::::1;::::0;;;:12:::1;2736:28:::0;;;:14:::1;:28;::::0;;;;;;:43;;;;::::1;::::0;;::::1;::::0;;;2830:12:::1;::::0;2816:55;;-1:-1:-1;;;2816:55:31;;2830:12;::::1;::::0;2816:40:::1;::::0;:55:::1;::::0;2717:13;;2816:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2785:28:31;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;:86;;-1:-1:-1;;2785:86:31::1;::::0;::::1;;::::0;;;::::1;::::0;;;2882:33;::::1;::::0;::::1;::::0;2785:28;;2882:33:::1;:::i;:::-;;;;;;;;2556:364:::0;:::o;1374:436:42:-;1447:10;1438:20;;;;:8;:20;;;;;;;;1434:43;;;1467:10;;-1:-1:-1;;;1467:10:42;;;;;;;;;;;1434:43;1504:10;1487:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1487:38:42;;;;;;;;;;1483:73;;1539:17;;-1:-1:-1;;;1539:17:42;;;;;;;;;;;1483:73;1583:10;1566:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1566:38:42;;;;;;;;;;1608:15;-1:-1:-1;1562:83:42;;1632:13;;-1:-1:-1;;;1632:13:42;;;;;;;;;;;1562:83;1676:10;1659:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1659:38:42;;;;;;;;;1652:45;;;1659:28;1722:31;;1688:8;1722:9;:31::i;:::-;1704:49;;1787:8;-1:-1:-1;;;;;1764:41:42;1775:10;-1:-1:-1;;;;;1764:41:42;;1797:7;1764:41;;;;6036:25:84;;6024:2;6009:18;;5890:177;1764:41:42;;;;;;;;1428:382;1374:436;:::o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;754:10:::1;:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;2196:653:42:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;;;;;;;;;1680:1;2389:7;:18;;;2288:10:42::1;2273:26:::0;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;2273:36:42;::::1;::::0;;;;;;;;2269:73:::1;;2323:19;;-1:-1:-1::0;;;2323:19:42::1;;;;;;;;;;;2269:73;2369:10;2352:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;2352:38:42;::::1;::::0;;;;;;;;2394:15:::1;-1:-1:-1::0;2348:85:42::1;;2418:15;;-1:-1:-1::0;;;2418:15:42::1;;;;;;;;;;;2348:85;2452:10;2443:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;2439:43;;;2472:10;;-1:-1:-1::0;;;2472:10:42::1;;;;;;;;;;;2439:43;2522:10;2489:15;2507:26:::0;;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;2507:36:42;;::::1;::::0;;;;;;;;;;2566:8:::1;::::0;2507:36;;2566:8;::::1;2554:20;2550:84;;;2599:13;::::0;2584:43:::1;::::0;-1:-1:-1;;;2584:43:42;;::::1;::::0;::::1;6036:25:84::0;;;-1:-1:-1;;;;;2599:13:42;;::::1;::::0;2584:34:::1;::::0;6009:18:84;;2584:43:42::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2550:84;2662:10;2647:26;::::0;;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;2647:36:42;::::1;::::0;;;;;;;;;2640:43;;;2696:28;;;:16:::1;:28:::0;;;;;:38;;;;;;;;2689:45;;;;2741:50:::1;::::0;2783:7;2741:29:::1;:50::i;:::-;2803:41;::::0;6036:25:84;;;-1:-1:-1;;;;;2803:41:42;::::1;::::0;2814:10:::1;::::0;2803:41:::1;::::0;6024:2:84;6009:18;2803:41:42::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;2196:653:42:o;568:210:30:-;1778:10:32;1768:21;;;;:9;:21;;;;;;;;1763:49;;1798:14;;-1:-1:-1;;;1798:14:32;;;;;;;;;;;1763:49;-1:-1:-1;;;;;649:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;::::1;;644:49;;680:13;;-1:-1:-1::0;;;680:13:30::1;;;;;;;;;;;644:49;-1:-1:-1::0;;;;;699:22:30;::::1;724:5;699:22:::0;;;:8:::1;:22;::::0;;;;;:30;;-1:-1:-1;;699:30:30::1;::::0;;740:33;762:10:::1;::::0;699:22;740:33:::1;::::0;::::1;568:210:::0;:::o;533:194:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;4195:110:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4264:3:31::1;:10:::0;;;4285:15:::1;::::0;6036:25:84;;;4285:15:31::1;::::0;6024:2:84;6009:18;4285:15:31::1;5890:177:84::0;749:125:64;808:14;842:27;:8;860;842:17;:27::i;:::-;830:39;749:125;-1:-1:-1;;749:125:64:o;1788:223:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1879:27:31;::::1;1875:53;;1915:13;;-1:-1:-1::0;;;1915:13:31::1;;;;;;;;;;;1875:53;1934:12;:28:::0;;-1:-1:-1;;;;;;1934:28:31::1;-1:-1:-1::0;;;;;1934:28:31;::::1;;::::0;;1973:33:::1;::::0;::::1;::::0;::::1;::::0;1934:28;;1973:33:::1;:::i;471:77:64:-:0;522:21;:8;535:7;522:12;:21::i;:::-;;471:77;:::o;860:284:41:-;1589:10:32;1580:20;;;;:8;:20;;;;;;;;1575:47;;1609:13;;-1:-1:-1;;;1609:13:32;;;;;;;;;;;1575:47;-1:-1:-1;;;;;934:17:41;::::1;;::::0;;;:8:::1;:17;::::0;;;;;::::1;;929:44;;960:13;;-1:-1:-1::0;;;960:13:41::1;;;;;;;;;;;929:44;979:24;:8;995:7:::0;979:15:::1;:24::i;:::-;-1:-1:-1::0;1025:8:41::1;::::0;-1:-1:-1;;;;;1035:14:41;;::::1;1025:8;1035:14:::0;;;:5:::1;:14;::::0;;;;;;;1025:8;;;::::1;1035:24:::0;;;;;;;;;;1061:23;;;:14:::1;:23:::0;;;;;:33;;;;;;;;;;1009:86:::1;::::0;1016:7;;1025:8;1009:6:::1;:86::i;:::-;1106:33;::::0;1128:10:::1;::::0;-1:-1:-1;;;;;1106:33:41;::::1;::::0;::::1;::::0;;;::::1;860:284:::0;:::o;552:193:64:-;688:52;695:7;704;713:11;726:13;688:6;:52::i;:::-;552:193;;;;:::o;2385:105:29:-;2433:22;2471:14;:5;:12;:14::i;:::-;2463:22;;2385:105;:::o;3140:152:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3223:10:31::1;:24:::0;;;3258:29:::1;::::0;6036:25:84;;;3258:29:31::1;::::0;6024:2:84;6009:18;3258:29:31::1;5890:177:84::0;2531:111:29;2582:22;2620:17;:8;:15;:17::i;999:203:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;721:609:42:-:0;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;820:10:42::1;811:20:::0;;:8:::1;:20;::::0;;;;;::::1;;807:43;;;840:10;;-1:-1:-1::0;;;840:10:42::1;;;;;;;;;;;807:43;860:26;:5;875:10;860:14;:26::i;:::-;856:52;;;895:13;;-1:-1:-1::0;;;895:13:42::1;;;;;;;;;;;856:52;973:8;::::0;955:26:::1;::::0;:15:::1;:26;:::i;:::-;931:10;914:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;914:38:42;::::1;::::0;;;;;;;;:67;;;;1006:41;;-1:-1:-1;;;1006:41:42;;914:28;;:38;1006:26:::1;::::0;:41:::1;::::0;1041:4:::1;::::0;1006:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;988:59:::0;-1:-1:-1;1053:69:42::1;-1:-1:-1::0;;;;;1053:33:42;::::1;1087:10;1107:4;1114:7:::0;1053:33:::1;:69::i;:::-;1138:41;::::0;-1:-1:-1;;;1138:41:42;;1182:7;;-1:-1:-1;;;;;1138:26:42;::::1;::::0;::::1;::::0;:41:::1;::::0;1173:4:::1;::::0;1138:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;1206:10;1196:21;::::0;;;:9:::1;:21;::::0;;;;;;;:28;;-1:-1:-1;;1196:28:42::1;1220:4;1196:28;::::0;;1230:12:::1;:24:::0;;;;;-1:-1:-1;;;;;1230:34:42;::::1;::::0;;;;;;;:45;;1128:61;;-1:-1:-1;1128:61:42;;1230:34;;1196:21;1230:45:::1;::::0;1128:61;;1230:45:::1;:::i;:::-;::::0;;;-1:-1:-1;;1287:38:42::1;::::0;6036:25:84;;;-1:-1:-1;;;;;1287:38:42;::::1;::::0;1295:10:::1;::::0;1287:38:::1;::::0;6024:2:84;6009:18;1287:38:42::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;721:609:42:o;1854:298::-;1988:10;;1970:28;;:15;:28;:::i;:::-;1946:10;1929:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1929:38:42;;;;;;;;;;;:69;;;;2004:17;;;:5;:17;;;;;:27;;;;;;;;;:38;;2035:7;;1929:28;2004:38;;2035:7;;2004:38;:::i;:::-;;;;-1:-1:-1;;2063:10:42;2048:26;;;;:14;:26;;;;;;;;-1:-1:-1;;;;;2048:36:42;;;;;;;;;:47;;2088:7;;2048:26;:47;;2088:7;;2048:47;:::i;:::-;;;;-1:-1:-1;;2107:40:42;;6036:25:84;;;-1:-1:-1;;;;;2107:40:42;;;2117:10;;2107:40;;6024:2:84;6009:18;2107:40:42;5890:177:84;762:202:32;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;3973:182:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4066:15:31::1;:34:::0;;;4111:39:::1;::::0;6036:25:84;;;4111:39:31::1;::::0;6024:2:84;6009:18;4111:39:31::1;5890:177:84::0;2960:140:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3039:8:31::1;:20:::0;;;3070:25:::1;::::0;6036::84;;;3070::31::1;::::0;6024:2:84;6009:18;3070:25:31::1;5890:177:84::0;488:326:41;1589:10:32;1580:20;;;;:8;:20;;;;;;;;1575:47;;1609:13;;-1:-1:-1;;;1609:13:32;;;;;;;;;;;1575:47;-1:-1:-1;;;;;640:17:41;::::1;;::::0;;;:8:::1;:17;::::0;;;;;::::1;;635:44;;666:13;;-1:-1:-1::0;;;666:13:41::1;;;;;;;;;;;635:44;685:52;692:7;701;710:11;723:13;685:6;:52::i;:::-;769:10;-1:-1:-1::0;;;;;748:61:41;::::1;;781:27;795:13:::0;781:11;:27:::1;:::i;:::-;748:61;::::0;6036:25:84;;;6024:2;6009:18;748:61:41::1;;;;;;;488:326:::0;;;;:::o;2286:230:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2379:28:31;::::1;2375:54;;2416:13;;-1:-1:-1::0;;;2416:13:31::1;;;;;;;;;;;2375:54;2435:13;:30:::0;;-1:-1:-1;;;;;;2435:30:31::1;-1:-1:-1::0;;;;;2435:30:31;::::1;;::::0;;2476:35:::1;::::0;::::1;::::0;::::1;::::0;2435:30;;2476:35:::1;:::i;3666:267::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1341:6:31::1;3765:17;:43;3761:73;;;3817:17;;-1:-1:-1::0;;;3817:17:31::1;;;;;;;;;;;3761:73;3840:16;:36:::0;;;3887:41:::1;::::0;6036:25:84;;;3887:41:31::1;::::0;6009:18:84;3887:41:31::1;5890:177:84::0;3332:188:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3427:16:31::1;:36:::0;;;3474:41:::1;::::0;6036:25:84;;;3474:41:31::1;::::0;6024:2:84;6009:18;3474:41:31::1;5890:177:84::0;2051:195:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2134:23:31;::::1;2130:49;;2166:13;;-1:-1:-1::0;;;2166:13:31::1;;;;;;;;;;;2130:49;2185:8;:20:::0;;-1:-1:-1;;;;;;2185:20:31::1;-1:-1:-1::0;;;;;2185:20:31;::::1;;::::0;;2216:25:::1;::::0;::::1;::::0;::::1;::::0;2185:20;;2216:25:::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;316:212:30:-:0;1778:10:32;1768:21;;;;:9;:21;;;;;;;;1763:49;;1798:14;;-1:-1:-1;;;1798:14:32;;;;;;;;;;;1763:49;-1:-1:-1;;;;;396:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;::::1;;392:52;;;427:17;;-1:-1:-1::0;;;427:17:30::1;;;;;;;;;;;392:52;-1:-1:-1::0;;;;;450:22:30;::::1;;::::0;;;:8:::1;:22;::::0;;;;;:29;;-1:-1:-1;;450:29:30::1;475:4;450:29;::::0;;490:33;512:10:::1;::::0;450:22;490:33:::1;::::0;::::1;316:212:::0;:::o;2853:454:42:-;-1:-1:-1;;;;;2960:18:42;;2933:15;2960:18;;;:9;:18;;;;;;2956:80;;-1:-1:-1;;;;;2993:18:42;;;;;;:9;:18;;;;;3014:15;2993:36;;2956:80;3041:21;:8;3054:7;3041:12;:21::i;:::-;-1:-1:-1;;;;;;;3078:21:42;;;;;;;:12;:21;;;;;;;;:31;;;;;;;;;;;;;;3115:38;;;;3188:14;;;:5;:14;;;;;:24;;;;;;;;;:35;;3078:31;;;;3188:35;;3078:31;;3188:35;:::i;:::-;;;;-1:-1:-1;;3245:8:42;;-1:-1:-1;;;;;3233:20:42;;;3245:8;;3233:20;3229:74;;;3273:8;;3263:33;;-1:-1:-1;;;3263:33:42;;;;;6036:25:84;;;-1:-1:-1;;;;;3273:8:42;;;;3263:24;;6009:18:84;;3263:33:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2853:454;;;;:::o;634:205:4:-;746:86;766:5;796:23;;;821:2;825:5;773:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;773:58:4;;;;;;;;;;;;;;-1:-1:-1;;;;;773:58:4;-1:-1:-1;;;;;;773:58:4;;;;;;;;;;746:19;:86::i;:::-;634:205;;;:::o;8100:165:8:-;-1:-1:-1;;;;;8233:23:8;;8180:4;3767:19;;;:12;;;:19;;;;;;:24;;8203:55;8196:62;8100:165;-1:-1:-1;;;8100:165:8:o;7545:150::-;7615:4;7638:50;7643:3;-1:-1:-1;;;;;7663:23:8;;7638:4;:50::i;7863:156::-;7936:4;7959:53;7967:3;-1:-1:-1;;;;;7987:23:8;;7959:7;:53::i;1148:382:41:-;1292:8;;-1:-1:-1;;;;;1281:19:41;;;1292:8;;1281:19;1277:150;;1339:10;;-1:-1:-1;;;;;1314:24:41;;;;;;1339:10;1351:27;1365:13;1351:11;:27;:::i;:::-;1314:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1314:65:41;;;;;;;;-1:-1:-1;;1314:65:41;;;;;;;;;;;;:::i;:::-;;;1310:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1398:23;1310:111;;;1380:17;1310:111;-1:-1:-1;;;;;1432:14:41;;;;;;;:5;:14;;;;;;;;:23;;;;;;;;;;;:38;;1459:11;;1432:14;:38;;1459:11;;1432:38;:::i;:::-;;;;-1:-1:-1;;;;;;;1476:23:41;;;;;;;:14;:23;;;;;;;;:32;;;;;;;;;;;:49;;1512:13;;1476:23;:49;;1512:13;;1476:49;:::i;:::-;;;;-1:-1:-1;;;;;;1148:382:41:o;9499:257:8:-;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;845:241:4:-;1010:68;;-1:-1:-1;;;;;2710:15:84;;;1010:68:4;;;2692:34:84;2762:15;;2742:18;;;2735:43;2794:18;;;2787:34;;;983:96:4;;1003:5;;-1:-1:-1;;;1033:27:4;2627:18:84;;1010:68:4;2452:375:84;3140:706:4;3559:23;3585:69;3613:4;3585:69;;;;;;;;;;;;;;;;;3593:5;-1:-1:-1;;;;;3585:27:4;;;:69;;;;;:::i;:::-;3668:17;;3559:95;;-1:-1:-1;3668:21:4;3664:176;;3763:10;3752:30;;;;;;;;;;;;:::i;:::-;3744:85;;;;-1:-1:-1;;;3744:85:4;;5321:2:84;3744:85:4;;;5303:21:84;5360:2;5340:18;;;5333:30;5399:34;5379:18;;;5372:62;-1:-1:-1;;;5450:18:84;;;5443:40;5500:19;;3744:85:4;5119:406:84;1630:404:8;1693:4;3767:19;;;:12;;;:19;;;;;;1709:319;;-1:-1:-1;1751:23:8;;;;;;;;:11;:23;;;;;;;;;;;;;1931:18;;1909:19;;;:12;;;:19;;;;;;:40;;;;1963:11;;1709:319;-1:-1:-1;2012:5:8;2005:12;;2202:1388;2268:4;2405:19;;;:12;;;:19;;;;;;2439:15;;2435:1149;;2808:21;2832:14;2845:1;2832:10;:14;:::i;:::-;2880:18;;2808:38;;-1:-1:-1;2860:17:8;;2880:22;;2901:1;;2880:22;:::i;:::-;2860:42;;2934:13;2921:9;:26;2917:398;;2967:17;2987:3;:11;;2999:9;2987:22;;;;;;;;:::i;:::-;;;;;;;;;2967:42;;3138:9;3109:3;:11;;3121:13;3109:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3221:23;;;:12;;;:23;;;;;:36;;;2917:398;3393:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3485:3;:12;;:19;3498:5;3485:19;;;;;;;;;;;3478:26;;;3526:4;3519:11;;;;;;;2435:1149;3568:5;3561:12;;;;;4986:109;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;3461:223:5:-;3594:12;3625:52;3647:6;3655:4;3661:1;3664:12;3625:21;:52::i;:::-;3618:59;3461:223;-1:-1:-1;;;;3461:223:5:o;4548:499::-;4713:12;4770:5;4745:21;:30;;4737:81;;;;-1:-1:-1;;;4737:81:5;;4556:2:84;4737:81:5;;;4538:21:84;4595:2;4575:18;;;4568:30;4634:34;4614:18;;;4607:62;-1:-1:-1;;;4685:18:84;;;4678:36;4731:19;;4737:81:5;4354:402:84;4737:81:5;1034:20;;4828:60;;;;-1:-1:-1;;;4828:60:5;;4963:2:84;4828:60:5;;;4945:21:84;5002:2;4982:18;;;4975:30;5041:31;5021:18;;;5014:59;5090:18;;4828:60:5;4761:353:84;4828:60:5;4900:12;4914:23;4941:6;-1:-1:-1;;;;;4941:11:5;4960:5;4967:4;4941:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4899:73;;;;4989:51;5006:7;5015:10;5027:12;4989:16;:51::i;:::-;4982:58;4548:499;-1:-1:-1;;;;;;;4548:499:5:o;7161:692::-;7307:12;7335:7;7331:516;;;-1:-1:-1;7365:10:5;7358:17;;7331:516;7476:17;;:21;7472:365;;7670:10;7664:17;7730:15;7717:10;7713:2;7709:19;7702:44;7472:365;7809:12;7802:20;;-1:-1:-1;;;7802:20:5;;;;;;;;:::i;14:173:84:-;82:20;;-1:-1:-1;;;;;131:31:84;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:397::-;734:6;742;750;758;811:3;799:9;790:7;786:23;782:33;779:53;;;828:1;825;818:12;779:53;851:29;870:9;851:29;:::i;:::-;841:39;;899:38;933:2;922:9;918:18;899:38;:::i;:::-;648:397;;889:48;;-1:-1:-1;;;;984:2:84;969:18;;956:32;;1035:2;1020:18;1007:32;;648:397::o;1050:254::-;1118:6;1126;1179:2;1167:9;1158:7;1154:23;1150:32;1147:52;;;1195:1;1192;1185:12;1147:52;1218:29;1237:9;1218:29;:::i;:::-;1208:39;1294:2;1279:18;;;;1266:32;;-1:-1:-1;;;1050:254:84:o;1309:277::-;1376:6;1429:2;1417:9;1408:7;1404:23;1400:32;1397:52;;;1445:1;1442;1435:12;1397:52;1477:9;1471:16;1530:5;1523:13;1516:21;1509:5;1506:32;1496:60;;1552:1;1549;1542:12;1591:180;1650:6;1703:2;1691:9;1682:7;1678:23;1674:32;1671:52;;;1719:1;1716;1709:12;1671:52;-1:-1:-1;1742:23:84;;1591:180;-1:-1:-1;1591:180:84:o;1776:184::-;1846:6;1899:2;1887:9;1878:7;1874:23;1870:32;1867:52;;;1915:1;1912;1905:12;1867:52;-1:-1:-1;1938:16:84;;1776:184;-1:-1:-1;1776:184:84:o;1965:274::-;2094:3;2132:6;2126:13;2148:53;2194:6;2189:3;2182:4;2174:6;2170:17;2148:53;:::i;:::-;2217:16;;;;;1965:274;-1:-1:-1;;1965:274:84:o;2244:203::-;-1:-1:-1;;;;;2408:32:84;;;;2390:51;;2378:2;2363:18;;2244:203::o;2832:274::-;-1:-1:-1;;;;;3024:32:84;;;;3006:51;;3088:2;3073:18;;3066:34;2994:2;2979:18;;2832:274::o;3111:658::-;3282:2;3334:21;;;3404:13;;3307:18;;;3426:22;;;3253:4;;3282:2;3505:15;;;;3479:2;3464:18;;;3253:4;3548:195;3562:6;3559:1;3556:13;3548:195;;;3627:13;;-1:-1:-1;;;;;3623:39:84;3611:52;;3718:15;;;;3683:12;;;;3659:1;3577:9;3548:195;;;-1:-1:-1;3760:3:84;;3111:658;-1:-1:-1;;;;;;3111:658:84:o;3966:383::-;4115:2;4104:9;4097:21;4078:4;4147:6;4141:13;4190:6;4185:2;4174:9;4170:18;4163:34;4206:66;4265:6;4260:2;4249:9;4245:18;4240:2;4232:6;4228:15;4206:66;:::i;:::-;4333:2;4312:15;-1:-1:-1;;4308:29:84;4293:45;;;;4340:2;4289:54;;3966:383;-1:-1:-1;;3966:383:84:o;5530:355::-;5732:2;5714:21;;;5771:2;5751:18;;;5744:30;5810:33;5805:2;5790:18;;5783:61;5876:2;5861:18;;5530:355::o;6072:128::-;6112:3;6143:1;6139:6;6136:1;6133:13;6130:39;;;6149:18;;:::i;:::-;-1:-1:-1;6185:9:84;;6072:128::o;6205:125::-;6245:4;6273:1;6270;6267:8;6264:34;;;6278:18;;:::i;:::-;-1:-1:-1;6315:9:84;;6205:125::o;6335:258::-;6407:1;6417:113;6431:6;6428:1;6425:13;6417:113;;;6507:11;;;6501:18;6488:11;;;6481:39;6453:2;6446:10;6417:113;;;6548:6;6545:1;6542:13;6539:48;;;-1:-1:-1;;6583:1:84;6565:16;;6558:27;6335:258::o;6598:127::-;6659:10;6654:3;6650:20;6647:1;6640:31;6690:4;6687:1;6680:15;6714:4;6711:1;6704:15;6730:127;6791:10;6786:3;6782:20;6779:1;6772:31;6822:4;6819:1;6812:15;6846:4;6843:1;6836:15;6862:127;6923:10;6918:3;6914:20;6911:1;6904:31;6954:4;6951:1;6944:15;6978:4;6975:1;6968:15"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1894600",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "52082",
                "activate(address)": "infinite",
                "addDisputer(address)": "30155",
                "addSlasher(address)": "30155",
                "bond(address,uint256)": "infinite",
                "bondTime()": "2307",
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "dispute(address)": "30825",
                "disputers(address)": "2753",
                "disputes(address)": "2752",
                "fee()": "2416",
                "firstSeen(address)": "2662",
                "governance()": "2649",
                "hasBonded(address)": "2818",
                "inflationPeriod()": "2592",
                "internalSlash(address,address,uint256,uint256)": "infinite",
                "isKeeper(address)": "infinite",
                "jobTokenCredits(address,address)": "infinite",
                "jobs()": "infinite",
                "keep3rHelper()": "2603",
                "keep3rV1()": "2517",
                "keep3rV1Proxy()": "2405",
                "keepers()": "infinite",
                "kp3rWethPool()": "2604",
                "liquidityMinimum()": "2329",
                "pendingBonds(address,address)": "infinite",
                "pendingGovernance()": "2625",
                "pendingUnbonds(address,address)": "infinite",
                "removeDisputer(address)": "30299",
                "removeSlasher(address)": "30256",
                "resolve(address)": "30796",
                "revoke(address)": "infinite",
                "rewardPeriodTime()": "2505",
                "setBondTime(uint256)": "25806",
                "setFee(uint256)": "25630",
                "setGovernance(address)": "28014",
                "setInflationPeriod(uint256)": "25784",
                "setKeep3rHelper(address)": "27983",
                "setKeep3rV1(address)": "28048",
                "setKeep3rV1Proxy(address)": "27916",
                "setKeeper(address)": "infinite",
                "setKp3rWethPool(address)": "infinite",
                "setLiquidityMinimum(uint256)": "25717",
                "setRewardPeriodTime(uint256)": "25652",
                "setUnbondTime(uint256)": "25564",
                "slash(address,address,uint256,uint256)": "infinite",
                "slashers(address)": "2818",
                "unbond(address,uint256)": "infinite",
                "unbondTime()": "2439",
                "withdraw(address)": "infinite",
                "workCompleted(address)": "2620"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "activate(address)": "1c5a9d9c",
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "bond(address,uint256)": "a515366a",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "dispute(address)": "f75f9f7b",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "internalSlash(address,address,uint256,uint256)": "75b9a542",
              "isKeeper(address)": "6ba42aaa",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityMinimum()": "633fb68f",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "resolve(address)": "55ea6c47",
              "revoke(address)": "74a8f103",
              "rewardPeriodTime()": "768b5d90",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKeeper(address)": "748747e6",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slash(address,address,uint256,uint256)": "c20297f0",
              "slashers(address)": "b87fcbff",
              "unbond(address,uint256)": "a5d059ca",
              "unbondTime()": "a7d2e784",
              "withdraw(address)": "51cff8d9",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kph\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyAJob\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Activation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"Dispute\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"KeeperRevoke\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"KeeperSlash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"Resolve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonded\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_bondAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unbondAmount\",\"type\":\"uint256\"}],\"name\":\"internalSlash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"setKeeper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonded\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_bondAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unbondAmount\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"activate(address)\":{\"params\":{\"_bonding\":\"The asset being activated as bond collateral\"}},\"bond(address,uint256)\":{\"params\":{\"_amount\":\"The amount of bonding asset being bonded\",\"_bonding\":\"The asset being bonded\"}},\"dispute(address)\":{\"params\":{\"_jobOrKeeper\":\"The address in dispute\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"resolve(address)\":{\"params\":{\"_jobOrKeeper\":\"The address cleared\"}},\"revoke(address)\":{\"params\":{\"_keeper\":\"The address being slashed\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"slash(address,address,uint256,uint256)\":{\"params\":{\"_bondAmount\":\"The bonded amount being slashed\",\"_bonded\":\"The asset being slashed\",\"_keeper\":\"The address being slashed\",\"_unbondAmount\":\"The pending unbond amount being slashed\"}},\"unbond(address,uint256)\":{\"params\":{\"_amount\":\"Allows for partial unbonding\",\"_bonding\":\"The asset being unbonded\"}},\"withdraw(address)\":{\"params\":{\"_bonding\":\"The asset to withdraw from the bonding pool\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAJob()\":[{\"notice\":\"Throws when the address that is trying to register as a job is already a job\"}],\"AlreadyDisputed()\":[{\"notice\":\"Throws when a job or keeper is already disputed\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"NotDisputed()\":[{\"notice\":\"Throws when a job or keeper is not disputed and someone tries to resolve the dispute\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"Activation(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#activate is called\"},\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Dispute(address,address)\":{\"notice\":\"Emitted when a keeper or a job is disputed\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"KeeperRevoke(address,address)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#revoke is called\"},\"KeeperSlash(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#slash is called\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"Resolve(address,address)\":{\"notice\":\"Emitted when a dispute is resolved\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"},\"Withdrawal(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#withdraw is called\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"activate(address)\":{\"notice\":\"End of the bonding process after bonding time has passed\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"bond(address,uint256)\":{\"notice\":\"Beginning of the bonding process\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"dispute(address)\":{\"notice\":\"Allows governance to create a dispute for a given keeper/job\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"resolve(address)\":{\"notice\":\"Allows governance to resolve a dispute on a keeper/job\"},\"revoke(address)\":{\"notice\":\"Blacklists a keeper from participating in the network\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slash(address,address,uint256,uint256)\":{\"notice\":\"Allows governance to slash a keeper based on a dispute\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"unbond(address,uint256)\":{\"notice\":\"Beginning of the unbonding process\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdraw(address)\":{\"notice\":\"Withdraw funds after unbonding has finished\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol\":\"Keep3rKeeperDisputableForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rParameters.sol';\\nimport './Keep3rRoles.sol';\\nimport '../../interfaces/peripherals/IKeep3rDisputable.sol';\\n\\nabstract contract Keep3rDisputable is IKeep3rDisputable, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rDisputable\\n  function dispute(address _jobOrKeeper) external override onlyDisputer {\\n    if (disputes[_jobOrKeeper]) revert AlreadyDisputed();\\n    disputes[_jobOrKeeper] = true;\\n    emit Dispute(_jobOrKeeper, msg.sender);\\n  }\\n\\n  /// @inheritdoc IKeep3rDisputable\\n  function resolve(address _jobOrKeeper) external override onlyDisputer {\\n    if (!disputes[_jobOrKeeper]) revert NotDisputed();\\n    disputes[_jobOrKeeper] = false;\\n    emit Resolve(_jobOrKeeper, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x941e9ba02b2ad3975edc444cd771ef1e5386051553632140f882258ea7e4d4bc\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './Keep3rKeeperFundable.sol';\\nimport '../Keep3rDisputable.sol';\\nimport '../../../interfaces/external/IKeep3rV1.sol';\\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\\n\\nabstract contract Keep3rKeeperDisputable is IKeep3rKeeperDisputable, Keep3rDisputable, Keep3rKeeperFundable {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rKeeperDisputable\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) public override onlySlasher {\\n    if (!disputes[_keeper]) revert NotDisputed();\\n    _slash(_keeper, _bonded, _bondAmount, _unbondAmount);\\n    emit KeeperSlash(_keeper, msg.sender, _bondAmount + _unbondAmount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperDisputable\\n  function revoke(address _keeper) external override onlySlasher {\\n    if (!disputes[_keeper]) revert NotDisputed();\\n    _keepers.remove(_keeper);\\n    _slash(_keeper, keep3rV1, bonds[_keeper][keep3rV1], pendingUnbonds[_keeper][keep3rV1]);\\n    emit KeeperRevoke(_keeper, msg.sender);\\n  }\\n\\n  function _slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) internal {\\n    if (_bonded != keep3rV1) {\\n      try IERC20(_bonded).transfer(governance, _bondAmount + _unbondAmount) returns (bool) {} catch (bytes memory) {}\\n    }\\n    bonds[_keeper][_bonded] -= _bondAmount;\\n    pendingUnbonds[_keeper][_bonded] -= _unbondAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x1b983519e5367b29d8cd4698c56ed9c18013f757bf0a6a2656572547aaf20208\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\\n\\nimport '../../../interfaces/external/IKeep3rV1.sol';\\nimport '../../../interfaces/external/IKeep3rV1Proxy.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\n\\nabstract contract Keep3rKeeperFundable is IKeep3rKeeperFundable, ReentrancyGuard, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function bond(address _bonding, uint256 _amount) external override nonReentrant {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (_jobs.contains(msg.sender)) revert AlreadyAJob();\\n    canActivateAfter[msg.sender][_bonding] = block.timestamp + bondTime;\\n\\n    uint256 _before = IERC20(_bonding).balanceOf(address(this));\\n    IERC20(_bonding).safeTransferFrom(msg.sender, address(this), _amount);\\n    _amount = IERC20(_bonding).balanceOf(address(this)) - _before;\\n\\n    hasBonded[msg.sender] = true;\\n    pendingBonds[msg.sender][_bonding] += _amount;\\n\\n    emit Bonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function activate(address _bonding) external override {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (canActivateAfter[msg.sender][_bonding] == 0) revert BondsUnexistent();\\n    if (canActivateAfter[msg.sender][_bonding] >= block.timestamp) revert BondsLocked();\\n\\n    delete canActivateAfter[msg.sender][_bonding];\\n\\n    uint256 _amount = _activate(msg.sender, _bonding);\\n    emit Activation(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function unbond(address _bonding, uint256 _amount) external override {\\n    canWithdrawAfter[msg.sender][_bonding] = block.timestamp + unbondTime;\\n    bonds[msg.sender][_bonding] -= _amount;\\n    pendingUnbonds[msg.sender][_bonding] += _amount;\\n\\n    emit Unbonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function withdraw(address _bonding) external override nonReentrant {\\n    if (pendingUnbonds[msg.sender][_bonding] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[msg.sender][_bonding] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[msg.sender]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[msg.sender][_bonding];\\n\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1Proxy(keep3rV1Proxy).mint(_amount);\\n    }\\n\\n    delete pendingUnbonds[msg.sender][_bonding];\\n    delete canWithdrawAfter[msg.sender][_bonding];\\n\\n    IERC20(_bonding).safeTransfer(msg.sender, _amount);\\n\\n    emit Withdrawal(msg.sender, _bonding, _amount);\\n  }\\n\\n  function _activate(address _keeper, address _bonding) internal virtual returns (uint256 _amount) {\\n    if (firstSeen[_keeper] == 0) {\\n      firstSeen[_keeper] = block.timestamp;\\n    }\\n    _keepers.add(_keeper);\\n    _amount = pendingBonds[_keeper][_bonding];\\n    delete pendingBonds[_keeper][_bonding];\\n\\n    // bond provided tokens\\n    bonds[_keeper][_bonding] += _amount;\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1(keep3rV1).burn(_amount);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcd56d53eacaa3dbffc2cb573562482ba05b51246bf273f6bde9fb5de52c54eb2\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../contracts/peripherals/keepers/Keep3rKeeperDisputable.sol';\\n\\ncontract Keep3rKeeperDisputableForTest is Keep3rKeeperDisputable {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  constructor(\\n    address _kph,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) Keep3rParameters(_kph, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\\n\\n  function setKeeper(address _keeper) external {\\n    _keepers.add(_keeper);\\n  }\\n\\n  function internalSlash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external {\\n    _slash(_bonded, _keeper, _bondAmount, _unbondAmount);\\n  }\\n\\n  function isKeeper(address _address) external view returns (bool _isKeeper) {\\n    _isKeeper = _keepers.contains(_address);\\n  }\\n}\\n\",\"keccak256\":\"0xa355da3ee4d2590e4a6bb2be999210d07dfa1ef8ea33d0edb0822469c33ffc04\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n// solhint-disable func-name-mixedcase\\ninterface IKeep3rV1 is IERC20, IERC20Metadata {\\n  // Structs\\n  struct Checkpoint {\\n    uint32 fromBlock;\\n    uint256 votes;\\n  }\\n\\n  // Events\\n  event DelegateChanged(address indexed _delegator, address indexed _fromDelegate, address indexed _toDelegate);\\n  event DelegateVotesChanged(address indexed _delegate, uint256 _previousBalance, uint256 _newBalance);\\n  event SubmitJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event ApplyCredit(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event RemoveJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event UnbondJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event JobAdded(address indexed _job, uint256 _block, address _governance);\\n  event JobRemoved(address indexed _job, uint256 _block, address _governance);\\n  event KeeperWorked(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _block, uint256 _amount);\\n  event KeeperBonding(address indexed _keeper, uint256 _block, uint256 _active, uint256 _bond);\\n  event KeeperBonded(address indexed _keeper, uint256 _block, uint256 _activated, uint256 _bond);\\n  event KeeperUnbonding(address indexed _keeper, uint256 _block, uint256 _deactive, uint256 _bond);\\n  event KeeperUnbound(address indexed _keeper, uint256 _block, uint256 _deactivated, uint256 _bond);\\n  event KeeperSlashed(address indexed _keeper, address indexed _slasher, uint256 _block, uint256 _slash);\\n  event KeeperDispute(address indexed _keeper, uint256 _block);\\n  event KeeperResolved(address indexed _keeper, uint256 _block);\\n  event TokenCreditAddition(address indexed _credit, address indexed _job, address indexed _creditor, uint256 _block, uint256 _amount);\\n\\n  // Variables\\n  function KPRH() external returns (address);\\n\\n  function delegates(address _delegator) external view returns (address);\\n\\n  function checkpoints(address _account, uint32 _checkpoint) external view returns (Checkpoint memory);\\n\\n  function numCheckpoints(address _account) external view returns (uint32);\\n\\n  function DOMAIN_TYPEHASH() external returns (bytes32);\\n\\n  function DOMAINSEPARATOR() external returns (bytes32);\\n\\n  function DELEGATION_TYPEHASH() external returns (bytes32);\\n\\n  function PERMIT_TYPEHASH() external returns (bytes32);\\n\\n  function nonces(address _user) external view returns (uint256);\\n\\n  function BOND() external returns (uint256);\\n\\n  function UNBOND() external returns (uint256);\\n\\n  function LIQUIDITYBOND() external returns (uint256);\\n\\n  function FEE() external returns (uint256);\\n\\n  function BASE() external returns (uint256);\\n\\n  function ETH() external returns (address);\\n\\n  function bondings(address _user, address _bonding) external view returns (uint256);\\n\\n  function canWithdrawAfter(address _user, address _bonding) external view returns (uint256);\\n\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function pendingbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function bonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function votes(address _delegator) external view returns (uint256);\\n\\n  function firstSeen(address _keeper) external view returns (uint256);\\n\\n  function disputes(address _keeper) external view returns (bool);\\n\\n  function lastJob(address _keeper) external view returns (uint256);\\n\\n  function workCompleted(address _keeper) external view returns (uint256);\\n\\n  function jobs(address _job) external view returns (bool);\\n\\n  function credits(address _job, address _credit) external view returns (uint256);\\n\\n  function liquidityProvided(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmountsUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function jobProposalDelay(address _job) external view returns (uint256);\\n\\n  function liquidityApplied(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmount(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function keepers(address _keeper) external view returns (bool);\\n\\n  function blacklist(address _keeper) external view returns (bool);\\n\\n  function keeperList(uint256 _index) external view returns (address);\\n\\n  function jobList(uint256 _index) external view returns (address);\\n\\n  function governance() external returns (address);\\n\\n  function pendingGovernance() external returns (address);\\n\\n  function liquidityAccepted(address _liquidity) external view returns (bool);\\n\\n  function liquidityPairs(uint256 _index) external view returns (address);\\n\\n  // Methods\\n  function getCurrentVotes(address _account) external view returns (uint256);\\n\\n  function addCreditETH(address _job) external payable;\\n\\n  function addCredit(\\n    address _credit,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function pairs() external view returns (address[] memory);\\n\\n  function addLiquidityToJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function applyCreditToJob(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external;\\n\\n  function unbondLiquidityFromJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function removeLiquidityFromJob(address _liquidity, address _job) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function burn(uint256 _amount) external;\\n\\n  function worked(address _keeper) external;\\n\\n  function receipt(\\n    address _credit,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function receiptETH(address _keeper, uint256 _amount) external;\\n\\n  function addJob(address _job) external;\\n\\n  function getJobs() external view returns (address[] memory);\\n\\n  function removeJob(address _job) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function setGovernance(address _governance) external;\\n\\n  function acceptGovernance() external;\\n\\n  function isKeeper(address _keeper) external returns (bool);\\n\\n  function isMinKeeper(\\n    address _keeper,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  function getKeepers() external view returns (address[] memory);\\n\\n  function activate(address _bonding) external;\\n\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function withdraw(address _bonding) external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xa9806cd6666ab1b7375ef72446964a72397fd4cefc7cc8c5b37caa7c50df0246\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../peripherals/IGovernable.sol';\\n\\ninterface IKeep3rV1Proxy is IGovernable {\\n  // Structs\\n  struct Recipient {\\n    address recipient;\\n    uint256 caps;\\n  }\\n\\n  // Variables\\n  function keep3rV1() external view returns (address);\\n\\n  function minter() external view returns (address);\\n\\n  function next(address) external view returns (uint256);\\n\\n  function caps(address) external view returns (uint256);\\n\\n  function recipients() external view returns (address[] memory);\\n\\n  function recipientsCaps() external view returns (Recipient[] memory);\\n\\n  // Errors\\n  error Cooldown();\\n  error NoDrawableAmount();\\n  error ZeroAddress();\\n  error OnlyMinter();\\n\\n  // Methods\\n  function addRecipient(address recipient, uint256 amount) external;\\n\\n  function removeRecipient(address recipient) external;\\n\\n  function draw() external returns (uint256 _amount);\\n\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  function setMinter(address _minter) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function mint(address _account, uint256 _amount) external;\\n\\n  function setKeep3rV1Governance(address _governance) external;\\n\\n  function acceptKeep3rV1Governance() external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function addJob(address _job) external;\\n\\n  function removeJob(address _job) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xfb2e81fe347b39aabce849ef2d42c6df846b7ef0ed5ae952c85bbb708da99408\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Creates/resolves disputes for jobs or keepers\\n///         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\\n///         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\\ninterface IKeep3rDisputable {\\n  /// @notice Emitted when a keeper or a job is disputed\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _disputer The user that called the function and disputed the keeper\\n  event Dispute(address indexed _jobOrKeeper, address indexed _disputer);\\n\\n  /// @notice Emitted when a dispute is resolved\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _resolver The user that called the function and resolved the dispute\\n  event Resolve(address indexed _jobOrKeeper, address indexed _resolver);\\n\\n  /// @notice Throws when a job or keeper is already disputed\\n  error AlreadyDisputed();\\n\\n  /// @notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute\\n  error NotDisputed();\\n\\n  /// @notice Allows governance to create a dispute for a given keeper/job\\n  /// @param _jobOrKeeper The address in dispute\\n  function dispute(address _jobOrKeeper) external;\\n\\n  /// @notice Allows governance to resolve a dispute on a keeper/job\\n  /// @param _jobOrKeeper The address cleared\\n  function resolve(address _jobOrKeeper) external;\\n}\\n\",\"keccak256\":\"0x002b9b4c75e62d48d74b6447649d39eb5c1e128d2523bb11e08e9cd3e27b1f70\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 5368,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "_keepers",
                "offset": 0,
                "slot": "1",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "workCompleted",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "firstSeen",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "disputes",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "bonds",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "hasBonded",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "_jobs",
                "offset": 0,
                "slot": "19",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "governance",
                "offset": 0,
                "slot": "21",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "22",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "slashers",
                "offset": 0,
                "slot": "23",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "disputers",
                "offset": 0,
                "slot": "24",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "25",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "26",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "bondTime",
                "offset": 0,
                "slot": "29",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "unbondTime",
                "offset": 0,
                "slot": "30",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                "label": "fee",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol:Keep3rKeeperDisputableForTest",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyAJob()": [
                {
                  "notice": "Throws when the address that is trying to register as a job is already a job"
                }
              ],
              "AlreadyDisputed()": [
                {
                  "notice": "Throws when a job or keeper is already disputed"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "NotDisputed()": [
                {
                  "notice": "Throws when a job or keeper is not disputed and someone tries to resolve the dispute"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "Activation(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#activate is called"
              },
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Dispute(address,address)": {
                "notice": "Emitted when a keeper or a job is disputed"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "KeeperRevoke(address,address)": {
                "notice": "Emitted when Keep3rKeeperDisputable#revoke is called"
              },
              "KeeperSlash(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperDisputable#slash is called"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "Resolve(address,address)": {
                "notice": "Emitted when a dispute is resolved"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              },
              "Withdrawal(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#withdraw is called"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "activate(address)": {
                "notice": "End of the bonding process after bonding time has passed"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "bond(address,uint256)": {
                "notice": "Beginning of the bonding process"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "dispute(address)": {
                "notice": "Allows governance to create a dispute for a given keeper/job"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "resolve(address)": {
                "notice": "Allows governance to resolve a dispute on a keeper/job"
              },
              "revoke(address)": {
                "notice": "Blacklists a keeper from participating in the network"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slash(address,address,uint256,uint256)": {
                "notice": "Allows governance to slash a keeper based on a dispute"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "unbond(address,uint256)": {
                "notice": "Beginning of the unbonding process"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdraw(address)": {
                "notice": "Withdraw funds after unbonding has finished"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol": {
        "Keep3rKeeperFundableForTest": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kph",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "AlreadyAJob",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Activation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Withdrawal",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "activate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "bond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "isKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "job",
                  "type": "address"
                }
              ],
              "name": "setJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "activate(address)": {
                "params": {
                  "_bonding": "The asset being activated as bond collateral"
                }
              },
              "bond(address,uint256)": {
                "params": {
                  "_amount": "The amount of bonding asset being bonded",
                  "_bonding": "The asset being bonded"
                }
              },
              "jobs()": {
                "returns": {
                  "_list": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_list": "Array with all the keepers in _keepers"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "unbond(address,uint256)": {
                "params": {
                  "_amount": "Allows for partial unbonding",
                  "_bonding": "The asset being unbonded"
                }
              },
              "withdraw(address)": {
                "params": {
                  "_bonding": "The asset to withdraw from the bonding pool"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {
                "@_11362": {
                  "entryPoint": null,
                  "id": 11362,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_18": {
                  "entryPoint": null,
                  "id": 18,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@_5290": {
                  "entryPoint": null,
                  "id": 5290,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@_5689": {
                  "entryPoint": null,
                  "id": 5689,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@_5964": {
                  "entryPoint": null,
                  "id": 5964,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "abi_decode_address_fromMemory": {
                  "entryPoint": 423,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory": {
                  "entryPoint": 452,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 4
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 545,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:1152:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "74:117:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "84:22:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "99:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "93:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "93:13:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "84:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "169:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "178:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "171:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "171:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "171:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "128:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "139:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "154:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "159:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "150:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "150:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "163:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "146:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "146:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "135:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "135:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "118:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "118:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "115:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "53:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "64:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "328:332:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "375:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "384:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "387:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "377:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "377:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "377:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "349:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "358:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "345:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "345:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "370:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "341:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "341:33:84"
                              },
                              "nodeType": "YulIf",
                              "src": "338:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "400:50:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "440:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "410:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "410:40:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "400:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "459:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "503:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "514:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "499:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "499:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "469:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "469:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "459:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "527:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "571:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "582:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "567:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "567:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "537:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "537:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "527:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "595:59:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "639:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "650:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "635:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "635:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "605:29:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "605:49:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "595:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "270:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "281:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "293:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "301:6:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "309:6:84",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "317:6:84",
                            "type": ""
                          }
                        ],
                        "src": "196:464:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "743:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "789:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "798:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "801:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "791:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "791:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "791:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "764:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "773:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "760:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "760:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "785:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "756:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "756:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "753:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "814:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "833:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "827:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "827:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "818:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "896:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "905:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "908:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "898:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "898:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "898:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "865:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "886:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "879:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "879:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "872:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "872:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "862:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "855:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "855:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "852:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "921:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "931:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "921:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "709:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "720:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "732:6:84",
                            "type": ""
                          }
                        ],
                        "src": "665:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1048:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1058:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1070:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1081:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1066:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1066:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1058:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1100:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1115:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1131:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1136:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "1127:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1127:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1140:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1123:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1123:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1111:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1111:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1093:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1093:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1093:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1017:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1028:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1039:4:84",
                            "type": ""
                          }
                        ],
                        "src": "947:203:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526203f480601d5562127500601e556729a2241af62c0000601f5562069780602055622cd300602155601e6022553480156200003e57600080fd5b50604051620020ba380380620020ba8339810160408190526200006191620001c4565b6001600055838383833380806200008a5760405162b293ed60e81b815260040160405180910390fd5b601580546001600160a01b03199081166001600160a01b0393841617909155601b80548216888416178155601980548316888516179055601a80548316878516179055601c8054831686851690811782556000818152600c602052604090819020805490951690911790935590549054915163696a437b60e01b81529183166004830152909116915063696a437b9060240160206040518083038186803b1580156200013557600080fd5b505afa1580156200014a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000170919062000221565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055506200024c95505050505050565b80516001600160a01b0381168114620001bf57600080fd5b919050565b60008060008060808587031215620001db57600080fd5b620001e685620001a7565b9350620001f660208601620001a7565b92506200020660408601620001a7565b91506200021660608601620001a7565b905092959194509250565b6000602082840312156200023457600080fd5b815180151581146200024557600080fd5b9392505050565b611e5e806200025c6000396000f3fe608060405234801561001057600080fd5b50600436106102605760003560e01c80639d5c33d811610147578063c7ae40d0116100be578063c7ae40d0146105cc578063cb4be2bb146105df578063cb54694d146105f2578063cd22af1b14610605578063ddca3f4314610630578063e326ac4314610639578063ebbb619414610659578063ec00cdfc1461066c578063f0f346b91461067f578063f11a1d1a14610692578063f39c38a0146106a5578063fc253d2b146106b857600080fd5b80639d5c33d8146104ba578063a39744b5146104cd578063a515366a146104f8578063a5d059ca1461050b578063a662031b1461051e578063a7d2e78414610531578063aac6aa9c1461053a578063ab033ea91461054d578063b0103b1a14610560578063b239223314610583578063b7e7734014610596578063b87fcbff146105a957600080fd5b80635ebe23f0116101db5780635ebe23f0146103ed578063633fb68f146103f657806368a9f19c146103ff57806369fe0e2d146104125780636ba42aaa1461042557806372da828a14610438578063768b5d901461044b5780637b40c913146104545780637c8fce23146104675780638cb22b761461047c5780638fe204dd1461049f578063951dc22c146104b257600080fd5b806307b435c21461026557806315006b82146102a3578063160e1e31146102ce578063168f92e7146102e35780631b44555e1461030e5780631c5a9d9c1461032e5780631ef94b911461034157806321040b0114610361578063238efcbc1461038c578063274a8db41461039457806351cff8d9146103c75780635aa6e675146103da575b600080fd5b610290610273366004611c1f565b601060209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6102906102b1366004611c1f565b600e60209081526000928352604080842090915290825290205481565b6102e16102dc366004611c04565b6106c1565b005b6102906102f1366004611c1f565b600760209081526000928352604080842090915290825290205481565b61029061031c366004611c04565b60036020526000908152604090205481565b6102e161033c366004611c04565b610827565b601954610354906001600160a01b031681565b60405161029a9190611cec565b61029061036f366004611c1f565b601160209081526000928352604080842090915290825290205481565b6102e1610960565b6103b76103a2366004611c04565b60186020526000908152604090205460ff1681565b604051901515815260200161029a565b6102e16103d5366004611c04565b6109ec565b601554610354906001600160a01b031681565b610290601d5481565b610290601f5481565b6102e161040d366004611c04565b610bf5565b6102e1610420366004611c9e565b610cad565b6103b7610433366004611c04565b610d0d565b6102e1610446366004611c04565b610d20565b61029060205481565b601c54610354906001600160a01b031681565b61046f610dbd565b60405161029a9190611d00565b6103b761048a366004611c04565b60126020526000908152604090205460ff1681565b6102e16104ad366004611c9e565b610dce565b61046f610e2e565b6102e16104c8366004611c04565b610e3a565b6102906104db366004611c1f565b600660209081526000928352604080842090915290825290205481565b6102e1610506366004611c52565b610ef2565b6102e1610519366004611c52565b611153565b6102e161052c366004611c04565b611226565b610290601e5481565b6102e1610548366004611c04565b611235565b6102e161055b366004611c04565b6112e9565b6103b761056e366004611c04565b60056020526000908152604090205460ff1681565b6102e1610591366004611c9e565b61135f565b6102e16105a4366004611c9e565b6113bf565b6103b76105b7366004611c04565b60176020526000908152604090205460ff1681565b601a54610354906001600160a01b031681565b6102e16105ed366004611c04565b61141f565b6102e1610600366004611c9e565b6114bc565b610290610613366004611c1f565b600f60209081526000928352604080842090915290825290205481565b61029060225481565b610290610647366004611c04565b60046020526000908152604090205481565b6102e1610667366004611c9e565b61153e565b6102e161067a366004611c04565b61159e565b6102e161068d366004611c04565b61163b565b601b54610354906001600160a01b031681565b601654610354906001600160a01b031681565b61029060215481565b6015546001600160a01b031633146106ec576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166107135760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b038084166001600160a01b031992831681179093556000838152600c6020526040908190208054909316909317909155601b54915163696a437b60e01b815291169063696a437b90610774908490600401611cec565b60206040518083038186803b15801561078c57600080fd5b505afa1580156107a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c49190611c7c565b6001600160a01b0382166000908152600d602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa9061081c908390611cec565b60405180910390a150565b3360009081526005602052604090205460ff1615610858576040516362e6201d60e01b815260040160405180910390fd5b336000908152600f602090815260408083206001600160a01b038516845290915290205461089957604051636258f48160e01b815260040160405180910390fd5b336000908152600f602090815260408083206001600160a01b038516845290915290205442116108dc57604051630fd0eeef60e11b815260040160405180910390fd5b336000818152600f602090815260408083206001600160a01b038616845290915281208190559061090d90836116ef565b9050816001600160a01b0316336001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a758360405161095491815260200190565b60405180910390a35050565b6016546001600160a01b0316331461098b57604051637ef5703160e11b815260040160405180910390fd5b60168054601580546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916109e291611cec565b60405180910390a1565b60026000541415610a185760405162461bcd60e51b8152600401610a0f90611d80565b60405180910390fd5b600260009081553381526011602090815260408083206001600160a01b0385168452909152902054610a5d5760405163184c088160e21b815260040160405180910390fd5b3360009081526010602090815260408083206001600160a01b03851684529091529020544211610aa0576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526005602052604090205460ff1615610ad1576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b0385811680865291909352922054601954909291161415610b6457601a5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b158015610b4b57600080fd5b505af1158015610b5f573d6000803e3d6000fd5b505050505b3360008181526011602090815260408083206001600160a01b03871680855290835281842084905584845260108352818420818552909252822091909155610bac9183611806565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b6015546001600160a01b03163314610c20576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff1615610c5a5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b9061081c908390611cec565b6015546001600160a01b03163314610cd8576040516354348f0360e01b815260040160405180910390fd5b60228190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d9060200161081c565b6000610d1a60018361186e565b92915050565b6015546001600160a01b03163314610d4b576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610d725760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b09061081c908390611cec565b6060610dc96013611893565b905090565b6015546001600160a01b03163314610df9576040516354348f0360e01b815260040160405180910390fd5b601e8190556040518181527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29060200161081c565b6060610dc96001611893565b6015546001600160a01b03163314610e65576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff1615610e9f5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f9061081c908390611cec565b60026000541415610f155760405162461bcd60e51b8152600401610a0f90611d80565b600260009081553381526005602052604090205460ff1615610f4a576040516362e6201d60e01b815260040160405180910390fd5b610f5560133361186e565b15610f735760405163d7229c4360e01b815260040160405180910390fd5b601d54610f809042611db7565b336000908152600f602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81529091906370a0823190610fcb903090600401611cec565b60206040518083038186803b158015610fe357600080fd5b505afa158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101b9190611cb7565b90506110326001600160a01b0384163330856118a0565b6040516370a0823160e01b815281906001600160a01b038516906370a0823190611060903090600401611cec565b60206040518083038186803b15801561107857600080fd5b505afa15801561108c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b09190611cb7565b6110ba9190611dcf565b336000908152601260209081526040808320805460ff19166001179055600e82528083206001600160a01b0388168452909152812080549294508492909190611104908490611db7565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b601e546111609042611db7565b3360008181526010602090815260408083206001600160a01b038816808552908352818420959095559282526006815282822093825292909252812080548392906111ac908490611dcf565b90915550503360009081526011602090815260408083206001600160a01b0386168452909152812080548392906111e4908490611db7565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de90602001610954565b6112316013826118de565b5050565b6015546001600160a01b03163314611260576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff16611299576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d0259061081c908390611cec565b6015546001600160a01b03163314611314576040516354348f0360e01b815260040160405180910390fd5b601680546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f9061081c908390611cec565b6015546001600160a01b0316331461138a576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb699060200161081c565b6015546001600160a01b031633146113ea576040516354348f0360e01b815260040160405180910390fd5b601d8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b439060200161081c565b6015546001600160a01b0316331461144a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166114715760405163d92e233d60e01b815260040160405180910390fd5b601a80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae2509061081c908390611cec565b6015546001600160a01b031633146114e7576040516354348f0360e01b815260040160405180910390fd5b6201518081101561150b57604051633f384aad60e21b815260040160405180910390fd5b60208181556040518281527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d9910161081c565b6015546001600160a01b03163314611569576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e79060200161081c565b6015546001600160a01b031633146115c9576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166115f05760405163d92e233d60e01b815260040160405180910390fd5b601980546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf9061081c908390611cec565b6015546001600160a01b03163314611666576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff1661169f57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e9061081c908390611cec565b6001600160a01b038216600090815260046020526040812054611728576001600160a01b03831660009081526004602052604090204290555b6117336001846118de565b50506001600160a01b038083166000818152600e6020908152604080832094861680845294825280832080549084905593835260068252808320948352939052918220805491928392611787908490611db7565b90915550506019546001600160a01b0383811691161415610d1a57601954604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156117e857600080fd5b505af11580156117fc573d6000803e3d6000fd5b5050505092915050565b6040516001600160a01b03831660248201526044810182905261186990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526118f3565b505050565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6060600061188c836119c5565b6040516001600160a01b03808516602483015283166044820152606481018290526118d89085906323b872dd60e01b90608401611832565b50505050565b600061188c836001600160a01b038416611a21565b6000611948826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611a709092919063ffffffff16565b80519091501561186957808060200190518101906119669190611c7c565b6118695760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a0f565b606081600001805480602002602001604051908101604052809291908181526020018280548015611a1557602002820191906000526020600020905b815481526020019060010190808311611a01575b50505050509050919050565b6000818152600183016020526040812054611a6857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d1a565b506000610d1a565b6060611a7f8484600085611a87565b949350505050565b606082471015611ae85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a0f565b843b611b365760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a0f565b600080866001600160a01b03168587604051611b529190611cd0565b60006040518083038185875af1925050503d8060008114611b8f576040519150601f19603f3d011682016040523d82523d6000602084013e611b94565b606091505b5091509150611ba4828286611baf565b979650505050505050565b60608315611bbe57508161188c565b825115611bce5782518084602001fd5b8160405162461bcd60e51b8152600401610a0f9190611d4d565b80356001600160a01b0381168114611bff57600080fd5b919050565b600060208284031215611c1657600080fd5b61188c82611be8565b60008060408385031215611c3257600080fd5b611c3b83611be8565b9150611c4960208401611be8565b90509250929050565b60008060408385031215611c6557600080fd5b611c6e83611be8565b946020939093013593505050565b600060208284031215611c8e57600080fd5b8151801515811461188c57600080fd5b600060208284031215611cb057600080fd5b5035919050565b600060208284031215611cc957600080fd5b5051919050565b60008251611ce2818460208701611de6565b9190910192915050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015611d415783516001600160a01b031683529284019291840191600101611d1c565b50909695505050505050565b6020815260008251806020840152611d6c816040850160208701611de6565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115611dca57611dca611e12565b500190565b600082821015611de157611de1611e12565b500390565b60005b83811015611e01578181015183820152602001611de9565b838111156118d85750506000910152565b634e487b7160e01b600052601160045260246000fdfea26469706673582212209c3039ca21025b3350c30ed3a48d59b32e8c69eab69919f6ffaa5effe99a3c1f64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH3 0x3F480 PUSH1 0x1D SSTORE PUSH3 0x127500 PUSH1 0x1E SSTORE PUSH8 0x29A2241AF62C0000 PUSH1 0x1F SSTORE PUSH3 0x69780 PUSH1 0x20 SSTORE PUSH3 0x2CD300 PUSH1 0x21 SSTORE PUSH1 0x1E PUSH1 0x22 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x20BA CODESIZE SUB DUP1 PUSH3 0x20BA DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x61 SWAP2 PUSH3 0x1C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE DUP4 DUP4 DUP4 DUP4 CALLER DUP1 DUP1 PUSH3 0x8A JUMPI PUSH1 0x40 MLOAD PUSH3 0xB293ED PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1B DUP1 SLOAD DUP3 AND DUP9 DUP5 AND OR DUP2 SSTORE PUSH1 0x19 DUP1 SLOAD DUP4 AND DUP9 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1A DUP1 SLOAD DUP4 AND DUP8 DUP6 AND OR SWAP1 SSTORE PUSH1 0x1C DUP1 SLOAD DUP4 AND DUP7 DUP6 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP6 AND SWAP1 SWAP2 OR SWAP1 SWAP4 SSTORE SWAP1 SLOAD SWAP1 SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x696A437B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x14A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x170 SWAP2 SWAP1 PUSH3 0x221 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x24C SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E6 DUP6 PUSH3 0x1A7 JUMP JUMPDEST SWAP4 POP PUSH3 0x1F6 PUSH1 0x20 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP3 POP PUSH3 0x206 PUSH1 0x40 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP2 POP PUSH3 0x216 PUSH1 0x60 DUP7 ADD PUSH3 0x1A7 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1E5E DUP1 PUSH3 0x25C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x260 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9D5C33D8 GT PUSH2 0x147 JUMPI DUP1 PUSH4 0xC7AE40D0 GT PUSH2 0xBE JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x5CC JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x5DF JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x5F2 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x605 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x630 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x639 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0x659 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0x66C JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x67F JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0x692 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x6A5 JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0x6B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xA515366A EQ PUSH2 0x4F8 JUMPI DUP1 PUSH4 0xA5D059CA EQ PUSH2 0x50B JUMPI DUP1 PUSH4 0xA662031B EQ PUSH2 0x51E JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x531 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x53A JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x596 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x5A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5EBE23F0 GT PUSH2 0x1DB JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x3F6 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x3FF JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x412 JUMPI DUP1 PUSH4 0x6BA42AAA EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x44B JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x467 JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x49F JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x4B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x265 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x2CE JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x2E3 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x1C5A9D9C EQ PUSH2 0x32E JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x341 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x361 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x38C JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x394 JUMPI DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x3C7 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x3DA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x290 PUSH2 0x273 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C1F JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x290 PUSH2 0x2B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C1F JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x2DC CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x6C1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x290 PUSH2 0x2F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C1F JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x31C CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x33C CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x827 JUMP JUMPDEST PUSH1 0x19 SLOAD PUSH2 0x354 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29A SWAP2 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH2 0x290 PUSH2 0x36F CALLDATASIZE PUSH1 0x4 PUSH2 0x1C1F JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x960 JUMP JUMPDEST PUSH2 0x3B7 PUSH2 0x3A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x29A JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x9EC JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH2 0x354 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x1D SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x40D CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0xBF5 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x420 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0xCAD JUMP JUMPDEST PUSH2 0x3B7 PUSH2 0x433 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0xD0D JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x446 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0xD20 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x354 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x46F PUSH2 0xDBD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29A SWAP2 SWAP1 PUSH2 0x1D00 JUMP JUMPDEST PUSH2 0x3B7 PUSH2 0x48A CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x4AD CALLDATASIZE PUSH1 0x4 PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0xDCE JUMP JUMPDEST PUSH2 0x46F PUSH2 0xE2E JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x4C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0xE3A JUMP JUMPDEST PUSH2 0x290 PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x1C1F JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x506 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C52 JUMP JUMPDEST PUSH2 0xEF2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x519 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C52 JUMP JUMPDEST PUSH2 0x1153 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x52C CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x1226 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x1E SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x548 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x1235 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x55B CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x12E9 JUMP JUMPDEST PUSH2 0x3B7 PUSH2 0x56E CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x591 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0x135F JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x5A4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0x13BF JUMP JUMPDEST PUSH2 0x3B7 PUSH2 0x5B7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1A SLOAD PUSH2 0x354 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x5ED CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x141F JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x600 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0x14BC JUMP JUMPDEST PUSH2 0x290 PUSH2 0x613 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C1F JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x647 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x667 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0x153E JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x67A CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x159E JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x68D CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x163B JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x354 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH2 0x354 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6EC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x713 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1B SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x774 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x78C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7C4 SWAP2 SWAP1 PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x858 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x899 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6258F481 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x8DC JUMPI PUSH1 0x40 MLOAD PUSH4 0xFD0EEEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP2 SWAP1 SSTORE SWAP1 PUSH2 0x90D SWAP1 DUP4 PUSH2 0x16EF JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3673530133B6DA67E9854F605B0CFA7BB9798CD33C18036DFC10D8DA7C4D4A75 DUP4 PUSH1 0x40 MLOAD PUSH2 0x954 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x98B JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x9E2 SWAP2 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0xA18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA0F SWAP1 PUSH2 0x1D80 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xA5D JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0xAA0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xAD1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP1 DUP7 MSTORE SWAP2 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SLOAD PUSH1 0x19 SLOAD SWAP1 SWAP3 SWAP2 AND EQ ISZERO PUSH2 0xB64 JUMPI PUSH1 0x1A SLOAD PUSH1 0x40 MLOAD PUSH4 0x140E25AD PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xA0712D68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB5F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x10 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP2 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xBAC SWAP2 DUP4 PUSH2 0x1806 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x2717EAD6B9200DD235AAD468C9809EA400FE33AC69B5BFAA6D3E90FC922B6398 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC20 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC5A JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCD8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x81C JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD1A PUSH1 0x1 DUP4 PUSH2 0x186E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD4B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD72 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x60 PUSH2 0xDC9 PUSH1 0x13 PUSH2 0x1893 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xDF9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP1 PUSH1 0x20 ADD PUSH2 0x81C JUMP JUMPDEST PUSH1 0x60 PUSH2 0xDC9 PUSH1 0x1 PUSH2 0x1893 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE65 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xE9F JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0xF15 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA0F SWAP1 PUSH2 0x1D80 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xF4A JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF55 PUSH1 0x13 CALLER PUSH2 0x186E JUMP JUMPDEST ISZERO PUSH2 0xF73 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD7229C43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D SLOAD PUSH2 0xF80 SWAP1 TIMESTAMP PUSH2 0x1DB7 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xFCB SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFF7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x101B SWAP2 SWAP1 PUSH2 0x1CB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x1032 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x18A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1060 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1078 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x108C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10B0 SWAP2 SWAP1 PUSH2 0x1CB7 JUMP JUMPDEST PUSH2 0x10BA SWAP2 SWAP1 PUSH2 0x1DCF JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0xE DUP3 MSTORE DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP3 SWAP5 POP DUP5 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x1104 SWAP1 DUP5 SWAP1 PUSH2 0x1DB7 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 CALLER SWAP1 PUSH32 0xA7E66869262026842E8D81F5E6806CDC8D846E27C824E2E22F4FE51442771B34 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x1160 SWAP1 TIMESTAMP PUSH2 0x1DB7 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x6 DUP2 MSTORE DUP3 DUP3 KECCAK256 SWAP4 DUP3 MSTORE SWAP3 SWAP1 SWAP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x11AC SWAP1 DUP5 SWAP1 PUSH2 0x1DCF JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x11E4 SWAP1 DUP5 SWAP1 PUSH2 0x1DB7 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE SWAP1 PUSH1 0x20 ADD PUSH2 0x954 JUMP JUMPDEST PUSH2 0x1231 PUSH1 0x13 DUP3 PUSH2 0x18DE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1260 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1299 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1314 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x138A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x81C JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13EA JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x81C JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x144A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1471 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x150B JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP2 ADD PUSH2 0x81C JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1569 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x81C JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x15C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x15F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x19 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1666 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x169F JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1728 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMPDEST PUSH2 0x1733 PUSH1 0x1 DUP5 PUSH2 0x18DE JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x6 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE SWAP2 DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 DUP4 SWAP3 PUSH2 0x1787 SWAP1 DUP5 SWAP1 PUSH2 0x1DB7 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x19 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xD1A JUMPI PUSH1 0x19 SLOAD PUSH1 0x40 MLOAD PUSH4 0x852CD8D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x42966C68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1869 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x18F3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x188C DUP4 PUSH2 0x19C5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x18D8 SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x1832 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x188C DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1A21 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1948 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1A70 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1869 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1966 SWAP2 SWAP1 PUSH2 0x1C7C JUMP JUMPDEST PUSH2 0x1869 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA0F JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1A15 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1A01 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1A68 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xD1A JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xD1A JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1A7F DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1A87 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1AE8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA0F JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x1B36 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA0F JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1B52 SWAP2 SWAP1 PUSH2 0x1CD0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B8F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B94 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1BA4 DUP3 DUP3 DUP7 PUSH2 0x1BAF JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1BBE JUMPI POP DUP2 PUSH2 0x188C JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x1BCE JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA0F SWAP2 SWAP1 PUSH2 0x1D4D JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1BFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x188C DUP3 PUSH2 0x1BE8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1C32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C3B DUP4 PUSH2 0x1BE8 JUMP JUMPDEST SWAP2 POP PUSH2 0x1C49 PUSH1 0x20 DUP5 ADD PUSH2 0x1BE8 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1C65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C6E DUP4 PUSH2 0x1BE8 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x188C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1CE2 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1DE6 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1D41 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1D1C JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1D6C DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1DCA JUMPI PUSH2 0x1DCA PUSH2 0x1E12 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1DE1 JUMPI PUSH2 0x1DE1 PUSH2 0x1E12 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E01 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1DE9 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x18D8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 ADDRESS CODECOPY 0xCA 0x21 MUL JUMPDEST CALLER POP 0xC3 0xE 0xD3 LOG4 DUP14 MSIZE 0xB3 0x2E DUP13 PUSH10 0xEAB69919F6FFAA5EFFE9 SWAP11 EXTCODECOPY 0x1F PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "140:502:65:-:0;;;702:6:31;667:41;;786:7;749:44;;877:7;834:50;;968:6;925:49;;1057:7;1015:49;;1135:2;1105:32;;258:203:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1637:1:0;1742:7;:22;387:4:65;393:9;404:14;420:13;447:10;;357:25:28;353:63;;391:25;;-1:-1:-1;;;391:25:28;;;;;;;;;;;353:63;422:10;:24;;-1:-1:-1;;;;;;422:24:28;;;-1:-1:-1;;;;;422:24:28;;;;;;;1479:12:31;:28;;;;;;;;;;1513:8;:20;;;;;;;;;;1539:13;:30;;;;;;;;;;1575:12;:28;;;;;;;;;;;;-1:-1:-1;1609:28:31;;;:14;:28;;;;;;;:43;;;;;;;;;;;1703:12;;1730;;1689:54;;-1:-1:-1;;;1689:54:31;;1730:12;;;1689:54;;;1093:51:84;1703:12:31;;;;-1:-1:-1;1689:40:31;;1066:18:84;;1689:54:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1658:28:31;;;;;;;;:13;:28;;;;;:85;;-1:-1:-1;;1658:85:31;;;;;;;;;;-1:-1:-1;140:502:65;;-1:-1:-1;;;;;;140:502:65;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:464::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;469:49;514:2;503:9;499:18;469:49;:::i;:::-;459:59;;537:49;582:2;571:9;567:18;537:49;:::i;:::-;527:59;;605:49;650:2;639:9;635:18;605:49;:::i;:::-;595:59;;196:464;;;;;;;:::o;665:277::-;732:6;785:2;773:9;764:7;760:23;756:32;753:52;;;801:1;798;791:12;753:52;833:9;827:16;886:5;879:13;872:21;865:5;862:32;852:60;;908:1;905;898:12;852:60;931:5;665:277;-1:-1:-1;;;665:277:84:o;947:203::-;140:502:65;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "@_activate_9478": {
                  "entryPoint": 5871,
                  "id": 9478,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_add_1372": {
                  "entryPoint": 6689,
                  "id": 1372,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_callOptionalReturn_911": {
                  "entryPoint": 6387,
                  "id": 911,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@_contains_1475": {
                  "entryPoint": null,
                  "id": 1475,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@_values_1520": {
                  "entryPoint": 6597,
                  "id": 1520,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@acceptGovernance_5327": {
                  "entryPoint": 2400,
                  "id": 5327,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@activate_9270": {
                  "entryPoint": 2087,
                  "id": 9270,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addDisputer_6045": {
                  "entryPoint": 3642,
                  "id": 6045,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@addSlasher_5991": {
                  "entryPoint": 3061,
                  "id": 5991,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@add_1658": {
                  "entryPoint": 6366,
                  "id": 1658,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@bondTime_5611": {
                  "entryPoint": null,
                  "id": 5611,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@bond_9206": {
                  "entryPoint": 3826,
                  "id": 9206,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@bonds_5394": {
                  "entryPoint": null,
                  "id": 5394,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canActivateAfter_5450": {
                  "entryPoint": null,
                  "id": 5450,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@canWithdrawAfter_5458": {
                  "entryPoint": null,
                  "id": 5458,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@contains_1712": {
                  "entryPoint": 6254,
                  "id": 1712,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "@disputers_5955": {
                  "entryPoint": null,
                  "id": 5955,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@disputes_5386": {
                  "entryPoint": null,
                  "id": 5386,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@fee_5636": {
                  "entryPoint": null,
                  "id": 5636,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@firstSeen_5380": {
                  "entryPoint": null,
                  "id": 5380,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@functionCallWithValue_1073": {
                  "entryPoint": 6791,
                  "id": 1073,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "@functionCall_1003": {
                  "entryPoint": 6768,
                  "id": 1003,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@governance_5266": {
                  "entryPoint": null,
                  "id": 5266,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@hasBonded_5472": {
                  "entryPoint": null,
                  "id": 5472,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@inflationPeriod_5631": {
                  "entryPoint": null,
                  "id": 5631,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@isContract_932": {
                  "entryPoint": null,
                  "id": 932,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@isKeeper_11375": {
                  "entryPoint": 3341,
                  "id": 11375,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@jobTokenCredits_5402": {
                  "entryPoint": null,
                  "id": 5402,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@jobs_5491": {
                  "entryPoint": 3517,
                  "id": 5491,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@keep3rHelper_5602": {
                  "entryPoint": null,
                  "id": 5602,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1Proxy_5598": {
                  "entryPoint": null,
                  "id": 5598,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keep3rV1_5594": {
                  "entryPoint": null,
                  "id": 5594,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@keepers_5506": {
                  "entryPoint": 3630,
                  "id": 5506,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "@kp3rWethPool_5606": {
                  "entryPoint": null,
                  "id": 5606,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@liquidityMinimum_5621": {
                  "entryPoint": null,
                  "id": 5621,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingBonds_5442": {
                  "entryPoint": null,
                  "id": 5442,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingGovernance_5270": {
                  "entryPoint": null,
                  "id": 5270,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@pendingUnbonds_5466": {
                  "entryPoint": null,
                  "id": 5466,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@removeDisputer_6072": {
                  "entryPoint": 5691,
                  "id": 6072,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@removeSlasher_6018": {
                  "entryPoint": 4661,
                  "id": 6018,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@rewardPeriodTime_5626": {
                  "entryPoint": null,
                  "id": 5626,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@safeTransferFrom_745": {
                  "entryPoint": 6304,
                  "id": 745,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "@safeTransfer_719": {
                  "entryPoint": 6150,
                  "id": 719,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "@setBondTime_5836": {
                  "entryPoint": 5055,
                  "id": 5836,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setFee_5933": {
                  "entryPoint": 3245,
                  "id": 5933,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setGovernance_5308": {
                  "entryPoint": 4841,
                  "id": 5308,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setInflationPeriod_5915": {
                  "entryPoint": 4959,
                  "id": 5915,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setJob_11387": {
                  "entryPoint": 4646,
                  "id": 11387,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rHelper_5717": {
                  "entryPoint": 3360,
                  "id": 5717,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1Proxy_5773": {
                  "entryPoint": 5151,
                  "id": 5773,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKeep3rV1_5745": {
                  "entryPoint": 5534,
                  "id": 5745,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setKp3rWethPool_5818": {
                  "entryPoint": 1729,
                  "id": 5818,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setLiquidityMinimum_5872": {
                  "entryPoint": 5438,
                  "id": 5872,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setRewardPeriodTime_5897": {
                  "entryPoint": 5308,
                  "id": 5897,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@setUnbondTime_5854": {
                  "entryPoint": 3534,
                  "id": 5854,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@slashers_5949": {
                  "entryPoint": null,
                  "id": 5949,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@unbondTime_5616": {
                  "entryPoint": null,
                  "id": 5616,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "@unbond_9317": {
                  "entryPoint": 4435,
                  "id": 9317,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "@values_1784": {
                  "entryPoint": 6291,
                  "id": 1784,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "@verifyCallResult_1208": {
                  "entryPoint": 7087,
                  "id": 1208,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "@withdraw_9413": {
                  "entryPoint": 2540,
                  "id": 9413,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "@workCompleted_5374": {
                  "entryPoint": null,
                  "id": 5374,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "abi_decode_address": {
                  "entryPoint": 7144,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_address": {
                  "entryPoint": 7172,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_addresst_address": {
                  "entryPoint": 7199,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_addresst_uint256": {
                  "entryPoint": 7250,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "abi_decode_tuple_t_bool_fromMemory": {
                  "entryPoint": 7292,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256": {
                  "entryPoint": 7326,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_tuple_t_uint256_fromMemory": {
                  "entryPoint": 7351,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
                  "entryPoint": 7376,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                  "entryPoint": 7404,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 4,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
                  "entryPoint": 7424,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 7501,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed": {
                  "entryPoint": 7552,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_add_t_uint256": {
                  "entryPoint": 7607,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "checked_sub_t_uint256": {
                  "entryPoint": 7631,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "copy_memory_to_memory": {
                  "entryPoint": 7654,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "panic_error_0x11": {
                  "entryPoint": 7698,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                }
              },
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:6325:84",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:84",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:124:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:84"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "165:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "174:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "177:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "167:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "167:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "167:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "150:3:84",
                                                    "type": "",
                                                    "value": "160"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "155:1:84",
                                                    "type": "",
                                                    "value": "1"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shl",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "146:3:84"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "146:11:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "159:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "142:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "142:19:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:31:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:42:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:50:84"
                              },
                              "nodeType": "YulIf",
                              "src": "111:70:84"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:84",
                            "type": ""
                          }
                        ],
                        "src": "14:173:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "262:116:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "308:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "317:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "320:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "310:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "310:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "310:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "283:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "292:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "279:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "279:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "304:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "275:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "275:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "272:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "333:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "362:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "343:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "343:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "333:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "228:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "239:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "251:6:84",
                            "type": ""
                          }
                        ],
                        "src": "192:186:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "470:173:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "516:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "525:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "528:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "518:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "518:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "518:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "491:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "500:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "487:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "487:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "512:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "483:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "483:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "480:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "541:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "570:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "551:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "551:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "541:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "589:48:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "622:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "633:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "618:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "618:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "599:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "599:38:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "589:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "428:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "439:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "451:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "459:6:84",
                            "type": ""
                          }
                        ],
                        "src": "383:260:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "735:167:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "781:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "790:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "793:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "783:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "783:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "783:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "756:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "765:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "752:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "752:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "777:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "748:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "748:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "745:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "806:39:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "835:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "816:18:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "816:29:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "806:6:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "854:42:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "881:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "892:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "877:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "877:18:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "864:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "864:32:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "854:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "693:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "704:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "716:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "724:6:84",
                            "type": ""
                          }
                        ],
                        "src": "648:254:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "985:199:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1031:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1040:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1043:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1033:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1033:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1033:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1006:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1015:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1002:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1002:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1027:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "998:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "998:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "995:52:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1056:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1075:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1069:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1069:16:84"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "1060:5:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1138:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1147:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1150:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1140:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1140:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1140:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1107:5:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "1128:5:84"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "1121:6:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1121:13:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "1114:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1114:21:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "1104:2:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1104:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1097:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1097:40:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1094:60:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1163:15:84",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1173:5:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1163:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bool_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "951:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "962:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "974:6:84",
                            "type": ""
                          }
                        ],
                        "src": "907:277:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1259:110:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1305:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1314:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1317:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1307:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1307:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1307:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1280:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1289:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1276:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1276:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1301:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1272:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1272:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1269:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1330:33:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1353:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1340:12:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1340:23:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1330:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1225:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1236:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1248:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1189:180:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1455:103:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1501:16:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1510:1:84",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1513:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1503:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1503:12:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1503:12:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1476:7:84"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1485:9:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1472:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1472:23:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1497:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1468:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1468:32:84"
                              },
                              "nodeType": "YulIf",
                              "src": "1465:52:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1526:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1542:9:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1536:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1536:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1526:6:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1421:9:84",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1432:7:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1444:6:84",
                            "type": ""
                          }
                        ],
                        "src": "1374:184:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1700:137:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1710:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1730:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1724:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1724:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "1714:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "1772:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1780:4:84",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1768:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1768:17:84"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "1787:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1792:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1746:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1746:53:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1746:53:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1808:23:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "1819:3:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1824:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1815:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1815:16:84"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "1808:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "1676:3:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1681:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "1692:3:84",
                            "type": ""
                          }
                        ],
                        "src": "1563:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1943:102:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1953:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1965:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1976:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1961:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1961:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1953:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1995:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2010:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2026:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2031:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "2022:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2022:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2035:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "2018:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2018:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2006:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2006:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1988:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1988:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1988:51:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1912:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1923:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1934:4:84",
                            "type": ""
                          }
                        ],
                        "src": "1842:203:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2207:218:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2217:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2229:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2240:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2225:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2225:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2217:4:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2252:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2270:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2275:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "2266:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2266:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2279:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "2262:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2262:19:84"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2256:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2297:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2312:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2320:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2308:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2308:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2290:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2290:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2290:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2344:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2355:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2340:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2340:18:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2364:6:84"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2372:2:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2360:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2360:15:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2333:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2333:43:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2333:43:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2396:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2407:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2392:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2392:18:84"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "2412:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2385:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2385:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2385:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2160:9:84",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2171:6:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2179:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2187:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2198:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2050:375:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2559:145:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2569:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2581:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2592:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2577:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2577:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "2569:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2611:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2626:6:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2642:3:84",
                                                "type": "",
                                                "value": "160"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2647:1:84",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "2638:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2638:11:84"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2651:1:84",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "2634:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2634:19:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "2622:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2622:32:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2604:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2604:51:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2604:51:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2675:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2686:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2671:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2671:18:84"
                                  },
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2691:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2664:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2664:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2664:34:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2520:9:84",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2531:6:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2539:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2550:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2430:274:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2860:507:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2870:12:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2880:2:84",
                                "type": "",
                                "value": "32"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2874:2:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2891:32:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2909:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2920:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2905:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2905:18:84"
                              },
                              "variables": [
                                {
                                  "name": "tail_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2895:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2939:9:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "2950:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2932:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2932:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2932:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2962:17:84",
                              "value": {
                                "name": "tail_1",
                                "nodeType": "YulIdentifier",
                                "src": "2973:6:84"
                              },
                              "variables": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulTypedName",
                                  "src": "2966:3:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2988:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3008:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3002:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3002:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "2992:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "tail_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3031:6:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3039:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3024:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3024:22:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3024:22:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3055:25:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3066:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3077:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3062:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3062:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "pos",
                                  "nodeType": "YulIdentifier",
                                  "src": "3055:3:84"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3089:29:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3107:6:84"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "3115:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3103:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3103:15:84"
                              },
                              "variables": [
                                {
                                  "name": "srcPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "3093:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3127:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3136:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "3131:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3195:146:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "3216:3:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "srcPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "3231:6:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "mload",
                                                "nodeType": "YulIdentifier",
                                                "src": "3225:5:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "3225:13:84"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "3248:3:84",
                                                      "type": "",
                                                      "value": "160"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "3253:1:84",
                                                      "type": "",
                                                      "value": "1"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "shl",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "3244:3:84"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "3244:11:84"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "3257:1:84",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "3240:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "3240:19:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "3221:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3221:39:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "3209:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3209:52:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3209:52:84"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3274:19:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "pos",
                                          "nodeType": "YulIdentifier",
                                          "src": "3285:3:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3290:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3281:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3281:12:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3274:3:84"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3306:25:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "srcPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "3320:6:84"
                                        },
                                        {
                                          "name": "_1",
                                          "nodeType": "YulIdentifier",
                                          "src": "3328:2:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3316:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3316:15:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "srcPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "3306:6:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "3157:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3160:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3154:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3154:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "3168:18:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3170:14:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "3179:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3182:1:84",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3175:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3175:9:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "3170:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "3150:3:84",
                                "statements": []
                              },
                              "src": "3146:195:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3350:11:84",
                              "value": {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "3358:3:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3350:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2829:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2840:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "2851:4:84",
                            "type": ""
                          }
                        ],
                        "src": "2709:658:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3467:92:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3477:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3489:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3500:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3485:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3485:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3477:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3519:9:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "3544:6:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "3537:6:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3537:14:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "3530:6:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3530:22:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3512:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3512:41:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3512:41:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3436:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3447:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3458:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3372:187:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3685:262:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3702:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3713:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3695:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3695:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3695:21:84"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3725:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "3745:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3739:5:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3739:13:84"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "3729:6:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3772:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3783:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3768:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3768:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3788:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3761:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3761:34:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3761:34:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "3830:6:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3838:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3826:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3826:15:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3847:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3858:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3843:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3843:18:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3863:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3804:21:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3804:66:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3804:66:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3879:62:84",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3895:9:84"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "3914:6:84"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3922:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "3910:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3910:15:84"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3931:2:84",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "3927:3:84"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3927:7:84"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "3906:3:84"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3906:29:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3891:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3891:45:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3938:2:84",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3887:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3887:54:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "3879:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3654:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3665:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "3676:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3564:383:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4126:228:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4143:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4154:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4136:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4136:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4136:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4177:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4188:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4173:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4173:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4193:2:84",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4166:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4166:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4166:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4216:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4227:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4212:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4212:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4232:34:84",
                                    "type": "",
                                    "value": "Address: insufficient balance fo"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4205:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4205:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4205:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4287:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4298:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4283:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4283:18:84"
                                  },
                                  {
                                    "hexValue": "722063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4303:8:84",
                                    "type": "",
                                    "value": "r call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4276:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4276:36:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4276:36:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4321:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4333:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4344:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4329:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4329:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4321:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4103:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4117:4:84",
                            "type": ""
                          }
                        ],
                        "src": "3952:402:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4533:179:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4550:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4561:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4543:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4543:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4543:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4584:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4595:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4580:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4580:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4600:2:84",
                                    "type": "",
                                    "value": "29"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4573:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4573:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4573:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4623:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4634:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4619:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4619:18:84"
                                  },
                                  {
                                    "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4639:31:84",
                                    "type": "",
                                    "value": "Address: call to non-contract"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4612:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4612:59:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4612:59:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4680:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4692:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4703:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4688:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4688:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4680:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4510:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4524:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4359:353:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4891:232:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4908:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4919:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4901:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4901:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4901:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4942:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4953:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4938:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4938:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4958:2:84",
                                    "type": "",
                                    "value": "42"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4931:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4931:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4931:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4981:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4992:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4977:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4977:18:84"
                                  },
                                  {
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "4997:34:84",
                                    "type": "",
                                    "value": "SafeERC20: ERC20 operation did n"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4970:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4970:62:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4970:62:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5052:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5063:2:84",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5048:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5048:18:84"
                                  },
                                  {
                                    "hexValue": "6f742073756363656564",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5068:12:84",
                                    "type": "",
                                    "value": "ot succeed"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5041:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5041:40:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5041:40:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5090:27:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5102:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5113:3:84",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5098:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5098:19:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5090:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4868:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4882:4:84",
                            "type": ""
                          }
                        ],
                        "src": "4717:406:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5302:181:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5319:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5330:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5312:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5312:21:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5312:21:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5353:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5364:2:84",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5349:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5349:18:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5369:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5342:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5342:30:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5342:30:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5392:9:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5403:2:84",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5388:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5388:18:84"
                                  },
                                  {
                                    "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "5408:33:84",
                                    "type": "",
                                    "value": "ReentrancyGuard: reentrant call"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5381:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5381:61:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5381:61:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5451:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5463:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5474:2:84",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5459:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5459:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5451:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5279:9:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5293:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5128:355:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5589:76:84",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5599:26:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5611:9:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5622:2:84",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5607:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5607:18:84"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5599:4:84"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5641:9:84"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5652:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5634:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5634:25:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5634:25:84"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5558:9:84",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5569:6:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5580:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5488:177:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5718:80:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5745:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "5747:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5747:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5747:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5734:1:84"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "5741:1:84"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "5737:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5737:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5731:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5731:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5728:39:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5776:16:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5787:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5790:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5783:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5783:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "5776:3:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "5701:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "5704:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "5710:3:84",
                            "type": ""
                          }
                        ],
                        "src": "5670:128:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5852:76:84",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5874:22:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "5876:16:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5876:18:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5876:18:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5868:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5871:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5865:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5865:8:84"
                              },
                              "nodeType": "YulIf",
                              "src": "5862:34:84"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5905:17:84",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5917:1:84"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5920:1:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "5913:3:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5913:9:84"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "5905:4:84"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "5834:1:84",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "5837:1:84",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "5843:4:84",
                            "type": ""
                          }
                        ],
                        "src": "5803:125:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5986:205:84",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5996:10:84",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6005:1:84",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6000:1:84",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6065:63:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "6090:3:84"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "6095:1:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "6086:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6086:11:84"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6109:3:84"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6114:1:84"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "6105:3:84"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6105:11:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "6099:5:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6099:18:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6079:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6079:39:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6079:39:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6026:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6029:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6023:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6023:13:84"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "6037:19:84",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6039:15:84",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "6048:1:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6051:2:84",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6044:3:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6044:10:84"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "6039:1:84"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6019:3:84",
                                "statements": []
                              },
                              "src": "6015:113:84"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6154:31:84",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "6167:3:84"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "6172:6:84"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "6163:3:84"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6163:16:84"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6181:1:84",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6156:6:84"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6156:27:84"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6156:27:84"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6143:1:84"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6146:6:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6140:2:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6140:13:84"
                              },
                              "nodeType": "YulIf",
                              "src": "6137:48:84"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "5964:3:84",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "5969:3:84",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "5974:6:84",
                            "type": ""
                          }
                        ],
                        "src": "5933:258:84"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6228:95:84",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6245:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6252:3:84",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6257:10:84",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6248:3:84"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6248:20:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6238:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6238:31:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6238:31:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6285:1:84",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6288:4:84",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6278:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6278:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6278:15:84"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6309:1:84",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6312:4:84",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "6302:6:84"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6302:15:84"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6302:15:84"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "6196:127:84"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n}",
                  "id": 84,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106102605760003560e01c80639d5c33d811610147578063c7ae40d0116100be578063c7ae40d0146105cc578063cb4be2bb146105df578063cb54694d146105f2578063cd22af1b14610605578063ddca3f4314610630578063e326ac4314610639578063ebbb619414610659578063ec00cdfc1461066c578063f0f346b91461067f578063f11a1d1a14610692578063f39c38a0146106a5578063fc253d2b146106b857600080fd5b80639d5c33d8146104ba578063a39744b5146104cd578063a515366a146104f8578063a5d059ca1461050b578063a662031b1461051e578063a7d2e78414610531578063aac6aa9c1461053a578063ab033ea91461054d578063b0103b1a14610560578063b239223314610583578063b7e7734014610596578063b87fcbff146105a957600080fd5b80635ebe23f0116101db5780635ebe23f0146103ed578063633fb68f146103f657806368a9f19c146103ff57806369fe0e2d146104125780636ba42aaa1461042557806372da828a14610438578063768b5d901461044b5780637b40c913146104545780637c8fce23146104675780638cb22b761461047c5780638fe204dd1461049f578063951dc22c146104b257600080fd5b806307b435c21461026557806315006b82146102a3578063160e1e31146102ce578063168f92e7146102e35780631b44555e1461030e5780631c5a9d9c1461032e5780631ef94b911461034157806321040b0114610361578063238efcbc1461038c578063274a8db41461039457806351cff8d9146103c75780635aa6e675146103da575b600080fd5b610290610273366004611c1f565b601060209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6102906102b1366004611c1f565b600e60209081526000928352604080842090915290825290205481565b6102e16102dc366004611c04565b6106c1565b005b6102906102f1366004611c1f565b600760209081526000928352604080842090915290825290205481565b61029061031c366004611c04565b60036020526000908152604090205481565b6102e161033c366004611c04565b610827565b601954610354906001600160a01b031681565b60405161029a9190611cec565b61029061036f366004611c1f565b601160209081526000928352604080842090915290825290205481565b6102e1610960565b6103b76103a2366004611c04565b60186020526000908152604090205460ff1681565b604051901515815260200161029a565b6102e16103d5366004611c04565b6109ec565b601554610354906001600160a01b031681565b610290601d5481565b610290601f5481565b6102e161040d366004611c04565b610bf5565b6102e1610420366004611c9e565b610cad565b6103b7610433366004611c04565b610d0d565b6102e1610446366004611c04565b610d20565b61029060205481565b601c54610354906001600160a01b031681565b61046f610dbd565b60405161029a9190611d00565b6103b761048a366004611c04565b60126020526000908152604090205460ff1681565b6102e16104ad366004611c9e565b610dce565b61046f610e2e565b6102e16104c8366004611c04565b610e3a565b6102906104db366004611c1f565b600660209081526000928352604080842090915290825290205481565b6102e1610506366004611c52565b610ef2565b6102e1610519366004611c52565b611153565b6102e161052c366004611c04565b611226565b610290601e5481565b6102e1610548366004611c04565b611235565b6102e161055b366004611c04565b6112e9565b6103b761056e366004611c04565b60056020526000908152604090205460ff1681565b6102e1610591366004611c9e565b61135f565b6102e16105a4366004611c9e565b6113bf565b6103b76105b7366004611c04565b60176020526000908152604090205460ff1681565b601a54610354906001600160a01b031681565b6102e16105ed366004611c04565b61141f565b6102e1610600366004611c9e565b6114bc565b610290610613366004611c1f565b600f60209081526000928352604080842090915290825290205481565b61029060225481565b610290610647366004611c04565b60046020526000908152604090205481565b6102e1610667366004611c9e565b61153e565b6102e161067a366004611c04565b61159e565b6102e161068d366004611c04565b61163b565b601b54610354906001600160a01b031681565b601654610354906001600160a01b031681565b61029060215481565b6015546001600160a01b031633146106ec576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166107135760405163d92e233d60e01b815260040160405180910390fd5b601c80546001600160a01b038084166001600160a01b031992831681179093556000838152600c6020526040908190208054909316909317909155601b54915163696a437b60e01b815291169063696a437b90610774908490600401611cec565b60206040518083038186803b15801561078c57600080fd5b505afa1580156107a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c49190611c7c565b6001600160a01b0382166000908152600d602052604090819020805460ff191692151592909217909155517f9bb1515b0fc2645a3f011162460a22fdd512e0bca265e7dc9ba6bceae8930afa9061081c908390611cec565b60405180910390a150565b3360009081526005602052604090205460ff1615610858576040516362e6201d60e01b815260040160405180910390fd5b336000908152600f602090815260408083206001600160a01b038516845290915290205461089957604051636258f48160e01b815260040160405180910390fd5b336000908152600f602090815260408083206001600160a01b038516845290915290205442116108dc57604051630fd0eeef60e11b815260040160405180910390fd5b336000818152600f602090815260408083206001600160a01b038616845290915281208190559061090d90836116ef565b9050816001600160a01b0316336001600160a01b03167f3673530133b6da67e9854f605b0cfa7bb9798cd33c18036dfc10d8da7c4d4a758360405161095491815260200190565b60405180910390a35050565b6016546001600160a01b0316331461098b57604051637ef5703160e11b815260040160405180910390fd5b60168054601580546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916109e291611cec565b60405180910390a1565b60026000541415610a185760405162461bcd60e51b8152600401610a0f90611d80565b60405180910390fd5b600260009081553381526011602090815260408083206001600160a01b0385168452909152902054610a5d5760405163184c088160e21b815260040160405180910390fd5b3360009081526010602090815260408083206001600160a01b03851684529091529020544211610aa0576040516327cfdcb760e01b815260040160405180910390fd5b3360009081526005602052604090205460ff1615610ad1576040516362e6201d60e01b815260040160405180910390fd5b3360009081526011602090815260408083206001600160a01b0385811680865291909352922054601954909291161415610b6457601a5460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d6890602401600060405180830381600087803b158015610b4b57600080fd5b505af1158015610b5f573d6000803e3d6000fd5b505050505b3360008181526011602090815260408083206001600160a01b03871680855290835281842084905584845260108352818420818552909252822091909155610bac9183611806565b6040518181526001600160a01b0383169033907f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989060200160405180910390a350506001600055565b6015546001600160a01b03163314610c20576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff1615610c5a5760405163546da66560e11b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19166001179055517f049ccb28ab796d3225573a065712f6e7754487ced56056cda8889c337511807b9061081c908390611cec565b6015546001600160a01b03163314610cd8576040516354348f0360e01b815260040160405180910390fd5b60228190556040518181527f4c10ca068ff7002cf5da78f2f697d1e91f6f0ac27f7344b28e8ef25263f87e5d9060200161081c565b6000610d1a60018361186e565b92915050565b6015546001600160a01b03163314610d4b576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b038116610d725760405163d92e233d60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b0383161790556040517f71973fd672e51deb8f739b1f7e1eab991936645acd6f83e2bde6eeeaff5490b09061081c908390611cec565b6060610dc96013611893565b905090565b6015546001600160a01b03163314610df9576040516354348f0360e01b815260040160405180910390fd5b601e8190556040518181527fc8d443472c9783cc36f8f5f5091f08ce9f37fc2f9e6d79cf1d9aaf40a433fee29060200161081c565b6060610dc96001611893565b6015546001600160a01b03163314610e65576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff1615610e9f5760405163274e25dd60e11b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090819020805460ff19166001179055517f8addc69f897ecca0e41d70ed4ff9d75a9148a615a0fbda8597e53aea2684302f9061081c908390611cec565b60026000541415610f155760405162461bcd60e51b8152600401610a0f90611d80565b600260009081553381526005602052604090205460ff1615610f4a576040516362e6201d60e01b815260040160405180910390fd5b610f5560133361186e565b15610f735760405163d7229c4360e01b815260040160405180910390fd5b601d54610f809042611db7565b336000908152600f602090815260408083206001600160a01b03871680855292528083209390935591516370a0823160e01b81529091906370a0823190610fcb903090600401611cec565b60206040518083038186803b158015610fe357600080fd5b505afa158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101b9190611cb7565b90506110326001600160a01b0384163330856118a0565b6040516370a0823160e01b815281906001600160a01b038516906370a0823190611060903090600401611cec565b60206040518083038186803b15801561107857600080fd5b505afa15801561108c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b09190611cb7565b6110ba9190611dcf565b336000908152601260209081526040808320805460ff19166001179055600e82528083206001600160a01b0388168452909152812080549294508492909190611104908490611db7565b90915550506040518281526001600160a01b0384169033907fa7e66869262026842e8d81f5e6806cdc8d846e27c824e2e22f4fe51442771b349060200160405180910390a35050600160005550565b601e546111609042611db7565b3360008181526010602090815260408083206001600160a01b038816808552908352818420959095559282526006815282822093825292909252812080548392906111ac908490611dcf565b90915550503360009081526011602090815260408083206001600160a01b0386168452909152812080548392906111e4908490611db7565b90915550506040518181526001600160a01b0383169033907f9aaab310d247ad45aef26bbdefc4ebf20c728fdb84c92b95b2b05d21826940de90602001610954565b6112316013826118de565b5050565b6015546001600160a01b03163314611260576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090205460ff16611299576040516336fe17e760e21b815260040160405180910390fd5b6001600160a01b03811660009081526017602052604090819020805460ff19169055517f3ed8cbce8cab40e59282f1743e2b607effa08b5cbe0111bb4721134f2f80d0259061081c908390611cec565b6015546001600160a01b03163314611314576040516354348f0360e01b815260040160405180910390fd5b601680546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f9061081c908390611cec565b6015546001600160a01b0316331461138a576040516354348f0360e01b815260040160405180910390fd5b60218190556040518181527fbdcfd7b8482f31cff6a87c362d9e2e3887f4cdc2018c7c485d8e78a7b2fadb699060200161081c565b6015546001600160a01b031633146113ea576040516354348f0360e01b815260040160405180910390fd5b601d8190556040518181527fd319ef78d2b690bb773fcccc2d096306bac7c9222dd0bb6b300f461e4a376b439060200161081c565b6015546001600160a01b0316331461144a576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166114715760405163d92e233d60e01b815260040160405180910390fd5b601a80546001600160a01b0319166001600160a01b0383161790556040517feb931b4b5a98d20a6b1e6693a7c59d8e337a06e2f1473bb776e19251db7ae2509061081c908390611cec565b6015546001600160a01b031633146114e7576040516354348f0360e01b815260040160405180910390fd5b6201518081101561150b57604051633f384aad60e21b815260040160405180910390fd5b60208181556040518281527f54aafa56429e22230b52f1495588ffc632277d74f3a85ec755e13ac50c1584d9910161081c565b6015546001600160a01b03163314611569576040516354348f0360e01b815260040160405180910390fd5b601f8190556040518181527f24d51b415694a791b1c77df7817c075ac82b83ce611bcd8627d2e66cf37aa3e79060200161081c565b6015546001600160a01b031633146115c9576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b0381166115f05760405163d92e233d60e01b815260040160405180910390fd5b601980546001600160a01b0319166001600160a01b0383161790556040517f1d1a3e7caf0717056e48dc8aefa54d806c7af86324fece4e5d49f8e1f01f84bf9061081c908390611cec565b6015546001600160a01b03163314611666576040516354348f0360e01b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff1661169f57604051633ca0d42760e11b815260040160405180910390fd5b6001600160a01b03811660009081526018602052604090819020805460ff19169055517f5e8bd21d0a98cb2caf33706e56139ff40ffbdca7ec5d9d412a0a2292496dc70e9061081c908390611cec565b6001600160a01b038216600090815260046020526040812054611728576001600160a01b03831660009081526004602052604090204290555b6117336001846118de565b50506001600160a01b038083166000818152600e6020908152604080832094861680845294825280832080549084905593835260068252808320948352939052918220805491928392611787908490611db7565b90915550506019546001600160a01b0383811691161415610d1a57601954604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156117e857600080fd5b505af11580156117fc573d6000803e3d6000fd5b5050505092915050565b6040516001600160a01b03831660248201526044810182905261186990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526118f3565b505050565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6060600061188c836119c5565b6040516001600160a01b03808516602483015283166044820152606481018290526118d89085906323b872dd60e01b90608401611832565b50505050565b600061188c836001600160a01b038416611a21565b6000611948826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611a709092919063ffffffff16565b80519091501561186957808060200190518101906119669190611c7c565b6118695760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a0f565b606081600001805480602002602001604051908101604052809291908181526020018280548015611a1557602002820191906000526020600020905b815481526020019060010190808311611a01575b50505050509050919050565b6000818152600183016020526040812054611a6857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d1a565b506000610d1a565b6060611a7f8484600085611a87565b949350505050565b606082471015611ae85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a0f565b843b611b365760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a0f565b600080866001600160a01b03168587604051611b529190611cd0565b60006040518083038185875af1925050503d8060008114611b8f576040519150601f19603f3d011682016040523d82523d6000602084013e611b94565b606091505b5091509150611ba4828286611baf565b979650505050505050565b60608315611bbe57508161188c565b825115611bce5782518084602001fd5b8160405162461bcd60e51b8152600401610a0f9190611d4d565b80356001600160a01b0381168114611bff57600080fd5b919050565b600060208284031215611c1657600080fd5b61188c82611be8565b60008060408385031215611c3257600080fd5b611c3b83611be8565b9150611c4960208401611be8565b90509250929050565b60008060408385031215611c6557600080fd5b611c6e83611be8565b946020939093013593505050565b600060208284031215611c8e57600080fd5b8151801515811461188c57600080fd5b600060208284031215611cb057600080fd5b5035919050565b600060208284031215611cc957600080fd5b5051919050565b60008251611ce2818460208701611de6565b9190910192915050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015611d415783516001600160a01b031683529284019291840191600101611d1c565b50909695505050505050565b6020815260008251806020840152611d6c816040850160208701611de6565b601f01601f19169190910160400192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115611dca57611dca611e12565b500190565b600082821015611de157611de1611e12565b500390565b60005b83811015611e01578181015183820152602001611de9565b838111156118d85750506000910152565b634e487b7160e01b600052601160045260246000fdfea26469706673582212209c3039ca21025b3350c30ed3a48d59b32e8c69eab69919f6ffaa5effe99a3c1f64736f6c63430008070033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x260 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9D5C33D8 GT PUSH2 0x147 JUMPI DUP1 PUSH4 0xC7AE40D0 GT PUSH2 0xBE JUMPI DUP1 PUSH4 0xC7AE40D0 EQ PUSH2 0x5CC JUMPI DUP1 PUSH4 0xCB4BE2BB EQ PUSH2 0x5DF JUMPI DUP1 PUSH4 0xCB54694D EQ PUSH2 0x5F2 JUMPI DUP1 PUSH4 0xCD22AF1B EQ PUSH2 0x605 JUMPI DUP1 PUSH4 0xDDCA3F43 EQ PUSH2 0x630 JUMPI DUP1 PUSH4 0xE326AC43 EQ PUSH2 0x639 JUMPI DUP1 PUSH4 0xEBBB6194 EQ PUSH2 0x659 JUMPI DUP1 PUSH4 0xEC00CDFC EQ PUSH2 0x66C JUMPI DUP1 PUSH4 0xF0F346B9 EQ PUSH2 0x67F JUMPI DUP1 PUSH4 0xF11A1D1A EQ PUSH2 0x692 JUMPI DUP1 PUSH4 0xF39C38A0 EQ PUSH2 0x6A5 JUMPI DUP1 PUSH4 0xFC253D2B EQ PUSH2 0x6B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9D5C33D8 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xA39744B5 EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xA515366A EQ PUSH2 0x4F8 JUMPI DUP1 PUSH4 0xA5D059CA EQ PUSH2 0x50B JUMPI DUP1 PUSH4 0xA662031B EQ PUSH2 0x51E JUMPI DUP1 PUSH4 0xA7D2E784 EQ PUSH2 0x531 JUMPI DUP1 PUSH4 0xAAC6AA9C EQ PUSH2 0x53A JUMPI DUP1 PUSH4 0xAB033EA9 EQ PUSH2 0x54D JUMPI DUP1 PUSH4 0xB0103B1A EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0xB2392233 EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0xB7E77340 EQ PUSH2 0x596 JUMPI DUP1 PUSH4 0xB87FCBFF EQ PUSH2 0x5A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5EBE23F0 GT PUSH2 0x1DB JUMPI DUP1 PUSH4 0x5EBE23F0 EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x633FB68F EQ PUSH2 0x3F6 JUMPI DUP1 PUSH4 0x68A9F19C EQ PUSH2 0x3FF JUMPI DUP1 PUSH4 0x69FE0E2D EQ PUSH2 0x412 JUMPI DUP1 PUSH4 0x6BA42AAA EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0x72DA828A EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0x768B5D90 EQ PUSH2 0x44B JUMPI DUP1 PUSH4 0x7B40C913 EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0x7C8FCE23 EQ PUSH2 0x467 JUMPI DUP1 PUSH4 0x8CB22B76 EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0x8FE204DD EQ PUSH2 0x49F JUMPI DUP1 PUSH4 0x951DC22C EQ PUSH2 0x4B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7B435C2 EQ PUSH2 0x265 JUMPI DUP1 PUSH4 0x15006B82 EQ PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x160E1E31 EQ PUSH2 0x2CE JUMPI DUP1 PUSH4 0x168F92E7 EQ PUSH2 0x2E3 JUMPI DUP1 PUSH4 0x1B44555E EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x1C5A9D9C EQ PUSH2 0x32E JUMPI DUP1 PUSH4 0x1EF94B91 EQ PUSH2 0x341 JUMPI DUP1 PUSH4 0x21040B01 EQ PUSH2 0x361 JUMPI DUP1 PUSH4 0x238EFCBC EQ PUSH2 0x38C JUMPI DUP1 PUSH4 0x274A8DB4 EQ PUSH2 0x394 JUMPI DUP1 PUSH4 0x51CFF8D9 EQ PUSH2 0x3C7 JUMPI DUP1 PUSH4 0x5AA6E675 EQ PUSH2 0x3DA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x290 PUSH2 0x273 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C1F JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x290 PUSH2 0x2B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C1F JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x2DC CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x6C1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x290 PUSH2 0x2F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C1F JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x31C CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x33C CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x827 JUMP JUMPDEST PUSH1 0x19 SLOAD PUSH2 0x354 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29A SWAP2 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH2 0x290 PUSH2 0x36F CALLDATASIZE PUSH1 0x4 PUSH2 0x1C1F JUMP JUMPDEST PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x960 JUMP JUMPDEST PUSH2 0x3B7 PUSH2 0x3A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x29A JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x9EC JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH2 0x354 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x1D SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x1F SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x40D CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0xBF5 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x420 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0xCAD JUMP JUMPDEST PUSH2 0x3B7 PUSH2 0x433 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0xD0D JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x446 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0xD20 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x20 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1C SLOAD PUSH2 0x354 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x46F PUSH2 0xDBD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x29A SWAP2 SWAP1 PUSH2 0x1D00 JUMP JUMPDEST PUSH2 0x3B7 PUSH2 0x48A CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x4AD CALLDATASIZE PUSH1 0x4 PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0xDCE JUMP JUMPDEST PUSH2 0x46F PUSH2 0xE2E JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x4C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0xE3A JUMP JUMPDEST PUSH2 0x290 PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x1C1F JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x506 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C52 JUMP JUMPDEST PUSH2 0xEF2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x519 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C52 JUMP JUMPDEST PUSH2 0x1153 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x52C CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x1226 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x1E SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x548 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x1235 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x55B CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x12E9 JUMP JUMPDEST PUSH2 0x3B7 PUSH2 0x56E CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x591 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0x135F JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x5A4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0x13BF JUMP JUMPDEST PUSH2 0x3B7 PUSH2 0x5B7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1A SLOAD PUSH2 0x354 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x5ED CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x141F JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x600 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0x14BC JUMP JUMPDEST PUSH2 0x290 PUSH2 0x613 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C1F JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x22 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH2 0x647 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x667 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0x153E JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x67A CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x159E JUMP JUMPDEST PUSH2 0x2E1 PUSH2 0x68D CALLDATASIZE PUSH1 0x4 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x163B JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH2 0x354 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH2 0x354 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x290 PUSH1 0x21 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6EC JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x713 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x1B SLOAD SWAP2 MLOAD PUSH4 0x696A437B PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x696A437B SWAP1 PUSH2 0x774 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x78C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7C4 SWAP2 SWAP1 PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD PUSH32 0x9BB1515B0FC2645A3F011162460A22FDD512E0BCA265E7DC9BA6BCEAE8930AFA SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x858 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x899 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6258F481 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0x8DC JUMPI PUSH1 0x40 MLOAD PUSH4 0xFD0EEEF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP2 SWAP1 SSTORE SWAP1 PUSH2 0x90D SWAP1 DUP4 PUSH2 0x16EF JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3673530133B6DA67E9854F605B0CFA7BB9798CD33C18036DFC10D8DA7C4D4A75 DUP4 PUSH1 0x40 MLOAD PUSH2 0x954 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x98B JUMPI PUSH1 0x40 MLOAD PUSH4 0x7EF57031 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0x15 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP1 SWAP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC73BE659241AADE67E9A059BCF21494955018B213DBD1179054CCF928B13F3B6 SWAP2 PUSH2 0x9E2 SWAP2 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0xA18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA0F SWAP1 PUSH2 0x1D80 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0xA5D JUMPI PUSH1 0x40 MLOAD PUSH4 0x184C0881 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD TIMESTAMP GT PUSH2 0xAA0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x27CFDCB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xAD1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP1 DUP7 MSTORE SWAP2 SWAP1 SWAP4 MSTORE SWAP3 KECCAK256 SLOAD PUSH1 0x19 SLOAD SWAP1 SWAP3 SWAP2 AND EQ ISZERO PUSH2 0xB64 JUMPI PUSH1 0x1A SLOAD PUSH1 0x40 MLOAD PUSH4 0x140E25AD PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xA0712D68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB5F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP5 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x10 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP2 DUP6 MSTORE SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xBAC SWAP2 DUP4 PUSH2 0x1806 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x2717EAD6B9200DD235AAD468C9809EA400FE33AC69B5BFAA6D3E90FC922B6398 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC20 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC5A JUMPI PUSH1 0x40 MLOAD PUSH4 0x546DA665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x49CCB28AB796D3225573A065712F6E7754487CED56056CDA8889C337511807B SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCD8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x22 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x4C10CA068FF7002CF5DA78F2F697D1E91F6F0AC27F7344B28E8EF25263F87E5D SWAP1 PUSH1 0x20 ADD PUSH2 0x81C JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD1A PUSH1 0x1 DUP4 PUSH2 0x186E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD4B JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD72 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x71973FD672E51DEB8F739B1F7E1EAB991936645ACD6F83E2BDE6EEEAFF5490B0 SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x60 PUSH2 0xDC9 PUSH1 0x13 PUSH2 0x1893 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xDF9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1E DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xC8D443472C9783CC36F8F5F5091F08CE9F37FC2F9E6D79CF1D9AAF40A433FEE2 SWAP1 PUSH1 0x20 ADD PUSH2 0x81C JUMP JUMPDEST PUSH1 0x60 PUSH2 0xDC9 PUSH1 0x1 PUSH2 0x1893 JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE65 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xE9F JUMPI PUSH1 0x40 MLOAD PUSH4 0x274E25DD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0x8ADDC69F897ECCA0E41D70ED4FF9D75A9148A615A0FBDA8597E53AEA2684302F SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD EQ ISZERO PUSH2 0xF15 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA0F SWAP1 PUSH2 0x1D80 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xF4A JUMPI PUSH1 0x40 MLOAD PUSH4 0x62E6201D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF55 PUSH1 0x13 CALLER PUSH2 0x186E JUMP JUMPDEST ISZERO PUSH2 0xF73 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD7229C43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D SLOAD PUSH2 0xF80 SWAP1 TIMESTAMP PUSH2 0x1DB7 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xFCB SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFF7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x101B SWAP2 SWAP1 PUSH2 0x1CB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x1032 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND CALLER ADDRESS DUP6 PUSH2 0x18A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1060 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1078 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x108C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10B0 SWAP2 SWAP1 PUSH2 0x1CB7 JUMP JUMPDEST PUSH2 0x10BA SWAP2 SWAP1 PUSH2 0x1DCF JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0xE DUP3 MSTORE DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP3 SWAP5 POP DUP5 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x1104 SWAP1 DUP5 SWAP1 PUSH2 0x1DB7 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 CALLER SWAP1 PUSH32 0xA7E66869262026842E8D81F5E6806CDC8D846E27C824E2E22F4FE51442771B34 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x1E SLOAD PUSH2 0x1160 SWAP1 TIMESTAMP PUSH2 0x1DB7 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x10 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x6 DUP2 MSTORE DUP3 DUP3 KECCAK256 SWAP4 DUP3 MSTORE SWAP3 SWAP1 SWAP3 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x11AC SWAP1 DUP5 SWAP1 PUSH2 0x1DCF JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x11E4 SWAP1 DUP5 SWAP1 PUSH2 0x1DB7 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 CALLER SWAP1 PUSH32 0x9AAAB310D247AD45AEF26BBDEFC4EBF20C728FDB84C92B95B2B05D21826940DE SWAP1 PUSH1 0x20 ADD PUSH2 0x954 JUMP JUMPDEST PUSH2 0x1231 PUSH1 0x13 DUP3 PUSH2 0x18DE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1260 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1299 JUMPI PUSH1 0x40 MLOAD PUSH4 0x36FE17E7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x3ED8CBCE8CAB40E59282F1743E2B607EFFA08B5CBE0111BB4721134F2F80D025 SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1314 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x16 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xE987AAEDF9D279143BDF1EEE16CF1D0FEB47742867D81083DF8D6CD0A5AC857F SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x138A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x21 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xBDCFD7B8482F31CFF6A87C362D9E2E3887F4CDC2018C7C485D8E78A7B2FADB69 SWAP1 PUSH1 0x20 ADD PUSH2 0x81C JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13EA JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1D DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD319EF78D2B690BB773FCCCC2D096306BAC7C9222DD0BB6B300F461E4A376B43 SWAP1 PUSH1 0x20 ADD PUSH2 0x81C JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x144A JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1471 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEB931B4B5A98D20A6B1E6693A7C59D8E337A06E2F1473BB776E19251DB7AE250 SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x15180 DUP2 LT ISZERO PUSH2 0x150B JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F384AAD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0x54AAFA56429E22230B52F1495588FFC632277D74F3A85EC755E13AC50C1584D9 SWAP2 ADD PUSH2 0x81C JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1569 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x24D51B415694A791B1C77DF7817C075AC82B83CE611BCD8627D2E66CF37AA3E7 SWAP1 PUSH1 0x20 ADD PUSH2 0x81C JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x15C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x15F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD92E233D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x19 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1D1A3E7CAF0717056E48DC8AEFA54D806C7AF86324FECE4E5D49F8E1F01F84BF SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x15 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1666 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54348F03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x169F JUMPI PUSH1 0x40 MLOAD PUSH4 0x3CA0D427 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x5E8BD21D0A98CB2CAF33706E56139FF40FFBDCA7EC5D9D412A0A2292496DC70E SWAP1 PUSH2 0x81C SWAP1 DUP4 SWAP1 PUSH2 0x1CEC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1728 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 TIMESTAMP SWAP1 SSTORE JUMPDEST PUSH2 0x1733 PUSH1 0x1 DUP5 PUSH2 0x18DE JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP4 DUP4 MSTORE PUSH1 0x6 DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 DUP4 MSTORE SWAP4 SWAP1 MSTORE SWAP2 DUP3 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 DUP4 SWAP3 PUSH2 0x1787 SWAP1 DUP5 SWAP1 PUSH2 0x1DB7 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x19 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0xD1A JUMPI PUSH1 0x19 SLOAD PUSH1 0x40 MLOAD PUSH4 0x852CD8D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x42966C68 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1869 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x18F3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x188C DUP4 PUSH2 0x19C5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x18D8 SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x1832 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x188C DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1A21 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1948 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1A70 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1869 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1966 SWAP2 SWAP1 PUSH2 0x1C7C JUMP JUMPDEST PUSH2 0x1869 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA0F JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1A15 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1A01 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1A68 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0xD1A JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xD1A JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1A7F DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1A87 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1AE8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA0F JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x1B36 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA0F JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1B52 SWAP2 SWAP1 PUSH2 0x1CD0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1B8F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1B94 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1BA4 DUP3 DUP3 DUP7 PUSH2 0x1BAF JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1BBE JUMPI POP DUP2 PUSH2 0x188C JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x1BCE JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA0F SWAP2 SWAP1 PUSH2 0x1D4D JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1BFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x188C DUP3 PUSH2 0x1BE8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1C32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C3B DUP4 PUSH2 0x1BE8 JUMP JUMPDEST SWAP2 POP PUSH2 0x1C49 PUSH1 0x20 DUP5 ADD PUSH2 0x1BE8 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1C65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C6E DUP4 PUSH2 0x1BE8 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x188C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1CE2 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1DE6 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1D41 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1D1C JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1D6C DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1DCA JUMPI PUSH2 0x1DCA PUSH2 0x1E12 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1DE1 JUMPI PUSH2 0x1DE1 PUSH2 0x1E12 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E01 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1DE9 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x18D8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 ADDRESS CODECOPY 0xCA 0x21 MUL JUMPDEST CALLER POP 0xC3 0xE 0xD3 LOG4 DUP14 MSIZE 0xB3 0x2E DUP13 PUSH10 0xEAB69919F6FFAA5EFFE9 SWAP11 EXTCODECOPY 0x1F PUSH5 0x736F6C6343 STOP ADDMOD SMOD STOP CALLER ",
              "sourceMap": "140:502:65:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1968:80:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;5634:25:84;;;5622:2;5607:18;1968:80:29;;;;;;;;1728:76;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2556:364:31;;;;;;:::i;:::-;;:::i;:::-;;880:79:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;435:57;;;;;;:::i;:::-;;;;;;;;;;;;;;1374:436:42;;;;;;:::i;:::-;;:::i;362:32:31:-;;;;;-1:-1:-1;;;;;362:32:31;;;;;;;;;;:::i;2090:78:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;680:175:28;;;:::i;384:50:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3537:14:84;;3530:22;3512:41;;3500:2;3485:18;384:50:32;3372:187:84;2196:653:42;;;;;;:::i;:::-;;:::i;199:34:28:-;;;;;-1:-1:-1;;;;;199:34:28;;;667:41:31;;;;;;834:50;;;;;;533:194:32;;;;;;:::i;:::-;;:::i;4195:110:31:-;;;;;;:::i;:::-;;:::i;465:108:65:-;;;;;;:::i;:::-;;:::i;1788:223:31:-;;;;;;:::i;:::-;;:::i;925:49::-;;;;;;590:36;;;;;-1:-1:-1;;;;;590:36:31;;;2385:105:29;;;:::i;:::-;;;;;;;:::i;2210:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3140:152:31;;;;;;:::i;:::-;;:::i;2531:111:29:-;;;:::i;999:203:32:-;;;;;;:::i;:::-;;:::i;769:69:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;721:609:42;;;;;;:::i;:::-;;:::i;1854:298::-;;;;;;:::i;:::-;;:::i;577:63:65:-;;;;;;:::i;:::-;;:::i;749:44:31:-;;;;;;762:202:32;;;;;;:::i;:::-;;:::i;485:161:28:-;;;;;;:::i;:::-;;:::i;629:49:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3973:182:31;;;;;;:::i;:::-;;:::i;2960:140::-;;;;;;:::i;:::-;;:::i;299:49:32:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;435:37:31;;;;;-1:-1:-1;;;;;435:37:31;;;2286:230;;;;;;:::i;:::-;;:::i;3666:267::-;;;;;;:::i;:::-;;:::i;1846:80:29:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1105:32:31;;;;;;534:53:29;;;;;;:::i;:::-;;;;;;;;;;;;;;3332:188:31;;;;;;:::i;:::-;;:::i;2051:195::-;;;;;;:::i;:::-;;:::i;1237:211:32:-;;;;;;:::i;:::-;;:::i;513:36:31:-;;;;;-1:-1:-1;;;;;513:36:31;;;268:41:28;;;;;-1:-1:-1;;;;;268:41:28;;;1015:49:31;;;;;;2556:364;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2647:27:31;::::1;2643:53;;2683:13;;-1:-1:-1::0;;;2683:13:31::1;;;;;;;;;;;2643:53;2702:12;:28:::0;;-1:-1:-1;;;;;2702:28:31;;::::1;-1:-1:-1::0;;;;;;2702:28:31;;::::1;::::0;::::1;::::0;;;:12:::1;2736:28:::0;;;:14:::1;:28;::::0;;;;;;:43;;;;::::1;::::0;;::::1;::::0;;;2830:12:::1;::::0;2816:55;;-1:-1:-1;;;2816:55:31;;2830:12;::::1;::::0;2816:40:::1;::::0;:55:::1;::::0;2717:13;;2816:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2785:28:31;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;:86;;-1:-1:-1;;2785:86:31::1;::::0;::::1;;::::0;;;::::1;::::0;;;2882:33;::::1;::::0;::::1;::::0;2785:28;;2882:33:::1;:::i;:::-;;;;;;;;2556:364:::0;:::o;1374:436:42:-;1447:10;1438:20;;;;:8;:20;;;;;;;;1434:43;;;1467:10;;-1:-1:-1;;;1467:10:42;;;;;;;;;;;1434:43;1504:10;1487:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1487:38:42;;;;;;;;;;1483:73;;1539:17;;-1:-1:-1;;;1539:17:42;;;;;;;;;;;1483:73;1583:10;1566:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1566:38:42;;;;;;;;;;1608:15;-1:-1:-1;1562:83:42;;1632:13;;-1:-1:-1;;;1632:13:42;;;;;;;;;;;1562:83;1676:10;1659:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1659:38:42;;;;;;;;;1652:45;;;1659:28;1722:31;;1688:8;1722:9;:31::i;:::-;1704:49;;1787:8;-1:-1:-1;;;;;1764:41:42;1775:10;-1:-1:-1;;;;;1764:41:42;;1797:7;1764:41;;;;5634:25:84;;5622:2;5607:18;;5488:177;1764:41:42;;;;;;;;1428:382;1374:436;:::o;680:175:28:-;1172:17;;-1:-1:-1;;;;;1172:17:28;1158:10;:31;1154:67;;1198:23;;-1:-1:-1;;;1198:23:28;;;;;;;;;;;1154:67;767:17:::1;::::0;;754:10:::1;:30:::0;;-1:-1:-1;;;;;767:17:28;::::1;-1:-1:-1::0;;;;;;754:30:28;;::::1;::::0;::::1;::::0;;;790:24;;::::1;::::0;;;825:25:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;680:175::o:0;2196:653:42:-;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;;;;;;;;;1680:1;2389:7;:18;;;2288:10:42::1;2273:26:::0;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;2273:36:42;::::1;::::0;;;;;;;;2269:73:::1;;2323:19;;-1:-1:-1::0;;;2323:19:42::1;;;;;;;;;;;2269:73;2369:10;2352:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;2352:38:42;::::1;::::0;;;;;;;;2394:15:::1;-1:-1:-1::0;2348:85:42::1;;2418:15;;-1:-1:-1::0;;;2418:15:42::1;;;;;;;;;;;2348:85;2452:10;2443:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;2439:43;;;2472:10;;-1:-1:-1::0;;;2472:10:42::1;;;;;;;;;;;2439:43;2522:10;2489:15;2507:26:::0;;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;2507:36:42;;::::1;::::0;;;;;;;;;;2566:8:::1;::::0;2507:36;;2566:8;::::1;2554:20;2550:84;;;2599:13;::::0;2584:43:::1;::::0;-1:-1:-1;;;2584:43:42;;::::1;::::0;::::1;5634:25:84::0;;;-1:-1:-1;;;;;2599:13:42;;::::1;::::0;2584:34:::1;::::0;5607:18:84;;2584:43:42::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2550:84;2662:10;2647:26;::::0;;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;2647:36:42;::::1;::::0;;;;;;;;;2640:43;;;2696:28;;;:16:::1;:28:::0;;;;;:38;;;;;;;;2689:45;;;;2741:50:::1;::::0;2783:7;2741:29:::1;:50::i;:::-;2803:41;::::0;5634:25:84;;;-1:-1:-1;;;;;2803:41:42;::::1;::::0;2814:10:::1;::::0;2803:41:::1;::::0;5622:2:84;5607:18;2803:41:42::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;2196:653:42:o;533:194:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;614:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;610:48;;;641:17;;-1:-1:-1::0;;;641:17:32::1;;;;;;;;;;;610:48;-1:-1:-1::0;;;;;664:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;664:25:32::1;685:4;664:25;::::0;;700:22;::::1;::::0;::::1;::::0;673:8;;700:22:::1;:::i;4195:110:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4264:3:31::1;:10:::0;;;4285:15:::1;::::0;5634:25:84;;;4285:15:31::1;::::0;5622:2:84;5607:18;4285:15:31::1;5488:177:84::0;465:108:65;523:4;542:26;:8;560:7;542:17;:26::i;:::-;535:33;465:108;-1:-1:-1;;465:108:65:o;1788:223:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1879:27:31;::::1;1875:53;;1915:13;;-1:-1:-1::0;;;1915:13:31::1;;;;;;;;;;;1875:53;1934:12;:28:::0;;-1:-1:-1;;;;;;1934:28:31::1;-1:-1:-1::0;;;;;1934:28:31;::::1;;::::0;;1973:33:::1;::::0;::::1;::::0;::::1;::::0;1934:28;;1973:33:::1;:::i;2385:105:29:-:0;2433:22;2471:14;:5;:12;:14::i;:::-;2463:22;;2385:105;:::o;3140:152:31:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3223:10:31::1;:24:::0;;;3258:29:::1;::::0;5634:25:84;;;3258:29:31::1;::::0;5622:2:84;5607:18;3258:29:31::1;5488:177:84::0;2531:111:29;2582:22;2620:17;:8;:15;:17::i;999:203:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1082:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1078:51;;;1111:18;;-1:-1:-1::0;;;1111:18:32::1;;;;;;;;;;;1078:51;-1:-1:-1::0;;;;;1135:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;1135:27:32::1;1158:4;1135:27;::::0;;1173:24;::::1;::::0;::::1;::::0;1145:9;;1173:24:::1;:::i;721:609:42:-:0;1680:1:0;2259:7;;:19;;2251:63;;;;-1:-1:-1;;;2251:63:0;;;;;;;:::i;:::-;1680:1;2389:7;:18;;;820:10:42::1;811:20:::0;;:8:::1;:20;::::0;;;;;::::1;;807:43;;;840:10;;-1:-1:-1::0;;;840:10:42::1;;;;;;;;;;;807:43;860:26;:5;875:10;860:14;:26::i;:::-;856:52;;;895:13;;-1:-1:-1::0;;;895:13:42::1;;;;;;;;;;;856:52;973:8;::::0;955:26:::1;::::0;:15:::1;:26;:::i;:::-;931:10;914:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;914:38:42;::::1;::::0;;;;;;;;:67;;;;1006:41;;-1:-1:-1;;;1006:41:42;;914:28;;:38;1006:26:::1;::::0;:41:::1;::::0;1041:4:::1;::::0;1006:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;988:59:::0;-1:-1:-1;1053:69:42::1;-1:-1:-1::0;;;;;1053:33:42;::::1;1087:10;1107:4;1114:7:::0;1053:33:::1;:69::i;:::-;1138:41;::::0;-1:-1:-1;;;1138:41:42;;1182:7;;-1:-1:-1;;;;;1138:26:42;::::1;::::0;::::1;::::0;:41:::1;::::0;1173:4:::1;::::0;1138:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;1206:10;1196:21;::::0;;;:9:::1;:21;::::0;;;;;;;:28;;-1:-1:-1;;1196:28:42::1;1220:4;1196:28;::::0;;1230:12:::1;:24:::0;;;;;-1:-1:-1;;;;;1230:34:42;::::1;::::0;;;;;;;:45;;1128:61;;-1:-1:-1;1128:61:42;;1230:34;;1196:21;1230:45:::1;::::0;1128:61;;1230:45:::1;:::i;:::-;::::0;;;-1:-1:-1;;1287:38:42::1;::::0;5634:25:84;;;-1:-1:-1;;;;;1287:38:42;::::1;::::0;1295:10:::1;::::0;1287:38:::1;::::0;5622:2:84;5607:18;1287:38:42::1;;;;;;;-1:-1:-1::0;;1637:1:0;2562:7;:22;-1:-1:-1;721:609:42:o;1854:298::-;1988:10;;1970:28;;:15;:28;:::i;:::-;1946:10;1929:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1929:38:42;;;;;;;;;;;:69;;;;2004:17;;;:5;:17;;;;;:27;;;;;;;;;:38;;2035:7;;1929:28;2004:38;;2035:7;;2004:38;:::i;:::-;;;;-1:-1:-1;;2063:10:42;2048:26;;;;:14;:26;;;;;;;;-1:-1:-1;;;;;2048:36:42;;;;;;;;;:47;;2088:7;;2048:26;:47;;2088:7;;2048:47;:::i;:::-;;;;-1:-1:-1;;2107:40:42;;5634:25:84;;;-1:-1:-1;;;;;2107:40:42;;;2117:10;;2107:40;;5622:2:84;5607:18;2107:40:42;5488:177:84;577:63:65;621:14;:5;631:3;621:9;:14::i;:::-;;577:63;:::o;762:202:32:-;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;847:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;::::1;;842:51;;874:19;;-1:-1:-1::0;;;874:19:32::1;;;;;;;;;;;842:51;-1:-1:-1::0;;;;;906:18:32;::::1;;::::0;;;:8:::1;:18;::::0;;;;;;899:25;;-1:-1:-1;;899:25:32::1;::::0;;935:24;::::1;::::0;::::1;::::0;915:8;;935:24:::1;:::i;485:161:28:-:0;983:10;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;568:17:::1;:31:::0;;-1:-1:-1;;;;;;568:31:28::1;-1:-1:-1::0;;;;;568:31:28;::::1;;::::0;;610::::1;::::0;::::1;::::0;::::1;::::0;568;;610::::1;:::i;3973:182:31:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;4066:15:31::1;:34:::0;;;4111:39:::1;::::0;5634:25:84;;;4111:39:31::1;::::0;5622:2:84;5607:18;4111:39:31::1;5488:177:84::0;2960:140:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3039:8:31::1;:20:::0;;;3070:25:::1;::::0;5634::84;;;3070::31::1;::::0;5622:2:84;5607:18;3070:25:31::1;5488:177:84::0;2286:230:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2379:28:31;::::1;2375:54;;2416:13;;-1:-1:-1::0;;;2416:13:31::1;;;;;;;;;;;2375:54;2435:13;:30:::0;;-1:-1:-1;;;;;;2435:30:31::1;-1:-1:-1::0;;;;;2435:30:31;::::1;;::::0;;2476:35:::1;::::0;::::1;::::0;::::1;::::0;2435:30;;2476:35:::1;:::i;3666:267::-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;1341:6:31::1;3765:17;:43;3761:73;;;3817:17;;-1:-1:-1::0;;;3817:17:31::1;;;;;;;;;;;3761:73;3840:16;:36:::0;;;3887:41:::1;::::0;5634:25:84;;;3887:41:31::1;::::0;5607:18:84;3887:41:31::1;5488:177:84::0;3332:188:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;3427:16:31::1;:36:::0;;;3474:41:::1;::::0;5634:25:84;;;3474:41:31::1;::::0;5622:2:84;5607:18;3474:41:31::1;5488:177:84::0;2051:195:31;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;2134:23:31;::::1;2130:49;;2166:13;;-1:-1:-1::0;;;2166:13:31::1;;;;;;;;;;;2130:49;2185:8;:20:::0;;-1:-1:-1;;;;;;2185:20:31::1;-1:-1:-1::0;;;;;2185:20:31;::::1;;::::0;;2216:25:::1;::::0;::::1;::::0;::::1;::::0;2185:20;;2216:25:::1;:::i;1237:211:32:-:0;983:10:28;;-1:-1:-1;;;;;983:10:28;969;:24;965:53;;1002:16;;-1:-1:-1;;;1002:16:28;;;;;;;;;;;965:53;-1:-1:-1;;;;;1324:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;::::1;;1319:54;;1353:20;;-1:-1:-1::0;;;1353:20:32::1;;;;;;;;;;;1319:54;-1:-1:-1::0;;;;;1386:20:32;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;1379:27;;-1:-1:-1;;1379:27:32::1;::::0;;1417:26;::::1;::::0;::::1;::::0;1396:9;;1417:26:::1;:::i;2853:454:42:-:0;-1:-1:-1;;;;;2960:18:42;;2933:15;2960:18;;;:9;:18;;;;;;2956:80;;-1:-1:-1;;;;;2993:18:42;;;;;;:9;:18;;;;;3014:15;2993:36;;2956:80;3041:21;:8;3054:7;3041:12;:21::i;:::-;-1:-1:-1;;;;;;;3078:21:42;;;;;;;:12;:21;;;;;;;;:31;;;;;;;;;;;;;;3115:38;;;;3188:14;;;:5;:14;;;;;:24;;;;;;;;;:35;;3078:31;;;;3188:35;;3078:31;;3188:35;:::i;:::-;;;;-1:-1:-1;;3245:8:42;;-1:-1:-1;;;;;3233:20:42;;;3245:8;;3233:20;3229:74;;;3273:8;;3263:33;;-1:-1:-1;;;3263:33:42;;;;;5634:25:84;;;-1:-1:-1;;;;;3273:8:42;;;;3263:24;;5607:18:84;;3263:33:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2853:454;;;;:::o;634:205:4:-;773:58;;-1:-1:-1;;;;;2622:32:84;;773:58:4;;;2604:51:84;2671:18;;;2664:34;;;746:86:4;;766:5;;-1:-1:-1;;;796:23:4;2577:18:84;;773:58:4;;;;-1:-1:-1;;773:58:4;;;;;;;;;;;;;;-1:-1:-1;;;;;773:58:4;-1:-1:-1;;;;;;773:58:4;;;;;;;;;;746:19;:86::i;:::-;634:205;;;:::o;8100:165:8:-;-1:-1:-1;;;;;8233:23:8;;8180:4;3767:19;;;:12;;;:19;;;;;;:24;;8203:55;8196:62;8100:165;-1:-1:-1;;;8100:165:8:o;9499:257::-;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;845:241:4:-;1010:68;;-1:-1:-1;;;;;2308:15:84;;;1010:68:4;;;2290:34:84;2360:15;;2340:18;;;2333:43;2392:18;;;2385:34;;;983:96:4;;1003:5;;-1:-1:-1;;;1033:27:4;2225:18:84;;1010:68:4;2050:375:84;983:96:4;845:241;;;;:::o;7545:150:8:-;7615:4;7638:50;7643:3;-1:-1:-1;;;;;7663:23:8;;7638:4;:50::i;3140:706:4:-;3559:23;3585:69;3613:4;3585:69;;;;;;;;;;;;;;;;;3593:5;-1:-1:-1;;;;;3585:27:4;;;:69;;;;;:::i;:::-;3668:17;;3559:95;;-1:-1:-1;3668:21:4;3664:176;;3763:10;3752:30;;;;;;;;;;;;:::i;:::-;3744:85;;;;-1:-1:-1;;;3744:85:4;;4919:2:84;3744:85:4;;;4901:21:84;4958:2;4938:18;;;4931:30;4997:34;4977:18;;;4970:62;-1:-1:-1;;;5048:18:84;;;5041:40;5098:19;;3744:85:4;4717:406:84;4986:109:8;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;1630:404::-;1693:4;3767:19;;;:12;;;:19;;;;;;1709:319;;-1:-1:-1;1751:23:8;;;;;;;;:11;:23;;;;;;;;;;;;;1931:18;;1909:19;;;:12;;;:19;;;;;;:40;;;;1963:11;;1709:319;-1:-1:-1;2012:5:8;2005:12;;3461:223:5;3594:12;3625:52;3647:6;3655:4;3661:1;3664:12;3625:21;:52::i;:::-;3618:59;3461:223;-1:-1:-1;;;;3461:223:5:o;4548:499::-;4713:12;4770:5;4745:21;:30;;4737:81;;;;-1:-1:-1;;;4737:81:5;;4154:2:84;4737:81:5;;;4136:21:84;4193:2;4173:18;;;4166:30;4232:34;4212:18;;;4205:62;-1:-1:-1;;;4283:18:84;;;4276:36;4329:19;;4737:81:5;3952:402:84;4737:81:5;1034:20;;4828:60;;;;-1:-1:-1;;;4828:60:5;;4561:2:84;4828:60:5;;;4543:21:84;4600:2;4580:18;;;4573:30;4639:31;4619:18;;;4612:59;4688:18;;4828:60:5;4359:353:84;4828:60:5;4900:12;4914:23;4941:6;-1:-1:-1;;;;;4941:11:5;4960:5;4967:4;4941:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4899:73;;;;4989:51;5006:7;5015:10;5027:12;4989:16;:51::i;:::-;4982:58;4548:499;-1:-1:-1;;;;;;;4548:499:5:o;7161:692::-;7307:12;7335:7;7331:516;;;-1:-1:-1;7365:10:5;7358:17;;7331:516;7476:17;;:21;7472:365;;7670:10;7664:17;7730:15;7717:10;7713:2;7709:19;7702:44;7472:365;7809:12;7802:20;;-1:-1:-1;;;7802:20:5;;;;;;;;:::i;14:173:84:-;82:20;;-1:-1:-1;;;;;131:31:84;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:254::-;716:6;724;777:2;765:9;756:7;752:23;748:32;745:52;;;793:1;790;783:12;745:52;816:29;835:9;816:29;:::i;:::-;806:39;892:2;877:18;;;;864:32;;-1:-1:-1;;;648:254:84:o;907:277::-;974:6;1027:2;1015:9;1006:7;1002:23;998:32;995:52;;;1043:1;1040;1033:12;995:52;1075:9;1069:16;1128:5;1121:13;1114:21;1107:5;1104:32;1094:60;;1150:1;1147;1140:12;1189:180;1248:6;1301:2;1289:9;1280:7;1276:23;1272:32;1269:52;;;1317:1;1314;1307:12;1269:52;-1:-1:-1;1340:23:84;;1189:180;-1:-1:-1;1189:180:84:o;1374:184::-;1444:6;1497:2;1485:9;1476:7;1472:23;1468:32;1465:52;;;1513:1;1510;1503:12;1465:52;-1:-1:-1;1536:16:84;;1374:184;-1:-1:-1;1374:184:84:o;1563:274::-;1692:3;1730:6;1724:13;1746:53;1792:6;1787:3;1780:4;1772:6;1768:17;1746:53;:::i;:::-;1815:16;;;;;1563:274;-1:-1:-1;;1563:274:84:o;1842:203::-;-1:-1:-1;;;;;2006:32:84;;;;1988:51;;1976:2;1961:18;;1842:203::o;2709:658::-;2880:2;2932:21;;;3002:13;;2905:18;;;3024:22;;;2851:4;;2880:2;3103:15;;;;3077:2;3062:18;;;2851:4;3146:195;3160:6;3157:1;3154:13;3146:195;;;3225:13;;-1:-1:-1;;;;;3221:39:84;3209:52;;3316:15;;;;3281:12;;;;3257:1;3175:9;3146:195;;;-1:-1:-1;3358:3:84;;2709:658;-1:-1:-1;;;;;;2709:658:84:o;3564:383::-;3713:2;3702:9;3695:21;3676:4;3745:6;3739:13;3788:6;3783:2;3772:9;3768:18;3761:34;3804:66;3863:6;3858:2;3847:9;3843:18;3838:2;3830:6;3826:15;3804:66;:::i;:::-;3931:2;3910:15;-1:-1:-1;;3906:29:84;3891:45;;;;3938:2;3887:54;;3564:383;-1:-1:-1;;3564:383:84:o;5128:355::-;5330:2;5312:21;;;5369:2;5349:18;;;5342:30;5408:33;5403:2;5388:18;;5381:61;5474:2;5459:18;;5128:355::o;5670:128::-;5710:3;5741:1;5737:6;5734:1;5731:13;5728:39;;;5747:18;;:::i;:::-;-1:-1:-1;5783:9:84;;5670:128::o;5803:125::-;5843:4;5871:1;5868;5865:8;5862:34;;;5876:18;;:::i;:::-;-1:-1:-1;5913:9:84;;5803:125::o;5933:258::-;6005:1;6015:113;6029:6;6026:1;6023:13;6015:113;;;6105:11;;;6099:18;6086:11;;;6079:39;6051:2;6044:10;6015:113;;;6146:6;6143:1;6140:13;6137:48;;;-1:-1:-1;;6181:1:84;6163:16;;6156:27;5933:258::o;6196:127::-;6257:10;6252:3;6248:20;6245:1;6238:31;6288:4;6285:1;6278:15;6312:4;6309:1;6302:15"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "1554800",
                "executionCost": "infinite",
                "totalCost": "infinite"
              },
              "external": {
                "acceptGovernance()": "52082",
                "activate(address)": "infinite",
                "addDisputer(address)": "30111",
                "addSlasher(address)": "30155",
                "bond(address,uint256)": "infinite",
                "bondTime()": "2307",
                "bonds(address,address)": "infinite",
                "canActivateAfter(address,address)": "infinite",
                "canWithdrawAfter(address,address)": "infinite",
                "disputers(address)": "2753",
                "disputes(address)": "2730",
                "fee()": "2394",
                "firstSeen(address)": "2640",
                "governance()": "2627",
                "hasBonded(address)": "2752",
                "inflationPeriod()": "2548",
                "isKeeper(address)": "infinite",
                "jobTokenCredits(address,address)": "infinite",
                "jobs()": "infinite",
                "keep3rHelper()": "2581",
                "keep3rV1()": "2517",
                "keep3rV1Proxy()": "2383",
                "keepers()": "infinite",
                "kp3rWethPool()": "2538",
                "liquidityMinimum()": "2329",
                "pendingBonds(address,address)": "infinite",
                "pendingGovernance()": "2603",
                "pendingUnbonds(address,address)": "infinite",
                "removeDisputer(address)": "30277",
                "removeSlasher(address)": "30234",
                "rewardPeriodTime()": "2439",
                "setBondTime(uint256)": "25784",
                "setFee(uint256)": "25630",
                "setGovernance(address)": "27992",
                "setInflationPeriod(uint256)": "25762",
                "setJob(address)": "infinite",
                "setKeep3rHelper(address)": "27983",
                "setKeep3rV1(address)": "28026",
                "setKeep3rV1Proxy(address)": "27894",
                "setKp3rWethPool(address)": "infinite",
                "setLiquidityMinimum(uint256)": "25695",
                "setRewardPeriodTime(uint256)": "25630",
                "setUnbondTime(uint256)": "25784",
                "slashers(address)": "2796",
                "unbond(address,uint256)": "infinite",
                "unbondTime()": "2417",
                "withdraw(address)": "infinite",
                "workCompleted(address)": "2620"
              }
            },
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "activate(address)": "1c5a9d9c",
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "bond(address,uint256)": "a515366a",
              "bondTime()": "5ebe23f0",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "governance()": "5aa6e675",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "isKeeper(address)": "6ba42aaa",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityMinimum()": "633fb68f",
              "pendingBonds(address,address)": "15006b82",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "rewardPeriodTime()": "768b5d90",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setGovernance(address)": "ab033ea9",
              "setInflationPeriod(uint256)": "b2392233",
              "setJob(address)": "a662031b",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slashers(address)": "b87fcbff",
              "unbond(address,uint256)": "a5d059ca",
              "unbondTime()": "a7d2e784",
              "withdraw(address)": "51cff8d9",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kph\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyAJob\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Activation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"isKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"job\",\"type\":\"address\"}],\"name\":\"setJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"activate(address)\":{\"params\":{\"_bonding\":\"The asset being activated as bond collateral\"}},\"bond(address,uint256)\":{\"params\":{\"_amount\":\"The amount of bonding asset being bonded\",\"_bonding\":\"The asset being bonded\"}},\"jobs()\":{\"returns\":{\"_list\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_list\":\"Array with all the keepers in _keepers\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"unbond(address,uint256)\":{\"params\":{\"_amount\":\"Allows for partial unbonding\",\"_bonding\":\"The asset being unbonded\"}},\"withdraw(address)\":{\"params\":{\"_bonding\":\"The asset to withdraw from the bonding pool\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAJob()\":[{\"notice\":\"Throws when the address that is trying to register as a job is already a job\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"Activation(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#activate is called\"},\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"},\"Withdrawal(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#withdraw is called\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"activate(address)\":{\"notice\":\"End of the bonding process after bonding time has passed\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"bond(address,uint256)\":{\"notice\":\"Beginning of the bonding process\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bonds(address,address)\":{\"notice\":\"Mapping (job => bonding => amount)\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"unbond(address,uint256)\":{\"notice\":\"Beginning of the unbonding process\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdraw(address)\":{\"notice\":\"Withdraw funds after unbonding has finished\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol\":\"Keep3rKeeperFundableForTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and make it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        // On the first call to nonReentrant, _notEntered will be true\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n\\n        _;\\n\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x842ccf9a6cd33e17b7acef8372ca42090755217b358fe0c44c98e951ea549d3a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x02348b2e4b9f3200c7e3907c5c2661643a6d8520e9f79939fbb9b4005a54894d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize, which returns 0 for contracts in\\n        // construction, since the code is only stored at the end of the\\n        // constructor execution.\\n\\n        uint256 size;\\n        assembly {\\n            size := extcodesize(account)\\n        }\\n        return size > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResult(success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            // Look for revert reason and bubble it up if present\\n            if (returndata.length > 0) {\\n                // The easiest way to bubble the revert reason is using memory via assembly\\n\\n                assembly {\\n                    let returndata_size := mload(returndata)\\n                    revert(add(32, returndata), returndata_size)\\n                }\\n            } else {\\n                revert(errorMessage);\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x3336baae5cf23e94274d75336e2d412193be508504aee185e61dc7d58cd05c8a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```\\n * contract Example {\\n *     // Add the library methods\\n *     using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n *     // Declare a set state variable\\n *     EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n */\\nlibrary EnumerableSet {\\n    // To implement this library for multiple types with as little code\\n    // repetition as possible, we write it in terms of a generic Set type with\\n    // bytes32 values.\\n    // The Set implementation uses private functions, and user-facing\\n    // implementations (such as AddressSet) are just wrappers around the\\n    // underlying Set.\\n    // This means that we can only create new EnumerableSets for types that fit\\n    // in bytes32.\\n\\n    struct Set {\\n        // Storage of set values\\n        bytes32[] _values;\\n        // Position of the value in the `values` array, plus 1 because index 0\\n        // means a value is not in the set.\\n        mapping(bytes32 => uint256) _indexes;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function _add(Set storage set, bytes32 value) private returns (bool) {\\n        if (!_contains(set, value)) {\\n            set._values.push(value);\\n            // The value is stored at length-1, but we add 1 to all indexes\\n            // and use 0 as a sentinel value\\n            set._indexes[value] = set._values.length;\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function _remove(Set storage set, bytes32 value) private returns (bool) {\\n        // We read and store the value's index to prevent multiple reads from the same storage slot\\n        uint256 valueIndex = set._indexes[value];\\n\\n        if (valueIndex != 0) {\\n            // Equivalent to contains(set, value)\\n            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n            // the array, and then remove the last element (sometimes called as 'swap and pop').\\n            // This modifies the order of the array, as noted in {at}.\\n\\n            uint256 toDeleteIndex = valueIndex - 1;\\n            uint256 lastIndex = set._values.length - 1;\\n\\n            if (lastIndex != toDeleteIndex) {\\n                bytes32 lastvalue = set._values[lastIndex];\\n\\n                // Move the last value to the index where the value to delete is\\n                set._values[toDeleteIndex] = lastvalue;\\n                // Update the index for the moved value\\n                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex\\n            }\\n\\n            // Delete the slot where the moved value was stored\\n            set._values.pop();\\n\\n            // Delete the index for the deleted slot\\n            delete set._indexes[value];\\n\\n            return true;\\n        } else {\\n            return false;\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n        return set._indexes[value] != 0;\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function _length(Set storage set) private view returns (uint256) {\\n        return set._values.length;\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n        return set._values[index];\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function _values(Set storage set) private view returns (bytes32[] memory) {\\n        return set._values;\\n    }\\n\\n    // Bytes32Set\\n\\n    struct Bytes32Set {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _add(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n        return _remove(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n        return _contains(set._inner, value);\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(Bytes32Set storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n        return _at(set._inner, index);\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n        return _values(set._inner);\\n    }\\n\\n    // AddressSet\\n\\n    struct AddressSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(AddressSet storage set, address value) internal returns (bool) {\\n        return _add(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(AddressSet storage set, address value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(AddressSet storage set, address value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(uint256(uint160(value))));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values in the set. O(1).\\n     */\\n    function length(AddressSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n        return address(uint160(uint256(_at(set._inner, index))));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(AddressSet storage set) internal view returns (address[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        address[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n\\n    // UintSet\\n\\n    struct UintSet {\\n        Set _inner;\\n    }\\n\\n    /**\\n     * @dev Add a value to a set. O(1).\\n     *\\n     * Returns true if the value was added to the set, that is if it was not\\n     * already present.\\n     */\\n    function add(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _add(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Removes a value from a set. O(1).\\n     *\\n     * Returns true if the value was removed from the set, that is if it was\\n     * present.\\n     */\\n    function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n        return _remove(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns true if the value is in the set. O(1).\\n     */\\n    function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n        return _contains(set._inner, bytes32(value));\\n    }\\n\\n    /**\\n     * @dev Returns the number of values on the set. O(1).\\n     */\\n    function length(UintSet storage set) internal view returns (uint256) {\\n        return _length(set._inner);\\n    }\\n\\n    /**\\n     * @dev Returns the value stored at position `index` in the set. O(1).\\n     *\\n     * Note that there are no guarantees on the ordering of values inside the\\n     * array, and it may change when more values are added or removed.\\n     *\\n     * Requirements:\\n     *\\n     * - `index` must be strictly less than {length}.\\n     */\\n    function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n        return uint256(_at(set._inner, index));\\n    }\\n\\n    /**\\n     * @dev Return the entire set in an array\\n     *\\n     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n     * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n     */\\n    function values(UintSet storage set) internal view returns (uint256[] memory) {\\n        bytes32[] memory store = _values(set._inner);\\n        uint256[] memory result;\\n\\n        assembly {\\n            result := store\\n        }\\n\\n        return result;\\n    }\\n}\\n\",\"keccak256\":\"0x3778dc944f4a696335878bad8beca60f38b7c79b7a0bd8ddbeb618bd502a95ae\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IGovernable.sol';\\n\\nabstract contract Governable is IGovernable {\\n  /// @inheritdoc IGovernable\\n  address public override governance;\\n\\n  /// @inheritdoc IGovernable\\n  address public override pendingGovernance;\\n\\n  constructor(address _governance) {\\n    if (_governance == address(0)) revert NoGovernanceZeroAddress();\\n    governance = _governance;\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function setGovernance(address _governance) external override onlyGovernance {\\n    pendingGovernance = _governance;\\n    emit GovernanceProposal(_governance);\\n  }\\n\\n  /// @inheritdoc IGovernable\\n  function acceptGovernance() external override onlyPendingGovernance {\\n    governance = pendingGovernance;\\n    delete pendingGovernance;\\n    emit GovernanceSet(governance);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by governance\\n  modifier onlyGovernance {\\n    if (msg.sender != governance) revert OnlyGovernance();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by pendingGovernance\\n  modifier onlyPendingGovernance {\\n    if (msg.sender != pendingGovernance) revert OnlyPendingGovernance();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x5b6d7601a42d2229657a7f60021c7e2bfe890c3541ab0003f7d88e20a28d722b\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport '../../interfaces/peripherals/IKeep3rAccountance.sol';\\n\\nabstract contract Keep3rAccountance is IKeep3rAccountance {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  /// @notice List of all enabled keepers\\n  EnumerableSet.AddressSet internal _keepers;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override workCompleted;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => uint256) public override firstSeen;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override disputes;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  /// @notice Mapping (job => bonding => amount)\\n  mapping(address => mapping(address => uint256)) public override bonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override jobTokenCredits;\\n\\n  /// @notice The current liquidity credits available for a job\\n  mapping(address => uint256) internal _jobLiquidityCredits;\\n\\n  /// @notice Map the address of a job to its correspondent periodCredits\\n  mapping(address => uint256) internal _jobPeriodCredits;\\n\\n  /// @notice Enumerable array of Job Tokens for Credits\\n  mapping(address => EnumerableSet.AddressSet) internal _jobTokens;\\n\\n  /// @notice List of liquidities that a job has (job => liquidities)\\n  mapping(address => EnumerableSet.AddressSet) internal _jobLiquidities;\\n\\n  /// @notice Liquidity pool to observe\\n  mapping(address => address) internal _liquidityPool;\\n\\n  /// @notice Tracks if a pool has KP3R as token0\\n  mapping(address => bool) internal _isKP3RToken0;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingBonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canActivateAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override canWithdrawAfter;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => mapping(address => uint256)) public override pendingUnbonds;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  mapping(address => bool) public override hasBonded;\\n\\n  /// @notice List of all enabled jobs\\n  EnumerableSet.AddressSet internal _jobs;\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function jobs() external view override returns (address[] memory _list) {\\n    _list = _jobs.values();\\n  }\\n\\n  /// @inheritdoc IKeep3rAccountance\\n  function keepers() external view override returns (address[] memory _list) {\\n    _list = _keepers.values();\\n  }\\n}\\n\",\"keccak256\":\"0x34413d1868370b551522d7bea6b940707ac67234f312155f96fb7ee027f29baa\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/IKeep3rHelper.sol';\\nimport '../../interfaces/peripherals/IKeep3rParameters.sol';\\nimport './Keep3rAccountance.sol';\\nimport './Keep3rRoles.sol';\\n\\nabstract contract Keep3rParameters is IKeep3rParameters, Keep3rAccountance, Keep3rRoles {\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rV1Proxy;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override keep3rHelper;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  address public override kp3rWethPool;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override bondTime = 3 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override unbondTime = 14 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override liquidityMinimum = 3 ether;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override rewardPeriodTime = 5 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override inflationPeriod = 34 days;\\n\\n  /// @inheritdoc IKeep3rParameters\\n  uint256 public override fee = 30;\\n\\n  /// @notice The base that will be used to calculate the fee\\n  uint256 internal constant _BASE = 10_000;\\n\\n  /// @notice The minimum reward period\\n  uint256 internal constant _MIN_REWARD_PERIOD_TIME = 1 days;\\n\\n  constructor(\\n    address _keep3rHelper,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) {\\n    keep3rHelper = _keep3rHelper;\\n    keep3rV1 = _keep3rV1;\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rHelper(address _keep3rHelper) external override onlyGovernance {\\n    if (_keep3rHelper == address(0)) revert ZeroAddress();\\n    keep3rHelper = _keep3rHelper;\\n    emit Keep3rHelperChange(_keep3rHelper);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1(address _keep3rV1) external override onlyGovernance {\\n    if (_keep3rV1 == address(0)) revert ZeroAddress();\\n    keep3rV1 = _keep3rV1;\\n    emit Keep3rV1Change(_keep3rV1);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external override onlyGovernance {\\n    if (_keep3rV1Proxy == address(0)) revert ZeroAddress();\\n    keep3rV1Proxy = _keep3rV1Proxy;\\n    emit Keep3rV1ProxyChange(_keep3rV1Proxy);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setKp3rWethPool(address _kp3rWethPool) external override onlyGovernance {\\n    if (_kp3rWethPool == address(0)) revert ZeroAddress();\\n    kp3rWethPool = _kp3rWethPool;\\n    _liquidityPool[kp3rWethPool] = kp3rWethPool;\\n    _isKP3RToken0[_kp3rWethPool] = IKeep3rHelper(keep3rHelper).isKP3RToken0(_kp3rWethPool);\\n    emit Kp3rWethPoolChange(_kp3rWethPool);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setBondTime(uint256 _bondTime) external override onlyGovernance {\\n    bondTime = _bondTime;\\n    emit BondTimeChange(_bondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setUnbondTime(uint256 _unbondTime) external override onlyGovernance {\\n    unbondTime = _unbondTime;\\n    emit UnbondTimeChange(_unbondTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external override onlyGovernance {\\n    liquidityMinimum = _liquidityMinimum;\\n    emit LiquidityMinimumChange(_liquidityMinimum);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  // TODO: check what happens to credit minting when changing this. Shouldn't we update the cached ticks?\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external override onlyGovernance {\\n    if (_rewardPeriodTime < _MIN_REWARD_PERIOD_TIME) revert MinRewardPeriod();\\n    rewardPeriodTime = _rewardPeriodTime;\\n    emit RewardPeriodTimeChange(_rewardPeriodTime);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setInflationPeriod(uint256 _inflationPeriod) external override onlyGovernance {\\n    inflationPeriod = _inflationPeriod;\\n    emit InflationPeriodChange(_inflationPeriod);\\n  }\\n\\n  /// @inheritdoc IKeep3rParameters\\n  function setFee(uint256 _fee) external override onlyGovernance {\\n    fee = _fee;\\n    emit FeeChange(_fee);\\n  }\\n}\\n\",\"keccak256\":\"0x713ce68b5c6c5f788422a0d3ec1b8b8db394348708448f3422e071ab70f89e27\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/Keep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../interfaces/peripherals/IKeep3rRoles.sol';\\nimport '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';\\nimport './Governable.sol';\\n\\ncontract Keep3rRoles is IKeep3rRoles, Governable {\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override slashers;\\n\\n  /// @inheritdoc IKeep3rRoles\\n  mapping(address => bool) public override disputers;\\n\\n  constructor(address _governance) Governable(_governance) {}\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addSlasher(address _slasher) external override onlyGovernance {\\n    if (slashers[_slasher]) revert SlasherExistent();\\n    slashers[_slasher] = true;\\n    emit SlasherAdded(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeSlasher(address _slasher) external override onlyGovernance {\\n    if (!slashers[_slasher]) revert SlasherUnexistent();\\n    delete slashers[_slasher];\\n    emit SlasherRemoved(_slasher);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function addDisputer(address _disputer) external override onlyGovernance {\\n    if (disputers[_disputer]) revert DisputerExistent();\\n    disputers[_disputer] = true;\\n    emit DisputerAdded(_disputer);\\n  }\\n\\n  /// @inheritdoc IKeep3rRoles\\n  function removeDisputer(address _disputer) external override onlyGovernance {\\n    if (!disputers[_disputer]) revert DisputerUnexistent();\\n    delete disputers[_disputer];\\n    emit DisputerRemoved(_disputer);\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a slasher or governance\\n  modifier onlySlasher {\\n    if (!slashers[msg.sender]) revert OnlySlasher();\\n    _;\\n  }\\n\\n  /// @notice Functions with this modifier can only be called by either a disputer or governance\\n  modifier onlyDisputer {\\n    if (!disputers[msg.sender]) revert OnlyDisputer();\\n    _;\\n  }\\n}\\n\",\"keccak256\":\"0x8c3558fb55fbf7f6512dcd648b835f84802a50d7b12ad60ac3906521056a4461\",\"license\":\"MIT\"},\"solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../Keep3rAccountance.sol';\\nimport '../Keep3rParameters.sol';\\nimport '../../../interfaces/peripherals/IKeep3rKeepers.sol';\\n\\nimport '../../../interfaces/external/IKeep3rV1.sol';\\nimport '../../../interfaces/external/IKeep3rV1Proxy.sol';\\n\\nimport '@openzeppelin/contracts/security/ReentrancyGuard.sol';\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';\\n\\nabstract contract Keep3rKeeperFundable is IKeep3rKeeperFundable, ReentrancyGuard, Keep3rParameters {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n  using SafeERC20 for IERC20;\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function bond(address _bonding, uint256 _amount) external override nonReentrant {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (_jobs.contains(msg.sender)) revert AlreadyAJob();\\n    canActivateAfter[msg.sender][_bonding] = block.timestamp + bondTime;\\n\\n    uint256 _before = IERC20(_bonding).balanceOf(address(this));\\n    IERC20(_bonding).safeTransferFrom(msg.sender, address(this), _amount);\\n    _amount = IERC20(_bonding).balanceOf(address(this)) - _before;\\n\\n    hasBonded[msg.sender] = true;\\n    pendingBonds[msg.sender][_bonding] += _amount;\\n\\n    emit Bonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function activate(address _bonding) external override {\\n    if (disputes[msg.sender]) revert Disputed();\\n    if (canActivateAfter[msg.sender][_bonding] == 0) revert BondsUnexistent();\\n    if (canActivateAfter[msg.sender][_bonding] >= block.timestamp) revert BondsLocked();\\n\\n    delete canActivateAfter[msg.sender][_bonding];\\n\\n    uint256 _amount = _activate(msg.sender, _bonding);\\n    emit Activation(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function unbond(address _bonding, uint256 _amount) external override {\\n    canWithdrawAfter[msg.sender][_bonding] = block.timestamp + unbondTime;\\n    bonds[msg.sender][_bonding] -= _amount;\\n    pendingUnbonds[msg.sender][_bonding] += _amount;\\n\\n    emit Unbonding(msg.sender, _bonding, _amount);\\n  }\\n\\n  /// @inheritdoc IKeep3rKeeperFundable\\n  function withdraw(address _bonding) external override nonReentrant {\\n    if (pendingUnbonds[msg.sender][_bonding] == 0) revert UnbondsUnexistent();\\n    if (canWithdrawAfter[msg.sender][_bonding] >= block.timestamp) revert UnbondsLocked();\\n    if (disputes[msg.sender]) revert Disputed();\\n\\n    uint256 _amount = pendingUnbonds[msg.sender][_bonding];\\n\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1Proxy(keep3rV1Proxy).mint(_amount);\\n    }\\n\\n    delete pendingUnbonds[msg.sender][_bonding];\\n    delete canWithdrawAfter[msg.sender][_bonding];\\n\\n    IERC20(_bonding).safeTransfer(msg.sender, _amount);\\n\\n    emit Withdrawal(msg.sender, _bonding, _amount);\\n  }\\n\\n  function _activate(address _keeper, address _bonding) internal virtual returns (uint256 _amount) {\\n    if (firstSeen[_keeper] == 0) {\\n      firstSeen[_keeper] = block.timestamp;\\n    }\\n    _keepers.add(_keeper);\\n    _amount = pendingBonds[_keeper][_bonding];\\n    delete pendingBonds[_keeper][_bonding];\\n\\n    // bond provided tokens\\n    bonds[_keeper][_bonding] += _amount;\\n    if (_bonding == keep3rV1) {\\n      IKeep3rV1(keep3rV1).burn(_amount);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcd56d53eacaa3dbffc2cb573562482ba05b51246bf273f6bde9fb5de52c54eb2\",\"license\":\"MIT\"},\"solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../../../contracts/peripherals/keepers/Keep3rKeeperFundable.sol';\\n\\ncontract Keep3rKeeperFundableForTest is Keep3rKeeperFundable {\\n  using EnumerableSet for EnumerableSet.AddressSet;\\n\\n  constructor(\\n    address _kph,\\n    address _keep3rV1,\\n    address _keep3rV1Proxy,\\n    address _kp3rWethPool\\n  ) Keep3rParameters(_kph, _keep3rV1, _keep3rV1Proxy, _kp3rWethPool) Keep3rRoles(msg.sender) {}\\n\\n  function isKeeper(address _keeper) external view returns (bool) {\\n    return _keepers.contains(_keeper);\\n  }\\n\\n  function setJob(address job) external {\\n    _jobs.add(job);\\n  }\\n}\\n\",\"keccak256\":\"0x3bce91d0fdb6dafa49f10d0786c8c96aeeaa984ed0007d00a23c42b742d9161e\",\"license\":\"MIT\"},\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n// solhint-disable func-name-mixedcase\\ninterface IKeep3rV1 is IERC20, IERC20Metadata {\\n  // Structs\\n  struct Checkpoint {\\n    uint32 fromBlock;\\n    uint256 votes;\\n  }\\n\\n  // Events\\n  event DelegateChanged(address indexed _delegator, address indexed _fromDelegate, address indexed _toDelegate);\\n  event DelegateVotesChanged(address indexed _delegate, uint256 _previousBalance, uint256 _newBalance);\\n  event SubmitJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event ApplyCredit(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event RemoveJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event UnbondJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event JobAdded(address indexed _job, uint256 _block, address _governance);\\n  event JobRemoved(address indexed _job, uint256 _block, address _governance);\\n  event KeeperWorked(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _block, uint256 _amount);\\n  event KeeperBonding(address indexed _keeper, uint256 _block, uint256 _active, uint256 _bond);\\n  event KeeperBonded(address indexed _keeper, uint256 _block, uint256 _activated, uint256 _bond);\\n  event KeeperUnbonding(address indexed _keeper, uint256 _block, uint256 _deactive, uint256 _bond);\\n  event KeeperUnbound(address indexed _keeper, uint256 _block, uint256 _deactivated, uint256 _bond);\\n  event KeeperSlashed(address indexed _keeper, address indexed _slasher, uint256 _block, uint256 _slash);\\n  event KeeperDispute(address indexed _keeper, uint256 _block);\\n  event KeeperResolved(address indexed _keeper, uint256 _block);\\n  event TokenCreditAddition(address indexed _credit, address indexed _job, address indexed _creditor, uint256 _block, uint256 _amount);\\n\\n  // Variables\\n  function KPRH() external returns (address);\\n\\n  function delegates(address _delegator) external view returns (address);\\n\\n  function checkpoints(address _account, uint32 _checkpoint) external view returns (Checkpoint memory);\\n\\n  function numCheckpoints(address _account) external view returns (uint32);\\n\\n  function DOMAIN_TYPEHASH() external returns (bytes32);\\n\\n  function DOMAINSEPARATOR() external returns (bytes32);\\n\\n  function DELEGATION_TYPEHASH() external returns (bytes32);\\n\\n  function PERMIT_TYPEHASH() external returns (bytes32);\\n\\n  function nonces(address _user) external view returns (uint256);\\n\\n  function BOND() external returns (uint256);\\n\\n  function UNBOND() external returns (uint256);\\n\\n  function LIQUIDITYBOND() external returns (uint256);\\n\\n  function FEE() external returns (uint256);\\n\\n  function BASE() external returns (uint256);\\n\\n  function ETH() external returns (address);\\n\\n  function bondings(address _user, address _bonding) external view returns (uint256);\\n\\n  function canWithdrawAfter(address _user, address _bonding) external view returns (uint256);\\n\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function pendingbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function bonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function votes(address _delegator) external view returns (uint256);\\n\\n  function firstSeen(address _keeper) external view returns (uint256);\\n\\n  function disputes(address _keeper) external view returns (bool);\\n\\n  function lastJob(address _keeper) external view returns (uint256);\\n\\n  function workCompleted(address _keeper) external view returns (uint256);\\n\\n  function jobs(address _job) external view returns (bool);\\n\\n  function credits(address _job, address _credit) external view returns (uint256);\\n\\n  function liquidityProvided(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmountsUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function jobProposalDelay(address _job) external view returns (uint256);\\n\\n  function liquidityApplied(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmount(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function keepers(address _keeper) external view returns (bool);\\n\\n  function blacklist(address _keeper) external view returns (bool);\\n\\n  function keeperList(uint256 _index) external view returns (address);\\n\\n  function jobList(uint256 _index) external view returns (address);\\n\\n  function governance() external returns (address);\\n\\n  function pendingGovernance() external returns (address);\\n\\n  function liquidityAccepted(address _liquidity) external view returns (bool);\\n\\n  function liquidityPairs(uint256 _index) external view returns (address);\\n\\n  // Methods\\n  function getCurrentVotes(address _account) external view returns (uint256);\\n\\n  function addCreditETH(address _job) external payable;\\n\\n  function addCredit(\\n    address _credit,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function pairs() external view returns (address[] memory);\\n\\n  function addLiquidityToJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function applyCreditToJob(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external;\\n\\n  function unbondLiquidityFromJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function removeLiquidityFromJob(address _liquidity, address _job) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function burn(uint256 _amount) external;\\n\\n  function worked(address _keeper) external;\\n\\n  function receipt(\\n    address _credit,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function receiptETH(address _keeper, uint256 _amount) external;\\n\\n  function addJob(address _job) external;\\n\\n  function getJobs() external view returns (address[] memory);\\n\\n  function removeJob(address _job) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function setGovernance(address _governance) external;\\n\\n  function acceptGovernance() external;\\n\\n  function isKeeper(address _keeper) external returns (bool);\\n\\n  function isMinKeeper(\\n    address _keeper,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  function getKeepers() external view returns (address[] memory);\\n\\n  function activate(address _bonding) external;\\n\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function withdraw(address _bonding) external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xa9806cd6666ab1b7375ef72446964a72397fd4cefc7cc8c5b37caa7c50df0246\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../peripherals/IGovernable.sol';\\n\\ninterface IKeep3rV1Proxy is IGovernable {\\n  // Structs\\n  struct Recipient {\\n    address recipient;\\n    uint256 caps;\\n  }\\n\\n  // Variables\\n  function keep3rV1() external view returns (address);\\n\\n  function minter() external view returns (address);\\n\\n  function next(address) external view returns (uint256);\\n\\n  function caps(address) external view returns (uint256);\\n\\n  function recipients() external view returns (address[] memory);\\n\\n  function recipientsCaps() external view returns (Recipient[] memory);\\n\\n  // Errors\\n  error Cooldown();\\n  error NoDrawableAmount();\\n  error ZeroAddress();\\n  error OnlyMinter();\\n\\n  // Methods\\n  function addRecipient(address recipient, uint256 amount) external;\\n\\n  function removeRecipient(address recipient) external;\\n\\n  function draw() external returns (uint256 _amount);\\n\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  function setMinter(address _minter) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function mint(address _account, uint256 _amount) external;\\n\\n  function setKeep3rV1Governance(address _governance) external;\\n\\n  function acceptKeep3rV1Governance() external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function addJob(address _job) external;\\n\\n  function removeJob(address _job) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xfb2e81fe347b39aabce849ef2d42c6df846b7ef0ed5ae952c85bbb708da99408\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [
              {
                "astId": 10,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "_status",
                "offset": 0,
                "slot": "0",
                "type": "t_uint256"
              },
              {
                "astId": 5368,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "_keepers",
                "offset": 0,
                "slot": "1",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5374,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "workCompleted",
                "offset": 0,
                "slot": "3",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5380,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "firstSeen",
                "offset": 0,
                "slot": "4",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5386,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "disputes",
                "offset": 0,
                "slot": "5",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5394,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "bonds",
                "offset": 0,
                "slot": "6",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5402,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "jobTokenCredits",
                "offset": 0,
                "slot": "7",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5407,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "_jobLiquidityCredits",
                "offset": 0,
                "slot": "8",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5412,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "_jobPeriodCredits",
                "offset": 0,
                "slot": "9",
                "type": "t_mapping(t_address,t_uint256)"
              },
              {
                "astId": 5418,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "_jobTokens",
                "offset": 0,
                "slot": "10",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5424,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "_jobLiquidities",
                "offset": 0,
                "slot": "11",
                "type": "t_mapping(t_address,t_struct(AddressSet)1631_storage)"
              },
              {
                "astId": 5429,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "_liquidityPool",
                "offset": 0,
                "slot": "12",
                "type": "t_mapping(t_address,t_address)"
              },
              {
                "astId": 5434,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "_isKP3RToken0",
                "offset": 0,
                "slot": "13",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5442,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "pendingBonds",
                "offset": 0,
                "slot": "14",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5450,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "canActivateAfter",
                "offset": 0,
                "slot": "15",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5458,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "canWithdrawAfter",
                "offset": 0,
                "slot": "16",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5466,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "pendingUnbonds",
                "offset": 0,
                "slot": "17",
                "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
              },
              {
                "astId": 5472,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "hasBonded",
                "offset": 0,
                "slot": "18",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5476,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "_jobs",
                "offset": 0,
                "slot": "19",
                "type": "t_struct(AddressSet)1631_storage"
              },
              {
                "astId": 5266,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "governance",
                "offset": 0,
                "slot": "21",
                "type": "t_address"
              },
              {
                "astId": 5270,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "pendingGovernance",
                "offset": 0,
                "slot": "22",
                "type": "t_address"
              },
              {
                "astId": 5949,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "slashers",
                "offset": 0,
                "slot": "23",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5955,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "disputers",
                "offset": 0,
                "slot": "24",
                "type": "t_mapping(t_address,t_bool)"
              },
              {
                "astId": 5594,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "keep3rV1",
                "offset": 0,
                "slot": "25",
                "type": "t_address"
              },
              {
                "astId": 5598,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "keep3rV1Proxy",
                "offset": 0,
                "slot": "26",
                "type": "t_address"
              },
              {
                "astId": 5602,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "keep3rHelper",
                "offset": 0,
                "slot": "27",
                "type": "t_address"
              },
              {
                "astId": 5606,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "kp3rWethPool",
                "offset": 0,
                "slot": "28",
                "type": "t_address"
              },
              {
                "astId": 5611,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "bondTime",
                "offset": 0,
                "slot": "29",
                "type": "t_uint256"
              },
              {
                "astId": 5616,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "unbondTime",
                "offset": 0,
                "slot": "30",
                "type": "t_uint256"
              },
              {
                "astId": 5621,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "liquidityMinimum",
                "offset": 0,
                "slot": "31",
                "type": "t_uint256"
              },
              {
                "astId": 5626,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "rewardPeriodTime",
                "offset": 0,
                "slot": "32",
                "type": "t_uint256"
              },
              {
                "astId": 5631,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "inflationPeriod",
                "offset": 0,
                "slot": "33",
                "type": "t_uint256"
              },
              {
                "astId": 5636,
                "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                "label": "fee",
                "offset": 0,
                "slot": "34",
                "type": "t_uint256"
              }
            ],
            "types": {
              "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
              },
              "t_array(t_bytes32)dyn_storage": {
                "base": "t_bytes32",
                "encoding": "dynamic_array",
                "label": "bytes32[]",
                "numberOfBytes": "32"
              },
              "t_bool": {
                "encoding": "inplace",
                "label": "bool",
                "numberOfBytes": "1"
              },
              "t_bytes32": {
                "encoding": "inplace",
                "label": "bytes32",
                "numberOfBytes": "32"
              },
              "t_mapping(t_address,t_address)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => address)",
                "numberOfBytes": "32",
                "value": "t_address"
              },
              "t_mapping(t_address,t_bool)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => bool)",
                "numberOfBytes": "32",
                "value": "t_bool"
              },
              "t_mapping(t_address,t_mapping(t_address,t_uint256))": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => mapping(address => uint256))",
                "numberOfBytes": "32",
                "value": "t_mapping(t_address,t_uint256)"
              },
              "t_mapping(t_address,t_struct(AddressSet)1631_storage)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => struct EnumerableSet.AddressSet)",
                "numberOfBytes": "32",
                "value": "t_struct(AddressSet)1631_storage"
              },
              "t_mapping(t_address,t_uint256)": {
                "encoding": "mapping",
                "key": "t_address",
                "label": "mapping(address => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_mapping(t_bytes32,t_uint256)": {
                "encoding": "mapping",
                "key": "t_bytes32",
                "label": "mapping(bytes32 => uint256)",
                "numberOfBytes": "32",
                "value": "t_uint256"
              },
              "t_struct(AddressSet)1631_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.AddressSet",
                "members": [
                  {
                    "astId": 1630,
                    "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                    "label": "_inner",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_struct(Set)1330_storage"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_struct(Set)1330_storage": {
                "encoding": "inplace",
                "label": "struct EnumerableSet.Set",
                "members": [
                  {
                    "astId": 1325,
                    "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                    "label": "_values",
                    "offset": 0,
                    "slot": "0",
                    "type": "t_array(t_bytes32)dyn_storage"
                  },
                  {
                    "astId": 1329,
                    "contract": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol:Keep3rKeeperFundableForTest",
                    "label": "_indexes",
                    "offset": 0,
                    "slot": "1",
                    "type": "t_mapping(t_bytes32,t_uint256)"
                  }
                ],
                "numberOfBytes": "64"
              },
              "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
              }
            }
          },
          "userdoc": {
            "errors": {
              "AlreadyAJob()": [
                {
                  "notice": "Throws when the address that is trying to register as a job is already a job"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "Activation(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#activate is called"
              },
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              },
              "Withdrawal(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#withdraw is called"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "activate(address)": {
                "notice": "End of the bonding process after bonding time has passed"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "bond(address,uint256)": {
                "notice": "Beginning of the bonding process"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bonds(address,address)": {
                "notice": "Mapping (job => bonding => amount)"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "unbond(address,uint256)": {
                "notice": "Beginning of the unbonding process"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdraw(address)": {
                "notice": "Withdraw funds after unbonding has finished"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/interfaces/IKeep3r.sol": {
        "IKeep3r": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyAKeeper",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientFunds",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobAlreadyAdded",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationImpossible",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOwner",
                  "type": "address"
                }
              ],
              "name": "JobAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationSuccessful",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashLiquidity",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashToken",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "KeeperRevoke",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "KeeperSlash",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperValidation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperWork",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "acceptJobMigration",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "addJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_days",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                }
              ],
              "name": "bondedPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_bonds",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "directTokenPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isDisputer",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_disputed",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_hasBonded",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_period",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_minBond",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_earned",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_age",
                  "type": "uint256"
                }
              ],
              "name": "isBondedKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isBondedKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "isKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_jobList",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_keeperList",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "migrateJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_pendingBonds",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                }
              ],
              "name": "pendingJobMigrations",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_pendingUnbonds",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "revoke",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_days",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bond",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbond",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonded",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_bondAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_unbondAmount",
                  "type": "uint256"
                }
              ],
              "name": "slash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashTokenFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isSlasher",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_days",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_workCompleted",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "worked",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobMigration(address,address)": {
                "details": "Unbond/withdraw process doesn't get migrated",
                "params": {
                  "_fromJob": "The address of the job that requested to migrate",
                  "_toJob": "The address to which the job wants to migrate to"
                }
              },
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addJob(address)": {
                "params": {
                  "_job": "Address of the contract for which work should be performed"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "bondTime()": {
                "returns": {
                  "_days": "The required bondTime in days"
                }
              },
              "bondedPayment(address,uint256)": {
                "details": "Pays the keeper that performs the work with KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work",
                  "_payment": "The reward that should be allocated for the job"
                }
              },
              "bonds(address,address)": {
                "params": {
                  "_bond": "The address of the token being bonded",
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_bonds": "Amount of a certain token that a keeper has bonded"
                }
              },
              "canActivateAfter(address,address)": {
                "params": {
                  "_bonding": "The address of the token being bonded",
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_timestamp": "Time at which the bonding for a keeper can be activated"
                }
              },
              "canWithdrawAfter(address,address)": {
                "params": {
                  "_bonding": "The address of the token being unbonded",
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_timestamp": "Time at which the keeper bonds are ready to be withdrawn"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "directTokenPayment(address,address,uint256)": {
                "details": "Pays the keeper that performs the work with a specific token",
                "params": {
                  "_amount": "The reward that should be allocated",
                  "_keeper": "Address of the keeper that performed the work",
                  "_token": "The asset being awarded to the keeper"
                }
              },
              "disputers(address)": {
                "params": {
                  "_disputer": "Address being checked as a disputer"
                },
                "returns": {
                  "_isDisputer": "Whether the address is a disputer or not"
                }
              },
              "disputes(address)": {
                "params": {
                  "_keeperOrJob": "The address of the keeper or job"
                },
                "returns": {
                  "_disputed": "Whether a keeper or job has a pending dispute"
                }
              },
              "fee()": {
                "returns": {
                  "_amount": "The fee amount to be sent to governance when a user adds liquidity to a job"
                }
              },
              "firstSeen(address)": {
                "params": {
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "timestamp": "The time at which the keeper was first registered"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "hasBonded(address)": {
                "params": {
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_hasBonded": "Whether the address has ever bonded an asset"
                }
              },
              "inflationPeriod()": {
                "returns": {
                  "_period": "The denominator used to regulate the emission of KP3R"
                }
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "details": "Should be used for protected functions",
                "params": {
                  "_age": "The minimum keeper age required",
                  "_bond": "The bond token being evaluated",
                  "_earned": "The minimum funds earned in the keepers lifetime",
                  "_keeper": "The keeper to check",
                  "_minBond": "The minimum amount of bonded tokens"
                },
                "returns": {
                  "_isBondedKeeper": "Whether the `_keeper` meets the given requirements"
                }
              },
              "isKeeper(address)": {
                "details": "Can be used for general (non critical) functions",
                "params": {
                  "_keeper": "The keeper being investigated"
                },
                "returns": {
                  "_isKeeper": "Whether the address passed as a parameter is a keeper or not"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_amount": "The liquidity credits of a given job"
                }
              },
              "jobOwner(address)": {
                "params": {
                  "_job": "The address of the job"
                },
                "returns": {
                  "_owner": "The address of the owner of the job"
                }
              },
              "jobPendingOwner(address)": {
                "params": {
                  "_job": "The address of the job"
                },
                "returns": {
                  "_pendingOwner": "The address of the pending owner of the job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_amount": "The credits the given job has at the current period"
                }
              },
              "jobTokenCredits(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_token": "The address of the token bonded"
                },
                "returns": {
                  "_amount": "The amount of token credits available for a job"
                }
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "params": {
                  "_job": "The address of the job credited",
                  "_token": "The address of the token credited"
                },
                "returns": {
                  "_timestamp": "The last block where tokens were added to the job"
                }
              },
              "jobs()": {
                "returns": {
                  "_jobList": "Array with all the jobs in _jobs"
                }
              },
              "keep3rHelper()": {
                "returns": {
                  "_keep3rHelper": "The address of Keep3rHelper's contract"
                }
              },
              "keep3rV1()": {
                "returns": {
                  "_keep3rV1": "The address of Keep3rV1's contract"
                }
              },
              "keep3rV1Proxy()": {
                "returns": {
                  "_keep3rV1Proxy": "The address of Keep3rV1Proxy's contract"
                }
              },
              "keepers()": {
                "returns": {
                  "_keeperList": "Array with all the keepers in _keepers"
                }
              },
              "kp3rWethPool()": {
                "returns": {
                  "_kp3rWethPool": "The address of KP3R-WETH pool"
                }
              },
              "liquidityAmount(address,address)": {
                "params": {
                  "_job": "The address of the job being checked",
                  "_liquidity": "The address of the liquidity we are checking"
                },
                "returns": {
                  "_amount": "Amount of liquidity in the specified job"
                }
              },
              "liquidityMinimum()": {
                "returns": {
                  "_amount": "The minimum amount of liquidity in KP3R"
                }
              },
              "migrateJob(address,address)": {
                "params": {
                  "_fromJob": "The address of the job that is requesting to migrate",
                  "_toJob": "The address at which the job is requesting to migrate"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "pendingBonds(address,address)": {
                "params": {
                  "_bonding": "The address of the token being bonded",
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_pendingBonds": "Amount of a certain asset a keeper has unbonding"
                }
              },
              "pendingJobMigrations(address)": {
                "returns": {
                  "_toJob": "The address to which the job has requested to migrate to"
                }
              },
              "pendingUnbonds(address,address)": {
                "params": {
                  "_bonding": "The address of the token being unbonded",
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_pendingUnbonds": "The amount of keeper bonds that are to be withdrawn"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "revoke(address)": {
                "params": {
                  "_keeper": "The address being slashed"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "rewardPeriodTime()": {
                "returns": {
                  "_days": "The reward period in days"
                }
              },
              "rewardedAt(address)": {
                "params": {
                  "_job": "The address of the job being checked"
                },
                "returns": {
                  "_timestamp": "Timestamp of the last time the job was rewarded liquidity credits"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "slash(address,address,uint256,uint256)": {
                "params": {
                  "_bondAmount": "The bonded amount being slashed",
                  "_bonded": "The asset being slashed",
                  "_keeper": "The address being slashed",
                  "_unbondAmount": "The pending unbond amount being slashed"
                }
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity that will be slashed",
                  "_job": "The address being slashed",
                  "_liquidity": "The address of the liquidity that will be slashed"
                }
              },
              "slashTokenFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of the token that will be slashed",
                  "_job": "The address of the job from which the token will be slashed",
                  "_token": "The address of the token that will be slashed"
                }
              },
              "slashers(address)": {
                "params": {
                  "_slasher": "Address being checked as a slasher"
                },
                "returns": {
                  "_isSlasher": "Whether the address is a slasher or not"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_amount": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "unbondTime()": {
                "returns": {
                  "_days": "The required unbondTime in days"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              },
              "workCompleted(address)": {
                "params": {
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_workCompleted": "Total KP3R earnings of a keeper since it started working"
                }
              },
              "worked(address)": {
                "details": "Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work"
                }
              },
              "workedAt(address)": {
                "params": {
                  "_job": "The address of the job being checked"
                },
                "returns": {
                  "_timestamp": "Timestamp of the last time the job was worked"
                }
              }
            },
            "title": "Keep3rV2 contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptJobMigration(address,address)": "af320e81",
              "acceptJobOwnership(address)": "59a2255e",
              "addDisputer(address)": "9d5c33d8",
              "addJob(address)": "c5198abc",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addSlasher(address)": "68a9f19c",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bondTime()": "5ebe23f0",
              "bondedPayment(address,uint256)": "11466d72",
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "changeJobOwnership(address,address)": "594a3a93",
              "directTokenPayment(address,address,uint256)": "dd2080d6",
              "disputers(address)": "274a8db4",
              "disputes(address)": "b0103b1a",
              "fee()": "ddca3f43",
              "firstSeen(address)": "e326ac43",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "hasBonded(address)": "8cb22b76",
              "inflationPeriod()": "fc253d2b",
              "isBondedKeeper(address,address,uint256,uint256,uint256)": "f9d46cf2",
              "isKeeper(address)": "6ba42aaa",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "jobs()": "7c8fce23",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "keepers()": "951dc22c",
              "kp3rWethPool()": "7b40c913",
              "liquidityAmount(address,address)": "694798e6",
              "liquidityMinimum()": "633fb68f",
              "migrateJob(address,address)": "90a4684e",
              "observeLiquidity(address)": "165e62e7",
              "pendingBonds(address,address)": "15006b82",
              "pendingJobMigrations(address)": "ec8ca643",
              "pendingUnbonds(address,address)": "21040b01",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "revoke(address)": "74a8f103",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardPeriodTime()": "768b5d90",
              "rewardedAt(address)": "a676f9ff",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "slash(address,address,uint256,uint256)": "c20297f0",
              "slashLiquidityFromJob(address,address,uint256)": "6e2a9ca6",
              "slashTokenFromJob(address,address,uint256)": "f25e311b",
              "slashers(address)": "b87fcbff",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "unbondTime()": "a7d2e784",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workCompleted(address)": "1b44555e",
              "worked(address)": "5feeb794",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyAKeeper\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationImpossible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOwner\",\"type\":\"address\"}],\"name\":\"JobAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationSuccessful\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"KeeperRevoke\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"KeeperSlash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperValidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperWork\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"acceptJobMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"addJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_days\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"}],\"name\":\"bondedPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_bonds\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"directTokenPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isDisputer\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_disputed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_hasBonded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_earned\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_age\",\"type\":\"uint256\"}],\"name\":\"isBondedKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isBondedKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"isKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_jobList\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_keeperList\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"migrateJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_pendingBonds\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"}],\"name\":\"pendingJobMigrations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_pendingUnbonds\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_days\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bond\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbond\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonded\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_bondAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unbondAmount\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashTokenFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isSlasher\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_days\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_workCompleted\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"worked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobMigration(address,address)\":{\"details\":\"Unbond/withdraw process doesn't get migrated\",\"params\":{\"_fromJob\":\"The address of the job that requested to migrate\",\"_toJob\":\"The address to which the job wants to migrate to\"}},\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addJob(address)\":{\"params\":{\"_job\":\"Address of the contract for which work should be performed\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"bondTime()\":{\"returns\":{\"_days\":\"The required bondTime in days\"}},\"bondedPayment(address,uint256)\":{\"details\":\"Pays the keeper that performs the work with KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\",\"_payment\":\"The reward that should be allocated for the job\"}},\"bonds(address,address)\":{\"params\":{\"_bond\":\"The address of the token being bonded\",\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_bonds\":\"Amount of a certain token that a keeper has bonded\"}},\"canActivateAfter(address,address)\":{\"params\":{\"_bonding\":\"The address of the token being bonded\",\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_timestamp\":\"Time at which the bonding for a keeper can be activated\"}},\"canWithdrawAfter(address,address)\":{\"params\":{\"_bonding\":\"The address of the token being unbonded\",\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_timestamp\":\"Time at which the keeper bonds are ready to be withdrawn\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"directTokenPayment(address,address,uint256)\":{\"details\":\"Pays the keeper that performs the work with a specific token\",\"params\":{\"_amount\":\"The reward that should be allocated\",\"_keeper\":\"Address of the keeper that performed the work\",\"_token\":\"The asset being awarded to the keeper\"}},\"disputers(address)\":{\"params\":{\"_disputer\":\"Address being checked as a disputer\"},\"returns\":{\"_isDisputer\":\"Whether the address is a disputer or not\"}},\"disputes(address)\":{\"params\":{\"_keeperOrJob\":\"The address of the keeper or job\"},\"returns\":{\"_disputed\":\"Whether a keeper or job has a pending dispute\"}},\"fee()\":{\"returns\":{\"_amount\":\"The fee amount to be sent to governance when a user adds liquidity to a job\"}},\"firstSeen(address)\":{\"params\":{\"_keeper\":\"The address of the keeper\"},\"returns\":{\"timestamp\":\"The time at which the keeper was first registered\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"hasBonded(address)\":{\"params\":{\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_hasBonded\":\"Whether the address has ever bonded an asset\"}},\"inflationPeriod()\":{\"returns\":{\"_period\":\"The denominator used to regulate the emission of KP3R\"}},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"details\":\"Should be used for protected functions\",\"params\":{\"_age\":\"The minimum keeper age required\",\"_bond\":\"The bond token being evaluated\",\"_earned\":\"The minimum funds earned in the keepers lifetime\",\"_keeper\":\"The keeper to check\",\"_minBond\":\"The minimum amount of bonded tokens\"},\"returns\":{\"_isBondedKeeper\":\"Whether the `_keeper` meets the given requirements\"}},\"isKeeper(address)\":{\"details\":\"Can be used for general (non critical) functions\",\"params\":{\"_keeper\":\"The keeper being investigated\"},\"returns\":{\"_isKeeper\":\"Whether the address passed as a parameter is a keeper or not\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_amount\":\"The liquidity credits of a given job\"}},\"jobOwner(address)\":{\"params\":{\"_job\":\"The address of the job\"},\"returns\":{\"_owner\":\"The address of the owner of the job\"}},\"jobPendingOwner(address)\":{\"params\":{\"_job\":\"The address of the job\"},\"returns\":{\"_pendingOwner\":\"The address of the pending owner of the job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_amount\":\"The credits the given job has at the current period\"}},\"jobTokenCredits(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_token\":\"The address of the token bonded\"},\"returns\":{\"_amount\":\"The amount of token credits available for a job\"}},\"jobTokenCreditsAddedAt(address,address)\":{\"params\":{\"_job\":\"The address of the job credited\",\"_token\":\"The address of the token credited\"},\"returns\":{\"_timestamp\":\"The last block where tokens were added to the job\"}},\"jobs()\":{\"returns\":{\"_jobList\":\"Array with all the jobs in _jobs\"}},\"keep3rHelper()\":{\"returns\":{\"_keep3rHelper\":\"The address of Keep3rHelper's contract\"}},\"keep3rV1()\":{\"returns\":{\"_keep3rV1\":\"The address of Keep3rV1's contract\"}},\"keep3rV1Proxy()\":{\"returns\":{\"_keep3rV1Proxy\":\"The address of Keep3rV1Proxy's contract\"}},\"keepers()\":{\"returns\":{\"_keeperList\":\"Array with all the keepers in _keepers\"}},\"kp3rWethPool()\":{\"returns\":{\"_kp3rWethPool\":\"The address of KP3R-WETH pool\"}},\"liquidityAmount(address,address)\":{\"params\":{\"_job\":\"The address of the job being checked\",\"_liquidity\":\"The address of the liquidity we are checking\"},\"returns\":{\"_amount\":\"Amount of liquidity in the specified job\"}},\"liquidityMinimum()\":{\"returns\":{\"_amount\":\"The minimum amount of liquidity in KP3R\"}},\"migrateJob(address,address)\":{\"params\":{\"_fromJob\":\"The address of the job that is requesting to migrate\",\"_toJob\":\"The address at which the job is requesting to migrate\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"pendingBonds(address,address)\":{\"params\":{\"_bonding\":\"The address of the token being bonded\",\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_pendingBonds\":\"Amount of a certain asset a keeper has unbonding\"}},\"pendingJobMigrations(address)\":{\"returns\":{\"_toJob\":\"The address to which the job has requested to migrate to\"}},\"pendingUnbonds(address,address)\":{\"params\":{\"_bonding\":\"The address of the token being unbonded\",\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_pendingUnbonds\":\"The amount of keeper bonds that are to be withdrawn\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"revoke(address)\":{\"params\":{\"_keeper\":\"The address being slashed\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"rewardPeriodTime()\":{\"returns\":{\"_days\":\"The reward period in days\"}},\"rewardedAt(address)\":{\"params\":{\"_job\":\"The address of the job being checked\"},\"returns\":{\"_timestamp\":\"Timestamp of the last time the job was rewarded liquidity credits\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"slash(address,address,uint256,uint256)\":{\"params\":{\"_bondAmount\":\"The bonded amount being slashed\",\"_bonded\":\"The asset being slashed\",\"_keeper\":\"The address being slashed\",\"_unbondAmount\":\"The pending unbond amount being slashed\"}},\"slashLiquidityFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity that will be slashed\",\"_job\":\"The address being slashed\",\"_liquidity\":\"The address of the liquidity that will be slashed\"}},\"slashTokenFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of the token that will be slashed\",\"_job\":\"The address of the job from which the token will be slashed\",\"_token\":\"The address of the token that will be slashed\"}},\"slashers(address)\":{\"params\":{\"_slasher\":\"Address being checked as a slasher\"},\"returns\":{\"_isSlasher\":\"Whether the address is a slasher or not\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_amount\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"unbondTime()\":{\"returns\":{\"_days\":\"The required unbondTime in days\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}},\"workCompleted(address)\":{\"params\":{\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_workCompleted\":\"Total KP3R earnings of a keeper since it started working\"}},\"worked(address)\":{\"details\":\"Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\"}},\"workedAt(address)\":{\"params\":{\"_job\":\"The address of the job being checked\"},\"returns\":{\"_timestamp\":\"Timestamp of the last time the job was worked\"}}},\"title\":\"Keep3rV2 contract\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAKeeper()\":[{\"notice\":\"Throws when the address that is trying to register as a keeper is already a keeper\"}],\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"InsufficientFunds()\":[{\"notice\":\"Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobAlreadyAdded()\":[{\"notice\":\"Throws when trying to add a job that has already been added\"}],\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobMigrationImpossible()\":[{\"notice\":\"Throws when the address of the job that requests to migrate wants to migrate to its same address\"}],\"JobMigrationLocked()\":[{\"notice\":\"Throws when cooldown between migrations has not yet passed\"}],\"JobMigrationUnavailable()\":[{\"notice\":\"Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobTokenInsufficient()\":[{\"notice\":\"Throws when someone tries to slash more tokens than the job has\"}],\"JobTokenUnexistent()\":[{\"notice\":\"Throws when the token trying to be slashed doesn't exist\"}],\"JobUnapproved()\":[{\"notice\":\"Throws if the address claiming to be a job is not in the list of approved jobs\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"JobAddition(address,address)\":{\"notice\":\"Emitted when Keep3rJobManager#addJob is called\"},\"JobMigrationRequested(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#migrateJob function is called\"},\"JobMigrationSuccessful(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#acceptJobMigration function is called\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"JobSlashLiquidity(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\"},\"JobSlashToken(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashTokenFromJob is called\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"KeeperRevoke(address,address)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#revoke is called\"},\"KeeperSlash(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#slash is called\"},\"KeeperValidation(uint256)\":{\"notice\":\"Emitted when a keeper is validated before a job\"},\"KeeperWork(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a keeper works a job\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"acceptJobMigration(address,address)\":{\"notice\":\"Completes the migration process for a job\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addJob(address)\":{\"notice\":\"Allows any caller to add a new job\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"bondedPayment(address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"bonds(address,address)\":{\"notice\":\"Tracks how much a keeper has bonded of a certain token\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"directTokenPayment(address,address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"notice\":\"Confirms if the current keeper is registered and has a minimum bond of any asset.\"},\"isKeeper(address)\":{\"notice\":\"Confirms if the current keeper is registered\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"migrateJob(address,address)\":{\"notice\":\"Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingJobMigrations(address)\":{\"notice\":\"Maps the jobs that have requested a migration to the address they have requested to migrate to\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"revoke(address)\":{\"notice\":\"Blacklists a keeper from participating in the network\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"slash(address,address,uint256,uint256)\":{\"notice\":\"Allows governance to slash a keeper based on a dispute\"},\"slashLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or a slasher to slash liquidity from a job\"},\"slashTokenFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or slasher to slash a job specific token\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"},\"worked(address)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"notice\":\"This contract inherits all the functionality of Keep3rV2\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/IKeep3r.sol\":\"IKeep3r\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/IKeep3r.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './peripherals/IKeep3rJobs.sol';\\nimport './peripherals/IKeep3rKeepers.sol';\\nimport './peripherals/IKeep3rAccountance.sol';\\nimport './peripherals/IKeep3rRoles.sol';\\nimport './peripherals/IKeep3rParameters.sol';\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rV2 contract\\n/// @notice This contract inherits all the functionality of Keep3rV2\\ninterface IKeep3r is IKeep3rJobs, IKeep3rKeepers, IKeep3rAccountance, IKeep3rRoles, IKeep3rParameters {\\n\\n}\\n\",\"keccak256\":\"0x57e234140074d771239eeb6f08b6fc049c838c2a34aefadbbd542672e63bc686\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "AlreadyAKeeper()": [
                {
                  "notice": "Throws when the address that is trying to register as a keeper is already a keeper"
                }
              ],
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "InsufficientFunds()": [
                {
                  "notice": "Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobAlreadyAdded()": [
                {
                  "notice": "Throws when trying to add a job that has already been added"
                }
              ],
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobMigrationImpossible()": [
                {
                  "notice": "Throws when the address of the job that requests to migrate wants to migrate to its same address"
                }
              ],
              "JobMigrationLocked()": [
                {
                  "notice": "Throws when cooldown between migrations has not yet passed"
                }
              ],
              "JobMigrationUnavailable()": [
                {
                  "notice": "Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobTokenInsufficient()": [
                {
                  "notice": "Throws when someone tries to slash more tokens than the job has"
                }
              ],
              "JobTokenUnexistent()": [
                {
                  "notice": "Throws when the token trying to be slashed doesn't exist"
                }
              ],
              "JobUnapproved()": [
                {
                  "notice": "Throws if the address claiming to be a job is not in the list of approved jobs"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "JobAddition(address,address)": {
                "notice": "Emitted when Keep3rJobManager#addJob is called"
              },
              "JobMigrationRequested(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#migrateJob function is called"
              },
              "JobMigrationSuccessful(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#acceptJobMigration function is called"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "JobSlashLiquidity(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called"
              },
              "JobSlashToken(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashTokenFromJob is called"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "KeeperRevoke(address,address)": {
                "notice": "Emitted when Keep3rKeeperDisputable#revoke is called"
              },
              "KeeperSlash(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperDisputable#slash is called"
              },
              "KeeperValidation(uint256)": {
                "notice": "Emitted when a keeper is validated before a job"
              },
              "KeeperWork(address,address,address,uint256,uint256)": {
                "notice": "Emitted when a keeper works a job"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "acceptJobMigration(address,address)": {
                "notice": "Completes the migration process for a job"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addJob(address)": {
                "notice": "Allows any caller to add a new job"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "bondedPayment(address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "bonds(address,address)": {
                "notice": "Tracks how much a keeper has bonded of a certain token"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "directTokenPayment(address,address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "notice": "Confirms if the current keeper is registered and has a minimum bond of any asset."
              },
              "isKeeper(address)": {
                "notice": "Confirms if the current keeper is registered"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "migrateJob(address,address)": {
                "notice": "Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingJobMigrations(address)": {
                "notice": "Maps the jobs that have requested a migration to the address they have requested to migrate to"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "revoke(address)": {
                "notice": "Blacklists a keeper from participating in the network"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "slash(address,address,uint256,uint256)": {
                "notice": "Allows governance to slash a keeper based on a dispute"
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "notice": "Allows governance or a slasher to slash liquidity from a job"
              },
              "slashTokenFromJob(address,address,uint256)": {
                "notice": "Allows governance or slasher to slash a job specific token"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              },
              "worked(address)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "notice": "This contract inherits all the functionality of Keep3rV2",
            "version": 1
          }
        }
      },
      "solidity/interfaces/IKeep3rHelper.sol": {
        "IKeep3rHelper": {
          "abi": [
            {
              "inputs": [],
              "name": "LiquidityPairInvalid",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amountBonded",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "int56",
                  "name": "_tickDifference",
                  "type": "int56"
                },
                {
                  "internalType": "uint256",
                  "name": "_timeInterval",
                  "type": "uint256"
                }
              ],
              "name": "getKP3RsAtTick",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_kp3rAmount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bonds",
                  "type": "uint256"
                }
              ],
              "name": "getPaymentParams",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_boost",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_oneEthQuote",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_extra",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "name": "getPoolTokens",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_token0",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token1",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint128",
                  "name": "_baseAmount",
                  "type": "uint128"
                },
                {
                  "internalType": "int56",
                  "name": "_tickDifference",
                  "type": "int56"
                },
                {
                  "internalType": "uint256",
                  "name": "_timeInterval",
                  "type": "uint256"
                }
              ],
              "name": "getQuoteAtTick",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_quoteAmount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_gasUsed",
                  "type": "uint256"
                }
              ],
              "name": "getRewardAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_gasUsed",
                  "type": "uint256"
                }
              ],
              "name": "getRewardAmountFor",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_kp3r",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bonds",
                  "type": "uint256"
                }
              ],
              "name": "getRewardBoostFor",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardBoost",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "name": "isKP3RToken0",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isKP3RToken0",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                },
                {
                  "internalType": "uint32[]",
                  "name": "_secondsAgo",
                  "type": "uint32[]"
                }
              ],
              "name": "observe",
              "outputs": [
                {
                  "internalType": "int56",
                  "name": "_tickCumulative1",
                  "type": "int56"
                },
                {
                  "internalType": "int56",
                  "name": "_tickCumulative2",
                  "type": "int56"
                },
                {
                  "internalType": "bool",
                  "name": "_success",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_eth",
                  "type": "uint256"
                }
              ],
              "name": "quote",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amountOut",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "bonds(address)": {
                "params": {
                  "_keeper": "The address of the keeper to check"
                },
                "returns": {
                  "_amountBonded": "The amount of KP3R the keeper has bonded"
                }
              },
              "getKP3RsAtTick(uint256,int56,uint256)": {
                "params": {
                  "_liquidityAmount": "Amount of liquidity to be converted",
                  "_tickDifference": "Tick value used to calculate the quote",
                  "_timeInterval": "Time value used to calculate the quote"
                },
                "returns": {
                  "_kp3rAmount": "Amount of KP3R tokens underlying on the given liquidity"
                }
              },
              "getPaymentParams(uint256)": {
                "params": {
                  "_bonds": "Amount of bonded KP3R owned by the keeper"
                },
                "returns": {
                  "_boost": "Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R",
                  "_extra": "Amount of extra gas that should be added to the gas spent",
                  "_oneEthQuote": "Amount of KP3R tokens equivalent to 1 ETH"
                }
              },
              "getPoolTokens(address)": {
                "params": {
                  "_pool": "Address of the correspondant pool"
                },
                "returns": {
                  "_token0": "Address of the first token of the pair",
                  "_token1": "Address of the second token of the pair"
                }
              },
              "getQuoteAtTick(uint128,int56,uint256)": {
                "params": {
                  "_baseAmount": "Amount of token to be converted",
                  "_tickDifference": "Tick value used to calculate the quote",
                  "_timeInterval": "Time value used to calculate the quote"
                },
                "returns": {
                  "_quoteAmount": "Amount of credits deserved for the baseAmount at the tick value"
                }
              },
              "getRewardAmount(uint256)": {
                "params": {
                  "_gasUsed": "The amount of gas used that will be rewarded"
                },
                "returns": {
                  "_amount": "The amount of KP3R that should be awarded to tx.origin"
                }
              },
              "getRewardAmountFor(address,uint256)": {
                "params": {
                  "_gasUsed": "The amount of gas used that will be rewarded",
                  "_keeper": "The address of the keeper to check"
                },
                "returns": {
                  "_kp3r": "The amount of KP3R that should be awarded to the keeper"
                }
              },
              "getRewardBoostFor(uint256)": {
                "params": {
                  "_bonds": "The amount of KP3R tokens bonded by the keeper"
                },
                "returns": {
                  "_rewardBoost": "The reward boost that corresponds to the keeper"
                }
              },
              "isKP3RToken0(address)": {
                "params": {
                  "_pool": "Address of the correspondant pool"
                },
                "returns": {
                  "_isKP3RToken0": "Boolean indicating the order of the tokens in the pair"
                }
              },
              "observe(address,uint32[])": {
                "params": {
                  "_pool": "Address of the pool to observe",
                  "_secondsAgo": "Array with time references to observe"
                },
                "returns": {
                  "_success": "Boolean indicating if the observe call was succesfull",
                  "_tickCumulative1": "Cummulative sum of ticks until first time reference",
                  "_tickCumulative2": "Cummulative sum of ticks until second time reference"
                }
              },
              "quote(uint256)": {
                "details": "This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas",
                "params": {
                  "_eth": "The amount of ETH"
                },
                "returns": {
                  "_amountOut": "The amount of KP3R"
                }
              }
            },
            "title": "Keep3rHelper contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "bonds(address)": "fe10d774",
              "getKP3RsAtTick(uint256,int56,uint256)": "a0d27107",
              "getPaymentParams(uint256)": "435b21c1",
              "getPoolTokens(address)": "ca4f2803",
              "getQuoteAtTick(uint128,int56,uint256)": "ab8cedc5",
              "getRewardAmount(uint256)": "c84993af",
              "getRewardAmountFor(address,uint256)": "2248e82d",
              "getRewardBoostFor(uint256)": "516c3323",
              "isKP3RToken0(address)": "696a437b",
              "observe(address,uint32[])": "dc686d91",
              "quote(uint256)": "ed1bd76c"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LiquidityPairInvalid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountBonded\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityAmount\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"_tickDifference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"_timeInterval\",\"type\":\"uint256\"}],\"name\":\"getKP3RsAtTick\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_kp3rAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bonds\",\"type\":\"uint256\"}],\"name\":\"getPaymentParams\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_boost\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_oneEthQuote\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_extra\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_baseAmount\",\"type\":\"uint128\"},{\"internalType\":\"int56\",\"name\":\"_tickDifference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"_timeInterval\",\"type\":\"uint256\"}],\"name\":\"getQuoteAtTick\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_quoteAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasUsed\",\"type\":\"uint256\"}],\"name\":\"getRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasUsed\",\"type\":\"uint256\"}],\"name\":\"getRewardAmountFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_kp3r\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bonds\",\"type\":\"uint256\"}],\"name\":\"getRewardBoostFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardBoost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"isKP3RToken0\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isKP3RToken0\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"},{\"internalType\":\"uint32[]\",\"name\":\"_secondsAgo\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"_tickCumulative1\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"_tickCumulative2\",\"type\":\"int56\"},{\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_eth\",\"type\":\"uint256\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"bonds(address)\":{\"params\":{\"_keeper\":\"The address of the keeper to check\"},\"returns\":{\"_amountBonded\":\"The amount of KP3R the keeper has bonded\"}},\"getKP3RsAtTick(uint256,int56,uint256)\":{\"params\":{\"_liquidityAmount\":\"Amount of liquidity to be converted\",\"_tickDifference\":\"Tick value used to calculate the quote\",\"_timeInterval\":\"Time value used to calculate the quote\"},\"returns\":{\"_kp3rAmount\":\"Amount of KP3R tokens underlying on the given liquidity\"}},\"getPaymentParams(uint256)\":{\"params\":{\"_bonds\":\"Amount of bonded KP3R owned by the keeper\"},\"returns\":{\"_boost\":\"Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\",\"_extra\":\"Amount of extra gas that should be added to the gas spent\",\"_oneEthQuote\":\"Amount of KP3R tokens equivalent to 1 ETH\"}},\"getPoolTokens(address)\":{\"params\":{\"_pool\":\"Address of the correspondant pool\"},\"returns\":{\"_token0\":\"Address of the first token of the pair\",\"_token1\":\"Address of the second token of the pair\"}},\"getQuoteAtTick(uint128,int56,uint256)\":{\"params\":{\"_baseAmount\":\"Amount of token to be converted\",\"_tickDifference\":\"Tick value used to calculate the quote\",\"_timeInterval\":\"Time value used to calculate the quote\"},\"returns\":{\"_quoteAmount\":\"Amount of credits deserved for the baseAmount at the tick value\"}},\"getRewardAmount(uint256)\":{\"params\":{\"_gasUsed\":\"The amount of gas used that will be rewarded\"},\"returns\":{\"_amount\":\"The amount of KP3R that should be awarded to tx.origin\"}},\"getRewardAmountFor(address,uint256)\":{\"params\":{\"_gasUsed\":\"The amount of gas used that will be rewarded\",\"_keeper\":\"The address of the keeper to check\"},\"returns\":{\"_kp3r\":\"The amount of KP3R that should be awarded to the keeper\"}},\"getRewardBoostFor(uint256)\":{\"params\":{\"_bonds\":\"The amount of KP3R tokens bonded by the keeper\"},\"returns\":{\"_rewardBoost\":\"The reward boost that corresponds to the keeper\"}},\"isKP3RToken0(address)\":{\"params\":{\"_pool\":\"Address of the correspondant pool\"},\"returns\":{\"_isKP3RToken0\":\"Boolean indicating the order of the tokens in the pair\"}},\"observe(address,uint32[])\":{\"params\":{\"_pool\":\"Address of the pool to observe\",\"_secondsAgo\":\"Array with time references to observe\"},\"returns\":{\"_success\":\"Boolean indicating if the observe call was succesfull\",\"_tickCumulative1\":\"Cummulative sum of ticks until first time reference\",\"_tickCumulative2\":\"Cummulative sum of ticks until second time reference\"}},\"quote(uint256)\":{\"details\":\"This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\",\"params\":{\"_eth\":\"The amount of ETH\"},\"returns\":{\"_amountOut\":\"The amount of KP3R\"}}},\"title\":\"Keep3rHelper contract\",\"version\":1},\"userdoc\":{\"errors\":{\"LiquidityPairInvalid()\":[{\"notice\":\"Throws when none of the tokens in the liquidity pair is KP3R\"}]},\"kind\":\"user\",\"methods\":{\"bonds(address)\":{\"notice\":\"Returns the amount of KP3R the keeper has bonded\"},\"getKP3RsAtTick(uint256,int56,uint256)\":{\"notice\":\"Given a tick and a liquidity amount, calculates the underlying KP3R tokens\"},\"getPaymentParams(uint256)\":{\"notice\":\"Get multiplier, quote, and extra, in order to calculate keeper payment\"},\"getPoolTokens(address)\":{\"notice\":\"Given a pool address, returns the underlying tokens of the pair\"},\"getQuoteAtTick(uint128,int56,uint256)\":{\"notice\":\"Given a tick and a token amount, calculates the output in correspondant token\"},\"getRewardAmount(uint256)\":{\"notice\":\"Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\"},\"getRewardAmountFor(address,uint256)\":{\"notice\":\"Calculates the reward (in KP3R) that corresponds to a keeper for using gas\"},\"getRewardBoostFor(uint256)\":{\"notice\":\"Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\"},\"isKP3RToken0(address)\":{\"notice\":\"Defines the order of the tokens in the pair for twap calculations\"},\"observe(address,uint32[])\":{\"notice\":\"Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\"},\"quote(uint256)\":{\"notice\":\"Calculates the amount of KP3R that corresponds to the ETH passed into the function\"}},\"notice\":\"Contains all the helper functions used throughout the different files.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/IKeep3rHelper.sol\":\"IKeep3rHelper\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/IKeep3rHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelper contract\\n/// @notice Contains all the helper functions used throughout the different files.\\n\\ninterface IKeep3rHelper {\\n  // Errors\\n\\n  /// @notice Throws when none of the tokens in the liquidity pair is KP3R\\n  error LiquidityPairInvalid();\\n\\n  // Methods\\n  // solhint-enable func-name-mixedcase\\n\\n  /// @notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\\n  /// @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\\n  /// @param _eth The amount of ETH\\n  /// @return _amountOut The amount of KP3R\\n  function quote(uint256 _eth) external view returns (uint256 _amountOut);\\n\\n  /// @notice Returns the amount of KP3R the keeper has bonded\\n  /// @param _keeper The address of the keeper to check\\n  /// @return _amountBonded The amount of KP3R the keeper has bonded\\n  function bonds(address _keeper) external view returns (uint256 _amountBonded);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\\n  /// @param _keeper The address of the keeper to check\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _kp3r The amount of KP3R that should be awarded to the keeper\\n  function getRewardAmountFor(address _keeper, uint256 _gasUsed) external view returns (uint256 _kp3r);\\n\\n  /// @notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\\n  /// @param _bonds The amount of KP3R tokens bonded by the keeper\\n  /// @return _rewardBoost The reward boost that corresponds to the keeper\\n  function getRewardBoostFor(uint256 _bonds) external view returns (uint256 _rewardBoost);\\n\\n  /// @notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\\n  /// @param _gasUsed The amount of gas used that will be rewarded\\n  /// @return _amount The amount of KP3R that should be awarded to tx.origin\\n  function getRewardAmount(uint256 _gasUsed) external view returns (uint256 _amount);\\n\\n  /// @notice Given a pool address, returns the underlying tokens of the pair\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _token0 Address of the first token of the pair\\n  /// @return _token1 Address of the second token of the pair\\n  function getPoolTokens(address _pool) external view returns (address _token0, address _token1);\\n\\n  /// @notice Defines the order of the tokens in the pair for twap calculations\\n  /// @param _pool Address of the correspondant pool\\n  /// @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair\\n  function isKP3RToken0(address _pool) external view returns (bool _isKP3RToken0);\\n\\n  /// @notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\\n  /// @param _pool Address of the pool to observe\\n  /// @param _secondsAgo Array with time references to observe\\n  /// @return _tickCumulative1 Cummulative sum of ticks until first time reference\\n  /// @return _tickCumulative2 Cummulative sum of ticks until second time reference\\n  /// @return _success Boolean indicating if the observe call was succesfull\\n  function observe(address _pool, uint32[] memory _secondsAgo)\\n    external\\n    view\\n    returns (\\n      int56 _tickCumulative1,\\n      int56 _tickCumulative2,\\n      bool _success\\n    );\\n\\n  /// @notice Get multiplier, quote, and extra, in order to calculate keeper payment\\n  /// @param _bonds Amount of bonded KP3R owned by the keeper\\n  /// @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\\n  /// @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\\n  /// @return _extra Amount of extra gas that should be added to the gas spent\\n  function getPaymentParams(uint256 _bonds)\\n    external\\n    view\\n    returns (\\n      uint256 _boost,\\n      uint256 _oneEthQuote,\\n      uint256 _extra\\n    );\\n\\n  /// @notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\\n  /// @param _liquidityAmount Amount of liquidity to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity\\n  function getKP3RsAtTick(\\n    uint256 _liquidityAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _kp3rAmount);\\n\\n  /// @notice Given a tick and a token amount, calculates the output in correspondant token\\n  /// @param _baseAmount Amount of token to be converted\\n  /// @param _tickDifference Tick value used to calculate the quote\\n  /// @param _timeInterval Time value used to calculate the quote\\n  /// @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value\\n  function getQuoteAtTick(\\n    uint128 _baseAmount,\\n    int56 _tickDifference,\\n    uint256 _timeInterval\\n  ) external pure returns (uint256 _quoteAmount);\\n}\\n\",\"keccak256\":\"0x1b7daa4263dd21102f0418fba16f5a35a805070ebba3b39b39cadc6fc34d50e9\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "LiquidityPairInvalid()": [
                {
                  "notice": "Throws when none of the tokens in the liquidity pair is KP3R"
                }
              ]
            },
            "kind": "user",
            "methods": {
              "bonds(address)": {
                "notice": "Returns the amount of KP3R the keeper has bonded"
              },
              "getKP3RsAtTick(uint256,int56,uint256)": {
                "notice": "Given a tick and a liquidity amount, calculates the underlying KP3R tokens"
              },
              "getPaymentParams(uint256)": {
                "notice": "Get multiplier, quote, and extra, in order to calculate keeper payment"
              },
              "getPoolTokens(address)": {
                "notice": "Given a pool address, returns the underlying tokens of the pair"
              },
              "getQuoteAtTick(uint128,int56,uint256)": {
                "notice": "Given a tick and a token amount, calculates the output in correspondant token"
              },
              "getRewardAmount(uint256)": {
                "notice": "Calculates the reward (in KP3R) that corresponds to tx.origin for using gas"
              },
              "getRewardAmountFor(address,uint256)": {
                "notice": "Calculates the reward (in KP3R) that corresponds to a keeper for using gas"
              },
              "getRewardBoostFor(uint256)": {
                "notice": "Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded"
              },
              "isKP3RToken0(address)": {
                "notice": "Defines the order of the tokens in the pair for twap calculations"
              },
              "observe(address,uint32[])": {
                "notice": "Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment"
              },
              "quote(uint256)": {
                "notice": "Calculates the amount of KP3R that corresponds to the ETH passed into the function"
              }
            },
            "notice": "Contains all the helper functions used throughout the different files.",
            "version": 1
          }
        }
      },
      "solidity/interfaces/IKeep3rHelperParameters.sol": {
        "IKeep3rHelperParameters": {
          "abi": [
            {
              "inputs": [],
              "name": "InvalidKp3rPool",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV2",
                  "type": "address"
                }
              ],
              "name": "Keep3rV2Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_address",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "_isKP3RToken0",
                  "type": "bool"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_maxBoost",
                  "type": "uint256"
                }
              ],
              "name": "MaxBoostChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_minBoost",
                  "type": "uint256"
                }
              ],
              "name": "MinBoostChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint32",
                  "name": "_quoteTwapTime",
                  "type": "uint32"
                }
              ],
              "name": "QuoteTwapTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_targetBond",
                  "type": "uint256"
                }
              ],
              "name": "TargetBondChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_workExtraGas",
                  "type": "uint256"
                }
              ],
              "name": "WorkExtraGasChange",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "BOOST_BASE",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_base",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "KP3R",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_kp3r",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV2",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV2",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "poolAddress",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "isKP3RToken0",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "maxBoost",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_multiplier",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "minBoost",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_multiplier",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "quoteTwapTime",
              "outputs": [
                {
                  "internalType": "uint32",
                  "name": "_quoteTwapTime",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV2",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV2",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_poolAddress",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_maxBoost",
                  "type": "uint256"
                }
              ],
              "name": "setMaxBoost",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_minBoost",
                  "type": "uint256"
                }
              ],
              "name": "setMinBoost",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint32",
                  "name": "_quoteTwapTime",
                  "type": "uint32"
                }
              ],
              "name": "setQuoteTwapTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_targetBond",
                  "type": "uint256"
                }
              ],
              "name": "setTargetBond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_workExtraGas",
                  "type": "uint256"
                }
              ],
              "name": "setWorkExtraGas",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "targetBond",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_target",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "workExtraGas",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_workExtraGas",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "Keep3rV2Change(address)": {
                "params": {
                  "_keep3rV2": "The address of Keep3r V2"
                }
              },
              "Kp3rWethPoolChange(address,bool)": {
                "params": {
                  "_address": "Address of the new kp3r weth pool",
                  "_isKP3RToken0": "True if calling the token0 method of the pool returns the KP3R token address"
                }
              },
              "MaxBoostChange(uint256)": {
                "params": {
                  "_maxBoost": "The maximum boost multiplier"
                }
              },
              "MinBoostChange(uint256)": {
                "params": {
                  "_minBoost": "The minimum boost multiplier"
                }
              },
              "QuoteTwapTimeChange(uint32)": {
                "params": {
                  "_quoteTwapTime": "The twap time for quoting"
                }
              },
              "TargetBondChange(uint256)": {
                "params": {
                  "_targetBond": "The target bond amount"
                }
              },
              "WorkExtraGasChange(uint256)": {
                "params": {
                  "_workExtraGas": "The work extra gas"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "BOOST_BASE()": {
                "returns": {
                  "_base": "The boost base number"
                }
              },
              "KP3R()": {
                "returns": {
                  "_kp3r": "Address of KP3R token"
                }
              },
              "keep3rV2()": {
                "returns": {
                  "_keep3rV2": "Address of Keep3r V2"
                }
              },
              "kp3rWethPool()": {
                "returns": {
                  "isKP3RToken0": "True if calling the token0 method of the pool returns the KP3R token address",
                  "poolAddress": "Address of the pool"
                }
              },
              "maxBoost()": {
                "returns": {
                  "_multiplier": "The maximum boost multiplier"
                }
              },
              "minBoost()": {
                "returns": {
                  "_multiplier": "The minimum boost multiplier"
                }
              },
              "quoteTwapTime()": {
                "returns": {
                  "_quoteTwapTime": "The twap time"
                }
              },
              "setKeep3rV2(address)": {
                "params": {
                  "_keep3rV2": "The address of Keep3r V2"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_poolAddress": "The address of the KP3R-WETH pool"
                }
              },
              "setMaxBoost(uint256)": {
                "params": {
                  "_maxBoost": "The maximum boost multiplier"
                }
              },
              "setMinBoost(uint256)": {
                "params": {
                  "_minBoost": "The minimum boost multiplier"
                }
              },
              "setQuoteTwapTime(uint32)": {
                "params": {
                  "_quoteTwapTime": "The twap time for quoting"
                }
              },
              "setTargetBond(uint256)": {
                "params": {
                  "_targetBond": "The target bond amount"
                }
              },
              "setWorkExtraGas(uint256)": {
                "params": {
                  "_workExtraGas": "The work extra gas"
                }
              },
              "targetBond()": {
                "returns": {
                  "_target": "The amount of KP3R that comforms the targetBond"
                }
              },
              "workExtraGas()": {
                "returns": {
                  "_workExtraGas": "The work unaccounted gas amount"
                }
              }
            },
            "title": "Keep3rHelperParameters contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "BOOST_BASE()": "25f09e61",
              "KP3R()": "05e0b9a0",
              "keep3rV2()": "117cfc1b",
              "kp3rWethPool()": "7b40c913",
              "maxBoost()": "37090c2f",
              "minBoost()": "8561579c",
              "quoteTwapTime()": "9aaad679",
              "setKeep3rV2(address)": "3cc7ab30",
              "setKp3rWethPool(address)": "160e1e31",
              "setMaxBoost(uint256)": "b2e0df96",
              "setMinBoost(uint256)": "0c525835",
              "setQuoteTwapTime(uint32)": "b93f5af0",
              "setTargetBond(uint256)": "ab5dce00",
              "setWorkExtraGas(uint256)": "289adb44",
              "targetBond()": "2742b9e7",
              "workExtraGas()": "3facf242"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidKp3rPool\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV2\",\"type\":\"address\"}],\"name\":\"Keep3rV2Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_isKP3RToken0\",\"type\":\"bool\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_maxBoost\",\"type\":\"uint256\"}],\"name\":\"MaxBoostChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_minBoost\",\"type\":\"uint256\"}],\"name\":\"MinBoostChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_quoteTwapTime\",\"type\":\"uint32\"}],\"name\":\"QuoteTwapTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_targetBond\",\"type\":\"uint256\"}],\"name\":\"TargetBondChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_workExtraGas\",\"type\":\"uint256\"}],\"name\":\"WorkExtraGasChange\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BOOST_BASE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_base\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KP3R\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_kp3r\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV2\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isKP3RToken0\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxBoost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_multiplier\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minBoost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_multiplier\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"quoteTwapTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"_quoteTwapTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV2\",\"type\":\"address\"}],\"name\":\"setKeep3rV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolAddress\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxBoost\",\"type\":\"uint256\"}],\"name\":\"setMaxBoost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minBoost\",\"type\":\"uint256\"}],\"name\":\"setMinBoost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_quoteTwapTime\",\"type\":\"uint32\"}],\"name\":\"setQuoteTwapTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_targetBond\",\"type\":\"uint256\"}],\"name\":\"setTargetBond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_workExtraGas\",\"type\":\"uint256\"}],\"name\":\"setWorkExtraGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetBond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_target\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"workExtraGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_workExtraGas\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Keep3rV2Change(address)\":{\"params\":{\"_keep3rV2\":\"The address of Keep3r V2\"}},\"Kp3rWethPoolChange(address,bool)\":{\"params\":{\"_address\":\"Address of the new kp3r weth pool\",\"_isKP3RToken0\":\"True if calling the token0 method of the pool returns the KP3R token address\"}},\"MaxBoostChange(uint256)\":{\"params\":{\"_maxBoost\":\"The maximum boost multiplier\"}},\"MinBoostChange(uint256)\":{\"params\":{\"_minBoost\":\"The minimum boost multiplier\"}},\"QuoteTwapTimeChange(uint32)\":{\"params\":{\"_quoteTwapTime\":\"The twap time for quoting\"}},\"TargetBondChange(uint256)\":{\"params\":{\"_targetBond\":\"The target bond amount\"}},\"WorkExtraGasChange(uint256)\":{\"params\":{\"_workExtraGas\":\"The work extra gas\"}}},\"kind\":\"dev\",\"methods\":{\"BOOST_BASE()\":{\"returns\":{\"_base\":\"The boost base number\"}},\"KP3R()\":{\"returns\":{\"_kp3r\":\"Address of KP3R token\"}},\"keep3rV2()\":{\"returns\":{\"_keep3rV2\":\"Address of Keep3r V2\"}},\"kp3rWethPool()\":{\"returns\":{\"isKP3RToken0\":\"True if calling the token0 method of the pool returns the KP3R token address\",\"poolAddress\":\"Address of the pool\"}},\"maxBoost()\":{\"returns\":{\"_multiplier\":\"The maximum boost multiplier\"}},\"minBoost()\":{\"returns\":{\"_multiplier\":\"The minimum boost multiplier\"}},\"quoteTwapTime()\":{\"returns\":{\"_quoteTwapTime\":\"The twap time\"}},\"setKeep3rV2(address)\":{\"params\":{\"_keep3rV2\":\"The address of Keep3r V2\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_poolAddress\":\"The address of the KP3R-WETH pool\"}},\"setMaxBoost(uint256)\":{\"params\":{\"_maxBoost\":\"The maximum boost multiplier\"}},\"setMinBoost(uint256)\":{\"params\":{\"_minBoost\":\"The minimum boost multiplier\"}},\"setQuoteTwapTime(uint32)\":{\"params\":{\"_quoteTwapTime\":\"The twap time for quoting\"}},\"setTargetBond(uint256)\":{\"params\":{\"_targetBond\":\"The target bond amount\"}},\"setWorkExtraGas(uint256)\":{\"params\":{\"_workExtraGas\":\"The work extra gas\"}},\"targetBond()\":{\"returns\":{\"_target\":\"The amount of KP3R that comforms the targetBond\"}},\"workExtraGas()\":{\"returns\":{\"_workExtraGas\":\"The work unaccounted gas amount\"}}},\"title\":\"Keep3rHelperParameters contract\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKp3rPool()\":[{\"notice\":\"Throws when pool does not have KP3R as token0 nor token1\"}]},\"events\":{\"Keep3rV2Change(address)\":{\"notice\":\"Emitted when the Keep3r V2 address is changed\"},\"Kp3rWethPoolChange(address,bool)\":{\"notice\":\"Emitted when the kp3r weth pool is changed\"},\"MaxBoostChange(uint256)\":{\"notice\":\"Emitted when the maximum boost multiplier is changed\"},\"MinBoostChange(uint256)\":{\"notice\":\"Emitted when the minimum boost multiplier is changed\"},\"QuoteTwapTimeChange(uint32)\":{\"notice\":\"Emitted when the quote twap time is changed\"},\"TargetBondChange(uint256)\":{\"notice\":\"Emitted when the target bond amount is changed\"},\"WorkExtraGasChange(uint256)\":{\"notice\":\"Emitted when the work extra gas amount is changed\"}},\"kind\":\"user\",\"methods\":{\"BOOST_BASE()\":{\"notice\":\"The boost base used to calculate the boost rewards for the keeper\"},\"KP3R()\":{\"notice\":\"Address of KP3R token\"},\"keep3rV2()\":{\"notice\":\"Address of Keep3r V2\"},\"kp3rWethPool()\":{\"notice\":\"KP3R-WETH pool that is being used as oracle\"},\"maxBoost()\":{\"notice\":\"The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE\"},\"minBoost()\":{\"notice\":\"The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE\"},\"quoteTwapTime()\":{\"notice\":\"The twap time for quoting\"},\"setKeep3rV2(address)\":{\"notice\":\"Sets the Keep3r V2 address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets KP3R-WETH pool\"},\"setMaxBoost(uint256)\":{\"notice\":\"Sets the maximum boost multiplier\"},\"setMinBoost(uint256)\":{\"notice\":\"Sets the minimum boost multiplier\"},\"setQuoteTwapTime(uint32)\":{\"notice\":\"Sets the quote twap time\"},\"setTargetBond(uint256)\":{\"notice\":\"Sets the target bond amount\"},\"setWorkExtraGas(uint256)\":{\"notice\":\"Sets the work extra gas amount\"},\"targetBond()\":{\"notice\":\"The targeted amount of bonded KP3Rs to max-up reward multiplier         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional\"},\"workExtraGas()\":{\"notice\":\"The amount of unaccounted gas that is going to be added to keeper payments\"}},\"notice\":\"Contains all the helper functions used throughout the different files.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/IKeep3rHelperParameters.sol\":\"IKeep3rHelperParameters\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/IKeep3rHelperParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rHelperParameters contract\\n/// @notice Contains all the helper functions used throughout the different files.\\ninterface IKeep3rHelperParameters {\\n  // Structs\\n\\n  /// @dev KP3R-WETH Pool address and isKP3RToken0\\n  /// @dev Created in order to save gas by avoiding calls to pool's token0 method\\n  struct Kp3rWethPool {\\n    address poolAddress;\\n    bool isKP3RToken0;\\n  }\\n\\n  // Errors\\n\\n  /// @notice Throws when pool does not have KP3R as token0 nor token1\\n  error InvalidKp3rPool();\\n\\n  // Events\\n\\n  /// @notice Emitted when the kp3r weth pool is changed\\n  /// @param _address Address of the new kp3r weth pool\\n  /// @param _isKP3RToken0 True if calling the token0 method of the pool returns the KP3R token address\\n  event Kp3rWethPoolChange(address _address, bool _isKP3RToken0);\\n\\n  /// @notice Emitted when the minimum boost multiplier is changed\\n  /// @param _minBoost The minimum boost multiplier\\n  event MinBoostChange(uint256 _minBoost);\\n\\n  /// @notice Emitted when the maximum boost multiplier is changed\\n  /// @param _maxBoost The maximum boost multiplier\\n  event MaxBoostChange(uint256 _maxBoost);\\n\\n  /// @notice Emitted when the target bond amount is changed\\n  /// @param _targetBond The target bond amount\\n  event TargetBondChange(uint256 _targetBond);\\n\\n  /// @notice Emitted when the Keep3r V2 address is changed\\n  /// @param _keep3rV2 The address of Keep3r V2\\n  event Keep3rV2Change(address _keep3rV2);\\n\\n  /// @notice Emitted when the work extra gas amount is changed\\n  /// @param _workExtraGas The work extra gas\\n  event WorkExtraGasChange(uint256 _workExtraGas);\\n\\n  /// @notice Emitted when the quote twap time is changed\\n  /// @param _quoteTwapTime The twap time for quoting\\n  event QuoteTwapTimeChange(uint32 _quoteTwapTime);\\n\\n  // Variables\\n\\n  /// @notice Address of KP3R token\\n  /// @return _kp3r Address of KP3R token\\n  // solhint-disable func-name-mixedcase\\n  function KP3R() external view returns (address _kp3r);\\n\\n  /// @notice The boost base used to calculate the boost rewards for the keeper\\n  /// @return _base The boost base number\\n  function BOOST_BASE() external view returns (uint256 _base);\\n\\n  /// @notice KP3R-WETH pool that is being used as oracle\\n  /// @return poolAddress Address of the pool\\n  /// @return isKP3RToken0 True if calling the token0 method of the pool returns the KP3R token address\\n  function kp3rWethPool() external view returns (address poolAddress, bool isKP3RToken0);\\n\\n  /// @notice The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job\\n  ///         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE\\n  /// @return _multiplier The minimum boost multiplier\\n  function minBoost() external view returns (uint256 _multiplier);\\n\\n  /// @notice The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job\\n  ///         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE\\n  /// @return _multiplier The maximum boost multiplier\\n  function maxBoost() external view returns (uint256 _multiplier);\\n\\n  /// @notice The targeted amount of bonded KP3Rs to max-up reward multiplier\\n  ///         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get\\n  ///                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional\\n  /// @return _target The amount of KP3R that comforms the targetBond\\n  function targetBond() external view returns (uint256 _target);\\n\\n  /// @notice The amount of unaccounted gas that is going to be added to keeper payments\\n  /// @return _workExtraGas The work unaccounted gas amount\\n  function workExtraGas() external view returns (uint256 _workExtraGas);\\n\\n  /// @notice The twap time for quoting\\n  /// @return _quoteTwapTime The twap time\\n  function quoteTwapTime() external view returns (uint32 _quoteTwapTime);\\n\\n  /// @notice Address of Keep3r V2\\n  /// @return _keep3rV2 Address of Keep3r V2\\n  function keep3rV2() external view returns (address _keep3rV2);\\n\\n  // Methods\\n\\n  /// @notice Sets KP3R-WETH pool\\n  /// @param _poolAddress The address of the KP3R-WETH pool\\n  function setKp3rWethPool(address _poolAddress) external;\\n\\n  /// @notice Sets the minimum boost multiplier\\n  /// @param _minBoost The minimum boost multiplier\\n  function setMinBoost(uint256 _minBoost) external;\\n\\n  /// @notice Sets the maximum boost multiplier\\n  /// @param _maxBoost The maximum boost multiplier\\n  function setMaxBoost(uint256 _maxBoost) external;\\n\\n  /// @notice Sets the target bond amount\\n  /// @param _targetBond The target bond amount\\n  function setTargetBond(uint256 _targetBond) external;\\n\\n  /// @notice Sets the Keep3r V2 address\\n  /// @param _keep3rV2 The address of Keep3r V2\\n  function setKeep3rV2(address _keep3rV2) external;\\n\\n  /// @notice Sets the work extra gas amount\\n  /// @param _workExtraGas The work extra gas\\n  function setWorkExtraGas(uint256 _workExtraGas) external;\\n\\n  /// @notice Sets the quote twap time\\n  /// @param _quoteTwapTime The twap time for quoting\\n  function setQuoteTwapTime(uint32 _quoteTwapTime) external;\\n}\\n\",\"keccak256\":\"0x187ab1606deb0ffaa49342c2964ddc93022651a2936a19642475a3ec6bce29b9\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "InvalidKp3rPool()": [
                {
                  "notice": "Throws when pool does not have KP3R as token0 nor token1"
                }
              ]
            },
            "events": {
              "Keep3rV2Change(address)": {
                "notice": "Emitted when the Keep3r V2 address is changed"
              },
              "Kp3rWethPoolChange(address,bool)": {
                "notice": "Emitted when the kp3r weth pool is changed"
              },
              "MaxBoostChange(uint256)": {
                "notice": "Emitted when the maximum boost multiplier is changed"
              },
              "MinBoostChange(uint256)": {
                "notice": "Emitted when the minimum boost multiplier is changed"
              },
              "QuoteTwapTimeChange(uint32)": {
                "notice": "Emitted when the quote twap time is changed"
              },
              "TargetBondChange(uint256)": {
                "notice": "Emitted when the target bond amount is changed"
              },
              "WorkExtraGasChange(uint256)": {
                "notice": "Emitted when the work extra gas amount is changed"
              }
            },
            "kind": "user",
            "methods": {
              "BOOST_BASE()": {
                "notice": "The boost base used to calculate the boost rewards for the keeper"
              },
              "KP3R()": {
                "notice": "Address of KP3R token"
              },
              "keep3rV2()": {
                "notice": "Address of Keep3r V2"
              },
              "kp3rWethPool()": {
                "notice": "KP3R-WETH pool that is being used as oracle"
              },
              "maxBoost()": {
                "notice": "The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE"
              },
              "minBoost()": {
                "notice": "The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE"
              },
              "quoteTwapTime()": {
                "notice": "The twap time for quoting"
              },
              "setKeep3rV2(address)": {
                "notice": "Sets the Keep3r V2 address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets KP3R-WETH pool"
              },
              "setMaxBoost(uint256)": {
                "notice": "Sets the maximum boost multiplier"
              },
              "setMinBoost(uint256)": {
                "notice": "Sets the minimum boost multiplier"
              },
              "setQuoteTwapTime(uint32)": {
                "notice": "Sets the quote twap time"
              },
              "setTargetBond(uint256)": {
                "notice": "Sets the target bond amount"
              },
              "setWorkExtraGas(uint256)": {
                "notice": "Sets the work extra gas amount"
              },
              "targetBond()": {
                "notice": "The targeted amount of bonded KP3Rs to max-up reward multiplier         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional"
              },
              "workExtraGas()": {
                "notice": "The amount of unaccounted gas that is going to be added to keeper payments"
              }
            },
            "notice": "Contains all the helper functions used throughout the different files.",
            "version": 1
          }
        }
      },
      "solidity/interfaces/IPairManager.sol": {
        "IPairManager": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_factory",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token0",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_token0",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_token1",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "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."
              },
              "approve(address,uint256)": {
                "details": "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."
              },
              "balanceOf(address)": {
                "details": "Returns the amount of tokens owned by `account`."
              },
              "decimals()": {
                "details": "Returns the decimals places of the token."
              },
              "factory()": {
                "returns": {
                  "_factory": "The address of the PairManager Factory"
                }
              },
              "name()": {
                "details": "Returns the name of the token."
              },
              "pool()": {
                "returns": {
                  "_pool": "The address of the pool"
                }
              },
              "symbol()": {
                "details": "Returns the symbol of the token."
              },
              "token0()": {
                "returns": {
                  "_token0": "The address of token0"
                }
              },
              "token1()": {
                "returns": {
                  "_token1": "The address of token1"
                }
              },
              "totalSupply()": {
                "details": "Returns the amount of tokens in existence."
              },
              "transfer(address,uint256)": {
                "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
              },
              "transferFrom(address,address,uint256)": {
                "details": "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."
              }
            },
            "title": "Pair Manager interface",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "factory()": "c45a0155",
              "name()": "06fdde03",
              "pool()": "16f0115b",
              "symbol()": "95d89b41",
              "token0()": "0dfe1681",
              "token1()": "d21220a7",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_token0\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"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.\"},\"approve(address,uint256)\":{\"details\":\"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.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"factory()\":{\"returns\":{\"_factory\":\"The address of the PairManager Factory\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"pool()\":{\"returns\":{\"_pool\":\"The address of the pool\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"token0()\":{\"returns\":{\"_token0\":\"The address of token0\"}},\"token1()\":{\"returns\":{\"_token1\":\"The address of token1\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"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.\"}},\"title\":\"Pair Manager interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"factory()\":{\"notice\":\"Address of the factory from which the pair manager was created\"},\"pool()\":{\"notice\":\"Address of the pool from which the Keep3r pair manager will interact with\"},\"token0()\":{\"notice\":\"Token0 of the pool\"},\"token1()\":{\"notice\":\"Token1 of the pool\"}},\"notice\":\"Generic interface for Keep3r liquidity pools (kLP)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/IPairManager.sol\":\"IPairManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {
              "factory()": {
                "notice": "Address of the factory from which the pair manager was created"
              },
              "pool()": {
                "notice": "Address of the pool from which the Keep3r pair manager will interact with"
              },
              "token0()": {
                "notice": "Token0 of the pool"
              },
              "token1()": {
                "notice": "Token1 of the pool"
              }
            },
            "notice": "Generic interface for Keep3r liquidity pools (kLP)",
            "version": 1
          }
        }
      },
      "solidity/interfaces/IPairManagerFactory.sol": {
        "IPairManagerFactory": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyInitialized",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pairManager",
                  "type": "address"
                }
              ],
              "name": "PairCreated",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "name": "createPairManager",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_pairManager",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "name": "pairManagers",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_pairManager",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "PairCreated(address,address)": {
                "params": {
                  "_pairManager": "The address of the just-created pair manager",
                  "_pool": "The address of the corresponding Uniswap pool"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "createPairManager(address)": {
                "params": {
                  "_pool": "The address of the Uniswap pool the pair manager will be based of"
                },
                "returns": {
                  "_pairManager": "The address of the just-created pair manager"
                }
              },
              "governance()": {
                "returns": {
                  "_governance": "The governance addresss"
                }
              },
              "pairManagers(address)": {
                "params": {
                  "_pool": "The address of the Uniswap pool"
                },
                "returns": {
                  "_pairManager": "The address of the corresponding pair manager"
                }
              },
              "pendingGovernance()": {
                "returns": {
                  "_pendingGovernance": "The pendingGovernance addresss"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              }
            },
            "title": "Factory of Pair Managers",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "createPairManager(address)": "869fb514",
              "governance()": "5aa6e675",
              "pairManagers(address)": "9cd7bef0",
              "pendingGovernance()": "f39c38a0",
              "setGovernance(address)": "ab033ea9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pairManager\",\"type\":\"address\"}],\"name\":\"PairCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"createPairManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_pairManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"pairManagers\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_pairManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"PairCreated(address,address)\":{\"params\":{\"_pairManager\":\"The address of the just-created pair manager\",\"_pool\":\"The address of the corresponding Uniswap pool\"}}},\"kind\":\"dev\",\"methods\":{\"createPairManager(address)\":{\"params\":{\"_pool\":\"The address of the Uniswap pool the pair manager will be based of\"},\"returns\":{\"_pairManager\":\"The address of the just-created pair manager\"}},\"governance()\":{\"returns\":{\"_governance\":\"The governance addresss\"}},\"pairManagers(address)\":{\"params\":{\"_pool\":\"The address of the Uniswap pool\"},\"returns\":{\"_pairManager\":\"The address of the corresponding pair manager\"}},\"pendingGovernance()\":{\"returns\":{\"_pendingGovernance\":\"The pendingGovernance addresss\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}}},\"title\":\"Factory of Pair Managers\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"notice\":\"Throws an error if the pair manager is already initialized\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyOwner()\":[{\"notice\":\"Throws an error if the caller is not the owner\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}]},\"events\":{\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"},\"PairCreated(address,address)\":{\"notice\":\"Emitted when a new pair manager is created\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"createPairManager(address)\":{\"notice\":\"Creates a new pair manager based on the address of a Uniswap pool         For example, the uniswap address of DAI-WETH, will create the Keep3r/DAI-WETH pool\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"pairManagers(address)\":{\"notice\":\"Maps the address of a Uniswap pool, to the address of the corresponding PairManager         For example, the uniswap address of DAI-WETH, will return the Keep3r/DAI-WETH pair manager address\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"}},\"notice\":\"This contract creates new pair managers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/IPairManagerFactory.sol\":\"IPairManagerFactory\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/IPairManagerFactory.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './peripherals/IGovernable.sol';\\n\\n/// @title Factory of Pair Managers\\n/// @notice This contract creates new pair managers\\ninterface IPairManagerFactory is IGovernable {\\n  // Variables\\n\\n  /// @notice Maps the address of a Uniswap pool, to the address of the corresponding PairManager\\n  ///         For example, the uniswap address of DAI-WETH, will return the Keep3r/DAI-WETH pair manager address\\n  /// @param _pool The address of the Uniswap pool\\n  /// @return _pairManager The address of the corresponding pair manager\\n  function pairManagers(address _pool) external view returns (address _pairManager);\\n\\n  // Events\\n\\n  /// @notice Emitted when a new pair manager is created\\n  /// @param _pool The address of the corresponding Uniswap pool\\n  /// @param _pairManager The address of the just-created pair manager\\n  event PairCreated(address _pool, address _pairManager);\\n\\n  // Errors\\n\\n  /// @notice Throws an error if the pair manager is already initialized\\n  error AlreadyInitialized();\\n\\n  /// @notice Throws an error if the caller is not the owner\\n  error OnlyOwner();\\n\\n  // Methods\\n\\n  /// @notice Creates a new pair manager based on the address of a Uniswap pool\\n  ///         For example, the uniswap address of DAI-WETH, will create the Keep3r/DAI-WETH pool\\n  /// @param _pool The address of the Uniswap pool the pair manager will be based of\\n  /// @return _pairManager The address of the just-created pair manager\\n  function createPairManager(address _pool) external returns (address _pairManager);\\n}\\n\",\"keccak256\":\"0x11f85de5b6d302967168ba9175899fd53248d266c0a928a26b76b69c46bd53e3\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "AlreadyInitialized()": [
                {
                  "notice": "Throws an error if the pair manager is already initialized"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyOwner()": [
                {
                  "notice": "Throws an error if the caller is not the owner"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ]
            },
            "events": {
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              },
              "PairCreated(address,address)": {
                "notice": "Emitted when a new pair manager is created"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "createPairManager(address)": {
                "notice": "Creates a new pair manager based on the address of a Uniswap pool         For example, the uniswap address of DAI-WETH, will create the Keep3r/DAI-WETH pool"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "pairManagers(address)": {
                "notice": "Maps the address of a Uniswap pool, to the address of the corresponding PairManager         For example, the uniswap address of DAI-WETH, will return the Keep3r/DAI-WETH pair manager address"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              }
            },
            "notice": "This contract creates new pair managers",
            "version": 1
          }
        }
      },
      "solidity/interfaces/IUniV3PairManager.sol": {
        "IUniV3PairManager": {
          "abi": [
            {
              "inputs": [],
              "name": "ExcessiveSlippage",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPool",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnsuccessfulTransfer",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0Min",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Min",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "burn",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "collect",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "factory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_factory",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint24",
                  "name": "_fee",
                  "type": "uint24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0Desired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Desired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount0Min",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Min",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                }
              ],
              "name": "mint",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_pool",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "position",
              "outputs": [
                {
                  "internalType": "uint128",
                  "name": "liquidity",
                  "type": "uint128"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside0LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "feeGrowthInside1LastX128",
                  "type": "uint256"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed0",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "tokensOwed1",
                  "type": "uint128"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "sqrtRatioAX96",
              "outputs": [
                {
                  "internalType": "uint160",
                  "name": "_sqrtPriceA96",
                  "type": "uint160"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "sqrtRatioBX96",
              "outputs": [
                {
                  "internalType": "uint160",
                  "name": "_sqrtPriceBX96",
                  "type": "uint160"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickLower",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "_tickLower",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickSpacing",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "_tickSpacing",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "tickUpper",
              "outputs": [
                {
                  "internalType": "int24",
                  "name": "_tickUpper",
                  "type": "int24"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token0",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_token0",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "token1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_token1",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amount0Owed",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount1Owed",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "uniswapV3MintCallback",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "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."
              },
              "approve(address,uint256)": {
                "details": "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."
              },
              "balanceOf(address)": {
                "details": "Returns the amount of tokens owned by `account`."
              },
              "burn(uint128,uint256,uint256,address)": {
                "params": {
                  "amount0Min": "The minimum amount of token0 we want to send to the recipient (to)",
                  "amount1Min": "The minimum amount of token1 we want to send to the recipient (to)",
                  "liquidity": "The amount of liquidity to be burned",
                  "to": "The address that will receive the due fees"
                },
                "returns": {
                  "amount0": "The calculated amount of token0 that will be sent to the recipient",
                  "amount1": "The calculated amount of token1 that will be sent to the recipient"
                }
              },
              "collect()": {
                "details": "The collected fees will be sent to governance",
                "returns": {
                  "amount0": "The amount of fees collected in token0",
                  "amount1": "The amount of fees collected in token1"
                }
              },
              "decimals()": {
                "details": "Returns the decimals places of the token."
              },
              "factory()": {
                "returns": {
                  "_factory": "The address of the PairManager Factory"
                }
              },
              "fee()": {
                "returns": {
                  "_fee": "The fee of the Uniswap pool passed into the constructor"
                }
              },
              "governance()": {
                "returns": {
                  "_governance": "The governance addresss"
                }
              },
              "mint(uint256,uint256,uint256,uint256,address)": {
                "details": "Triggers UniV3PairManager#uniswapV3MintCallback",
                "params": {
                  "amount0Desired": "The amount of token0 we would like to provide",
                  "amount0Min": "The minimum amount of token0 we want to provide",
                  "amount1Desired": "The amount of token1 we would like to provide",
                  "amount1Min": "The minimum amount of token1 we want to provide",
                  "to": "The address to which the kLP tokens are going to be minted to"
                },
                "returns": {
                  "liquidity": "kLP tokens sent in exchange for the provision of tokens"
                }
              },
              "name()": {
                "details": "Returns the name of the token."
              },
              "pendingGovernance()": {
                "returns": {
                  "_pendingGovernance": "The pendingGovernance addresss"
                }
              },
              "pool()": {
                "returns": {
                  "_pool": "The address of the pool"
                }
              },
              "position()": {
                "returns": {
                  "feeGrowthInside0LastX128": "The fee growth of token0 as of the last action on the individual position",
                  "feeGrowthInside1LastX128": "The fee growth of token1 as of the last action on the individual position",
                  "liquidity": "The amount of liquidity provided to the UniswapV3 pool by the pair manager",
                  "tokensOwed0": "The uncollected amount of token0 owed to the position as of the last computation",
                  "tokensOwed1": "The uncollected amount of token1 owed to the position as of the last computation"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              },
              "sqrtRatioAX96()": {
                "returns": {
                  "_sqrtPriceA96": "A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)         at the lowest tick"
                }
              },
              "sqrtRatioBX96()": {
                "returns": {
                  "_sqrtPriceBX96": "A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)         at the highest tick"
                }
              },
              "symbol()": {
                "details": "Returns the symbol of the token."
              },
              "tickLower()": {
                "returns": {
                  "_tickLower": "The lower tick in the Uniswap's curve"
                }
              },
              "tickSpacing()": {
                "returns": {
                  "_tickSpacing": "The pair tick spacing"
                }
              },
              "tickUpper()": {
                "returns": {
                  "_tickUpper": "The highest tick in the Uniswap's curve"
                }
              },
              "token0()": {
                "returns": {
                  "_token0": "The address of token0"
                }
              },
              "token1()": {
                "returns": {
                  "_token1": "The address of token1"
                }
              },
              "totalSupply()": {
                "details": "Returns the amount of tokens in existence."
              },
              "transfer(address,uint256)": {
                "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
              },
              "transferFrom(address,address,uint256)": {
                "details": "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."
              },
              "uniswapV3MintCallback(uint256,uint256,bytes)": {
                "params": {
                  "amount0Owed": "The amount of token0 due to the pool for the minted liquidity",
                  "amount1Owed": "The amount of token1 due to the pool for the minted liquidity",
                  "data": "The encoded token0, token1, fee (_poolKey) and the payer (msg.sender) of the IUniV3PairManager#mint function"
                }
              }
            },
            "title": "Pair Manager contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "burn(uint128,uint256,uint256,address)": "cf51148d",
              "collect()": "e5225381",
              "decimals()": "313ce567",
              "factory()": "c45a0155",
              "fee()": "ddca3f43",
              "governance()": "5aa6e675",
              "mint(uint256,uint256,uint256,uint256,address)": "a3e6dc28",
              "name()": "06fdde03",
              "pendingGovernance()": "f39c38a0",
              "pool()": "16f0115b",
              "position()": "09218e91",
              "setGovernance(address)": "ab033ea9",
              "sqrtRatioAX96()": "2ea28f5b",
              "sqrtRatioBX96()": "c6275261",
              "symbol()": "95d89b41",
              "tickLower()": "59c4f905",
              "tickSpacing()": "d0c93a7c",
              "tickUpper()": "55b812a8",
              "token0()": "0dfe1681",
              "token1()": "d21220a7",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "uniswapV3MintCallback(uint256,uint256,bytes)": "d3487997"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ExcessiveSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsuccessfulTransfer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"_fee\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Desired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Desired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount0Min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Min\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"position\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sqrtRatioAX96\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"_sqrtPriceA96\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sqrtRatioBX96\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"_sqrtPriceBX96\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickLower\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"_tickLower\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"_tickSpacing\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickUpper\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"_tickUpper\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_token0\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Owed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Owed\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"uniswapV3MintCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"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.\"},\"approve(address,uint256)\":{\"details\":\"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.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"burn(uint128,uint256,uint256,address)\":{\"params\":{\"amount0Min\":\"The minimum amount of token0 we want to send to the recipient (to)\",\"amount1Min\":\"The minimum amount of token1 we want to send to the recipient (to)\",\"liquidity\":\"The amount of liquidity to be burned\",\"to\":\"The address that will receive the due fees\"},\"returns\":{\"amount0\":\"The calculated amount of token0 that will be sent to the recipient\",\"amount1\":\"The calculated amount of token1 that will be sent to the recipient\"}},\"collect()\":{\"details\":\"The collected fees will be sent to governance\",\"returns\":{\"amount0\":\"The amount of fees collected in token0\",\"amount1\":\"The amount of fees collected in token1\"}},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"factory()\":{\"returns\":{\"_factory\":\"The address of the PairManager Factory\"}},\"fee()\":{\"returns\":{\"_fee\":\"The fee of the Uniswap pool passed into the constructor\"}},\"governance()\":{\"returns\":{\"_governance\":\"The governance addresss\"}},\"mint(uint256,uint256,uint256,uint256,address)\":{\"details\":\"Triggers UniV3PairManager#uniswapV3MintCallback\",\"params\":{\"amount0Desired\":\"The amount of token0 we would like to provide\",\"amount0Min\":\"The minimum amount of token0 we want to provide\",\"amount1Desired\":\"The amount of token1 we would like to provide\",\"amount1Min\":\"The minimum amount of token1 we want to provide\",\"to\":\"The address to which the kLP tokens are going to be minted to\"},\"returns\":{\"liquidity\":\"kLP tokens sent in exchange for the provision of tokens\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"pendingGovernance()\":{\"returns\":{\"_pendingGovernance\":\"The pendingGovernance addresss\"}},\"pool()\":{\"returns\":{\"_pool\":\"The address of the pool\"}},\"position()\":{\"returns\":{\"feeGrowthInside0LastX128\":\"The fee growth of token0 as of the last action on the individual position\",\"feeGrowthInside1LastX128\":\"The fee growth of token1 as of the last action on the individual position\",\"liquidity\":\"The amount of liquidity provided to the UniswapV3 pool by the pair manager\",\"tokensOwed0\":\"The uncollected amount of token0 owed to the position as of the last computation\",\"tokensOwed1\":\"The uncollected amount of token1 owed to the position as of the last computation\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}},\"sqrtRatioAX96()\":{\"returns\":{\"_sqrtPriceA96\":\"A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)         at the lowest tick\"}},\"sqrtRatioBX96()\":{\"returns\":{\"_sqrtPriceBX96\":\"A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)         at the highest tick\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"tickLower()\":{\"returns\":{\"_tickLower\":\"The lower tick in the Uniswap's curve\"}},\"tickSpacing()\":{\"returns\":{\"_tickSpacing\":\"The pair tick spacing\"}},\"tickUpper()\":{\"returns\":{\"_tickUpper\":\"The highest tick in the Uniswap's curve\"}},\"token0()\":{\"returns\":{\"_token0\":\"The address of token0\"}},\"token1()\":{\"returns\":{\"_token1\":\"The address of token1\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"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.\"},\"uniswapV3MintCallback(uint256,uint256,bytes)\":{\"params\":{\"amount0Owed\":\"The amount of token0 due to the pool for the minted liquidity\",\"amount1Owed\":\"The amount of token1 due to the pool for the minted liquidity\",\"data\":\"The encoded token0, token1, fee (_poolKey) and the payer (msg.sender) of the IUniV3PairManager#mint function\"}}},\"title\":\"Pair Manager contract\",\"version\":1},\"userdoc\":{\"errors\":{\"ExcessiveSlippage()\":[{\"notice\":\"Throws when the slippage exceeds what the user is comfortable with\"}],\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}],\"OnlyPool()\":[{\"notice\":\"Throws when the caller of the function is not the pool\"}],\"UnsuccessfulTransfer()\":[{\"notice\":\"Throws when a transfer is unsuccessful\"}]},\"events\":{\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"factory()\":{\"notice\":\"Address of the factory from which the pair manager was created\"},\"fee()\":{\"notice\":\"The fee of the Uniswap pool passed into the constructor\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"mint(uint256,uint256,uint256,uint256,address)\":{\"notice\":\"Mints kLP tokens to an address according to the liquidity the msg.sender provides to the UniswapV3 pool\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"pool()\":{\"notice\":\"Address of the pool from which the Keep3r pair manager will interact with\"},\"position()\":{\"notice\":\"Returns the pair manager's position in the corresponding UniswapV3 pool\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"},\"sqrtRatioAX96()\":{\"notice\":\"The sqrtRatioAX96 at the lowest tick (-887200) of the Uniswap pool\"},\"sqrtRatioBX96()\":{\"notice\":\"The sqrtRatioBX96 at the highest tick (887200) of the Uniswap pool\"},\"tickLower()\":{\"notice\":\"Lowest tick in the Uniswap's curve\"},\"tickSpacing()\":{\"notice\":\"The pair tick spacing\"},\"tickUpper()\":{\"notice\":\"Highest tick in the Uniswap's curve\"},\"token0()\":{\"notice\":\"Token0 of the pool\"},\"token1()\":{\"notice\":\"Token1 of the pool\"},\"uniswapV3MintCallback(uint256,uint256,bytes)\":{\"notice\":\"This function is called after a user calls IUniV3PairManager#mint function         It ensures that any tokens owed to the pool are paid by the msg.sender of IUniV3PairManager#mint function\"}},\"notice\":\"Creates a UniswapV3 position, and tokenizes in an ERC20 manner         so that the user can use it as liquidity for a Keep3rJob\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/IUniV3PairManager.sol\":\"IUniV3PairManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"solidity/contracts/libraries/PoolAddress.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-2.0-or-later\\npragma solidity >=0.8.4 <0.9.0;\\n\\nlibrary PoolAddress {\\n  struct PoolKey {\\n    address token0;\\n    address token1;\\n    uint24 fee;\\n  }\\n}\\n\",\"keccak256\":\"0x68b07a437302c14ff93ebaabfb49f4fa70263cfbb19bf15446ddfcb91eb5a5e6\",\"license\":\"GPL-2.0-or-later\"},\"solidity/interfaces/IPairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n/// @title  Pair Manager interface\\n/// @notice Generic interface for Keep3r liquidity pools (kLP)\\ninterface IPairManager is IERC20Metadata {\\n  /// @notice Address of the factory from which the pair manager was created\\n  /// @return _factory The address of the PairManager Factory\\n  function factory() external view returns (address _factory);\\n\\n  /// @notice Address of the pool from which the Keep3r pair manager will interact with\\n  /// @return _pool The address of the pool\\n  function pool() external view returns (address _pool);\\n\\n  /// @notice Token0 of the pool\\n  /// @return _token0 The address of token0\\n  function token0() external view returns (address _token0);\\n\\n  /// @notice Token1 of the pool\\n  /// @return _token1 The address of token1\\n  function token1() external view returns (address _token1);\\n}\\n\",\"keccak256\":\"0x345c312b340c5775fb8f68d89ce851c7f75522940bd9bc64f2301a3f8312636a\",\"license\":\"MIT\"},\"solidity/interfaces/IUniV3PairManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IPairManager.sol';\\nimport '../contracts/libraries/PoolAddress.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\nimport './peripherals/IGovernable.sol';\\n\\n/// @title Pair Manager contract\\n/// @notice Creates a UniswapV3 position, and tokenizes in an ERC20 manner\\n///         so that the user can use it as liquidity for a Keep3rJob\\ninterface IUniV3PairManager is IGovernable, IPairManager {\\n  // Structs\\n\\n  /// @notice The data to be decoded by the UniswapV3MintCallback function\\n  struct MintCallbackData {\\n    PoolAddress.PoolKey _poolKey; // Struct that contains token0, token1, and fee of the pool passed into the constructor\\n    address payer; // The address of the payer, which will be the msg.sender of the mint function\\n  }\\n\\n  // Variables\\n\\n  /// @notice The fee of the Uniswap pool passed into the constructor\\n  /// @return _fee The fee of the Uniswap pool passed into the constructor\\n  function fee() external view returns (uint24 _fee);\\n\\n  /// @notice Highest tick in the Uniswap's curve\\n  /// @return _tickUpper The highest tick in the Uniswap's curve\\n  function tickUpper() external view returns (int24 _tickUpper);\\n\\n  /// @notice Lowest tick in the Uniswap's curve\\n  /// @return _tickLower The lower tick in the Uniswap's curve\\n  function tickLower() external view returns (int24 _tickLower);\\n\\n  /// @notice The pair tick spacing\\n  /// @return _tickSpacing The pair tick spacing\\n  function tickSpacing() external view returns (int24 _tickSpacing);\\n\\n  /// @notice The sqrtRatioAX96 at the lowest tick (-887200) of the Uniswap pool\\n  /// @return _sqrtPriceA96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the lowest tick\\n  function sqrtRatioAX96() external view returns (uint160 _sqrtPriceA96);\\n\\n  /// @notice The sqrtRatioBX96 at the highest tick (887200) of the Uniswap pool\\n  /// @return _sqrtPriceBX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\\n  ///         at the highest tick\\n  function sqrtRatioBX96() external view returns (uint160 _sqrtPriceBX96);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the pool\\n  error OnlyPool();\\n\\n  /// @notice Throws when the slippage exceeds what the user is comfortable with\\n  error ExcessiveSlippage();\\n\\n  /// @notice Throws when a transfer is unsuccessful\\n  error UnsuccessfulTransfer();\\n\\n  // Methods\\n\\n  /// @notice This function is called after a user calls IUniV3PairManager#mint function\\n  ///         It ensures that any tokens owed to the pool are paid by the msg.sender of IUniV3PairManager#mint function\\n  /// @param amount0Owed The amount of token0 due to the pool for the minted liquidity\\n  /// @param amount1Owed The amount of token1 due to the pool for the minted liquidity\\n  /// @param data The encoded token0, token1, fee (_poolKey) and the payer (msg.sender) of the IUniV3PairManager#mint function\\n  function uniswapV3MintCallback(\\n    uint256 amount0Owed,\\n    uint256 amount1Owed,\\n    bytes calldata data\\n  ) external;\\n\\n  /// @notice Mints kLP tokens to an address according to the liquidity the msg.sender provides to the UniswapV3 pool\\n  /// @dev Triggers UniV3PairManager#uniswapV3MintCallback\\n  /// @param amount0Desired The amount of token0 we would like to provide\\n  /// @param amount1Desired The amount of token1 we would like to provide\\n  /// @param amount0Min The minimum amount of token0 we want to provide\\n  /// @param amount1Min The minimum amount of token1 we want to provide\\n  /// @param to The address to which the kLP tokens are going to be minted to\\n  /// @return liquidity kLP tokens sent in exchange for the provision of tokens\\n  function mint(\\n    uint256 amount0Desired,\\n    uint256 amount1Desired,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external returns (uint128 liquidity);\\n\\n  /// @notice Returns the pair manager's position in the corresponding UniswapV3 pool\\n  /// @return liquidity The amount of liquidity provided to the UniswapV3 pool by the pair manager\\n  /// @return feeGrowthInside0LastX128 The fee growth of token0 as of the last action on the individual position\\n  /// @return feeGrowthInside1LastX128 The fee growth of token1 as of the last action on the individual position\\n  /// @return tokensOwed0 The uncollected amount of token0 owed to the position as of the last computation\\n  /// @return tokensOwed1 The uncollected amount of token1 owed to the position as of the last computation\\n  function position()\\n    external\\n    view\\n    returns (\\n      uint128 liquidity,\\n      uint256 feeGrowthInside0LastX128,\\n      uint256 feeGrowthInside1LastX128,\\n      uint128 tokensOwed0,\\n      uint128 tokensOwed1\\n    );\\n\\n  /// @notice Calls the UniswapV3 pool's collect function, which collects up to a maximum amount of fees\\n  //          owed to a specific position to the recipient, in this case, that recipient is the pair manager\\n  /// @dev The collected fees will be sent to governance\\n  /// @return amount0 The amount of fees collected in token0\\n  /// @return amount1 The amount of fees collected in token1\\n  function collect() external returns (uint256 amount0, uint256 amount1);\\n\\n  /// @notice Burns the corresponding amount of kLP tokens from the msg.sender and withdraws the specified liquidity\\n  //          in the entire range\\n  /// @param liquidity The amount of liquidity to be burned\\n  /// @param amount0Min The minimum amount of token0 we want to send to the recipient (to)\\n  /// @param amount1Min The minimum amount of token1 we want to send to the recipient (to)\\n  /// @param to The address that will receive the due fees\\n  /// @return amount0 The calculated amount of token0 that will be sent to the recipient\\n  /// @return amount1 The calculated amount of token1 that will be sent to the recipient\\n  function burn(\\n    uint128 liquidity,\\n    uint256 amount0Min,\\n    uint256 amount1Min,\\n    address to\\n  ) external returns (uint256 amount0, uint256 amount1);\\n}\\n\",\"keccak256\":\"0x5d5793eaa4ed95d51d6185af159921fca68a3020b151bde710e1a6f58f288cfe\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "ExcessiveSlippage()": [
                {
                  "notice": "Throws when the slippage exceeds what the user is comfortable with"
                }
              ],
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ],
              "OnlyPool()": [
                {
                  "notice": "Throws when the caller of the function is not the pool"
                }
              ],
              "UnsuccessfulTransfer()": [
                {
                  "notice": "Throws when a transfer is unsuccessful"
                }
              ]
            },
            "events": {
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "factory()": {
                "notice": "Address of the factory from which the pair manager was created"
              },
              "fee()": {
                "notice": "The fee of the Uniswap pool passed into the constructor"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "mint(uint256,uint256,uint256,uint256,address)": {
                "notice": "Mints kLP tokens to an address according to the liquidity the msg.sender provides to the UniswapV3 pool"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "pool()": {
                "notice": "Address of the pool from which the Keep3r pair manager will interact with"
              },
              "position()": {
                "notice": "Returns the pair manager's position in the corresponding UniswapV3 pool"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              },
              "sqrtRatioAX96()": {
                "notice": "The sqrtRatioAX96 at the lowest tick (-887200) of the Uniswap pool"
              },
              "sqrtRatioBX96()": {
                "notice": "The sqrtRatioBX96 at the highest tick (887200) of the Uniswap pool"
              },
              "tickLower()": {
                "notice": "Lowest tick in the Uniswap's curve"
              },
              "tickSpacing()": {
                "notice": "The pair tick spacing"
              },
              "tickUpper()": {
                "notice": "Highest tick in the Uniswap's curve"
              },
              "token0()": {
                "notice": "Token0 of the pool"
              },
              "token1()": {
                "notice": "Token1 of the pool"
              },
              "uniswapV3MintCallback(uint256,uint256,bytes)": {
                "notice": "This function is called after a user calls IUniV3PairManager#mint function         It ensures that any tokens owed to the pool are paid by the msg.sender of IUniV3PairManager#mint function"
              }
            },
            "notice": "Creates a UniswapV3 position, and tokenizes in an ERC20 manner         so that the user can use it as liquidity for a Keep3rJob",
            "version": 1
          }
        }
      },
      "solidity/interfaces/external/IKeep3rV1.sol": {
        "IKeep3rV1": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_credit",
                  "type": "uint256"
                }
              ],
              "name": "ApplyCredit",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_delegator",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_fromDelegate",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_toDelegate",
                  "type": "address"
                }
              ],
              "name": "DelegateChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_delegate",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_previousBalance",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_newBalance",
                  "type": "uint256"
                }
              ],
              "name": "DelegateVotesChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "JobAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "JobRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_activated",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bond",
                  "type": "uint256"
                }
              ],
              "name": "KeeperBonded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_active",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bond",
                  "type": "uint256"
                }
              ],
              "name": "KeeperBonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                }
              ],
              "name": "KeeperDispute",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                }
              ],
              "name": "KeeperResolved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_slash",
                  "type": "uint256"
                }
              ],
              "name": "KeeperSlashed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_deactive",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bond",
                  "type": "uint256"
                }
              ],
              "name": "KeeperUnbonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_deactivated",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bond",
                  "type": "uint256"
                }
              ],
              "name": "KeeperUnbound",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "KeeperWorked",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_credit",
                  "type": "uint256"
                }
              ],
              "name": "RemoveJob",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_credit",
                  "type": "uint256"
                }
              ],
              "name": "SubmitJob",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_creditor",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_block",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_credit",
                  "type": "uint256"
                }
              ],
              "name": "UnbondJob",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "BASE",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "BOND",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "DELEGATION_TYPEHASH",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "DOMAINSEPARATOR",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "DOMAIN_TYPEHASH",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "ETH",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "FEE",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "KPRH",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "LIQUIDITYBOND",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "PERMIT_TYPEHASH",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "UNBOND",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "activate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addCredit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "addCreditETH",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "addJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addKPRCredit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_voter",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addVotes",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "applyCreditToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "blacklist",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "bond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_user",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "bondings",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "burn",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_user",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_account",
                  "type": "address"
                },
                {
                  "internalType": "uint32",
                  "name": "_checkpoint",
                  "type": "uint32"
                }
              ],
              "name": "checkpoints",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "uint32",
                      "name": "fromBlock",
                      "type": "uint32"
                    },
                    {
                      "internalType": "uint256",
                      "name": "votes",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rV1.Checkpoint",
                  "name": "",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                }
              ],
              "name": "credits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_delegator",
                  "type": "address"
                }
              ],
              "name": "delegates",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_account",
                  "type": "address"
                }
              ],
              "name": "getCurrentVotes",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getJobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getKeepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_minBond",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_earned",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_age",
                  "type": "uint256"
                }
              ],
              "name": "isBondedKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "isKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_minBond",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_earned",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_age",
                  "type": "uint256"
                }
              ],
              "name": "isMinKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_index",
                  "type": "uint256"
                }
              ],
              "name": "jobList",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobProposalDelay",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_index",
                  "type": "uint256"
                }
              ],
              "name": "keeperList",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "lastJob",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "liquidityAccepted",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "liquidityAmountsUnbonding",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "liquidityApplied",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_index",
                  "type": "uint256"
                }
              ],
              "name": "liquidityPairs",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "liquidityProvided",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "liquidityUnbonding",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "mint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_user",
                  "type": "address"
                }
              ],
              "name": "nonces",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_account",
                  "type": "address"
                }
              ],
              "name": "numCheckpoints",
              "outputs": [
                {
                  "internalType": "uint32",
                  "name": "",
                  "type": "uint32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pairs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "pendingbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_deadline",
                  "type": "uint256"
                },
                {
                  "internalType": "uint8",
                  "name": "_v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "_r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "_s",
                  "type": "bytes32"
                }
              ],
              "name": "permit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "receipt",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "receiptETH",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "removeJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "removeLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_voter",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "removeVotes",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "revoke",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonded",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_delegator",
                  "type": "address"
                }
              ],
              "name": "votes",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "worked",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "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."
              },
              "approve(address,uint256)": {
                "details": "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."
              },
              "balanceOf(address)": {
                "details": "Returns the amount of tokens owned by `account`."
              },
              "decimals()": {
                "details": "Returns the decimals places of the token."
              },
              "name()": {
                "details": "Returns the name of the token."
              },
              "symbol()": {
                "details": "Returns the symbol of the token."
              },
              "totalSupply()": {
                "details": "Returns the amount of tokens in existence."
              },
              "transfer(address,uint256)": {
                "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
              },
              "transferFrom(address,address,uint256)": {
                "details": "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."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "BASE()": "ec342ad0",
              "BOND()": "c1c1d218",
              "DELEGATION_TYPEHASH()": "e7a324dc",
              "DOMAINSEPARATOR()": "1778e29c",
              "DOMAIN_TYPEHASH()": "20606b70",
              "ETH()": "8322fff2",
              "FEE()": "c57981b5",
              "KPRH()": "09aff02b",
              "LIQUIDITYBOND()": "1df0de13",
              "PERMIT_TYPEHASH()": "30adf81f",
              "UNBOND()": "603b4d14",
              "acceptGovernance()": "238efcbc",
              "activate(address)": "1c5a9d9c",
              "addCredit(address,address,uint256)": "88b4ac83",
              "addCreditETH(address)": "6dab5dcf",
              "addJob(address)": "c5198abc",
              "addKPRCredit(address,uint256)": "d8ae6faf",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addVotes(address,uint256)": "de63298d",
              "allowance(address,address)": "dd62ed3e",
              "applyCreditToJob(address,address,address)": "4395d8ba",
              "approve(address,uint256)": "095ea7b3",
              "approveLiquidity(address)": "b600702a",
              "balanceOf(address)": "70a08231",
              "blacklist(address)": "f9f92be4",
              "bond(address,uint256)": "a515366a",
              "bondings(address,address)": "37feca84",
              "bonds(address,address)": "a39744b5",
              "burn(uint256)": "42966c68",
              "canWithdrawAfter(address,address)": "07b435c2",
              "checkpoints(address,uint32)": "f1127ed8",
              "credits(address,address)": "637cd7f0",
              "decimals()": "313ce567",
              "delegates(address)": "587cde1e",
              "dispute(address)": "f75f9f7b",
              "disputes(address)": "b0103b1a",
              "firstSeen(address)": "e326ac43",
              "getCurrentVotes(address)": "b4b5ea57",
              "getJobs()": "68581ebd",
              "getKeepers()": "b105e39f",
              "governance()": "5aa6e675",
              "isBondedKeeper(address,address,uint256,uint256,uint256)": "f9d46cf2",
              "isKeeper(address)": "6ba42aaa",
              "isMinKeeper(address,uint256,uint256,uint256)": "1ff5f3da",
              "jobList(uint256)": "0c33c522",
              "jobProposalDelay(address)": "7724ff68",
              "jobs(address)": "3d1f0bb9",
              "keeperList(uint256)": "ec4515dd",
              "keepers(address)": "3bbd64bc",
              "lastJob(address)": "d454019d",
              "liquidityAccepted(address)": "eb421f3b",
              "liquidityAmount(address,address,address)": "1992d206",
              "liquidityAmountsUnbonding(address,address,address)": "83baa693",
              "liquidityApplied(address,address,address)": "fede7008",
              "liquidityPairs(uint256)": "1b7a1fb2",
              "liquidityProvided(address,address,address)": "def70844",
              "liquidityUnbonding(address,address,address)": "bb49096d",
              "mint(uint256)": "a0712d68",
              "name()": "06fdde03",
              "nonces(address)": "7ecebe00",
              "numCheckpoints(address)": "6fcfff45",
              "pairs()": "ffb0a4a0",
              "pendingGovernance()": "f39c38a0",
              "pendingUnbonds(address,address)": "21040b01",
              "pendingbonds(address,address)": "deac3541",
              "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf",
              "receipt(address,address,uint256)": "8d9acd2e",
              "receiptETH(address,uint256)": "2119a62a",
              "removeJob(address)": "80711989",
              "removeLiquidityFromJob(address,address)": "603c6860",
              "removeVotes(address,uint256)": "ce6a0880",
              "resolve(address)": "55ea6c47",
              "revoke(address)": "74a8f103",
              "revokeLiquidity(address)": "64bb43ee",
              "setGovernance(address)": "ab033ea9",
              "setKeep3rHelper(address)": "72da828a",
              "slash(address,address,uint256)": "e74f8239",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "unbond(address,uint256)": "a5d059ca",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "votes(address)": "d8bff5a5",
              "withdraw(address)": "51cff8d9",
              "workCompleted(address)": "1b44555e",
              "worked(address)": "5feeb794"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_credit\",\"type\":\"uint256\"}],\"name\":\"ApplyCredit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_fromDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_toDelegate\",\"type\":\"address\"}],\"name\":\"DelegateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previousBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newBalance\",\"type\":\"uint256\"}],\"name\":\"DelegateVotesChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"JobAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"JobRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_activated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bond\",\"type\":\"uint256\"}],\"name\":\"KeeperBonded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_active\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bond\",\"type\":\"uint256\"}],\"name\":\"KeeperBonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"KeeperDispute\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"KeeperResolved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_slash\",\"type\":\"uint256\"}],\"name\":\"KeeperSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_deactive\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bond\",\"type\":\"uint256\"}],\"name\":\"KeeperUnbonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_deactivated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bond\",\"type\":\"uint256\"}],\"name\":\"KeeperUnbound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"KeeperWorked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_credit\",\"type\":\"uint256\"}],\"name\":\"RemoveJob\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_credit\",\"type\":\"uint256\"}],\"name\":\"SubmitJob\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_creditor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_credit\",\"type\":\"uint256\"}],\"name\":\"UnbondJob\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BOND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DELEGATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAINSEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KPRH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LIQUIDITYBOND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNBOND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addCredit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"addCreditETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"addJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addKPRCredit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addVotes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"applyCreditToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"blacklist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"bondings\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_checkpoint\",\"type\":\"uint32\"}],\"name\":\"checkpoints\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fromBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"votes\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rV1.Checkpoint\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"}],\"name\":\"credits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"getCurrentVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getJobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getKeepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_earned\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_age\",\"type\":\"uint256\"}],\"name\":\"isBondedKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"isKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_earned\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_age\",\"type\":\"uint256\"}],\"name\":\"isMinKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"jobList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobProposalDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"keeperList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"lastJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"liquidityAccepted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"liquidityAmountsUnbonding\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"liquidityApplied\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"liquidityPairs\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"liquidityProvided\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"liquidityUnbonding\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"numCheckpoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pairs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"pendingbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"receipt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"receiptETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"removeJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"removeLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"removeVotes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonded\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"votes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"worked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"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.\"},\"approve(address,uint256)\":{\"details\":\"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.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/external/IKeep3rV1.sol\":\"IKeep3rV1\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x83fe24f5c04a56091e50f4a345ff504c8bff658a76d4c43b16878c8f940c53b2\",\"license\":\"MIT\"},\"solidity/interfaces/external/IKeep3rV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\nimport '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol';\\n\\n// solhint-disable func-name-mixedcase\\ninterface IKeep3rV1 is IERC20, IERC20Metadata {\\n  // Structs\\n  struct Checkpoint {\\n    uint32 fromBlock;\\n    uint256 votes;\\n  }\\n\\n  // Events\\n  event DelegateChanged(address indexed _delegator, address indexed _fromDelegate, address indexed _toDelegate);\\n  event DelegateVotesChanged(address indexed _delegate, uint256 _previousBalance, uint256 _newBalance);\\n  event SubmitJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event ApplyCredit(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event RemoveJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event UnbondJob(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _block, uint256 _credit);\\n  event JobAdded(address indexed _job, uint256 _block, address _governance);\\n  event JobRemoved(address indexed _job, uint256 _block, address _governance);\\n  event KeeperWorked(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _block, uint256 _amount);\\n  event KeeperBonding(address indexed _keeper, uint256 _block, uint256 _active, uint256 _bond);\\n  event KeeperBonded(address indexed _keeper, uint256 _block, uint256 _activated, uint256 _bond);\\n  event KeeperUnbonding(address indexed _keeper, uint256 _block, uint256 _deactive, uint256 _bond);\\n  event KeeperUnbound(address indexed _keeper, uint256 _block, uint256 _deactivated, uint256 _bond);\\n  event KeeperSlashed(address indexed _keeper, address indexed _slasher, uint256 _block, uint256 _slash);\\n  event KeeperDispute(address indexed _keeper, uint256 _block);\\n  event KeeperResolved(address indexed _keeper, uint256 _block);\\n  event TokenCreditAddition(address indexed _credit, address indexed _job, address indexed _creditor, uint256 _block, uint256 _amount);\\n\\n  // Variables\\n  function KPRH() external returns (address);\\n\\n  function delegates(address _delegator) external view returns (address);\\n\\n  function checkpoints(address _account, uint32 _checkpoint) external view returns (Checkpoint memory);\\n\\n  function numCheckpoints(address _account) external view returns (uint32);\\n\\n  function DOMAIN_TYPEHASH() external returns (bytes32);\\n\\n  function DOMAINSEPARATOR() external returns (bytes32);\\n\\n  function DELEGATION_TYPEHASH() external returns (bytes32);\\n\\n  function PERMIT_TYPEHASH() external returns (bytes32);\\n\\n  function nonces(address _user) external view returns (uint256);\\n\\n  function BOND() external returns (uint256);\\n\\n  function UNBOND() external returns (uint256);\\n\\n  function LIQUIDITYBOND() external returns (uint256);\\n\\n  function FEE() external returns (uint256);\\n\\n  function BASE() external returns (uint256);\\n\\n  function ETH() external returns (address);\\n\\n  function bondings(address _user, address _bonding) external view returns (uint256);\\n\\n  function canWithdrawAfter(address _user, address _bonding) external view returns (uint256);\\n\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function pendingbonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function bonds(address _keeper, address _bonding) external view returns (uint256);\\n\\n  function votes(address _delegator) external view returns (uint256);\\n\\n  function firstSeen(address _keeper) external view returns (uint256);\\n\\n  function disputes(address _keeper) external view returns (bool);\\n\\n  function lastJob(address _keeper) external view returns (uint256);\\n\\n  function workCompleted(address _keeper) external view returns (uint256);\\n\\n  function jobs(address _job) external view returns (bool);\\n\\n  function credits(address _job, address _credit) external view returns (uint256);\\n\\n  function liquidityProvided(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmountsUnbonding(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function jobProposalDelay(address _job) external view returns (uint256);\\n\\n  function liquidityApplied(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function liquidityAmount(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external view returns (uint256);\\n\\n  function keepers(address _keeper) external view returns (bool);\\n\\n  function blacklist(address _keeper) external view returns (bool);\\n\\n  function keeperList(uint256 _index) external view returns (address);\\n\\n  function jobList(uint256 _index) external view returns (address);\\n\\n  function governance() external returns (address);\\n\\n  function pendingGovernance() external returns (address);\\n\\n  function liquidityAccepted(address _liquidity) external view returns (bool);\\n\\n  function liquidityPairs(uint256 _index) external view returns (address);\\n\\n  // Methods\\n  function getCurrentVotes(address _account) external view returns (uint256);\\n\\n  function addCreditETH(address _job) external payable;\\n\\n  function addCredit(\\n    address _credit,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function pairs() external view returns (address[] memory);\\n\\n  function addLiquidityToJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function applyCreditToJob(\\n    address _provider,\\n    address _liquidity,\\n    address _job\\n  ) external;\\n\\n  function unbondLiquidityFromJob(\\n    address _liquidity,\\n    address _job,\\n    uint256 _amount\\n  ) external;\\n\\n  function removeLiquidityFromJob(address _liquidity, address _job) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function burn(uint256 _amount) external;\\n\\n  function worked(address _keeper) external;\\n\\n  function receipt(\\n    address _credit,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function receiptETH(address _keeper, uint256 _amount) external;\\n\\n  function addJob(address _job) external;\\n\\n  function getJobs() external view returns (address[] memory);\\n\\n  function removeJob(address _job) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function setGovernance(address _governance) external;\\n\\n  function acceptGovernance() external;\\n\\n  function isKeeper(address _keeper) external returns (bool);\\n\\n  function isMinKeeper(\\n    address _keeper,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool);\\n\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  function getKeepers() external view returns (address[] memory);\\n\\n  function activate(address _bonding) external;\\n\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function withdraw(address _bonding) external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xa9806cd6666ab1b7375ef72446964a72397fd4cefc7cc8c5b37caa7c50df0246\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "solidity/interfaces/external/IKeep3rV1Proxy.sol": {
        "IKeep3rV1Proxy": {
          "abi": [
            {
              "inputs": [],
              "name": "Cooldown",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoDrawableAmount",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyMinter",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "acceptKeep3rV1Governance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "addJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addKPRCredit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "addRecipient",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_voter",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addVotes",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "caps",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "draw",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "mint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "mint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "minter",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "next",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "recipients",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "recipientsCaps",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "recipient",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "caps",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rV1Proxy.Recipient[]",
                  "name": "",
                  "type": "tuple[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "removeJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "removeRecipient",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_voter",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "removeVotes",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "revoke",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Governance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_minter",
                  "type": "address"
                }
              ],
              "name": "setMinter",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonded",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "governance()": {
                "returns": {
                  "_governance": "The governance addresss"
                }
              },
              "pendingGovernance()": {
                "returns": {
                  "_pendingGovernance": "The pendingGovernance addresss"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "acceptKeep3rV1Governance()": "3619cb72",
              "addJob(address)": "c5198abc",
              "addKPRCredit(address,uint256)": "d8ae6faf",
              "addRecipient(address,uint256)": "f7982243",
              "addVotes(address,uint256)": "de63298d",
              "approveLiquidity(address)": "b600702a",
              "caps(address)": "66d97b21",
              "dispute(address)": "f75f9f7b",
              "draw()": "0eecae21",
              "governance()": "5aa6e675",
              "keep3rV1()": "1ef94b91",
              "mint(address,uint256)": "40c10f19",
              "mint(uint256)": "a0712d68",
              "minter()": "07546172",
              "next(address)": "ab73e316",
              "pendingGovernance()": "f39c38a0",
              "recipients()": "0e57d4ce",
              "recipientsCaps()": "ba9b4d65",
              "removeJob(address)": "80711989",
              "removeRecipient(address)": "12a29198",
              "removeVotes(address,uint256)": "ce6a0880",
              "resolve(address)": "55ea6c47",
              "revoke(address)": "74a8f103",
              "revokeLiquidity(address)": "64bb43ee",
              "setGovernance(address)": "ab033ea9",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Governance(address)": "0770f809",
              "setMinter(address)": "fca3b5aa",
              "slash(address,address,uint256)": "e74f8239"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Cooldown\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoDrawableAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyMinter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptKeep3rV1Governance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"addJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addKPRCredit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"addRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addVotes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"caps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"draw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"next\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recipients\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recipientsCaps\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"caps\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rV1Proxy.Recipient[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"removeJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"removeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"removeVotes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Governance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"setMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonded\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"governance()\":{\"returns\":{\"_governance\":\"The governance addresss\"}},\"pendingGovernance()\":{\"returns\":{\"_pendingGovernance\":\"The pendingGovernance addresss\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}]},\"events\":{\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/external/IKeep3rV1Proxy.sol\":\"IKeep3rV1Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/external/IKeep3rV1Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '../peripherals/IGovernable.sol';\\n\\ninterface IKeep3rV1Proxy is IGovernable {\\n  // Structs\\n  struct Recipient {\\n    address recipient;\\n    uint256 caps;\\n  }\\n\\n  // Variables\\n  function keep3rV1() external view returns (address);\\n\\n  function minter() external view returns (address);\\n\\n  function next(address) external view returns (uint256);\\n\\n  function caps(address) external view returns (uint256);\\n\\n  function recipients() external view returns (address[] memory);\\n\\n  function recipientsCaps() external view returns (Recipient[] memory);\\n\\n  // Errors\\n  error Cooldown();\\n  error NoDrawableAmount();\\n  error ZeroAddress();\\n  error OnlyMinter();\\n\\n  // Methods\\n  function addRecipient(address recipient, uint256 amount) external;\\n\\n  function removeRecipient(address recipient) external;\\n\\n  function draw() external returns (uint256 _amount);\\n\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  function setMinter(address _minter) external;\\n\\n  function mint(uint256 _amount) external;\\n\\n  function mint(address _account, uint256 _amount) external;\\n\\n  function setKeep3rV1Governance(address _governance) external;\\n\\n  function acceptKeep3rV1Governance() external;\\n\\n  function dispute(address _keeper) external;\\n\\n  function slash(\\n    address _bonded,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n\\n  function revoke(address _keeper) external;\\n\\n  function resolve(address _keeper) external;\\n\\n  function addJob(address _job) external;\\n\\n  function removeJob(address _job) external;\\n\\n  function addKPRCredit(address _job, uint256 _amount) external;\\n\\n  function approveLiquidity(address _liquidity) external;\\n\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  function addVotes(address _voter, uint256 _amount) external;\\n\\n  function removeVotes(address _voter, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xfb2e81fe347b39aabce849ef2d42c6df846b7ef0ed5ae952c85bbb708da99408\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ]
            },
            "events": {
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/interfaces/external/IWeth9.sol": {
        "IWeth9": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "deposit",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "allowance(address,address)": {
                "details": "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."
              },
              "approve(address,uint256)": {
                "details": "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."
              },
              "balanceOf(address)": {
                "details": "Returns the amount of tokens owned by `account`."
              },
              "totalSupply()": {
                "details": "Returns the amount of tokens in existence."
              },
              "transfer(address,uint256)": {
                "details": "Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
              },
              "transferFrom(address,address,uint256)": {
                "details": "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."
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "deposit()": "d0e30db0",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "withdraw(uint256)": "2e1a7d4d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"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.\"},\"approve(address,uint256)\":{\"details\":\"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.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/external/IWeth9.sol\":\"IWeth9\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x027b891937d20ccf213fdb9c31531574256de774bda99d3a70ecef6e1913ed2a\",\"license\":\"MIT\"},\"solidity/interfaces/external/IWeth9.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport '@openzeppelin/contracts/token/ERC20/IERC20.sol';\\n\\ninterface IWeth9 is IERC20 {\\n  function deposit() external payable;\\n\\n  function withdraw(uint256) external;\\n}\\n\",\"keccak256\":\"0x62b6fd021e9fef703f5c77705d8da9ee1967e34e00a0c8a827ee3c0f973399a5\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "solidity/interfaces/peripherals/IBaseErrors.sol": {
        "IBaseErrors": {
          "abi": [
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {},
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IBaseErrors.sol\":\"IBaseErrors\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "kind": "user",
            "methods": {},
            "version": 1
          }
        }
      },
      "solidity/interfaces/peripherals/IDustCollector.sol": {
        "IDustCollector": {
          "abi": [
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                }
              ],
              "name": "DustSent",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_to",
                  "type": "address"
                }
              ],
              "name": "sendDust",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "DustSent(address,uint256,address)": {
                "params": {
                  "_amount": "The amount of the token that will be transferred",
                  "_to": "The address which will receive the funds",
                  "_token": "The token that will be transferred"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "sendDust(address,uint256,address)": {
                "params": {
                  "_amount": "The amount of the token that will be transferred",
                  "_to": "The address that will receive the idle funds",
                  "_token": "The token that will be transferred"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "sendDust(address,uint256,address)": "966abd00"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"DustSent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"sendDust\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DustSent(address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of the token that will be transferred\",\"_to\":\"The address which will receive the funds\",\"_token\":\"The token that will be transferred\"}}},\"kind\":\"dev\",\"methods\":{\"sendDust(address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of the token that will be transferred\",\"_to\":\"The address that will receive the idle funds\",\"_token\":\"The token that will be transferred\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"DustSent(address,uint256,address)\":{\"notice\":\"Emitted when dust is sent\"}},\"kind\":\"user\",\"methods\":{\"sendDust(address,uint256,address)\":{\"notice\":\"Allows an authorized user to transfer the tokens or eth that may have been left in a contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IDustCollector.sol\":\"IDustCollector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IDustCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\ninterface IDustCollector is IBaseErrors {\\n  /// @notice Emitted when dust is sent\\n  /// @param _token The token that will be transferred\\n  /// @param _amount The amount of the token that will be transferred\\n  /// @param _to The address which will receive the funds\\n  event DustSent(address _token, uint256 _amount, address _to);\\n\\n  /// @notice Allows an authorized user to transfer the tokens or eth that may have been left in a contract\\n  /// @param _token The token that will be transferred\\n  /// @param _amount The amount of the token that will be transferred\\n  /// @param _to The address that will receive the idle funds\\n  function sendDust(\\n    address _token,\\n    uint256 _amount,\\n    address _to\\n  ) external;\\n}\\n\",\"keccak256\":\"0x38dce228111f2a3c6b26ac09c5652c3f1f184c4cfe50d11ff0958ef6a50683bb\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "DustSent(address,uint256,address)": {
                "notice": "Emitted when dust is sent"
              }
            },
            "kind": "user",
            "methods": {
              "sendDust(address,uint256,address)": {
                "notice": "Allows an authorized user to transfer the tokens or eth that may have been left in a contract"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/interfaces/peripherals/IGovernable.sol": {
        "IGovernable": {
          "abi": [
            {
              "inputs": [],
              "name": "NoGovernanceZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyGovernance",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingGovernance",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "name": "GovernanceProposal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "GovernanceSet",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernance",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_pendingGovernance",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_governance",
                  "type": "address"
                }
              ],
              "name": "setGovernance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "GovernanceProposal(address)": {
                "params": {
                  "_pendingGovernance": "Address that is proposed to be the new governance"
                }
              },
              "GovernanceSet(address)": {
                "params": {
                  "_governance": "Address of the new governance"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "governance()": {
                "returns": {
                  "_governance": "The governance addresss"
                }
              },
              "pendingGovernance()": {
                "returns": {
                  "_pendingGovernance": "The pendingGovernance addresss"
                }
              },
              "setGovernance(address)": {
                "params": {
                  "_governance": "The address being proposed as the new governance"
                }
              }
            },
            "title": "Governable contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptGovernance()": "238efcbc",
              "governance()": "5aa6e675",
              "pendingGovernance()": "f39c38a0",
              "setGovernance(address)": "ab033ea9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"NoGovernanceZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyGovernance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingGovernance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"name\":\"GovernanceProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"GovernanceSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingGovernance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_pendingGovernance\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_governance\",\"type\":\"address\"}],\"name\":\"setGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"GovernanceProposal(address)\":{\"params\":{\"_pendingGovernance\":\"Address that is proposed to be the new governance\"}},\"GovernanceSet(address)\":{\"params\":{\"_governance\":\"Address of the new governance\"}}},\"kind\":\"dev\",\"methods\":{\"governance()\":{\"returns\":{\"_governance\":\"The governance addresss\"}},\"pendingGovernance()\":{\"returns\":{\"_pendingGovernance\":\"The pendingGovernance addresss\"}},\"setGovernance(address)\":{\"params\":{\"_governance\":\"The address being proposed as the new governance\"}}},\"title\":\"Governable contract\",\"version\":1},\"userdoc\":{\"errors\":{\"NoGovernanceZeroAddress()\":[{\"notice\":\"Throws if trying to set governance to zero address\"}],\"OnlyGovernance()\":[{\"notice\":\"Throws if the caller of the function is not governance\"}],\"OnlyPendingGovernance()\":[{\"notice\":\"Throws if the caller of the function is not pendingGovernance\"}]},\"events\":{\"GovernanceProposal(address)\":{\"notice\":\"Emitted when a new governance is proposed\"},\"GovernanceSet(address)\":{\"notice\":\"Emitted when pendingGovernance accepts to be governance\"}},\"kind\":\"user\",\"methods\":{\"acceptGovernance()\":{\"notice\":\"Changes the governance from the current governance to the previously proposed address\"},\"governance()\":{\"notice\":\"Stores the governance address\"},\"pendingGovernance()\":{\"notice\":\"Stores the pendingGovernance address\"},\"setGovernance(address)\":{\"notice\":\"Proposes a new address to be governance\"}},\"notice\":\"Manages the governance role\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IGovernable.sol\":\"IGovernable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IGovernable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Governable contract\\n/// @notice Manages the governance role\\ninterface IGovernable {\\n  // Events\\n\\n  /// @notice Emitted when pendingGovernance accepts to be governance\\n  /// @param _governance Address of the new governance\\n  event GovernanceSet(address _governance);\\n\\n  /// @notice Emitted when a new governance is proposed\\n  /// @param _pendingGovernance Address that is proposed to be the new governance\\n  event GovernanceProposal(address _pendingGovernance);\\n\\n  // Errors\\n\\n  /// @notice Throws if the caller of the function is not governance\\n  error OnlyGovernance();\\n\\n  /// @notice Throws if the caller of the function is not pendingGovernance\\n  error OnlyPendingGovernance();\\n\\n  /// @notice Throws if trying to set governance to zero address\\n  error NoGovernanceZeroAddress();\\n\\n  // Variables\\n\\n  /// @notice Stores the governance address\\n  /// @return _governance The governance addresss\\n  function governance() external view returns (address _governance);\\n\\n  /// @notice Stores the pendingGovernance address\\n  /// @return _pendingGovernance The pendingGovernance addresss\\n  function pendingGovernance() external view returns (address _pendingGovernance);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be governance\\n  /// @param _governance The address being proposed as the new governance\\n  function setGovernance(address _governance) external;\\n\\n  /// @notice Changes the governance from the current governance to the previously proposed address\\n  function acceptGovernance() external;\\n}\\n\",\"keccak256\":\"0x3284624b2479bbf97c821f37c93a096dcb869b30bbf9b20d30d1800f9535452c\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "NoGovernanceZeroAddress()": [
                {
                  "notice": "Throws if trying to set governance to zero address"
                }
              ],
              "OnlyGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not governance"
                }
              ],
              "OnlyPendingGovernance()": [
                {
                  "notice": "Throws if the caller of the function is not pendingGovernance"
                }
              ]
            },
            "events": {
              "GovernanceProposal(address)": {
                "notice": "Emitted when a new governance is proposed"
              },
              "GovernanceSet(address)": {
                "notice": "Emitted when pendingGovernance accepts to be governance"
              }
            },
            "kind": "user",
            "methods": {
              "acceptGovernance()": {
                "notice": "Changes the governance from the current governance to the previously proposed address"
              },
              "governance()": {
                "notice": "Stores the governance address"
              },
              "pendingGovernance()": {
                "notice": "Stores the pendingGovernance address"
              },
              "setGovernance(address)": {
                "notice": "Proposes a new address to be governance"
              }
            },
            "notice": "Manages the governance role",
            "version": 1
          }
        }
      },
      "solidity/interfaces/peripherals/IKeep3rAccountance.sol": {
        "IKeep3rAccountance": {
          "abi": [
            {
              "inputs": [],
              "name": "JobDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnavailable",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Bonding",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_unbonding",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Unbonding",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                }
              ],
              "name": "bonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_bonds",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "canActivateAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "canWithdrawAfter",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeperOrJob",
                  "type": "address"
                }
              ],
              "name": "disputes",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_disputed",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "firstSeen",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "hasBonded",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_hasBonded",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                }
              ],
              "name": "jobTokenCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "jobs",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_jobList",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keepers",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_keeperList",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "pendingBonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_pendingBonds",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "pendingUnbonds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_pendingUnbonds",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "workCompleted",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_workCompleted",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "details": "Argument `bonding` can be the address of either a token or a liquidity",
            "events": {
              "Bonding(address,address,uint256)": {
                "params": {
                  "_amount": "The amount the keeper has bonded",
                  "_bonding": "The asset the keeper has bonded",
                  "_keeper": "The caller of Keep3rKeeperFundable#bond function"
                }
              },
              "Unbonding(address,address,uint256)": {
                "params": {
                  "_amount": "The amount being unbonded",
                  "_keeperOrJob": "The keeper or job that began the unbonding process",
                  "_unbonding": "The liquidity pair or asset being unbonded"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "bonds(address,address)": {
                "params": {
                  "_bond": "The address of the token being bonded",
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_bonds": "Amount of a certain token that a keeper has bonded"
                }
              },
              "canActivateAfter(address,address)": {
                "params": {
                  "_bonding": "The address of the token being bonded",
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_timestamp": "Time at which the bonding for a keeper can be activated"
                }
              },
              "canWithdrawAfter(address,address)": {
                "params": {
                  "_bonding": "The address of the token being unbonded",
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_timestamp": "Time at which the keeper bonds are ready to be withdrawn"
                }
              },
              "disputes(address)": {
                "params": {
                  "_keeperOrJob": "The address of the keeper or job"
                },
                "returns": {
                  "_disputed": "Whether a keeper or job has a pending dispute"
                }
              },
              "firstSeen(address)": {
                "params": {
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "timestamp": "The time at which the keeper was first registered"
                }
              },
              "hasBonded(address)": {
                "params": {
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_hasBonded": "Whether the address has ever bonded an asset"
                }
              },
              "jobTokenCredits(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_token": "The address of the token bonded"
                },
                "returns": {
                  "_amount": "The amount of token credits available for a job"
                }
              },
              "jobs()": {
                "returns": {
                  "_jobList": "Array with all the jobs in _jobs"
                }
              },
              "keepers()": {
                "returns": {
                  "_keeperList": "Array with all the keepers in _keepers"
                }
              },
              "pendingBonds(address,address)": {
                "params": {
                  "_bonding": "The address of the token being bonded",
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_pendingBonds": "Amount of a certain asset a keeper has unbonding"
                }
              },
              "pendingUnbonds(address,address)": {
                "params": {
                  "_bonding": "The address of the token being unbonded",
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_pendingUnbonds": "The amount of keeper bonds that are to be withdrawn"
                }
              },
              "workCompleted(address)": {
                "params": {
                  "_keeper": "The address of the keeper"
                },
                "returns": {
                  "_workCompleted": "Total KP3R earnings of a keeper since it started working"
                }
              }
            },
            "title": "Keep3rDisputable contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "bonds(address,address)": "a39744b5",
              "canActivateAfter(address,address)": "cd22af1b",
              "canWithdrawAfter(address,address)": "07b435c2",
              "disputes(address)": "b0103b1a",
              "firstSeen(address)": "e326ac43",
              "hasBonded(address)": "8cb22b76",
              "jobTokenCredits(address,address)": "168f92e7",
              "jobs()": "7c8fce23",
              "keepers()": "951dc22c",
              "pendingBonds(address,address)": "15006b82",
              "pendingUnbonds(address,address)": "21040b01",
              "workCompleted(address)": "1b44555e"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"JobDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnavailable\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Bonding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_unbonding\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Unbonding\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"}],\"name\":\"bonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_bonds\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"canActivateAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"canWithdrawAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeperOrJob\",\"type\":\"address\"}],\"name\":\"disputes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_disputed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"firstSeen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"hasBonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_hasBonded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"jobTokenCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jobs\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_jobList\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keepers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_keeperList\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"pendingBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_pendingBonds\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"pendingUnbonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_pendingUnbonds\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"workCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_workCompleted\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Argument `bonding` can be the address of either a token or a liquidity\",\"events\":{\"Bonding(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount the keeper has bonded\",\"_bonding\":\"The asset the keeper has bonded\",\"_keeper\":\"The caller of Keep3rKeeperFundable#bond function\"}},\"Unbonding(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount being unbonded\",\"_keeperOrJob\":\"The keeper or job that began the unbonding process\",\"_unbonding\":\"The liquidity pair or asset being unbonded\"}}},\"kind\":\"dev\",\"methods\":{\"bonds(address,address)\":{\"params\":{\"_bond\":\"The address of the token being bonded\",\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_bonds\":\"Amount of a certain token that a keeper has bonded\"}},\"canActivateAfter(address,address)\":{\"params\":{\"_bonding\":\"The address of the token being bonded\",\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_timestamp\":\"Time at which the bonding for a keeper can be activated\"}},\"canWithdrawAfter(address,address)\":{\"params\":{\"_bonding\":\"The address of the token being unbonded\",\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_timestamp\":\"Time at which the keeper bonds are ready to be withdrawn\"}},\"disputes(address)\":{\"params\":{\"_keeperOrJob\":\"The address of the keeper or job\"},\"returns\":{\"_disputed\":\"Whether a keeper or job has a pending dispute\"}},\"firstSeen(address)\":{\"params\":{\"_keeper\":\"The address of the keeper\"},\"returns\":{\"timestamp\":\"The time at which the keeper was first registered\"}},\"hasBonded(address)\":{\"params\":{\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_hasBonded\":\"Whether the address has ever bonded an asset\"}},\"jobTokenCredits(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_token\":\"The address of the token bonded\"},\"returns\":{\"_amount\":\"The amount of token credits available for a job\"}},\"jobs()\":{\"returns\":{\"_jobList\":\"Array with all the jobs in _jobs\"}},\"keepers()\":{\"returns\":{\"_keeperList\":\"Array with all the keepers in _keepers\"}},\"pendingBonds(address,address)\":{\"params\":{\"_bonding\":\"The address of the token being bonded\",\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_pendingBonds\":\"Amount of a certain asset a keeper has unbonding\"}},\"pendingUnbonds(address,address)\":{\"params\":{\"_bonding\":\"The address of the token being unbonded\",\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_pendingUnbonds\":\"The amount of keeper bonds that are to be withdrawn\"}},\"workCompleted(address)\":{\"params\":{\"_keeper\":\"The address of the keeper\"},\"returns\":{\"_workCompleted\":\"Total KP3R earnings of a keeper since it started working\"}}},\"title\":\"Keep3rDisputable contract\",\"version\":1},\"userdoc\":{\"errors\":{\"JobDisputed()\":[{\"notice\":\"Throws when an action that requires an undisputed job is applied on a disputed job\"}],\"JobUnavailable()\":[{\"notice\":\"Throws when an address is passed as a job, but that address is not a job\"}]},\"events\":{\"Bonding(address,address,uint256)\":{\"notice\":\"Emitted when the bonding process of a new keeper begins\"},\"Unbonding(address,address,uint256)\":{\"notice\":\"Emitted when a keeper or job begins the unbonding process to withdraw the funds\"}},\"kind\":\"user\",\"methods\":{\"bonds(address,address)\":{\"notice\":\"Tracks how much a keeper has bonded of a certain token\"},\"canActivateAfter(address,address)\":{\"notice\":\"Tracks when a bonding for a keeper can be activated\"},\"canWithdrawAfter(address,address)\":{\"notice\":\"Tracks when keeper bonds are ready to be withdrawn\"},\"disputes(address)\":{\"notice\":\"Tracks if a keeper or job has a pending dispute\"},\"firstSeen(address)\":{\"notice\":\"Tracks when a keeper was first registered\"},\"hasBonded(address)\":{\"notice\":\"Checks whether the address has ever bonded an asset\"},\"jobTokenCredits(address,address)\":{\"notice\":\"The current token credits available for a job\"},\"jobs()\":{\"notice\":\"Lists all jobs\"},\"keepers()\":{\"notice\":\"Lists all keepers\"},\"pendingBonds(address,address)\":{\"notice\":\"Tracks the amount of assets deposited in pending bonds\"},\"pendingUnbonds(address,address)\":{\"notice\":\"Tracks how much keeper bonds are to be withdrawn\"},\"workCompleted(address)\":{\"notice\":\"Tracks the total KP3R earnings of a keeper since it started working\"}},\"notice\":\"Disputes keepers, or if they're already disputed, it can resolve the case\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":\"IKeep3rAccountance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rAccountance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Disputes keepers, or if they're already disputed, it can resolve the case\\n/// @dev Argument `bonding` can be the address of either a token or a liquidity\\ninterface IKeep3rAccountance {\\n  // Events\\n\\n  /// @notice Emitted when the bonding process of a new keeper begins\\n  /// @param _keeper The caller of Keep3rKeeperFundable#bond function\\n  /// @param _bonding The asset the keeper has bonded\\n  /// @param _amount The amount the keeper has bonded\\n  event Bonding(address indexed _keeper, address indexed _bonding, uint256 _amount);\\n\\n  /// @notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\\n  /// @param _keeperOrJob The keeper or job that began the unbonding process\\n  /// @param _unbonding The liquidity pair or asset being unbonded\\n  /// @param _amount The amount being unbonded\\n  event Unbonding(address indexed _keeperOrJob, address indexed _unbonding, uint256 _amount);\\n\\n  // Variables\\n\\n  /// @notice Tracks the total KP3R earnings of a keeper since it started working\\n  /// @param _keeper The address of the keeper\\n  /// @return _workCompleted Total KP3R earnings of a keeper since it started working\\n  function workCompleted(address _keeper) external view returns (uint256 _workCompleted);\\n\\n  /// @notice Tracks when a keeper was first registered\\n  /// @param _keeper The address of the keeper\\n  /// @return timestamp The time at which the keeper was first registered\\n  function firstSeen(address _keeper) external view returns (uint256 timestamp);\\n\\n  /// @notice Tracks if a keeper or job has a pending dispute\\n  /// @param _keeperOrJob The address of the keeper or job\\n  /// @return _disputed Whether a keeper or job has a pending dispute\\n  function disputes(address _keeperOrJob) external view returns (bool _disputed);\\n\\n  /// @notice Tracks how much a keeper has bonded of a certain token\\n  /// @param _keeper The address of the keeper\\n  /// @param _bond The address of the token being bonded\\n  /// @return _bonds Amount of a certain token that a keeper has bonded\\n  function bonds(address _keeper, address _bond) external view returns (uint256 _bonds);\\n\\n  /// @notice The current token credits available for a job\\n  /// @param _job The address of the job\\n  /// @param _token The address of the token bonded\\n  /// @return _amount The amount of token credits available for a job\\n  function jobTokenCredits(address _job, address _token) external view returns (uint256 _amount);\\n\\n  /// @notice Tracks the amount of assets deposited in pending bonds\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _pendingBonds Amount of a certain asset a keeper has unbonding\\n  function pendingBonds(address _keeper, address _bonding) external view returns (uint256 _pendingBonds);\\n\\n  /// @notice Tracks when a bonding for a keeper can be activated\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being bonded\\n  /// @return _timestamp Time at which the bonding for a keeper can be activated\\n  function canActivateAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks when keeper bonds are ready to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _timestamp Time at which the keeper bonds are ready to be withdrawn\\n  function canWithdrawAfter(address _keeper, address _bonding) external view returns (uint256 _timestamp);\\n\\n  /// @notice Tracks how much keeper bonds are to be withdrawn\\n  /// @param _keeper The address of the keeper\\n  /// @param _bonding The address of the token being unbonded\\n  /// @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn\\n  function pendingUnbonds(address _keeper, address _bonding) external view returns (uint256 _pendingUnbonds);\\n\\n  /// @notice Checks whether the address has ever bonded an asset\\n  /// @param _keeper The address of the keeper\\n  /// @return _hasBonded Whether the address has ever bonded an asset\\n  function hasBonded(address _keeper) external view returns (bool _hasBonded);\\n\\n  // Methods\\n\\n  /// @notice Lists all jobs\\n  /// @return _jobList Array with all the jobs in _jobs\\n  function jobs() external view returns (address[] memory _jobList);\\n\\n  /// @notice Lists all keepers\\n  /// @return _keeperList Array with all the keepers in _keepers\\n  function keepers() external view returns (address[] memory _keeperList);\\n\\n  // Errors\\n\\n  /// @notice Throws when an address is passed as a job, but that address is not a job\\n  error JobUnavailable();\\n\\n  /// @notice Throws when an action that requires an undisputed job is applied on a disputed job\\n  error JobDisputed();\\n}\\n\",\"keccak256\":\"0x18e34e422f1e401d294581d84eab674af602383a73bd8ecd77c61de5f899f881\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "JobDisputed()": [
                {
                  "notice": "Throws when an action that requires an undisputed job is applied on a disputed job"
                }
              ],
              "JobUnavailable()": [
                {
                  "notice": "Throws when an address is passed as a job, but that address is not a job"
                }
              ]
            },
            "events": {
              "Bonding(address,address,uint256)": {
                "notice": "Emitted when the bonding process of a new keeper begins"
              },
              "Unbonding(address,address,uint256)": {
                "notice": "Emitted when a keeper or job begins the unbonding process to withdraw the funds"
              }
            },
            "kind": "user",
            "methods": {
              "bonds(address,address)": {
                "notice": "Tracks how much a keeper has bonded of a certain token"
              },
              "canActivateAfter(address,address)": {
                "notice": "Tracks when a bonding for a keeper can be activated"
              },
              "canWithdrawAfter(address,address)": {
                "notice": "Tracks when keeper bonds are ready to be withdrawn"
              },
              "disputes(address)": {
                "notice": "Tracks if a keeper or job has a pending dispute"
              },
              "firstSeen(address)": {
                "notice": "Tracks when a keeper was first registered"
              },
              "hasBonded(address)": {
                "notice": "Checks whether the address has ever bonded an asset"
              },
              "jobTokenCredits(address,address)": {
                "notice": "The current token credits available for a job"
              },
              "jobs()": {
                "notice": "Lists all jobs"
              },
              "keepers()": {
                "notice": "Lists all keepers"
              },
              "pendingBonds(address,address)": {
                "notice": "Tracks the amount of assets deposited in pending bonds"
              },
              "pendingUnbonds(address,address)": {
                "notice": "Tracks how much keeper bonds are to be withdrawn"
              },
              "workCompleted(address)": {
                "notice": "Tracks the total KP3R earnings of a keeper since it started working"
              }
            },
            "notice": "Disputes keepers, or if they're already disputed, it can resolve the case",
            "version": 1
          }
        }
      },
      "solidity/interfaces/peripherals/IKeep3rDisputable.sol": {
        "IKeep3rDisputable": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyDisputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotDisputed",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "Dispute",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_resolver",
                  "type": "address"
                }
              ],
              "name": "Resolve",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "dispute",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_jobOrKeeper",
                  "type": "address"
                }
              ],
              "name": "resolve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "Dispute(address,address)": {
                "params": {
                  "_disputer": "The user that called the function and disputed the keeper",
                  "_jobOrKeeper": "The address of the disputed keeper/job"
                }
              },
              "Resolve(address,address)": {
                "params": {
                  "_jobOrKeeper": "The address of the disputed keeper/job",
                  "_resolver": "The user that called the function and resolved the dispute"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "dispute(address)": {
                "params": {
                  "_jobOrKeeper": "The address in dispute"
                }
              },
              "resolve(address)": {
                "params": {
                  "_jobOrKeeper": "The address cleared"
                }
              }
            },
            "title": "Keep3rDisputable contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "dispute(address)": "f75f9f7b",
              "resolve(address)": "55ea6c47"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyDisputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotDisputed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"Dispute\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"Resolve\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"dispute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobOrKeeper\",\"type\":\"address\"}],\"name\":\"resolve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Dispute(address,address)\":{\"params\":{\"_disputer\":\"The user that called the function and disputed the keeper\",\"_jobOrKeeper\":\"The address of the disputed keeper/job\"}},\"Resolve(address,address)\":{\"params\":{\"_jobOrKeeper\":\"The address of the disputed keeper/job\",\"_resolver\":\"The user that called the function and resolved the dispute\"}}},\"kind\":\"dev\",\"methods\":{\"dispute(address)\":{\"params\":{\"_jobOrKeeper\":\"The address in dispute\"}},\"resolve(address)\":{\"params\":{\"_jobOrKeeper\":\"The address cleared\"}}},\"title\":\"Keep3rDisputable contract\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyDisputed()\":[{\"notice\":\"Throws when a job or keeper is already disputed\"}],\"NotDisputed()\":[{\"notice\":\"Throws when a job or keeper is not disputed and someone tries to resolve the dispute\"}]},\"events\":{\"Dispute(address,address)\":{\"notice\":\"Emitted when a keeper or a job is disputed\"},\"Resolve(address,address)\":{\"notice\":\"Emitted when a dispute is resolved\"}},\"kind\":\"user\",\"methods\":{\"dispute(address)\":{\"notice\":\"Allows governance to create a dispute for a given keeper/job\"},\"resolve(address)\":{\"notice\":\"Allows governance to resolve a dispute on a keeper/job\"}},\"notice\":\"Creates/resolves disputes for jobs or keepers         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rDisputable.sol\":\"IKeep3rDisputable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rDisputable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rDisputable contract\\n/// @notice Creates/resolves disputes for jobs or keepers\\n///         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\\n///         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate\\ninterface IKeep3rDisputable {\\n  /// @notice Emitted when a keeper or a job is disputed\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _disputer The user that called the function and disputed the keeper\\n  event Dispute(address indexed _jobOrKeeper, address indexed _disputer);\\n\\n  /// @notice Emitted when a dispute is resolved\\n  /// @param _jobOrKeeper The address of the disputed keeper/job\\n  /// @param _resolver The user that called the function and resolved the dispute\\n  event Resolve(address indexed _jobOrKeeper, address indexed _resolver);\\n\\n  /// @notice Throws when a job or keeper is already disputed\\n  error AlreadyDisputed();\\n\\n  /// @notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute\\n  error NotDisputed();\\n\\n  /// @notice Allows governance to create a dispute for a given keeper/job\\n  /// @param _jobOrKeeper The address in dispute\\n  function dispute(address _jobOrKeeper) external;\\n\\n  /// @notice Allows governance to resolve a dispute on a keeper/job\\n  /// @param _jobOrKeeper The address cleared\\n  function resolve(address _jobOrKeeper) external;\\n}\\n\",\"keccak256\":\"0x002b9b4c75e62d48d74b6447649d39eb5c1e128d2523bb11e08e9cd3e27b1f70\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "AlreadyDisputed()": [
                {
                  "notice": "Throws when a job or keeper is already disputed"
                }
              ],
              "NotDisputed()": [
                {
                  "notice": "Throws when a job or keeper is not disputed and someone tries to resolve the dispute"
                }
              ]
            },
            "events": {
              "Dispute(address,address)": {
                "notice": "Emitted when a keeper or a job is disputed"
              },
              "Resolve(address,address)": {
                "notice": "Emitted when a dispute is resolved"
              }
            },
            "kind": "user",
            "methods": {
              "dispute(address)": {
                "notice": "Allows governance to create a dispute for a given keeper/job"
              },
              "resolve(address)": {
                "notice": "Allows governance to resolve a dispute on a keeper/job"
              }
            },
            "notice": "Creates/resolves disputes for jobs or keepers         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate",
            "version": 1
          }
        }
      },
      "solidity/interfaces/peripherals/IKeep3rJobs.sol": {
        "IKeep3rJobDisputable": {
          "abi": [
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashLiquidity",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashToken",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashTokenFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "JobSlashLiquidity(address,address,address,uint256)": {
                "params": {
                  "_amount": "The amount of the liquidity being slashed",
                  "_job": "The address of the job from which the liquidity will be slashed",
                  "_liquidity": "The address of the liquidity being slashed",
                  "_slasher": "The user that slashes the liquidity"
                }
              },
              "JobSlashToken(address,address,address,uint256)": {
                "params": {
                  "_amount": "The amount of the token being slashed",
                  "_job": "The address of the job from which the token will be slashed",
                  "_slasher": "The user that slashes the token",
                  "_token": "The address of the token being slashed"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_amount": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_amount": "The credits the given job has at the current period"
                }
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "params": {
                  "_job": "The address of the job credited",
                  "_token": "The address of the token credited"
                },
                "returns": {
                  "_timestamp": "The last block where tokens were added to the job"
                }
              },
              "liquidityAmount(address,address)": {
                "params": {
                  "_job": "The address of the job being checked",
                  "_liquidity": "The address of the liquidity we are checking"
                },
                "returns": {
                  "_amount": "Amount of liquidity in the specified job"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "rewardedAt(address)": {
                "params": {
                  "_job": "The address of the job being checked"
                },
                "returns": {
                  "_timestamp": "Timestamp of the last time the job was rewarded liquidity credits"
                }
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity that will be slashed",
                  "_job": "The address being slashed",
                  "_liquidity": "The address of the liquidity that will be slashed"
                }
              },
              "slashTokenFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of the token that will be slashed",
                  "_job": "The address of the job from which the token will be slashed",
                  "_token": "The address of the token that will be slashed"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_amount": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              },
              "workedAt(address)": {
                "params": {
                  "_job": "The address of the job being checked"
                },
                "returns": {
                  "_timestamp": "Timestamp of the last time the job was worked"
                }
              }
            },
            "title": "Keep3rJobDisputable contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "liquidityAmount(address,address)": "694798e6",
              "observeLiquidity(address)": "165e62e7",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardedAt(address)": "a676f9ff",
              "slashLiquidityFromJob(address,address,uint256)": "6e2a9ca6",
              "slashTokenFromJob(address,address,uint256)": "f25e311b",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashTokenFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"JobSlashLiquidity(address,address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of the liquidity being slashed\",\"_job\":\"The address of the job from which the liquidity will be slashed\",\"_liquidity\":\"The address of the liquidity being slashed\",\"_slasher\":\"The user that slashes the liquidity\"}},\"JobSlashToken(address,address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of the token being slashed\",\"_job\":\"The address of the job from which the token will be slashed\",\"_slasher\":\"The user that slashes the token\",\"_token\":\"The address of the token being slashed\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_amount\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_amount\":\"The credits the given job has at the current period\"}},\"jobTokenCreditsAddedAt(address,address)\":{\"params\":{\"_job\":\"The address of the job credited\",\"_token\":\"The address of the token credited\"},\"returns\":{\"_timestamp\":\"The last block where tokens were added to the job\"}},\"liquidityAmount(address,address)\":{\"params\":{\"_job\":\"The address of the job being checked\",\"_liquidity\":\"The address of the liquidity we are checking\"},\"returns\":{\"_amount\":\"Amount of liquidity in the specified job\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"rewardedAt(address)\":{\"params\":{\"_job\":\"The address of the job being checked\"},\"returns\":{\"_timestamp\":\"Timestamp of the last time the job was rewarded liquidity credits\"}},\"slashLiquidityFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity that will be slashed\",\"_job\":\"The address being slashed\",\"_liquidity\":\"The address of the liquidity that will be slashed\"}},\"slashTokenFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of the token that will be slashed\",\"_job\":\"The address of the job from which the token will be slashed\",\"_token\":\"The address of the token that will be slashed\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_amount\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}},\"workedAt(address)\":{\"params\":{\"_job\":\"The address of the job being checked\"},\"returns\":{\"_timestamp\":\"Timestamp of the last time the job was worked\"}}},\"title\":\"Keep3rJobDisputable contract\",\"version\":1},\"userdoc\":{\"errors\":{\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobTokenInsufficient()\":[{\"notice\":\"Throws when someone tries to slash more tokens than the job has\"}],\"JobTokenUnexistent()\":[{\"notice\":\"Throws when the token trying to be slashed doesn't exist\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}]},\"events\":{\"JobSlashLiquidity(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\"},\"JobSlashToken(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashTokenFromJob is called\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"}},\"kind\":\"user\",\"methods\":{\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"slashLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or a slasher to slash liquidity from a job\"},\"slashTokenFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or slasher to slash a job specific token\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"notice\":\"Handles the actions that can be taken on a disputed job\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":\"IKeep3rJobDisputable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobTokenInsufficient()": [
                {
                  "notice": "Throws when someone tries to slash more tokens than the job has"
                }
              ],
              "JobTokenUnexistent()": [
                {
                  "notice": "Throws when the token trying to be slashed doesn't exist"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ]
            },
            "events": {
              "JobSlashLiquidity(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called"
              },
              "JobSlashToken(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashTokenFromJob is called"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              }
            },
            "kind": "user",
            "methods": {
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "notice": "Allows governance or a slasher to slash liquidity from a job"
              },
              "slashTokenFromJob(address,address,uint256)": {
                "notice": "Allows governance or slasher to slash a job specific token"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "notice": "Handles the actions that can be taken on a disputed job",
            "version": 1
          }
        },
        "IKeep3rJobFundableCredits": {
          "abi": [
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "TokenCreditAddition(address,address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added to the job",
                  "_job": "The address of the job being credited",
                  "_provider": "The user that calls the function",
                  "_token": "The address of the token being provided"
                }
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that receives the tokens",
                  "_token": "The credit being withdrawn from the job"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "params": {
                  "_job": "The address of the job credited",
                  "_token": "The address of the token credited"
                },
                "returns": {
                  "_timestamp": "The last block where tokens were added to the job"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              }
            },
            "title": "Keep3rJobFundableCredits contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"TokenCreditAddition(address,address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added to the job\",\"_job\":\"The address of the job being credited\",\"_provider\":\"The user that calls the function\",\"_token\":\"The address of the token being provided\"}},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that receives the tokens\",\"_token\":\"The credit being withdrawn from the job\"}}},\"kind\":\"dev\",\"methods\":{\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"jobTokenCreditsAddedAt(address,address)\":{\"params\":{\"_job\":\"The address of the job credited\",\"_token\":\"The address of the token credited\"},\"returns\":{\"_timestamp\":\"The last block where tokens were added to the job\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}}},\"title\":\"Keep3rJobFundableCredits contract\",\"version\":1},\"userdoc\":{\"errors\":{\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}]},\"events\":{\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"}},\"kind\":\"user\",\"methods\":{\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"}},\"notice\":\"Handles the addition and withdrawal of credits from a job\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":\"IKeep3rJobFundableCredits\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ]
            },
            "events": {
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              }
            },
            "kind": "user",
            "methods": {
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              }
            },
            "notice": "Handles the addition and withdrawal of credits from a job",
            "version": 1
          }
        },
        "IKeep3rJobFundableLiquidity": {
          "abi": [
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "LiquidityAddition(address,address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity being added",
                  "_job": "The address of the job to which liquidity will be added",
                  "_liquidity": "The address of the liquidity being added",
                  "_provider": "The user that calls the function"
                }
              },
              "LiquidityApproval(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being approved"
                }
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "params": {
                  "_currentCredits": "The current credits of the job",
                  "_job": "The address of the job whose credits will be updated",
                  "_rewardedAt": "The time at which the job was last rewarded"
                }
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "params": {
                  "_currentCredits": "The current credits of the job",
                  "_job": "The address of the job whose credits will be updated",
                  "_periodCredits": "The credits of the job for the current period",
                  "_rewardedAt": "The time at which the job was last rewarded"
                }
              },
              "LiquidityRevocation(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being revoked"
                }
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity being withdrawn from the job",
                  "_job": "The address of the job of which liquidity will be withdrawn from",
                  "_liquidity": "The address of the liquidity being withdrawn",
                  "_receiver": "The receiver of the liquidity tokens"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_amount": "The liquidity credits of a given job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_amount": "The credits the given job has at the current period"
                }
              },
              "liquidityAmount(address,address)": {
                "params": {
                  "_job": "The address of the job being checked",
                  "_liquidity": "The address of the liquidity we are checking"
                },
                "returns": {
                  "_amount": "Amount of liquidity in the specified job"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "rewardedAt(address)": {
                "params": {
                  "_job": "The address of the job being checked"
                },
                "returns": {
                  "_timestamp": "Timestamp of the last time the job was rewarded liquidity credits"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_amount": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "workedAt(address)": {
                "params": {
                  "_job": "The address of the job being checked"
                },
                "returns": {
                  "_timestamp": "Timestamp of the last time the job was worked"
                }
              }
            },
            "title": "Keep3rJobFundableLiquidity contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobPeriodCredits(address)": "6cf262bc",
              "liquidityAmount(address,address)": "694798e6",
              "observeLiquidity(address)": "165e62e7",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardedAt(address)": "a676f9ff",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"LiquidityAddition(address,address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity being added\",\"_job\":\"The address of the job to which liquidity will be added\",\"_liquidity\":\"The address of the liquidity being added\",\"_provider\":\"The user that calls the function\"}},\"LiquidityApproval(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being approved\"}},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"params\":{\"_currentCredits\":\"The current credits of the job\",\"_job\":\"The address of the job whose credits will be updated\",\"_rewardedAt\":\"The time at which the job was last rewarded\"}},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"params\":{\"_currentCredits\":\"The current credits of the job\",\"_job\":\"The address of the job whose credits will be updated\",\"_periodCredits\":\"The credits of the job for the current period\",\"_rewardedAt\":\"The time at which the job was last rewarded\"}},\"LiquidityRevocation(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being revoked\"}},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity being withdrawn from the job\",\"_job\":\"The address of the job of which liquidity will be withdrawn from\",\"_liquidity\":\"The address of the liquidity being withdrawn\",\"_receiver\":\"The receiver of the liquidity tokens\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_amount\":\"The liquidity credits of a given job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_amount\":\"The credits the given job has at the current period\"}},\"liquidityAmount(address,address)\":{\"params\":{\"_job\":\"The address of the job being checked\",\"_liquidity\":\"The address of the liquidity we are checking\"},\"returns\":{\"_amount\":\"Amount of liquidity in the specified job\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"rewardedAt(address)\":{\"params\":{\"_job\":\"The address of the job being checked\"},\"returns\":{\"_timestamp\":\"Timestamp of the last time the job was rewarded liquidity credits\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_amount\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"workedAt(address)\":{\"params\":{\"_job\":\"The address of the job being checked\"},\"returns\":{\"_timestamp\":\"Timestamp of the last time the job was worked\"}}},\"title\":\"Keep3rJobFundableLiquidity contract\",\"version\":1},\"userdoc\":{\"errors\":{\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}]},\"events\":{\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"}},\"kind\":\"user\",\"methods\":{\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"notice\":\"Handles the funding of jobs through specific liquidity pairs\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":\"IKeep3rJobFundableLiquidity\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ]
            },
            "events": {
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              }
            },
            "kind": "user",
            "methods": {
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "notice": "Handles the funding of jobs through specific liquidity pairs",
            "version": 1
          }
        },
        "IKeep3rJobManager": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyAKeeper",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobAlreadyAdded",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOwner",
                  "type": "address"
                }
              ],
              "name": "JobAddition",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "addJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "JobAddition(address,address)": {
                "params": {
                  "_job": "The address of the job to add",
                  "_jobOwner": "The job's owner"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "addJob(address)": {
                "params": {
                  "_job": "Address of the contract for which work should be performed"
                }
              }
            },
            "title": "Keep3rJobManager contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "addJob(address)": "c5198abc"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyAKeeper\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobAlreadyAdded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOwner\",\"type\":\"address\"}],\"name\":\"JobAddition\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"addJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"JobAddition(address,address)\":{\"params\":{\"_job\":\"The address of the job to add\",\"_jobOwner\":\"The job's owner\"}}},\"kind\":\"dev\",\"methods\":{\"addJob(address)\":{\"params\":{\"_job\":\"Address of the contract for which work should be performed\"}}},\"title\":\"Keep3rJobManager contract\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAKeeper()\":[{\"notice\":\"Throws when the address that is trying to register as a keeper is already a keeper\"}],\"JobAlreadyAdded()\":[{\"notice\":\"Throws when trying to add a job that has already been added\"}]},\"events\":{\"JobAddition(address,address)\":{\"notice\":\"Emitted when Keep3rJobManager#addJob is called\"}},\"kind\":\"user\",\"methods\":{\"addJob(address)\":{\"notice\":\"Allows any caller to add a new job\"}},\"notice\":\"Handles the addition and withdrawal of credits from a job\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":\"IKeep3rJobManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "AlreadyAKeeper()": [
                {
                  "notice": "Throws when the address that is trying to register as a keeper is already a keeper"
                }
              ],
              "JobAlreadyAdded()": [
                {
                  "notice": "Throws when trying to add a job that has already been added"
                }
              ]
            },
            "events": {
              "JobAddition(address,address)": {
                "notice": "Emitted when Keep3rJobManager#addJob is called"
              }
            },
            "kind": "user",
            "methods": {
              "addJob(address)": {
                "notice": "Allows any caller to add a new job"
              }
            },
            "notice": "Handles the addition and withdrawal of credits from a job",
            "version": 1
          }
        },
        "IKeep3rJobMigration": {
          "abi": [
            {
              "inputs": [],
              "name": "JobMigrationImpossible",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationUnavailable",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationSuccessful",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "acceptJobMigration",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "migrateJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                }
              ],
              "name": "pendingJobMigrations",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "JobMigrationRequested(address,address)": {
                "params": {
                  "_fromJob": "The address of the job that requests to migrate",
                  "_toJob": "The address at which the job requests to migrate"
                }
              },
              "JobMigrationSuccessful(address,address)": {
                "params": {
                  "_fromJob": "The address of the job that requested to migrate",
                  "_toJob": "The address at which the job had requested to migrate"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "acceptJobMigration(address,address)": {
                "details": "Unbond/withdraw process doesn't get migrated",
                "params": {
                  "_fromJob": "The address of the job that requested to migrate",
                  "_toJob": "The address to which the job wants to migrate to"
                }
              },
              "migrateJob(address,address)": {
                "params": {
                  "_fromJob": "The address of the job that is requesting to migrate",
                  "_toJob": "The address at which the job is requesting to migrate"
                }
              },
              "pendingJobMigrations(address)": {
                "returns": {
                  "_toJob": "The address to which the job has requested to migrate to"
                }
              }
            },
            "title": "Keep3rJobMigration contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptJobMigration(address,address)": "af320e81",
              "migrateJob(address,address)": "90a4684e",
              "pendingJobMigrations(address)": "ec8ca643"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"JobMigrationImpossible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationUnavailable\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationSuccessful\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"acceptJobMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"migrateJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"}],\"name\":\"pendingJobMigrations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"JobMigrationRequested(address,address)\":{\"params\":{\"_fromJob\":\"The address of the job that requests to migrate\",\"_toJob\":\"The address at which the job requests to migrate\"}},\"JobMigrationSuccessful(address,address)\":{\"params\":{\"_fromJob\":\"The address of the job that requested to migrate\",\"_toJob\":\"The address at which the job had requested to migrate\"}}},\"kind\":\"dev\",\"methods\":{\"acceptJobMigration(address,address)\":{\"details\":\"Unbond/withdraw process doesn't get migrated\",\"params\":{\"_fromJob\":\"The address of the job that requested to migrate\",\"_toJob\":\"The address to which the job wants to migrate to\"}},\"migrateJob(address,address)\":{\"params\":{\"_fromJob\":\"The address of the job that is requesting to migrate\",\"_toJob\":\"The address at which the job is requesting to migrate\"}},\"pendingJobMigrations(address)\":{\"returns\":{\"_toJob\":\"The address to which the job has requested to migrate to\"}}},\"title\":\"Keep3rJobMigration contract\",\"version\":1},\"userdoc\":{\"errors\":{\"JobMigrationImpossible()\":[{\"notice\":\"Throws when the address of the job that requests to migrate wants to migrate to its same address\"}],\"JobMigrationLocked()\":[{\"notice\":\"Throws when cooldown between migrations has not yet passed\"}],\"JobMigrationUnavailable()\":[{\"notice\":\"Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\"}]},\"events\":{\"JobMigrationRequested(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#migrateJob function is called\"},\"JobMigrationSuccessful(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#acceptJobMigration function is called\"}},\"kind\":\"user\",\"methods\":{\"acceptJobMigration(address,address)\":{\"notice\":\"Completes the migration process for a job\"},\"migrateJob(address,address)\":{\"notice\":\"Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\"},\"pendingJobMigrations(address)\":{\"notice\":\"Maps the jobs that have requested a migration to the address they have requested to migrate to\"}},\"notice\":\"Handles the migration process of jobs to different addresses\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":\"IKeep3rJobMigration\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "JobMigrationImpossible()": [
                {
                  "notice": "Throws when the address of the job that requests to migrate wants to migrate to its same address"
                }
              ],
              "JobMigrationLocked()": [
                {
                  "notice": "Throws when cooldown between migrations has not yet passed"
                }
              ],
              "JobMigrationUnavailable()": [
                {
                  "notice": "Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping"
                }
              ]
            },
            "events": {
              "JobMigrationRequested(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#migrateJob function is called"
              },
              "JobMigrationSuccessful(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#acceptJobMigration function is called"
              }
            },
            "kind": "user",
            "methods": {
              "acceptJobMigration(address,address)": {
                "notice": "Completes the migration process for a job"
              },
              "migrateJob(address,address)": {
                "notice": "Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping"
              },
              "pendingJobMigrations(address)": {
                "notice": "Maps the jobs that have requested a migration to the address they have requested to migrate to"
              }
            },
            "notice": "Handles the migration process of jobs to different addresses",
            "version": 1
          }
        },
        "IKeep3rJobOwnership": {
          "abi": [
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "JobOwnershipAssent(address,address,address)": {
                "params": {
                  "_job": "The address of the job which the proposed owner will now own",
                  "_newOwner": "The new owner of the job",
                  "_previousOwner": "The previous owner of the job"
                }
              },
              "JobOwnershipChange(address,address,address)": {
                "params": {
                  "_job": "The address of the job proposed to have a change of owner",
                  "_owner": "The current owner of the job",
                  "_pendingOwner": "The new address proposed to be the owner of the job"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "jobOwner(address)": {
                "params": {
                  "_job": "The address of the job"
                },
                "returns": {
                  "_owner": "The address of the owner of the job"
                }
              },
              "jobPendingOwner(address)": {
                "params": {
                  "_job": "The address of the job"
                },
                "returns": {
                  "_pendingOwner": "The address of the pending owner of the job"
                }
              }
            },
            "title": "Keep3rJobOwnership contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptJobOwnership(address)": "59a2255e",
              "changeJobOwnership(address,address)": "594a3a93",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"JobOwnershipAssent(address,address,address)\":{\"params\":{\"_job\":\"The address of the job which the proposed owner will now own\",\"_newOwner\":\"The new owner of the job\",\"_previousOwner\":\"The previous owner of the job\"}},\"JobOwnershipChange(address,address,address)\":{\"params\":{\"_job\":\"The address of the job proposed to have a change of owner\",\"_owner\":\"The current owner of the job\",\"_pendingOwner\":\"The new address proposed to be the owner of the job\"}}},\"kind\":\"dev\",\"methods\":{\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"jobOwner(address)\":{\"params\":{\"_job\":\"The address of the job\"},\"returns\":{\"_owner\":\"The address of the owner of the job\"}},\"jobPendingOwner(address)\":{\"params\":{\"_job\":\"The address of the job\"},\"returns\":{\"_pendingOwner\":\"The address of the pending owner of the job\"}}},\"title\":\"Keep3rJobOwnership contract\",\"version\":1},\"userdoc\":{\"errors\":{\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}]},\"events\":{\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"}},\"kind\":\"user\",\"methods\":{\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"}},\"notice\":\"Handles the ownership of the jobs\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":\"IKeep3rJobOwnership\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ]
            },
            "events": {
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              }
            },
            "kind": "user",
            "methods": {
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              }
            },
            "notice": "Handles the ownership of the jobs",
            "version": 1
          }
        },
        "IKeep3rJobWorkable": {
          "abi": [
            {
              "inputs": [],
              "name": "InsufficientFunds",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnapproved",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperValidation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperWork",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                }
              ],
              "name": "bondedPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "directTokenPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_minBond",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_earned",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_age",
                  "type": "uint256"
                }
              ],
              "name": "isBondedKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isBondedKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "isKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "worked",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "KeeperValidation(uint256)": {
                "params": {
                  "_gasLeft": "The amount of gas that the transaction has left at the moment of keeper validation"
                }
              },
              "KeeperWork(address,address,address,uint256,uint256)": {
                "params": {
                  "_credit": "The address of the asset in which the keeper is paid",
                  "_gasLeft": "The amount of gas that the transaction has left at the moment of payment",
                  "_job": "The address of the job the keeper has worked",
                  "_keeper": "The address of the keeper that has worked the job",
                  "_payment": "The amount that has been paid out to the keeper in exchange for working the job"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "bondedPayment(address,uint256)": {
                "details": "Pays the keeper that performs the work with KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work",
                  "_payment": "The reward that should be allocated for the job"
                }
              },
              "directTokenPayment(address,address,uint256)": {
                "details": "Pays the keeper that performs the work with a specific token",
                "params": {
                  "_amount": "The reward that should be allocated",
                  "_keeper": "Address of the keeper that performed the work",
                  "_token": "The asset being awarded to the keeper"
                }
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "details": "Should be used for protected functions",
                "params": {
                  "_age": "The minimum keeper age required",
                  "_bond": "The bond token being evaluated",
                  "_earned": "The minimum funds earned in the keepers lifetime",
                  "_keeper": "The keeper to check",
                  "_minBond": "The minimum amount of bonded tokens"
                },
                "returns": {
                  "_isBondedKeeper": "Whether the `_keeper` meets the given requirements"
                }
              },
              "isKeeper(address)": {
                "details": "Can be used for general (non critical) functions",
                "params": {
                  "_keeper": "The keeper being investigated"
                },
                "returns": {
                  "_isKeeper": "Whether the address passed as a parameter is a keeper or not"
                }
              },
              "worked(address)": {
                "details": "Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work"
                }
              }
            },
            "title": "Keep3rJobWorkable contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "bondedPayment(address,uint256)": "11466d72",
              "directTokenPayment(address,address,uint256)": "dd2080d6",
              "isBondedKeeper(address,address,uint256,uint256,uint256)": "f9d46cf2",
              "isKeeper(address)": "6ba42aaa",
              "worked(address)": "5feeb794"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnapproved\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperValidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperWork\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"}],\"name\":\"bondedPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"directTokenPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_earned\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_age\",\"type\":\"uint256\"}],\"name\":\"isBondedKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isBondedKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"isKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"worked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"KeeperValidation(uint256)\":{\"params\":{\"_gasLeft\":\"The amount of gas that the transaction has left at the moment of keeper validation\"}},\"KeeperWork(address,address,address,uint256,uint256)\":{\"params\":{\"_credit\":\"The address of the asset in which the keeper is paid\",\"_gasLeft\":\"The amount of gas that the transaction has left at the moment of payment\",\"_job\":\"The address of the job the keeper has worked\",\"_keeper\":\"The address of the keeper that has worked the job\",\"_payment\":\"The amount that has been paid out to the keeper in exchange for working the job\"}}},\"kind\":\"dev\",\"methods\":{\"bondedPayment(address,uint256)\":{\"details\":\"Pays the keeper that performs the work with KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\",\"_payment\":\"The reward that should be allocated for the job\"}},\"directTokenPayment(address,address,uint256)\":{\"details\":\"Pays the keeper that performs the work with a specific token\",\"params\":{\"_amount\":\"The reward that should be allocated\",\"_keeper\":\"Address of the keeper that performed the work\",\"_token\":\"The asset being awarded to the keeper\"}},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"details\":\"Should be used for protected functions\",\"params\":{\"_age\":\"The minimum keeper age required\",\"_bond\":\"The bond token being evaluated\",\"_earned\":\"The minimum funds earned in the keepers lifetime\",\"_keeper\":\"The keeper to check\",\"_minBond\":\"The minimum amount of bonded tokens\"},\"returns\":{\"_isBondedKeeper\":\"Whether the `_keeper` meets the given requirements\"}},\"isKeeper(address)\":{\"details\":\"Can be used for general (non critical) functions\",\"params\":{\"_keeper\":\"The keeper being investigated\"},\"returns\":{\"_isKeeper\":\"Whether the address passed as a parameter is a keeper or not\"}},\"worked(address)\":{\"details\":\"Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\"}}},\"title\":\"Keep3rJobWorkable contract\",\"version\":1},\"userdoc\":{\"errors\":{\"InsufficientFunds()\":[{\"notice\":\"Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\"}],\"JobUnapproved()\":[{\"notice\":\"Throws if the address claiming to be a job is not in the list of approved jobs\"}]},\"events\":{\"KeeperValidation(uint256)\":{\"notice\":\"Emitted when a keeper is validated before a job\"},\"KeeperWork(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a keeper works a job\"}},\"kind\":\"user\",\"methods\":{\"bondedPayment(address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"directTokenPayment(address,address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"notice\":\"Confirms if the current keeper is registered and has a minimum bond of any asset.\"},\"isKeeper(address)\":{\"notice\":\"Confirms if the current keeper is registered\"},\"worked(address)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"}},\"notice\":\"Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":\"IKeep3rJobWorkable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "InsufficientFunds()": [
                {
                  "notice": "Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job"
                }
              ],
              "JobUnapproved()": [
                {
                  "notice": "Throws if the address claiming to be a job is not in the list of approved jobs"
                }
              ]
            },
            "events": {
              "KeeperValidation(uint256)": {
                "notice": "Emitted when a keeper is validated before a job"
              },
              "KeeperWork(address,address,address,uint256,uint256)": {
                "notice": "Emitted when a keeper works a job"
              }
            },
            "kind": "user",
            "methods": {
              "bondedPayment(address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "directTokenPayment(address,address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "notice": "Confirms if the current keeper is registered and has a minimum bond of any asset."
              },
              "isKeeper(address)": {
                "notice": "Confirms if the current keeper is registered"
              },
              "worked(address)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              }
            },
            "notice": "Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs",
            "version": 1
          }
        },
        "IKeep3rJobs": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyAKeeper",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientFunds",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InsufficientJobTokenCredits",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobAlreadyAdded",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityLessThanMin",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobLiquidityUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationImpossible",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobMigrationUnavailable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenCreditsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenInsufficient",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobTokenUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "JobUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnapproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "LiquidityPairUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyPendingJobOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TokenUnallowed",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_jobOwner",
                  "type": "address"
                }
              ],
              "name": "JobAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationRequested",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "JobMigrationSuccessful",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipAssent",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "name": "JobOwnershipChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashLiquidity",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "JobSlashToken",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperValidation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_credit",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_gasLeft",
                  "type": "uint256"
                }
              ],
              "name": "KeeperWork",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityApproval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsForced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardedAt",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_currentCredits",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCreditsReward",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "LiquidityRevocation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityWithdrawal",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_provider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditAddition",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "TokenCreditWithdrawal",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "acceptJobMigration",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "acceptJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "addJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addLiquidityToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "addTokenCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "approveLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "approvedLiquidities",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "_list",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_payment",
                  "type": "uint256"
                }
              ],
              "name": "bondedPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_newOwner",
                  "type": "address"
                }
              ],
              "name": "changeJobOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "directTokenPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "forceLiquidityCreditsToJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_minBond",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_earned",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_age",
                  "type": "uint256"
                }
              ],
              "name": "isBondedKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isBondedKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "isKeeper",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isKeeper",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobLiquidityCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPendingOwner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_pendingOwner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "jobPeriodCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                }
              ],
              "name": "jobTokenCreditsAddedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "liquidityAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "name": "migrateJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "observeLiquidity",
              "outputs": [
                {
                  "components": [
                    {
                      "internalType": "int56",
                      "name": "current",
                      "type": "int56"
                    },
                    {
                      "internalType": "int56",
                      "name": "difference",
                      "type": "int56"
                    },
                    {
                      "internalType": "uint256",
                      "name": "period",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct IKeep3rJobFundableLiquidity.TickCache",
                  "name": "_tickCache",
                  "type": "tuple"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_fromJob",
                  "type": "address"
                }
              ],
              "name": "pendingJobMigrations",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_toJob",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "quoteLiquidity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_periodCredits",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                }
              ],
              "name": "revokeLiquidity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "rewardedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "slashTokenFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "totalJobCredits",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbondLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidity",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawLiquidityFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "_receiver",
                  "type": "address"
                }
              ],
              "name": "withdrawTokenCreditsFromJob",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "worked",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_job",
                  "type": "address"
                }
              ],
              "name": "workedAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_timestamp",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "acceptJobMigration(address,address)": {
                "details": "Unbond/withdraw process doesn't get migrated",
                "params": {
                  "_fromJob": "The address of the job that requested to migrate",
                  "_toJob": "The address to which the job wants to migrate to"
                }
              },
              "acceptJobOwnership(address)": {
                "params": {
                  "_job": "The address of the job"
                }
              },
              "addJob(address)": {
                "params": {
                  "_job": "Address of the contract for which work should be performed"
                }
              },
              "addLiquidityToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity tokens to add",
                  "_job": "The address of the job to assign liquidity to",
                  "_liquidity": "The liquidity being added"
                }
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credit being added",
                  "_job": "The address of the job being credited",
                  "_token": "The address of the token being credited"
                }
              },
              "approveLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity accepted"
                }
              },
              "approvedLiquidities()": {
                "returns": {
                  "_list": "An array of addresses with all the approved liquidity pairs"
                }
              },
              "bondedPayment(address,uint256)": {
                "details": "Pays the keeper that performs the work with KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work",
                  "_payment": "The reward that should be allocated for the job"
                }
              },
              "changeJobOwnership(address,address)": {
                "params": {
                  "_job": "The address of the job",
                  "_newOwner": "The address of the proposed new owner"
                }
              },
              "directTokenPayment(address,address,uint256)": {
                "details": "Pays the keeper that performs the work with a specific token",
                "params": {
                  "_amount": "The reward that should be allocated",
                  "_keeper": "Address of the keeper that performed the work",
                  "_token": "The asset being awarded to the keeper"
                }
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity credits to gift",
                  "_job": "The address of the job being credited"
                }
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "details": "Should be used for protected functions",
                "params": {
                  "_age": "The minimum keeper age required",
                  "_bond": "The bond token being evaluated",
                  "_earned": "The minimum funds earned in the keepers lifetime",
                  "_keeper": "The keeper to check",
                  "_minBond": "The minimum amount of bonded tokens"
                },
                "returns": {
                  "_isBondedKeeper": "Whether the `_keeper` meets the given requirements"
                }
              },
              "isKeeper(address)": {
                "details": "Can be used for general (non critical) functions",
                "params": {
                  "_keeper": "The keeper being investigated"
                },
                "returns": {
                  "_isKeeper": "Whether the address passed as a parameter is a keeper or not"
                }
              },
              "jobLiquidityCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the liquidity credits"
                },
                "returns": {
                  "_amount": "The liquidity credits of a given job"
                }
              },
              "jobOwner(address)": {
                "params": {
                  "_job": "The address of the job"
                },
                "returns": {
                  "_owner": "The address of the owner of the job"
                }
              },
              "jobPendingOwner(address)": {
                "params": {
                  "_job": "The address of the job"
                },
                "returns": {
                  "_pendingOwner": "The address of the pending owner of the job"
                }
              },
              "jobPeriodCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the period credits"
                },
                "returns": {
                  "_amount": "The credits the given job has at the current period"
                }
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "params": {
                  "_job": "The address of the job credited",
                  "_token": "The address of the token credited"
                },
                "returns": {
                  "_timestamp": "The last block where tokens were added to the job"
                }
              },
              "liquidityAmount(address,address)": {
                "params": {
                  "_job": "The address of the job being checked",
                  "_liquidity": "The address of the liquidity we are checking"
                },
                "returns": {
                  "_amount": "Amount of liquidity in the specified job"
                }
              },
              "migrateJob(address,address)": {
                "params": {
                  "_fromJob": "The address of the job that is requesting to migrate",
                  "_toJob": "The address at which the job is requesting to migrate"
                }
              },
              "observeLiquidity(address)": {
                "params": {
                  "_liquidity": "The address of the liquidity pair being observed"
                },
                "returns": {
                  "_tickCache": "The updated TickCache"
                }
              },
              "pendingJobMigrations(address)": {
                "returns": {
                  "_toJob": "The address to which the job has requested to migrate to"
                }
              },
              "quoteLiquidity(address,uint256)": {
                "details": "_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod",
                "params": {
                  "_amount": "The amount of liquidity to provide",
                  "_liquidity": "The address of the liquidity to provide"
                },
                "returns": {
                  "_periodCredits": "The amount of KP3R periodically minted for the given liquidity"
                }
              },
              "revokeLiquidity(address)": {
                "params": {
                  "_liquidity": "The liquidity no longer accepted"
                }
              },
              "rewardedAt(address)": {
                "params": {
                  "_job": "The address of the job being checked"
                },
                "returns": {
                  "_timestamp": "Timestamp of the last time the job was rewarded liquidity credits"
                }
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of liquidity that will be slashed",
                  "_job": "The address being slashed",
                  "_liquidity": "The address of the liquidity that will be slashed"
                }
              },
              "slashTokenFromJob(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of the token that will be slashed",
                  "_job": "The address of the job from which the token will be slashed",
                  "_token": "The address of the token that will be slashed"
                }
              },
              "totalJobCredits(address)": {
                "params": {
                  "_job": "The address of the job of which we want to know the total credits"
                },
                "returns": {
                  "_amount": "The total credits of the given job"
                }
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "details": "Can only be called by the job's owner",
                "params": {
                  "_amount": "The amount of liquidity being removed",
                  "_job": "The address of the job being unbonded from",
                  "_liquidity": "The liquidity being unbonded"
                }
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "params": {
                  "_job": "The address of the job being withdrawn from",
                  "_liquidity": "The liquidity being withdrawn",
                  "_receiver": "The address that will receive the withdrawn liquidity"
                }
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "params": {
                  "_amount": "The amount of token to be withdrawn",
                  "_job": "The address of the job from which the credits are withdrawn",
                  "_receiver": "The user that will receive tokens",
                  "_token": "The address of the token being withdrawn"
                }
              },
              "worked(address)": {
                "details": "Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R",
                "params": {
                  "_keeper": "Address of the keeper that performed the work"
                }
              },
              "workedAt(address)": {
                "params": {
                  "_job": "The address of the job being checked"
                },
                "returns": {
                  "_timestamp": "Timestamp of the last time the job was worked"
                }
              }
            },
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "acceptJobMigration(address,address)": "af320e81",
              "acceptJobOwnership(address)": "59a2255e",
              "addJob(address)": "c5198abc",
              "addLiquidityToJob(address,address,uint256)": "52a4de29",
              "addTokenCreditsToJob(address,address,uint256)": "575288bf",
              "approveLiquidity(address)": "b600702a",
              "approvedLiquidities()": "0c620bce",
              "bondedPayment(address,uint256)": "11466d72",
              "changeJobOwnership(address,address)": "594a3a93",
              "directTokenPayment(address,address,uint256)": "dd2080d6",
              "forceLiquidityCreditsToJob(address,uint256)": "fe75bc46",
              "isBondedKeeper(address,address,uint256,uint256,uint256)": "f9d46cf2",
              "isKeeper(address)": "6ba42aaa",
              "jobLiquidityCredits(address)": "8bb6dfa8",
              "jobOwner(address)": "878c723e",
              "jobPendingOwner(address)": "98e90a0f",
              "jobPeriodCredits(address)": "6cf262bc",
              "jobTokenCreditsAddedAt(address,address)": "b440027f",
              "liquidityAmount(address,address)": "694798e6",
              "migrateJob(address,address)": "90a4684e",
              "observeLiquidity(address)": "165e62e7",
              "pendingJobMigrations(address)": "ec8ca643",
              "quoteLiquidity(address,uint256)": "0d6a1f87",
              "revokeLiquidity(address)": "64bb43ee",
              "rewardedAt(address)": "a676f9ff",
              "slashLiquidityFromJob(address,address,uint256)": "6e2a9ca6",
              "slashTokenFromJob(address,address,uint256)": "f25e311b",
              "totalJobCredits(address)": "034d4c61",
              "unbondLiquidityFromJob(address,address,uint256)": "1101eb41",
              "withdrawLiquidityFromJob(address,address,address)": "a2145809",
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": "d55995fe",
              "worked(address)": "5feeb794",
              "workedAt(address)": "f136a09d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyAKeeper\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientJobTokenCredits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityLessThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobLiquidityUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationImpossible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobMigrationUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenCreditsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenInsufficient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobTokenUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"JobUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnapproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityPairUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingJobOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenUnallowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_jobOwner\",\"type\":\"address\"}],\"name\":\"JobAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"JobMigrationSuccessful\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipAssent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"name\":\"JobOwnershipChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"JobSlashToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperValidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_credit\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"KeeperWork\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsForced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_currentCredits\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"name\":\"LiquidityCreditsReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"LiquidityRevocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityWithdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokenCreditWithdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"acceptJobMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"acceptJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"addJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"addTokenCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"approveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvedLiquidities\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"_list\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_payment\",\"type\":\"uint256\"}],\"name\":\"bondedPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeJobOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"directTokenPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forceLiquidityCreditsToJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_earned\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_age\",\"type\":\"uint256\"}],\"name\":\"isBondedKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isBondedKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"isKeeper\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isKeeper\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobLiquidityCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_pendingOwner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"jobPeriodCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"jobTokenCreditsAddedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"liquidityAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"name\":\"migrateJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"observeLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"int56\",\"name\":\"current\",\"type\":\"int56\"},{\"internalType\":\"int56\",\"name\":\"difference\",\"type\":\"int56\"},{\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"}],\"internalType\":\"struct IKeep3rJobFundableLiquidity.TickCache\",\"name\":\"_tickCache\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromJob\",\"type\":\"address\"}],\"name\":\"pendingJobMigrations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_toJob\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"quoteLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_periodCredits\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"}],\"name\":\"revokeLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"rewardedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"slashTokenFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"totalJobCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_liquidity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawLiquidityFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"withdrawTokenCreditsFromJob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"worked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_job\",\"type\":\"address\"}],\"name\":\"workedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptJobMigration(address,address)\":{\"details\":\"Unbond/withdraw process doesn't get migrated\",\"params\":{\"_fromJob\":\"The address of the job that requested to migrate\",\"_toJob\":\"The address to which the job wants to migrate to\"}},\"acceptJobOwnership(address)\":{\"params\":{\"_job\":\"The address of the job\"}},\"addJob(address)\":{\"params\":{\"_job\":\"Address of the contract for which work should be performed\"}},\"addLiquidityToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity tokens to add\",\"_job\":\"The address of the job to assign liquidity to\",\"_liquidity\":\"The liquidity being added\"}},\"addTokenCreditsToJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credit being added\",\"_job\":\"The address of the job being credited\",\"_token\":\"The address of the token being credited\"}},\"approveLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity accepted\"}},\"approvedLiquidities()\":{\"returns\":{\"_list\":\"An array of addresses with all the approved liquidity pairs\"}},\"bondedPayment(address,uint256)\":{\"details\":\"Pays the keeper that performs the work with KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\",\"_payment\":\"The reward that should be allocated for the job\"}},\"changeJobOwnership(address,address)\":{\"params\":{\"_job\":\"The address of the job\",\"_newOwner\":\"The address of the proposed new owner\"}},\"directTokenPayment(address,address,uint256)\":{\"details\":\"Pays the keeper that performs the work with a specific token\",\"params\":{\"_amount\":\"The reward that should be allocated\",\"_keeper\":\"Address of the keeper that performed the work\",\"_token\":\"The asset being awarded to the keeper\"}},\"forceLiquidityCreditsToJob(address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity credits to gift\",\"_job\":\"The address of the job being credited\"}},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"details\":\"Should be used for protected functions\",\"params\":{\"_age\":\"The minimum keeper age required\",\"_bond\":\"The bond token being evaluated\",\"_earned\":\"The minimum funds earned in the keepers lifetime\",\"_keeper\":\"The keeper to check\",\"_minBond\":\"The minimum amount of bonded tokens\"},\"returns\":{\"_isBondedKeeper\":\"Whether the `_keeper` meets the given requirements\"}},\"isKeeper(address)\":{\"details\":\"Can be used for general (non critical) functions\",\"params\":{\"_keeper\":\"The keeper being investigated\"},\"returns\":{\"_isKeeper\":\"Whether the address passed as a parameter is a keeper or not\"}},\"jobLiquidityCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the liquidity credits\"},\"returns\":{\"_amount\":\"The liquidity credits of a given job\"}},\"jobOwner(address)\":{\"params\":{\"_job\":\"The address of the job\"},\"returns\":{\"_owner\":\"The address of the owner of the job\"}},\"jobPendingOwner(address)\":{\"params\":{\"_job\":\"The address of the job\"},\"returns\":{\"_pendingOwner\":\"The address of the pending owner of the job\"}},\"jobPeriodCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the period credits\"},\"returns\":{\"_amount\":\"The credits the given job has at the current period\"}},\"jobTokenCreditsAddedAt(address,address)\":{\"params\":{\"_job\":\"The address of the job credited\",\"_token\":\"The address of the token credited\"},\"returns\":{\"_timestamp\":\"The last block where tokens were added to the job\"}},\"liquidityAmount(address,address)\":{\"params\":{\"_job\":\"The address of the job being checked\",\"_liquidity\":\"The address of the liquidity we are checking\"},\"returns\":{\"_amount\":\"Amount of liquidity in the specified job\"}},\"migrateJob(address,address)\":{\"params\":{\"_fromJob\":\"The address of the job that is requesting to migrate\",\"_toJob\":\"The address at which the job is requesting to migrate\"}},\"observeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The address of the liquidity pair being observed\"},\"returns\":{\"_tickCache\":\"The updated TickCache\"}},\"pendingJobMigrations(address)\":{\"returns\":{\"_toJob\":\"The address to which the job has requested to migrate to\"}},\"quoteLiquidity(address,uint256)\":{\"details\":\"_periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\",\"params\":{\"_amount\":\"The amount of liquidity to provide\",\"_liquidity\":\"The address of the liquidity to provide\"},\"returns\":{\"_periodCredits\":\"The amount of KP3R periodically minted for the given liquidity\"}},\"revokeLiquidity(address)\":{\"params\":{\"_liquidity\":\"The liquidity no longer accepted\"}},\"rewardedAt(address)\":{\"params\":{\"_job\":\"The address of the job being checked\"},\"returns\":{\"_timestamp\":\"Timestamp of the last time the job was rewarded liquidity credits\"}},\"slashLiquidityFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of liquidity that will be slashed\",\"_job\":\"The address being slashed\",\"_liquidity\":\"The address of the liquidity that will be slashed\"}},\"slashTokenFromJob(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of the token that will be slashed\",\"_job\":\"The address of the job from which the token will be slashed\",\"_token\":\"The address of the token that will be slashed\"}},\"totalJobCredits(address)\":{\"params\":{\"_job\":\"The address of the job of which we want to know the total credits\"},\"returns\":{\"_amount\":\"The total credits of the given job\"}},\"unbondLiquidityFromJob(address,address,uint256)\":{\"details\":\"Can only be called by the job's owner\",\"params\":{\"_amount\":\"The amount of liquidity being removed\",\"_job\":\"The address of the job being unbonded from\",\"_liquidity\":\"The liquidity being unbonded\"}},\"withdrawLiquidityFromJob(address,address,address)\":{\"params\":{\"_job\":\"The address of the job being withdrawn from\",\"_liquidity\":\"The liquidity being withdrawn\",\"_receiver\":\"The address that will receive the withdrawn liquidity\"}},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"params\":{\"_amount\":\"The amount of token to be withdrawn\",\"_job\":\"The address of the job from which the credits are withdrawn\",\"_receiver\":\"The user that will receive tokens\",\"_token\":\"The address of the token being withdrawn\"}},\"worked(address)\":{\"details\":\"Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\",\"params\":{\"_keeper\":\"Address of the keeper that performed the work\"}},\"workedAt(address)\":{\"params\":{\"_job\":\"The address of the job being checked\"},\"returns\":{\"_timestamp\":\"Timestamp of the last time the job was worked\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAKeeper()\":[{\"notice\":\"Throws when the address that is trying to register as a keeper is already a keeper\"}],\"InsufficientFunds()\":[{\"notice\":\"Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\"}],\"InsufficientJobTokenCredits()\":[{\"notice\":\"Throws when the user tries to withdraw more tokens than it has\"}],\"JobAlreadyAdded()\":[{\"notice\":\"Throws when trying to add a job that has already been added\"}],\"JobLiquidityInsufficient()\":[{\"notice\":\"Throws when trying to remove more liquidity than the job has\"}],\"JobLiquidityLessThanMin()\":[{\"notice\":\"Throws when trying to add less liquidity than the minimum liquidity required\"}],\"JobLiquidityUnexistent()\":[{\"notice\":\"Throws when the job doesn't have the requested liquidity\"}],\"JobMigrationImpossible()\":[{\"notice\":\"Throws when the address of the job that requests to migrate wants to migrate to its same address\"}],\"JobMigrationLocked()\":[{\"notice\":\"Throws when cooldown between migrations has not yet passed\"}],\"JobMigrationUnavailable()\":[{\"notice\":\"Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\"}],\"JobTokenCreditsLocked()\":[{\"notice\":\"Throws when the token withdraw cooldown has not yet passed\"}],\"JobTokenInsufficient()\":[{\"notice\":\"Throws when someone tries to slash more tokens than the job has\"}],\"JobTokenUnexistent()\":[{\"notice\":\"Throws when the token trying to be slashed doesn't exist\"}],\"JobUnapproved()\":[{\"notice\":\"Throws if the address claiming to be a job is not in the list of approved jobs\"}],\"LiquidityPairApproved()\":[{\"notice\":\"Throws when the liquidity being approved has already been approved\"}],\"LiquidityPairUnapproved()\":[{\"notice\":\"Throws when trying to add liquidity to an unapproved pool\"}],\"LiquidityPairUnexistent()\":[{\"notice\":\"Throws when the liquidity being removed has not been approved\"}],\"OnlyJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the job owner\"}],\"OnlyPendingJobOwner()\":[{\"notice\":\"Throws when the caller of the function is not the pending job owner\"}],\"TokenUnallowed()\":[{\"notice\":\"Throws when the token is KP3R, as it should not be used for direct token payments\"}]},\"events\":{\"JobAddition(address,address)\":{\"notice\":\"Emitted when Keep3rJobManager#addJob is called\"},\"JobMigrationRequested(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#migrateJob function is called\"},\"JobMigrationSuccessful(address,address)\":{\"notice\":\"Emitted when Keep3rJobMigration#acceptJobMigration function is called\"},\"JobOwnershipAssent(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\"},\"JobOwnershipChange(address,address,address)\":{\"notice\":\"Emitted when Keep3rJobOwnership#changeJobOwnership is called\"},\"JobSlashLiquidity(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\"},\"JobSlashToken(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobDisputable#slashTokenFromJob is called\"},\"KeeperValidation(uint256)\":{\"notice\":\"Emitted when a keeper is validated before a job\"},\"KeeperWork(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a keeper works a job\"},\"LiquidityAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityApproval(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\"},\"LiquidityCreditsForced(address,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\"},\"LiquidityCreditsReward(address,uint256,uint256,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\"},\"LiquidityRevocation(address)\":{\"notice\":\"Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\"},\"LiquidityWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\"},\"TokenCreditAddition(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\"},\"TokenCreditWithdrawal(address,address,address,uint256)\":{\"notice\":\"Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\"}},\"kind\":\"user\",\"methods\":{\"acceptJobMigration(address,address)\":{\"notice\":\"Completes the migration process for a job\"},\"acceptJobOwnership(address)\":{\"notice\":\"The proposed address accepts to be the owner of the job\"},\"addJob(address)\":{\"notice\":\"Allows any caller to add a new job\"},\"addLiquidityToJob(address,address,uint256)\":{\"notice\":\"Allows anyone to fund a job with liquidity\"},\"addTokenCreditsToJob(address,address,uint256)\":{\"notice\":\"Add credit to a job to be paid out for work\"},\"approveLiquidity(address)\":{\"notice\":\"Approve a liquidity pair for being accepted in future\"},\"approvedLiquidities()\":{\"notice\":\"Lists liquidity pairs\"},\"bondedPayment(address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"changeJobOwnership(address,address)\":{\"notice\":\"Proposes a new address to be the owner of the job\"},\"directTokenPayment(address,address,uint256)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"forceLiquidityCreditsToJob(address,uint256)\":{\"notice\":\"Gifts liquidity credits to the specified job\"},\"isBondedKeeper(address,address,uint256,uint256,uint256)\":{\"notice\":\"Confirms if the current keeper is registered and has a minimum bond of any asset.\"},\"isKeeper(address)\":{\"notice\":\"Confirms if the current keeper is registered\"},\"jobLiquidityCredits(address)\":{\"notice\":\"Returns the liquidity credits of a given job\"},\"jobOwner(address)\":{\"notice\":\"Maps the job to the owner of the job\"},\"jobPendingOwner(address)\":{\"notice\":\"Maps the job to its pending owner\"},\"jobPeriodCredits(address)\":{\"notice\":\"Returns the credits of a given job for the current period\"},\"jobTokenCreditsAddedAt(address,address)\":{\"notice\":\"Last block where tokens were added to the job\"},\"liquidityAmount(address,address)\":{\"notice\":\"Amount of liquidity in a specified job\"},\"migrateJob(address,address)\":{\"notice\":\"Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\"},\"observeLiquidity(address)\":{\"notice\":\"Observes the current state of the liquidity pair being observed and updates TickCache with the information\"},\"pendingJobMigrations(address)\":{\"notice\":\"Maps the jobs that have requested a migration to the address they have requested to migrate to\"},\"quoteLiquidity(address,uint256)\":{\"notice\":\"Calculates how many credits should be rewarded periodically for a given liquidity amount\"},\"revokeLiquidity(address)\":{\"notice\":\"Revoke a liquidity pair from being accepted in future\"},\"rewardedAt(address)\":{\"notice\":\"Last time the job was rewarded liquidity credits\"},\"slashLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or a slasher to slash liquidity from a job\"},\"slashTokenFromJob(address,address,uint256)\":{\"notice\":\"Allows governance or slasher to slash a job specific token\"},\"totalJobCredits(address)\":{\"notice\":\"Calculates the total credits of a given job\"},\"unbondLiquidityFromJob(address,address,uint256)\":{\"notice\":\"Unbond liquidity for a job\"},\"withdrawLiquidityFromJob(address,address,address)\":{\"notice\":\"Withdraw liquidity from a job\"},\"withdrawTokenCreditsFromJob(address,address,uint256,address)\":{\"notice\":\"Withdraw credit from a job\"},\"worked(address)\":{\"notice\":\"Implemented by jobs to show that a keeper performed work\"},\"workedAt(address)\":{\"notice\":\"Last time the job was worked\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":\"IKeep3rJobs\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rJobs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rJobFundableCredits contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobFundableCredits {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being provided\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of credit being added to the job\\n  event TokenCreditAddition(address indexed _job, address indexed _token, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The credit being withdrawn from the job\\n  /// @param _receiver The user that receives the tokens\\n  /// @param _amount The amount of credit withdrawn\\n  event TokenCreditWithdrawal(address indexed _job, address indexed _token, address indexed _receiver, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token is KP3R, as it should not be used for direct token payments\\n  error TokenUnallowed();\\n\\n  /// @notice Throws when the token withdraw cooldown has not yet passed\\n  error JobTokenCreditsLocked();\\n\\n  /// @notice Throws when the user tries to withdraw more tokens than it has\\n  error InsufficientJobTokenCredits();\\n\\n  // Variables\\n\\n  /// @notice Last block where tokens were added to the job\\n  /// @param _job The address of the job credited\\n  /// @param _token The address of the token credited\\n  /// @return _timestamp The last block where tokens were added to the job\\n  function jobTokenCreditsAddedAt(address _job, address _token) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Add credit to a job to be paid out for work\\n  /// @param _job The address of the job being credited\\n  /// @param _token The address of the token being credited\\n  /// @param _amount The amount of credit being added\\n  function addTokenCreditsToJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw credit from a job\\n  /// @param _job The address of the job from which the credits are withdrawn\\n  /// @param _token The address of the token being withdrawn\\n  /// @param _amount The amount of token to be withdrawn\\n  /// @param _receiver The user that will receive tokens\\n  function withdrawTokenCreditsFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title  Keep3rJobFundableLiquidity contract\\n/// @notice Handles the funding of jobs through specific liquidity pairs\\ninterface IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being approved\\n  event LiquidityApproval(address _liquidity);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\\n  /// @param _liquidity The address of the liquidity pair being revoked\\n  event LiquidityRevocation(address _liquidity);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job to which liquidity will be added\\n  /// @param _liquidity The address of the liquidity being added\\n  /// @param _provider The user that calls the function\\n  /// @param _amount The amount of liquidity being added\\n  event LiquidityAddition(address indexed _job, address indexed _liquidity, address indexed _provider, uint256 _amount);\\n\\n  /// @notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\\n  /// @param _job The address of the job of which liquidity will be withdrawn from\\n  /// @param _liquidity The address of the liquidity being withdrawn\\n  /// @param _receiver The receiver of the liquidity tokens\\n  /// @param _amount The amount of liquidity being withdrawn from the job\\n  event LiquidityWithdrawal(address indexed _job, address indexed _liquidity, address indexed _receiver, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  /// @param _periodCredits The credits of the job for the current period\\n  event LiquidityCreditsReward(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits, uint256 _periodCredits);\\n\\n  /// @notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\\n  /// @param _job The address of the job whose credits will be updated\\n  /// @param _rewardedAt The time at which the job was last rewarded\\n  /// @param _currentCredits The current credits of the job\\n  event LiquidityCreditsForced(address indexed _job, uint256 _rewardedAt, uint256 _currentCredits);\\n\\n  // Errors\\n\\n  /// @notice Throws when the liquidity being approved has already been approved\\n  error LiquidityPairApproved();\\n\\n  /// @notice Throws when the liquidity being removed has not been approved\\n  error LiquidityPairUnexistent();\\n\\n  /// @notice Throws when trying to add liquidity to an unapproved pool\\n  error LiquidityPairUnapproved();\\n\\n  /// @notice Throws when the job doesn't have the requested liquidity\\n  error JobLiquidityUnexistent();\\n\\n  /// @notice Throws when trying to remove more liquidity than the job has\\n  error JobLiquidityInsufficient();\\n\\n  /// @notice Throws when trying to add less liquidity than the minimum liquidity required\\n  error JobLiquidityLessThanMin();\\n\\n  // Structs\\n\\n  /// @notice Stores the tick information of the different liquidity pairs\\n  struct TickCache {\\n    int56 current; // Tracks the current tick\\n    int56 difference; // Stores the difference between the current tick and the last tick\\n    uint256 period; // Stores the period at which the last observation was made\\n  }\\n\\n  // Variables\\n\\n  /// @notice Lists liquidity pairs\\n  /// @return _list An array of addresses with all the approved liquidity pairs\\n  function approvedLiquidities() external view returns (address[] memory _list);\\n\\n  /// @notice Amount of liquidity in a specified job\\n  /// @param _job The address of the job being checked\\n  /// @param _liquidity The address of the liquidity we are checking\\n  /// @return _amount Amount of liquidity in the specified job\\n  function liquidityAmount(address _job, address _liquidity) external view returns (uint256 _amount);\\n\\n  /// @notice Last time the job was rewarded liquidity credits\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was rewarded liquidity credits\\n  function rewardedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  /// @notice Last time the job was worked\\n  /// @param _job The address of the job being checked\\n  /// @return _timestamp Timestamp of the last time the job was worked\\n  function workedAt(address _job) external view returns (uint256 _timestamp);\\n\\n  // Methods\\n\\n  /// @notice Returns the liquidity credits of a given job\\n  /// @param _job The address of the job of which we want to know the liquidity credits\\n  /// @return _amount The liquidity credits of a given job\\n  function jobLiquidityCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Returns the credits of a given job for the current period\\n  /// @param _job The address of the job of which we want to know the period credits\\n  /// @return _amount The credits the given job has at the current period\\n  function jobPeriodCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates the total credits of a given job\\n  /// @param _job The address of the job of which we want to know the total credits\\n  /// @return _amount The total credits of the given job\\n  function totalJobCredits(address _job) external view returns (uint256 _amount);\\n\\n  /// @notice Calculates how many credits should be rewarded periodically for a given liquidity amount\\n  /// @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\\n  /// @param _liquidity The address of the liquidity to provide\\n  /// @param _amount The amount of liquidity to provide\\n  /// @return _periodCredits The amount of KP3R periodically minted for the given liquidity\\n  function quoteLiquidity(address _liquidity, uint256 _amount) external view returns (uint256 _periodCredits);\\n\\n  /// @notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\\n  /// @param _liquidity The address of the liquidity pair being observed\\n  /// @return _tickCache The updated TickCache\\n  function observeLiquidity(address _liquidity) external view returns (TickCache memory _tickCache);\\n\\n  /// @notice Gifts liquidity credits to the specified job\\n  /// @param _job The address of the job being credited\\n  /// @param _amount The amount of liquidity credits to gift\\n  function forceLiquidityCreditsToJob(address _job, uint256 _amount) external;\\n\\n  /// @notice Approve a liquidity pair for being accepted in future\\n  /// @param _liquidity The address of the liquidity accepted\\n  function approveLiquidity(address _liquidity) external;\\n\\n  /// @notice Revoke a liquidity pair from being accepted in future\\n  /// @param _liquidity The liquidity no longer accepted\\n  function revokeLiquidity(address _liquidity) external;\\n\\n  /// @notice Allows anyone to fund a job with liquidity\\n  /// @param _job The address of the job to assign liquidity to\\n  /// @param _liquidity The liquidity being added\\n  /// @param _amount The amount of liquidity tokens to add\\n  function addLiquidityToJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Unbond liquidity for a job\\n  /// @dev Can only be called by the job's owner\\n  /// @param _job The address of the job being unbonded from\\n  /// @param _liquidity The liquidity being unbonded\\n  /// @param _amount The amount of liquidity being removed\\n  function unbondLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Withdraw liquidity from a job\\n  /// @param _job The address of the job being withdrawn from\\n  /// @param _liquidity The liquidity being withdrawn\\n  /// @param _receiver The address that will receive the withdrawn liquidity\\n  function withdrawLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    address _receiver\\n  ) external;\\n}\\n\\n/// @title Keep3rJobManager contract\\n/// @notice Handles the addition and withdrawal of credits from a job\\ninterface IKeep3rJobManager {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobManager#addJob is called\\n  /// @param _job The address of the job to add\\n  /// @param _jobOwner The job's owner\\n  event JobAddition(address indexed _job, address indexed _jobOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when trying to add a job that has already been added\\n  error JobAlreadyAdded();\\n\\n  /// @notice Throws when the address that is trying to register as a keeper is already a keeper\\n  error AlreadyAKeeper();\\n\\n  // Methods\\n\\n  /// @notice Allows any caller to add a new job\\n  /// @param _job Address of the contract for which work should be performed\\n  function addJob(address _job) external;\\n}\\n\\n/// @title Keep3rJobWorkable contract\\n/// @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs\\ninterface IKeep3rJobWorkable {\\n  // Events\\n\\n  /// @notice Emitted when a keeper is validated before a job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation\\n  event KeeperValidation(uint256 _gasLeft);\\n\\n  /// @notice Emitted when a keeper works a job\\n  /// @param _credit The address of the asset in which the keeper is paid\\n  /// @param _job The address of the job the keeper has worked\\n  /// @param _keeper The address of the keeper that has worked the job\\n  /// @param _payment The amount that has been paid out to the keeper in exchange for working the job\\n  /// @param _gasLeft The amount of gas that the transaction has left at the moment of payment\\n  event KeeperWork(address indexed _credit, address indexed _job, address indexed _keeper, uint256 _payment, uint256 _gasLeft);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address claiming to be a job is not in the list of approved jobs\\n  error JobUnapproved();\\n\\n  /// @notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job\\n  error InsufficientFunds();\\n\\n  // Methods\\n\\n  /// @notice Confirms if the current keeper is registered\\n  /// @dev Can be used for general (non critical) functions\\n  /// @param _keeper The keeper being investigated\\n  /// @return _isKeeper Whether the address passed as a parameter is a keeper or not\\n  function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n  /// @notice Confirms if the current keeper is registered and has a minimum bond of any asset.\\n  /// @dev Should be used for protected functions\\n  /// @param _keeper The keeper to check\\n  /// @param _bond The bond token being evaluated\\n  /// @param _minBond The minimum amount of bonded tokens\\n  /// @param _earned The minimum funds earned in the keepers lifetime\\n  /// @param _age The minimum keeper age required\\n  /// @return _isBondedKeeper Whether the `_keeper` meets the given requirements\\n  function isBondedKeeper(\\n    address _keeper,\\n    address _bond,\\n    uint256 _minBond,\\n    uint256 _earned,\\n    uint256 _age\\n  ) external returns (bool _isBondedKeeper);\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  function worked(address _keeper) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with KP3R\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _payment The reward that should be allocated for the job\\n  function bondedPayment(address _keeper, uint256 _payment) external;\\n\\n  /// @notice Implemented by jobs to show that a keeper performed work\\n  /// @dev Pays the keeper that performs the work with a specific token\\n  /// @param _token The asset being awarded to the keeper\\n  /// @param _keeper Address of the keeper that performed the work\\n  /// @param _amount The reward that should be allocated\\n  function directTokenPayment(\\n    address _token,\\n    address _keeper,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n/// @title Keep3rJobOwnership contract\\n/// @notice Handles the ownership of the jobs\\ninterface IKeep3rJobOwnership {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\\n  /// @param _job The address of the job proposed to have a change of owner\\n  /// @param _owner The current owner of the job\\n  /// @param _pendingOwner The new address proposed to be the owner of the job\\n  event JobOwnershipChange(address indexed _job, address indexed _owner, address indexed _pendingOwner);\\n\\n  /// @notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\\n  /// @param _job The address of the job which the proposed owner will now own\\n  /// @param _previousOwner The previous owner of the job\\n  /// @param _newOwner The new owner of the job\\n  event JobOwnershipAssent(address indexed _job, address indexed _previousOwner, address indexed _newOwner);\\n\\n  // Errors\\n\\n  /// @notice Throws when the caller of the function is not the job owner\\n  error OnlyJobOwner();\\n\\n  /// @notice Throws when the caller of the function is not the pending job owner\\n  error OnlyPendingJobOwner();\\n\\n  // Variables\\n\\n  /// @notice Maps the job to the owner of the job\\n  /// @param _job The address of the job\\n  /// @return _owner The address of the owner of the job\\n  function jobOwner(address _job) external view returns (address _owner);\\n\\n  /// @notice Maps the job to its pending owner\\n  /// @param _job The address of the job\\n  /// @return _pendingOwner The address of the pending owner of the job\\n  function jobPendingOwner(address _job) external view returns (address _pendingOwner);\\n\\n  // Methods\\n\\n  /// @notice Proposes a new address to be the owner of the job\\n  /// @param _job The address of the job\\n  /// @param _newOwner The address of the proposed new owner\\n  function changeJobOwnership(address _job, address _newOwner) external;\\n\\n  /// @notice The proposed address accepts to be the owner of the job\\n  /// @param _job The address of the job\\n  function acceptJobOwnership(address _job) external;\\n}\\n\\n/// @title Keep3rJobMigration contract\\n/// @notice Handles the migration process of jobs to different addresses\\ninterface IKeep3rJobMigration {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobMigration#migrateJob function is called\\n  /// @param _fromJob The address of the job that requests to migrate\\n  /// @param _toJob The address at which the job requests to migrate\\n  event JobMigrationRequested(address indexed _fromJob, address _toJob);\\n\\n  /// @notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address at which the job had requested to migrate\\n  event JobMigrationSuccessful(address _fromJob, address indexed _toJob);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address of the job that requests to migrate wants to migrate to its same address\\n  error JobMigrationImpossible();\\n\\n  /// @notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping\\n  error JobMigrationUnavailable();\\n\\n  /// @notice Throws when cooldown between migrations has not yet passed\\n  error JobMigrationLocked();\\n\\n  // Variables\\n\\n  /// @notice Maps the jobs that have requested a migration to the address they have requested to migrate to\\n  /// @return _toJob The address to which the job has requested to migrate to\\n  function pendingJobMigrations(address _fromJob) external view returns (address _toJob);\\n\\n  // Methods\\n\\n  /// @notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\\n  /// @param _fromJob The address of the job that is requesting to migrate\\n  /// @param _toJob The address at which the job is requesting to migrate\\n  function migrateJob(address _fromJob, address _toJob) external;\\n\\n  /// @notice Completes the migration process for a job\\n  /// @dev Unbond/withdraw process doesn't get migrated\\n  /// @param _fromJob The address of the job that requested to migrate\\n  /// @param _toJob The address to which the job wants to migrate to\\n  function acceptJobMigration(address _fromJob, address _toJob) external;\\n}\\n\\n/// @title Keep3rJobDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed job\\ninterface IKeep3rJobDisputable is IKeep3rJobFundableCredits, IKeep3rJobFundableLiquidity {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token being slashed\\n  /// @param _slasher The user that slashes the token\\n  /// @param _amount The amount of the token being slashed\\n  event JobSlashToken(address indexed _job, address _token, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\\n  /// @param _job The address of the job from which the liquidity will be slashed\\n  /// @param _liquidity The address of the liquidity being slashed\\n  /// @param _slasher The user that slashes the liquidity\\n  /// @param _amount The amount of the liquidity being slashed\\n  event JobSlashLiquidity(address indexed _job, address _liquidity, address indexed _slasher, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the token trying to be slashed doesn't exist\\n  error JobTokenUnexistent();\\n\\n  /// @notice Throws when someone tries to slash more tokens than the job has\\n  error JobTokenInsufficient();\\n\\n  // Methods\\n\\n  /// @notice Allows governance or slasher to slash a job specific token\\n  /// @param _job The address of the job from which the token will be slashed\\n  /// @param _token The address of the token that will be slashed\\n  /// @param _amount The amount of the token that will be slashed\\n  function slashTokenFromJob(\\n    address _job,\\n    address _token,\\n    uint256 _amount\\n  ) external;\\n\\n  /// @notice Allows governance or a slasher to slash liquidity from a job\\n  /// @param _job The address being slashed\\n  /// @param _liquidity The address of the liquidity that will be slashed\\n  /// @param _amount The amount of liquidity that will be slashed\\n  function slashLiquidityFromJob(\\n    address _job,\\n    address _liquidity,\\n    uint256 _amount\\n  ) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\ninterface IKeep3rJobs is IKeep3rJobOwnership, IKeep3rJobDisputable, IKeep3rJobMigration, IKeep3rJobManager, IKeep3rJobWorkable {\\n\\n}\\n\",\"keccak256\":\"0x272ec0a748dbd227797ca1e0b45d1af2d9d8b735128b07618f1e26143f239d4f\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "AlreadyAKeeper()": [
                {
                  "notice": "Throws when the address that is trying to register as a keeper is already a keeper"
                }
              ],
              "InsufficientFunds()": [
                {
                  "notice": "Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job"
                }
              ],
              "InsufficientJobTokenCredits()": [
                {
                  "notice": "Throws when the user tries to withdraw more tokens than it has"
                }
              ],
              "JobAlreadyAdded()": [
                {
                  "notice": "Throws when trying to add a job that has already been added"
                }
              ],
              "JobLiquidityInsufficient()": [
                {
                  "notice": "Throws when trying to remove more liquidity than the job has"
                }
              ],
              "JobLiquidityLessThanMin()": [
                {
                  "notice": "Throws when trying to add less liquidity than the minimum liquidity required"
                }
              ],
              "JobLiquidityUnexistent()": [
                {
                  "notice": "Throws when the job doesn't have the requested liquidity"
                }
              ],
              "JobMigrationImpossible()": [
                {
                  "notice": "Throws when the address of the job that requests to migrate wants to migrate to its same address"
                }
              ],
              "JobMigrationLocked()": [
                {
                  "notice": "Throws when cooldown between migrations has not yet passed"
                }
              ],
              "JobMigrationUnavailable()": [
                {
                  "notice": "Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping"
                }
              ],
              "JobTokenCreditsLocked()": [
                {
                  "notice": "Throws when the token withdraw cooldown has not yet passed"
                }
              ],
              "JobTokenInsufficient()": [
                {
                  "notice": "Throws when someone tries to slash more tokens than the job has"
                }
              ],
              "JobTokenUnexistent()": [
                {
                  "notice": "Throws when the token trying to be slashed doesn't exist"
                }
              ],
              "JobUnapproved()": [
                {
                  "notice": "Throws if the address claiming to be a job is not in the list of approved jobs"
                }
              ],
              "LiquidityPairApproved()": [
                {
                  "notice": "Throws when the liquidity being approved has already been approved"
                }
              ],
              "LiquidityPairUnapproved()": [
                {
                  "notice": "Throws when trying to add liquidity to an unapproved pool"
                }
              ],
              "LiquidityPairUnexistent()": [
                {
                  "notice": "Throws when the liquidity being removed has not been approved"
                }
              ],
              "OnlyJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the job owner"
                }
              ],
              "OnlyPendingJobOwner()": [
                {
                  "notice": "Throws when the caller of the function is not the pending job owner"
                }
              ],
              "TokenUnallowed()": [
                {
                  "notice": "Throws when the token is KP3R, as it should not be used for direct token payments"
                }
              ]
            },
            "events": {
              "JobAddition(address,address)": {
                "notice": "Emitted when Keep3rJobManager#addJob is called"
              },
              "JobMigrationRequested(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#migrateJob function is called"
              },
              "JobMigrationSuccessful(address,address)": {
                "notice": "Emitted when Keep3rJobMigration#acceptJobMigration function is called"
              },
              "JobOwnershipAssent(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#JobOwnershipAssent is called"
              },
              "JobOwnershipChange(address,address,address)": {
                "notice": "Emitted when Keep3rJobOwnership#changeJobOwnership is called"
              },
              "JobSlashLiquidity(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called"
              },
              "JobSlashToken(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobDisputable#slashTokenFromJob is called"
              },
              "KeeperValidation(uint256)": {
                "notice": "Emitted when a keeper is validated before a job"
              },
              "KeeperWork(address,address,address,uint256,uint256)": {
                "notice": "Emitted when a keeper works a job"
              },
              "LiquidityAddition(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityApproval(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called"
              },
              "LiquidityCreditsForced(address,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called"
              },
              "LiquidityCreditsReward(address,uint256,uint256,uint256)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called"
              },
              "LiquidityRevocation(address)": {
                "notice": "Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called"
              },
              "LiquidityWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called"
              },
              "TokenCreditAddition(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called"
              },
              "TokenCreditWithdrawal(address,address,address,uint256)": {
                "notice": "Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called"
              }
            },
            "kind": "user",
            "methods": {
              "acceptJobMigration(address,address)": {
                "notice": "Completes the migration process for a job"
              },
              "acceptJobOwnership(address)": {
                "notice": "The proposed address accepts to be the owner of the job"
              },
              "addJob(address)": {
                "notice": "Allows any caller to add a new job"
              },
              "addLiquidityToJob(address,address,uint256)": {
                "notice": "Allows anyone to fund a job with liquidity"
              },
              "addTokenCreditsToJob(address,address,uint256)": {
                "notice": "Add credit to a job to be paid out for work"
              },
              "approveLiquidity(address)": {
                "notice": "Approve a liquidity pair for being accepted in future"
              },
              "approvedLiquidities()": {
                "notice": "Lists liquidity pairs"
              },
              "bondedPayment(address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "changeJobOwnership(address,address)": {
                "notice": "Proposes a new address to be the owner of the job"
              },
              "directTokenPayment(address,address,uint256)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "forceLiquidityCreditsToJob(address,uint256)": {
                "notice": "Gifts liquidity credits to the specified job"
              },
              "isBondedKeeper(address,address,uint256,uint256,uint256)": {
                "notice": "Confirms if the current keeper is registered and has a minimum bond of any asset."
              },
              "isKeeper(address)": {
                "notice": "Confirms if the current keeper is registered"
              },
              "jobLiquidityCredits(address)": {
                "notice": "Returns the liquidity credits of a given job"
              },
              "jobOwner(address)": {
                "notice": "Maps the job to the owner of the job"
              },
              "jobPendingOwner(address)": {
                "notice": "Maps the job to its pending owner"
              },
              "jobPeriodCredits(address)": {
                "notice": "Returns the credits of a given job for the current period"
              },
              "jobTokenCreditsAddedAt(address,address)": {
                "notice": "Last block where tokens were added to the job"
              },
              "liquidityAmount(address,address)": {
                "notice": "Amount of liquidity in a specified job"
              },
              "migrateJob(address,address)": {
                "notice": "Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping"
              },
              "observeLiquidity(address)": {
                "notice": "Observes the current state of the liquidity pair being observed and updates TickCache with the information"
              },
              "pendingJobMigrations(address)": {
                "notice": "Maps the jobs that have requested a migration to the address they have requested to migrate to"
              },
              "quoteLiquidity(address,uint256)": {
                "notice": "Calculates how many credits should be rewarded periodically for a given liquidity amount"
              },
              "revokeLiquidity(address)": {
                "notice": "Revoke a liquidity pair from being accepted in future"
              },
              "rewardedAt(address)": {
                "notice": "Last time the job was rewarded liquidity credits"
              },
              "slashLiquidityFromJob(address,address,uint256)": {
                "notice": "Allows governance or a slasher to slash liquidity from a job"
              },
              "slashTokenFromJob(address,address,uint256)": {
                "notice": "Allows governance or slasher to slash a job specific token"
              },
              "totalJobCredits(address)": {
                "notice": "Calculates the total credits of a given job"
              },
              "unbondLiquidityFromJob(address,address,uint256)": {
                "notice": "Unbond liquidity for a job"
              },
              "withdrawLiquidityFromJob(address,address,address)": {
                "notice": "Withdraw liquidity from a job"
              },
              "withdrawTokenCreditsFromJob(address,address,uint256,address)": {
                "notice": "Withdraw credit from a job"
              },
              "worked(address)": {
                "notice": "Implemented by jobs to show that a keeper performed work"
              },
              "workedAt(address)": {
                "notice": "Last time the job was worked"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/interfaces/peripherals/IKeep3rKeepers.sol": {
        "IKeep3rKeeperDisputable": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "KeeperRevoke",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "KeeperSlash",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "revoke",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonded",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_bondAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_unbondAmount",
                  "type": "uint256"
                }
              ],
              "name": "slash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "KeeperRevoke(address,address)": {
                "params": {
                  "_keeper": "The address of the revoked keeper",
                  "_slasher": "The user that called Keep3rKeeperDisputable#revoke"
                }
              },
              "KeeperSlash(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of credits slashed from the keeper",
                  "_keeper": "The address of the slashed keeper",
                  "_slasher": "The user that called Keep3rKeeperDisputable#slash"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "revoke(address)": {
                "params": {
                  "_keeper": "The address being slashed"
                }
              },
              "slash(address,address,uint256,uint256)": {
                "params": {
                  "_bondAmount": "The bonded amount being slashed",
                  "_bonded": "The asset being slashed",
                  "_keeper": "The address being slashed",
                  "_unbondAmount": "The pending unbond amount being slashed"
                }
              }
            },
            "title": "Keep3rKeeperDisputable contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "revoke(address)": "74a8f103",
              "slash(address,address,uint256,uint256)": "c20297f0"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"KeeperRevoke\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"KeeperSlash\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonded\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_bondAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unbondAmount\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"KeeperRevoke(address,address)\":{\"params\":{\"_keeper\":\"The address of the revoked keeper\",\"_slasher\":\"The user that called Keep3rKeeperDisputable#revoke\"}},\"KeeperSlash(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of credits slashed from the keeper\",\"_keeper\":\"The address of the slashed keeper\",\"_slasher\":\"The user that called Keep3rKeeperDisputable#slash\"}}},\"kind\":\"dev\",\"methods\":{\"revoke(address)\":{\"params\":{\"_keeper\":\"The address being slashed\"}},\"slash(address,address,uint256,uint256)\":{\"params\":{\"_bondAmount\":\"The bonded amount being slashed\",\"_bonded\":\"The asset being slashed\",\"_keeper\":\"The address being slashed\",\"_unbondAmount\":\"The pending unbond amount being slashed\"}}},\"title\":\"Keep3rKeeperDisputable contract\",\"version\":1},\"userdoc\":{\"events\":{\"KeeperRevoke(address,address)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#revoke is called\"},\"KeeperSlash(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#slash is called\"}},\"kind\":\"user\",\"methods\":{\"revoke(address)\":{\"notice\":\"Blacklists a keeper from participating in the network\"},\"slash(address,address,uint256,uint256)\":{\"notice\":\"Allows governance to slash a keeper based on a dispute\"}},\"notice\":\"Handles the actions that can be taken on a disputed keeper\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":\"IKeep3rKeeperDisputable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "events": {
              "KeeperRevoke(address,address)": {
                "notice": "Emitted when Keep3rKeeperDisputable#revoke is called"
              },
              "KeeperSlash(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperDisputable#slash is called"
              }
            },
            "kind": "user",
            "methods": {
              "revoke(address)": {
                "notice": "Blacklists a keeper from participating in the network"
              },
              "slash(address,address,uint256,uint256)": {
                "notice": "Allows governance to slash a keeper based on a dispute"
              }
            },
            "notice": "Handles the actions that can be taken on a disputed keeper",
            "version": 1
          }
        },
        "IKeep3rKeeperFundable": {
          "abi": [
            {
              "inputs": [],
              "name": "AlreadyAJob",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Activation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_bond",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "Withdrawal",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "activate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "bond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "unbond",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bonding",
                  "type": "address"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "Activation(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of the asset the keeper has bonded",
                  "_bond": "The asset the keeper has bonded",
                  "_keeper": "The keeper that has been activated"
                }
              },
              "Withdrawal(address,address,uint256)": {
                "params": {
                  "_amount": "The amount of funds withdrawn",
                  "_bond": "The asset to withdraw from the bonding pool",
                  "_keeper": "The caller of Keep3rKeeperFundable#withdraw function"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "activate(address)": {
                "params": {
                  "_bonding": "The asset being activated as bond collateral"
                }
              },
              "bond(address,uint256)": {
                "params": {
                  "_amount": "The amount of bonding asset being bonded",
                  "_bonding": "The asset being bonded"
                }
              },
              "unbond(address,uint256)": {
                "params": {
                  "_amount": "Allows for partial unbonding",
                  "_bonding": "The asset being unbonded"
                }
              },
              "withdraw(address)": {
                "params": {
                  "_bonding": "The asset to withdraw from the bonding pool"
                }
              }
            },
            "title": "Keep3rKeeperFundable contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "activate(address)": "1c5a9d9c",
              "bond(address,uint256)": "a515366a",
              "unbond(address,uint256)": "a5d059ca",
              "withdraw(address)": "51cff8d9"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyAJob\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Activation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_bond\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"activate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bonding\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Activation(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of the asset the keeper has bonded\",\"_bond\":\"The asset the keeper has bonded\",\"_keeper\":\"The keeper that has been activated\"}},\"Withdrawal(address,address,uint256)\":{\"params\":{\"_amount\":\"The amount of funds withdrawn\",\"_bond\":\"The asset to withdraw from the bonding pool\",\"_keeper\":\"The caller of Keep3rKeeperFundable#withdraw function\"}}},\"kind\":\"dev\",\"methods\":{\"activate(address)\":{\"params\":{\"_bonding\":\"The asset being activated as bond collateral\"}},\"bond(address,uint256)\":{\"params\":{\"_amount\":\"The amount of bonding asset being bonded\",\"_bonding\":\"The asset being bonded\"}},\"unbond(address,uint256)\":{\"params\":{\"_amount\":\"Allows for partial unbonding\",\"_bonding\":\"The asset being unbonded\"}},\"withdraw(address)\":{\"params\":{\"_bonding\":\"The asset to withdraw from the bonding pool\"}}},\"title\":\"Keep3rKeeperFundable contract\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyAJob()\":[{\"notice\":\"Throws when the address that is trying to register as a job is already a job\"}]},\"events\":{\"Activation(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#activate is called\"},\"Withdrawal(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperFundable#withdraw is called\"}},\"kind\":\"user\",\"methods\":{\"activate(address)\":{\"notice\":\"End of the bonding process after bonding time has passed\"},\"bond(address,uint256)\":{\"notice\":\"Beginning of the bonding process\"},\"unbond(address,uint256)\":{\"notice\":\"Beginning of the unbonding process\"},\"withdraw(address)\":{\"notice\":\"Withdraw funds after unbonding has finished\"}},\"notice\":\"Handles the actions required to become a keeper\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":\"IKeep3rKeeperFundable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "AlreadyAJob()": [
                {
                  "notice": "Throws when the address that is trying to register as a job is already a job"
                }
              ]
            },
            "events": {
              "Activation(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#activate is called"
              },
              "Withdrawal(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperFundable#withdraw is called"
              }
            },
            "kind": "user",
            "methods": {
              "activate(address)": {
                "notice": "End of the bonding process after bonding time has passed"
              },
              "bond(address,uint256)": {
                "notice": "Beginning of the bonding process"
              },
              "unbond(address,uint256)": {
                "notice": "Beginning of the unbonding process"
              },
              "withdraw(address)": {
                "notice": "Withdraw funds after unbonding has finished"
              }
            },
            "notice": "Handles the actions required to become a keeper",
            "version": 1
          }
        },
        "IKeep3rKeepers": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "KeeperRevoke",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "name": "KeeperSlash",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                }
              ],
              "name": "revoke",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keeper",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_bonded",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_bondAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_unbondAmount",
                  "type": "uint256"
                }
              ],
              "name": "slash",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "devdoc": {
            "kind": "dev",
            "methods": {
              "revoke(address)": {
                "params": {
                  "_keeper": "The address being slashed"
                }
              },
              "slash(address,address,uint256,uint256)": {
                "params": {
                  "_bondAmount": "The bonded amount being slashed",
                  "_bonded": "The asset being slashed",
                  "_keeper": "The address being slashed",
                  "_unbondAmount": "The pending unbond amount being slashed"
                }
              }
            },
            "title": "Keep3rKeepers contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "revoke(address)": "74a8f103",
              "slash(address,address,uint256,uint256)": "c20297f0"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"KeeperRevoke\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"KeeperSlash\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bonded\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_bondAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_unbondAmount\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"revoke(address)\":{\"params\":{\"_keeper\":\"The address being slashed\"}},\"slash(address,address,uint256,uint256)\":{\"params\":{\"_bondAmount\":\"The bonded amount being slashed\",\"_bonded\":\"The asset being slashed\",\"_keeper\":\"The address being slashed\",\"_unbondAmount\":\"The pending unbond amount being slashed\"}}},\"title\":\"Keep3rKeepers contract\",\"version\":1},\"userdoc\":{\"events\":{\"KeeperRevoke(address,address)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#revoke is called\"},\"KeeperSlash(address,address,uint256)\":{\"notice\":\"Emitted when Keep3rKeeperDisputable#slash is called\"}},\"kind\":\"user\",\"methods\":{\"revoke(address)\":{\"notice\":\"Blacklists a keeper from participating in the network\"},\"slash(address,address,uint256,uint256)\":{\"notice\":\"Allows governance to slash a keeper based on a dispute\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":\"IKeep3rKeepers\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rKeepers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rKeeperFundable contract\\n/// @notice Handles the actions required to become a keeper\\ninterface IKeep3rKeeperFundable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#activate is called\\n  /// @param _keeper The keeper that has been activated\\n  /// @param _bond The asset the keeper has bonded\\n  /// @param _amount The amount of the asset the keeper has bonded\\n  event Activation(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperFundable#withdraw is called\\n  /// @param _keeper The caller of Keep3rKeeperFundable#withdraw function\\n  /// @param _bond The asset to withdraw from the bonding pool\\n  /// @param _amount The amount of funds withdrawn\\n  event Withdrawal(address indexed _keeper, address indexed _bond, uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws when the address that is trying to register as a job is already a job\\n  error AlreadyAJob();\\n\\n  // Methods\\n\\n  /// @notice Beginning of the bonding process\\n  /// @param _bonding The asset being bonded\\n  /// @param _amount The amount of bonding asset being bonded\\n  function bond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice Beginning of the unbonding process\\n  /// @param _bonding The asset being unbonded\\n  /// @param _amount Allows for partial unbonding\\n  function unbond(address _bonding, uint256 _amount) external;\\n\\n  /// @notice End of the bonding process after bonding time has passed\\n  /// @param _bonding The asset being activated as bond collateral\\n  function activate(address _bonding) external;\\n\\n  /// @notice Withdraw funds after unbonding has finished\\n  /// @param _bonding The asset to withdraw from the bonding pool\\n  function withdraw(address _bonding) external;\\n}\\n\\n/// @title Keep3rKeeperDisputable contract\\n/// @notice Handles the actions that can be taken on a disputed keeper\\ninterface IKeep3rKeeperDisputable {\\n  // Events\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#slash is called\\n  /// @param _keeper The address of the slashed keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#slash\\n  /// @param _amount The amount of credits slashed from the keeper\\n  event KeeperSlash(address indexed _keeper, address indexed _slasher, uint256 _amount);\\n\\n  /// @notice Emitted when Keep3rKeeperDisputable#revoke is called\\n  /// @param _keeper The address of the revoked keeper\\n  /// @param _slasher The user that called Keep3rKeeperDisputable#revoke\\n  event KeeperRevoke(address indexed _keeper, address indexed _slasher);\\n\\n  // Methods\\n\\n  /// @notice Allows governance to slash a keeper based on a dispute\\n  /// @param _keeper The address being slashed\\n  /// @param _bonded The asset being slashed\\n  /// @param _bondAmount The bonded amount being slashed\\n  /// @param _unbondAmount The pending unbond amount being slashed\\n  function slash(\\n    address _keeper,\\n    address _bonded,\\n    uint256 _bondAmount,\\n    uint256 _unbondAmount\\n  ) external;\\n\\n  /// @notice Blacklists a keeper from participating in the network\\n  /// @param _keeper The address being slashed\\n  function revoke(address _keeper) external;\\n}\\n\\n// solhint-disable-next-line no-empty-blocks\\n\\n/// @title Keep3rKeepers contract\\ninterface IKeep3rKeepers is IKeep3rKeeperDisputable {\\n\\n}\\n\",\"keccak256\":\"0x01dfc90aeb6759cf0a18e05a4c7256b59e9ce863c102196ec38ec65c9b08be72\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "events": {
              "KeeperRevoke(address,address)": {
                "notice": "Emitted when Keep3rKeeperDisputable#revoke is called"
              },
              "KeeperSlash(address,address,uint256)": {
                "notice": "Emitted when Keep3rKeeperDisputable#slash is called"
              }
            },
            "kind": "user",
            "methods": {
              "revoke(address)": {
                "notice": "Blacklists a keeper from participating in the network"
              },
              "slash(address,address,uint256,uint256)": {
                "notice": "Allows governance to slash a keeper based on a dispute"
              }
            },
            "version": 1
          }
        }
      },
      "solidity/interfaces/peripherals/IKeep3rParameters.sol": {
        "IKeep3rParameters": {
          "abi": [
            {
              "inputs": [],
              "name": "BondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "Disputed",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MinRewardPeriod",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsLocked",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UnbondsUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ZeroAddress",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_bondTime",
                  "type": "uint256"
                }
              ],
              "name": "BondTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "FeeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "InflationPeriodChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "Keep3rHelperChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1Change",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "Keep3rV1ProxyChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "Kp3rWethPoolChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityMinimumChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "RewardPeriodTimeChange",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "_unbondTime",
                  "type": "uint256"
                }
              ],
              "name": "UnbondTimeChange",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "bondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_days",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "inflationPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_period",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rHelper",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "keep3rV1Proxy",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "kp3rWethPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityMinimum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_amount",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "rewardPeriodTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_days",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_bond",
                  "type": "uint256"
                }
              ],
              "name": "setBondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_inflationPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setInflationPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rHelper",
                  "type": "address"
                }
              ],
              "name": "setKeep3rHelper",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_keep3rV1Proxy",
                  "type": "address"
                }
              ],
              "name": "setKeep3rV1Proxy",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_kp3rWethPool",
                  "type": "address"
                }
              ],
              "name": "setKp3rWethPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_liquidityMinimum",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityMinimum",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_rewardPeriodTime",
                  "type": "uint256"
                }
              ],
              "name": "setRewardPeriodTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unbond",
                  "type": "uint256"
                }
              ],
              "name": "setUnbondTime",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unbondTime",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "_days",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "BondTimeChange(uint256)": {
                "params": {
                  "_bondTime": "The new bondTime"
                }
              },
              "FeeChange(uint256)": {
                "params": {
                  "_fee": "The new token credits fee"
                }
              },
              "InflationPeriodChange(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflationPeriod"
                }
              },
              "Keep3rHelperChange(address)": {
                "params": {
                  "_keep3rHelper": "The address of Keep3rHelper's contract"
                }
              },
              "Keep3rV1Change(address)": {
                "params": {
                  "_keep3rV1": "The address of Keep3rV1's contract"
                }
              },
              "Keep3rV1ProxyChange(address)": {
                "params": {
                  "_keep3rV1Proxy": "The address of Keep3rV1Proxy's contract"
                }
              },
              "Kp3rWethPoolChange(address)": {
                "params": {
                  "_kp3rWethPool": "The address of the KP3R-WETH pool"
                }
              },
              "LiquidityMinimumChange(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new _liquidityMinimum"
                }
              },
              "RewardPeriodTimeChange(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new _rewardPeriodTime"
                }
              },
              "UnbondTimeChange(uint256)": {
                "params": {
                  "_unbondTime": "The new _unbondTime"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "bondTime()": {
                "returns": {
                  "_days": "The required bondTime in days"
                }
              },
              "fee()": {
                "returns": {
                  "_amount": "The fee amount to be sent to governance when a user adds liquidity to a job"
                }
              },
              "inflationPeriod()": {
                "returns": {
                  "_period": "The denominator used to regulate the emission of KP3R"
                }
              },
              "keep3rHelper()": {
                "returns": {
                  "_keep3rHelper": "The address of Keep3rHelper's contract"
                }
              },
              "keep3rV1()": {
                "returns": {
                  "_keep3rV1": "The address of Keep3rV1's contract"
                }
              },
              "keep3rV1Proxy()": {
                "returns": {
                  "_keep3rV1Proxy": "The address of Keep3rV1Proxy's contract"
                }
              },
              "kp3rWethPool()": {
                "returns": {
                  "_kp3rWethPool": "The address of KP3R-WETH pool"
                }
              },
              "liquidityMinimum()": {
                "returns": {
                  "_amount": "The minimum amount of liquidity in KP3R"
                }
              },
              "rewardPeriodTime()": {
                "returns": {
                  "_days": "The reward period in days"
                }
              },
              "setBondTime(uint256)": {
                "params": {
                  "_bond": "The new bond time"
                }
              },
              "setFee(uint256)": {
                "params": {
                  "_fee": "The new fee"
                }
              },
              "setInflationPeriod(uint256)": {
                "params": {
                  "_inflationPeriod": "The new inflation period"
                }
              },
              "setKeep3rHelper(address)": {
                "params": {
                  "_keep3rHelper": "The Keep3rHelper address"
                }
              },
              "setKeep3rV1(address)": {
                "params": {
                  "_keep3rV1": "The Keep3rV1 address"
                }
              },
              "setKeep3rV1Proxy(address)": {
                "params": {
                  "_keep3rV1Proxy": "The Keep3rV1Proxy address"
                }
              },
              "setKp3rWethPool(address)": {
                "params": {
                  "_kp3rWethPool": "The KP3R-WETH pool address"
                }
              },
              "setLiquidityMinimum(uint256)": {
                "params": {
                  "_liquidityMinimum": "The new minimum amount of liquidity"
                }
              },
              "setRewardPeriodTime(uint256)": {
                "params": {
                  "_rewardPeriodTime": "The new amount of time required to pass between rewards"
                }
              },
              "setUnbondTime(uint256)": {
                "params": {
                  "_unbond": "The new unbond time"
                }
              },
              "unbondTime()": {
                "returns": {
                  "_days": "The required unbondTime in days"
                }
              }
            },
            "title": "Keep3rParameters contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "bondTime()": "5ebe23f0",
              "fee()": "ddca3f43",
              "inflationPeriod()": "fc253d2b",
              "keep3rHelper()": "f11a1d1a",
              "keep3rV1()": "1ef94b91",
              "keep3rV1Proxy()": "c7ae40d0",
              "kp3rWethPool()": "7b40c913",
              "liquidityMinimum()": "633fb68f",
              "rewardPeriodTime()": "768b5d90",
              "setBondTime(uint256)": "b7e77340",
              "setFee(uint256)": "69fe0e2d",
              "setInflationPeriod(uint256)": "b2392233",
              "setKeep3rHelper(address)": "72da828a",
              "setKeep3rV1(address)": "ec00cdfc",
              "setKeep3rV1Proxy(address)": "cb4be2bb",
              "setKp3rWethPool(address)": "160e1e31",
              "setLiquidityMinimum(uint256)": "ebbb6194",
              "setRewardPeriodTime(uint256)": "cb54694d",
              "setUnbondTime(uint256)": "8fe204dd",
              "unbondTime()": "a7d2e784"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disputed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinRewardPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnbondsUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_bondTime\",\"type\":\"uint256\"}],\"name\":\"BondTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"FeeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"InflationPeriodChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"Keep3rHelperChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"Keep3rV1Change\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"Keep3rV1ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"Kp3rWethPoolChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"LiquidityMinimumChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"RewardPeriodTimeChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_unbondTime\",\"type\":\"uint256\"}],\"name\":\"UnbondTimeChange\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"bondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_days\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inflationPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3rV1Proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"kp3rWethPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidityMinimum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPeriodTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_days\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bond\",\"type\":\"uint256\"}],\"name\":\"setBondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inflationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInflationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rHelper\",\"type\":\"address\"}],\"name\":\"setKeep3rHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1\",\"type\":\"address\"}],\"name\":\"setKeep3rV1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3rV1Proxy\",\"type\":\"address\"}],\"name\":\"setKeep3rV1Proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_kp3rWethPool\",\"type\":\"address\"}],\"name\":\"setKp3rWethPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidityMinimum\",\"type\":\"uint256\"}],\"name\":\"setLiquidityMinimum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardPeriodTime\",\"type\":\"uint256\"}],\"name\":\"setRewardPeriodTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbond\",\"type\":\"uint256\"}],\"name\":\"setUnbondTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_days\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"BondTimeChange(uint256)\":{\"params\":{\"_bondTime\":\"The new bondTime\"}},\"FeeChange(uint256)\":{\"params\":{\"_fee\":\"The new token credits fee\"}},\"InflationPeriodChange(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflationPeriod\"}},\"Keep3rHelperChange(address)\":{\"params\":{\"_keep3rHelper\":\"The address of Keep3rHelper's contract\"}},\"Keep3rV1Change(address)\":{\"params\":{\"_keep3rV1\":\"The address of Keep3rV1's contract\"}},\"Keep3rV1ProxyChange(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The address of Keep3rV1Proxy's contract\"}},\"Kp3rWethPoolChange(address)\":{\"params\":{\"_kp3rWethPool\":\"The address of the KP3R-WETH pool\"}},\"LiquidityMinimumChange(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new _liquidityMinimum\"}},\"RewardPeriodTimeChange(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new _rewardPeriodTime\"}},\"UnbondTimeChange(uint256)\":{\"params\":{\"_unbondTime\":\"The new _unbondTime\"}}},\"kind\":\"dev\",\"methods\":{\"bondTime()\":{\"returns\":{\"_days\":\"The required bondTime in days\"}},\"fee()\":{\"returns\":{\"_amount\":\"The fee amount to be sent to governance when a user adds liquidity to a job\"}},\"inflationPeriod()\":{\"returns\":{\"_period\":\"The denominator used to regulate the emission of KP3R\"}},\"keep3rHelper()\":{\"returns\":{\"_keep3rHelper\":\"The address of Keep3rHelper's contract\"}},\"keep3rV1()\":{\"returns\":{\"_keep3rV1\":\"The address of Keep3rV1's contract\"}},\"keep3rV1Proxy()\":{\"returns\":{\"_keep3rV1Proxy\":\"The address of Keep3rV1Proxy's contract\"}},\"kp3rWethPool()\":{\"returns\":{\"_kp3rWethPool\":\"The address of KP3R-WETH pool\"}},\"liquidityMinimum()\":{\"returns\":{\"_amount\":\"The minimum amount of liquidity in KP3R\"}},\"rewardPeriodTime()\":{\"returns\":{\"_days\":\"The reward period in days\"}},\"setBondTime(uint256)\":{\"params\":{\"_bond\":\"The new bond time\"}},\"setFee(uint256)\":{\"params\":{\"_fee\":\"The new fee\"}},\"setInflationPeriod(uint256)\":{\"params\":{\"_inflationPeriod\":\"The new inflation period\"}},\"setKeep3rHelper(address)\":{\"params\":{\"_keep3rHelper\":\"The Keep3rHelper address\"}},\"setKeep3rV1(address)\":{\"params\":{\"_keep3rV1\":\"The Keep3rV1 address\"}},\"setKeep3rV1Proxy(address)\":{\"params\":{\"_keep3rV1Proxy\":\"The Keep3rV1Proxy address\"}},\"setKp3rWethPool(address)\":{\"params\":{\"_kp3rWethPool\":\"The KP3R-WETH pool address\"}},\"setLiquidityMinimum(uint256)\":{\"params\":{\"_liquidityMinimum\":\"The new minimum amount of liquidity\"}},\"setRewardPeriodTime(uint256)\":{\"params\":{\"_rewardPeriodTime\":\"The new amount of time required to pass between rewards\"}},\"setUnbondTime(uint256)\":{\"params\":{\"_unbond\":\"The new unbond time\"}},\"unbondTime()\":{\"returns\":{\"_days\":\"The required unbondTime in days\"}}},\"title\":\"Keep3rParameters contract\",\"version\":1},\"userdoc\":{\"errors\":{\"BondsLocked()\":[{\"notice\":\"Throws if the time required to bond an asset has not passed yet\"}],\"BondsUnexistent()\":[{\"notice\":\"Throws if there are no bonded assets\"}],\"Disputed()\":[{\"notice\":\"Throws if either a job or a keeper is disputed\"}],\"MinRewardPeriod()\":[{\"notice\":\"Throws if the reward period is less than the minimum reward period time\"}],\"UnbondsLocked()\":[{\"notice\":\"Throws if the time required to withdraw the bonds has not passed yet\"}],\"UnbondsUnexistent()\":[{\"notice\":\"Throws if there are no bonds to withdraw\"}],\"ZeroAddress()\":[{\"notice\":\"Throws if a variable is assigned to the zero address\"}]},\"events\":{\"BondTimeChange(uint256)\":{\"notice\":\"Emitted when bondTime is changed\"},\"FeeChange(uint256)\":{\"notice\":\"Emitted when the fee is changed\"},\"InflationPeriodChange(uint256)\":{\"notice\":\"Emitted when the inflationPeriod is changed\"},\"Keep3rHelperChange(address)\":{\"notice\":\"Emitted when the Keep3rHelper address is changed\"},\"Keep3rV1Change(address)\":{\"notice\":\"Emitted when the Keep3rV1 address is changed\"},\"Keep3rV1ProxyChange(address)\":{\"notice\":\"Emitted when the Keep3rV1Proxy address is changed\"},\"Kp3rWethPoolChange(address)\":{\"notice\":\"Emitted when the KP3R-WETH pool address is changed\"},\"LiquidityMinimumChange(uint256)\":{\"notice\":\"Emitted when _liquidityMinimum is changed\"},\"RewardPeriodTimeChange(uint256)\":{\"notice\":\"Emitted when _rewardPeriodTime is changed\"},\"UnbondTimeChange(uint256)\":{\"notice\":\"Emitted when _unbondTime is changed\"}},\"kind\":\"user\",\"methods\":{\"bondTime()\":{\"notice\":\"The amount of time required to pass after a keeper has bonded assets for it to be able to activate\"},\"fee()\":{\"notice\":\"The fee to be sent to governance when a user adds liquidity to a job\"},\"inflationPeriod()\":{\"notice\":\"The inflation period is the denominator used to regulate the emission of KP3R\"},\"keep3rHelper()\":{\"notice\":\"Address of Keep3rHelper's contract\"},\"keep3rV1()\":{\"notice\":\"Address of Keep3rV1's contract\"},\"keep3rV1Proxy()\":{\"notice\":\"Address of Keep3rV1Proxy's contract\"},\"kp3rWethPool()\":{\"notice\":\"Address of the KP3R-WETH pool\"},\"liquidityMinimum()\":{\"notice\":\"The minimum amount of liquidity required to fund a job per liquidity\"},\"rewardPeriodTime()\":{\"notice\":\"The amount of time between each scheduled credits reward given to a job\"},\"setBondTime(uint256)\":{\"notice\":\"Sets the bond time required to activate as a keeper\"},\"setFee(uint256)\":{\"notice\":\"Sets the new fee\"},\"setInflationPeriod(uint256)\":{\"notice\":\"Sets the new inflation period\"},\"setKeep3rHelper(address)\":{\"notice\":\"Sets the Keep3rHelper address\"},\"setKeep3rV1(address)\":{\"notice\":\"Sets the Keep3rV1 address\"},\"setKeep3rV1Proxy(address)\":{\"notice\":\"Sets the Keep3rV1Proxy address\"},\"setKp3rWethPool(address)\":{\"notice\":\"Sets the KP3R-WETH pool address\"},\"setLiquidityMinimum(uint256)\":{\"notice\":\"Sets the minimum amount of liquidity required to fund a job\"},\"setRewardPeriodTime(uint256)\":{\"notice\":\"Sets the time required to pass between rewards for jobs\"},\"setUnbondTime(uint256)\":{\"notice\":\"Sets the unbond time required unbond what has been bonded\"},\"unbondTime()\":{\"notice\":\"The amount of time required to pass before a keeper can unbond what he has bonded\"}},\"notice\":\"Handles and sets all the required parameters for Keep3r\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":\"IKeep3rParameters\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IBaseErrors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.4 <0.9.0;\\n\\ninterface IBaseErrors {\\n  /// @notice Throws if a variable is assigned to the zero address\\n  error ZeroAddress();\\n}\\n\",\"keccak256\":\"0x9130019a08d9eaedfb920a323fed5c7f409736cd918f1a32921c93551b3ee00e\",\"license\":\"MIT\"},\"solidity/interfaces/peripherals/IKeep3rParameters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\nimport './IBaseErrors.sol';\\n\\n/// @title Keep3rParameters contract\\n/// @notice Handles and sets all the required parameters for Keep3r\\n\\ninterface IKeep3rParameters is IBaseErrors {\\n  // Events\\n\\n  /// @notice Emitted when the Keep3rHelper address is changed\\n  /// @param _keep3rHelper The address of Keep3rHelper's contract\\n  event Keep3rHelperChange(address _keep3rHelper);\\n\\n  /// @notice Emitted when the Keep3rV1 address is changed\\n  /// @param _keep3rV1 The address of Keep3rV1's contract\\n  event Keep3rV1Change(address _keep3rV1);\\n\\n  /// @notice Emitted when the Keep3rV1Proxy address is changed\\n  /// @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  event Keep3rV1ProxyChange(address _keep3rV1Proxy);\\n\\n  /// @notice Emitted when the KP3R-WETH pool address is changed\\n  /// @param _kp3rWethPool The address of the KP3R-WETH pool\\n  event Kp3rWethPoolChange(address _kp3rWethPool);\\n\\n  /// @notice Emitted when bondTime is changed\\n  /// @param _bondTime The new bondTime\\n  event BondTimeChange(uint256 _bondTime);\\n\\n  /// @notice Emitted when _liquidityMinimum is changed\\n  /// @param _liquidityMinimum The new _liquidityMinimum\\n  event LiquidityMinimumChange(uint256 _liquidityMinimum);\\n\\n  /// @notice Emitted when _unbondTime is changed\\n  /// @param _unbondTime The new _unbondTime\\n  event UnbondTimeChange(uint256 _unbondTime);\\n\\n  /// @notice Emitted when _rewardPeriodTime is changed\\n  /// @param _rewardPeriodTime The new _rewardPeriodTime\\n  event RewardPeriodTimeChange(uint256 _rewardPeriodTime);\\n\\n  /// @notice Emitted when the inflationPeriod is changed\\n  /// @param _inflationPeriod The new inflationPeriod\\n  event InflationPeriodChange(uint256 _inflationPeriod);\\n\\n  /// @notice Emitted when the fee is changed\\n  /// @param _fee The new token credits fee\\n  event FeeChange(uint256 _fee);\\n\\n  // Variables\\n\\n  /// @notice Address of Keep3rHelper's contract\\n  /// @return _keep3rHelper The address of Keep3rHelper's contract\\n  function keep3rHelper() external view returns (address _keep3rHelper);\\n\\n  /// @notice Address of Keep3rV1's contract\\n  /// @return _keep3rV1 The address of Keep3rV1's contract\\n  function keep3rV1() external view returns (address _keep3rV1);\\n\\n  /// @notice Address of Keep3rV1Proxy's contract\\n  /// @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract\\n  function keep3rV1Proxy() external view returns (address _keep3rV1Proxy);\\n\\n  /// @notice Address of the KP3R-WETH pool\\n  /// @return _kp3rWethPool The address of KP3R-WETH pool\\n  function kp3rWethPool() external view returns (address _kp3rWethPool);\\n\\n  /// @notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\\n  /// @return _days The required bondTime in days\\n  function bondTime() external view returns (uint256 _days);\\n\\n  /// @notice The amount of time required to pass before a keeper can unbond what he has bonded\\n  /// @return _days The required unbondTime in days\\n  function unbondTime() external view returns (uint256 _days);\\n\\n  /// @notice The minimum amount of liquidity required to fund a job per liquidity\\n  /// @return _amount The minimum amount of liquidity in KP3R\\n  function liquidityMinimum() external view returns (uint256 _amount);\\n\\n  /// @notice The amount of time between each scheduled credits reward given to a job\\n  /// @return _days The reward period in days\\n  function rewardPeriodTime() external view returns (uint256 _days);\\n\\n  /// @notice The inflation period is the denominator used to regulate the emission of KP3R\\n  /// @return _period The denominator used to regulate the emission of KP3R\\n  function inflationPeriod() external view returns (uint256 _period);\\n\\n  /// @notice The fee to be sent to governance when a user adds liquidity to a job\\n  /// @return _amount The fee amount to be sent to governance when a user adds liquidity to a job\\n  function fee() external view returns (uint256 _amount);\\n\\n  // Errors\\n\\n  /// @notice Throws if the reward period is less than the minimum reward period time\\n  error MinRewardPeriod();\\n\\n  /// @notice Throws if either a job or a keeper is disputed\\n  error Disputed();\\n\\n  /// @notice Throws if there are no bonded assets\\n  error BondsUnexistent();\\n\\n  /// @notice Throws if the time required to bond an asset has not passed yet\\n  error BondsLocked();\\n\\n  /// @notice Throws if there are no bonds to withdraw\\n  error UnbondsUnexistent();\\n\\n  /// @notice Throws if the time required to withdraw the bonds has not passed yet\\n  error UnbondsLocked();\\n\\n  // Methods\\n\\n  /// @notice Sets the Keep3rHelper address\\n  /// @param _keep3rHelper The Keep3rHelper address\\n  function setKeep3rHelper(address _keep3rHelper) external;\\n\\n  /// @notice Sets the Keep3rV1 address\\n  /// @param _keep3rV1 The Keep3rV1 address\\n  function setKeep3rV1(address _keep3rV1) external;\\n\\n  /// @notice Sets the Keep3rV1Proxy address\\n  /// @param _keep3rV1Proxy The Keep3rV1Proxy address\\n  function setKeep3rV1Proxy(address _keep3rV1Proxy) external;\\n\\n  /// @notice Sets the KP3R-WETH pool address\\n  /// @param _kp3rWethPool The KP3R-WETH pool address\\n  function setKp3rWethPool(address _kp3rWethPool) external;\\n\\n  /// @notice Sets the bond time required to activate as a keeper\\n  /// @param _bond The new bond time\\n  function setBondTime(uint256 _bond) external;\\n\\n  /// @notice Sets the unbond time required unbond what has been bonded\\n  /// @param _unbond The new unbond time\\n  function setUnbondTime(uint256 _unbond) external;\\n\\n  /// @notice Sets the minimum amount of liquidity required to fund a job\\n  /// @param _liquidityMinimum The new minimum amount of liquidity\\n  function setLiquidityMinimum(uint256 _liquidityMinimum) external;\\n\\n  /// @notice Sets the time required to pass between rewards for jobs\\n  /// @param _rewardPeriodTime The new amount of time required to pass between rewards\\n  function setRewardPeriodTime(uint256 _rewardPeriodTime) external;\\n\\n  /// @notice Sets the new inflation period\\n  /// @param _inflationPeriod The new inflation period\\n  function setInflationPeriod(uint256 _inflationPeriod) external;\\n\\n  /// @notice Sets the new fee\\n  /// @param _fee The new fee\\n  function setFee(uint256 _fee) external;\\n}\\n\",\"keccak256\":\"0x45111162f19d1cd3d1c708a4f0f80a7e85da91e396e74b9720a5ce8525d9a1bf\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "BondsLocked()": [
                {
                  "notice": "Throws if the time required to bond an asset has not passed yet"
                }
              ],
              "BondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonded assets"
                }
              ],
              "Disputed()": [
                {
                  "notice": "Throws if either a job or a keeper is disputed"
                }
              ],
              "MinRewardPeriod()": [
                {
                  "notice": "Throws if the reward period is less than the minimum reward period time"
                }
              ],
              "UnbondsLocked()": [
                {
                  "notice": "Throws if the time required to withdraw the bonds has not passed yet"
                }
              ],
              "UnbondsUnexistent()": [
                {
                  "notice": "Throws if there are no bonds to withdraw"
                }
              ],
              "ZeroAddress()": [
                {
                  "notice": "Throws if a variable is assigned to the zero address"
                }
              ]
            },
            "events": {
              "BondTimeChange(uint256)": {
                "notice": "Emitted when bondTime is changed"
              },
              "FeeChange(uint256)": {
                "notice": "Emitted when the fee is changed"
              },
              "InflationPeriodChange(uint256)": {
                "notice": "Emitted when the inflationPeriod is changed"
              },
              "Keep3rHelperChange(address)": {
                "notice": "Emitted when the Keep3rHelper address is changed"
              },
              "Keep3rV1Change(address)": {
                "notice": "Emitted when the Keep3rV1 address is changed"
              },
              "Keep3rV1ProxyChange(address)": {
                "notice": "Emitted when the Keep3rV1Proxy address is changed"
              },
              "Kp3rWethPoolChange(address)": {
                "notice": "Emitted when the KP3R-WETH pool address is changed"
              },
              "LiquidityMinimumChange(uint256)": {
                "notice": "Emitted when _liquidityMinimum is changed"
              },
              "RewardPeriodTimeChange(uint256)": {
                "notice": "Emitted when _rewardPeriodTime is changed"
              },
              "UnbondTimeChange(uint256)": {
                "notice": "Emitted when _unbondTime is changed"
              }
            },
            "kind": "user",
            "methods": {
              "bondTime()": {
                "notice": "The amount of time required to pass after a keeper has bonded assets for it to be able to activate"
              },
              "fee()": {
                "notice": "The fee to be sent to governance when a user adds liquidity to a job"
              },
              "inflationPeriod()": {
                "notice": "The inflation period is the denominator used to regulate the emission of KP3R"
              },
              "keep3rHelper()": {
                "notice": "Address of Keep3rHelper's contract"
              },
              "keep3rV1()": {
                "notice": "Address of Keep3rV1's contract"
              },
              "keep3rV1Proxy()": {
                "notice": "Address of Keep3rV1Proxy's contract"
              },
              "kp3rWethPool()": {
                "notice": "Address of the KP3R-WETH pool"
              },
              "liquidityMinimum()": {
                "notice": "The minimum amount of liquidity required to fund a job per liquidity"
              },
              "rewardPeriodTime()": {
                "notice": "The amount of time between each scheduled credits reward given to a job"
              },
              "setBondTime(uint256)": {
                "notice": "Sets the bond time required to activate as a keeper"
              },
              "setFee(uint256)": {
                "notice": "Sets the new fee"
              },
              "setInflationPeriod(uint256)": {
                "notice": "Sets the new inflation period"
              },
              "setKeep3rHelper(address)": {
                "notice": "Sets the Keep3rHelper address"
              },
              "setKeep3rV1(address)": {
                "notice": "Sets the Keep3rV1 address"
              },
              "setKeep3rV1Proxy(address)": {
                "notice": "Sets the Keep3rV1Proxy address"
              },
              "setKp3rWethPool(address)": {
                "notice": "Sets the KP3R-WETH pool address"
              },
              "setLiquidityMinimum(uint256)": {
                "notice": "Sets the minimum amount of liquidity required to fund a job"
              },
              "setRewardPeriodTime(uint256)": {
                "notice": "Sets the time required to pass between rewards for jobs"
              },
              "setUnbondTime(uint256)": {
                "notice": "Sets the unbond time required unbond what has been bonded"
              },
              "unbondTime()": {
                "notice": "The amount of time required to pass before a keeper can unbond what he has bonded"
              }
            },
            "notice": "Handles and sets all the required parameters for Keep3r",
            "version": 1
          }
        }
      },
      "solidity/interfaces/peripherals/IKeep3rRoles.sol": {
        "IKeep3rRoles": {
          "abi": [
            {
              "inputs": [],
              "name": "DisputerExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "DisputerUnexistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlyDisputer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OnlySlasher",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherExistent",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "SlasherUnexistent",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "DisputerRemoved",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherAdded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "SlasherRemoved",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "addDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "addSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "disputers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isDisputer",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_disputer",
                  "type": "address"
                }
              ],
              "name": "removeDisputer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "removeSlasher",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_slasher",
                  "type": "address"
                }
              ],
              "name": "slashers",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "_isSlasher",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "devdoc": {
            "events": {
              "DisputerAdded(address)": {
                "params": {
                  "_disputer": "Address of the added disputer"
                }
              },
              "DisputerRemoved(address)": {
                "params": {
                  "_disputer": "Address of the removed disputer"
                }
              },
              "SlasherAdded(address)": {
                "params": {
                  "_slasher": "Address of the added slasher"
                }
              },
              "SlasherRemoved(address)": {
                "params": {
                  "_slasher": "Address of the removed slasher"
                }
              }
            },
            "kind": "dev",
            "methods": {
              "disputers(address)": {
                "params": {
                  "_disputer": "Address being checked as a disputer"
                },
                "returns": {
                  "_isDisputer": "Whether the address is a disputer or not"
                }
              },
              "slashers(address)": {
                "params": {
                  "_slasher": "Address being checked as a slasher"
                },
                "returns": {
                  "_isSlasher": "Whether the address is a slasher or not"
                }
              }
            },
            "title": "Keep3rRoles contract",
            "version": 1
          },
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "addDisputer(address)": "9d5c33d8",
              "addSlasher(address)": "68a9f19c",
              "disputers(address)": "274a8db4",
              "removeDisputer(address)": "f0f346b9",
              "removeSlasher(address)": "aac6aa9c",
              "slashers(address)": "b87fcbff"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DisputerExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DisputerUnexistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDisputer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySlasher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherExistent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlasherUnexistent\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"DisputerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"SlasherRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"addDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"addSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"disputers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isDisputer\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_disputer\",\"type\":\"address\"}],\"name\":\"removeDisputer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"removeSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"slashers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isSlasher\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DisputerAdded(address)\":{\"params\":{\"_disputer\":\"Address of the added disputer\"}},\"DisputerRemoved(address)\":{\"params\":{\"_disputer\":\"Address of the removed disputer\"}},\"SlasherAdded(address)\":{\"params\":{\"_slasher\":\"Address of the added slasher\"}},\"SlasherRemoved(address)\":{\"params\":{\"_slasher\":\"Address of the removed slasher\"}}},\"kind\":\"dev\",\"methods\":{\"disputers(address)\":{\"params\":{\"_disputer\":\"Address being checked as a disputer\"},\"returns\":{\"_isDisputer\":\"Whether the address is a disputer or not\"}},\"slashers(address)\":{\"params\":{\"_slasher\":\"Address being checked as a slasher\"},\"returns\":{\"_isSlasher\":\"Whether the address is a slasher or not\"}}},\"title\":\"Keep3rRoles contract\",\"version\":1},\"userdoc\":{\"errors\":{\"DisputerExistent()\":[{\"notice\":\"Throws if the address is already a registered disputer\"}],\"DisputerUnexistent()\":[{\"notice\":\"Throws if caller is not a registered disputer\"}],\"OnlyDisputer()\":[{\"notice\":\"Throws if the msg.sender is not a disputer or is not a part of governance\"}],\"OnlySlasher()\":[{\"notice\":\"Throws if the msg.sender is not a slasher or is not a part of governance\"}],\"SlasherExistent()\":[{\"notice\":\"Throws if the address is already a registered slasher\"}],\"SlasherUnexistent()\":[{\"notice\":\"Throws if caller is not a registered slasher\"}]},\"events\":{\"DisputerAdded(address)\":{\"notice\":\"Emitted when a disputer is added\"},\"DisputerRemoved(address)\":{\"notice\":\"Emitted when a disputer is removed\"},\"SlasherAdded(address)\":{\"notice\":\"Emitted when a slasher is added\"},\"SlasherRemoved(address)\":{\"notice\":\"Emitted when a slasher is removed\"}},\"kind\":\"user\",\"methods\":{\"addDisputer(address)\":{\"notice\":\"Registers a disputer by updating the disputers mapping\"},\"addSlasher(address)\":{\"notice\":\"Registers a slasher by updating the slashers mapping\"},\"disputers(address)\":{\"notice\":\"Tracks whether the address is a disputer or not\"},\"removeDisputer(address)\":{\"notice\":\"Removes a disputer by updating the disputers mapping\"},\"removeSlasher(address)\":{\"notice\":\"Removes a slasher by updating the slashers mapping\"},\"slashers(address)\":{\"notice\":\"Tracks whether the address is a slasher or not\"}},\"notice\":\"Manages the Keep3r specific roles\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":\"IKeep3rRoles\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":33},\"remappings\":[]},\"sources\":{\"solidity/interfaces/peripherals/IKeep3rRoles.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4 <0.9.0;\\n\\n/// @title Keep3rRoles contract\\n/// @notice Manages the Keep3r specific roles\\ninterface IKeep3rRoles {\\n  // Events\\n\\n  /// @notice Emitted when a slasher is added\\n  /// @param _slasher Address of the added slasher\\n  event SlasherAdded(address _slasher);\\n\\n  /// @notice Emitted when a slasher is removed\\n  /// @param _slasher Address of the removed slasher\\n  event SlasherRemoved(address _slasher);\\n\\n  /// @notice Emitted when a disputer is added\\n  /// @param _disputer Address of the added disputer\\n  event DisputerAdded(address _disputer);\\n\\n  /// @notice Emitted when a disputer is removed\\n  /// @param _disputer Address of the removed disputer\\n  event DisputerRemoved(address _disputer);\\n\\n  // Variables\\n\\n  /// @notice Tracks whether the address is a slasher or not\\n  /// @param _slasher Address being checked as a slasher\\n  /// @return _isSlasher Whether the address is a slasher or not\\n  function slashers(address _slasher) external view returns (bool _isSlasher);\\n\\n  /// @notice Tracks whether the address is a disputer or not\\n  /// @param _disputer Address being checked as a disputer\\n  /// @return _isDisputer Whether the address is a disputer or not\\n  function disputers(address _disputer) external view returns (bool _isDisputer);\\n\\n  // Errors\\n\\n  /// @notice Throws if the address is already a registered slasher\\n  error SlasherExistent();\\n\\n  /// @notice Throws if caller is not a registered slasher\\n  error SlasherUnexistent();\\n\\n  /// @notice Throws if the address is already a registered disputer\\n  error DisputerExistent();\\n\\n  /// @notice Throws if caller is not a registered disputer\\n  error DisputerUnexistent();\\n\\n  /// @notice Throws if the msg.sender is not a slasher or is not a part of governance\\n  error OnlySlasher();\\n\\n  /// @notice Throws if the msg.sender is not a disputer or is not a part of governance\\n  error OnlyDisputer();\\n\\n  // Methods\\n\\n  /// @notice Registers a slasher by updating the slashers mapping\\n  function addSlasher(address _slasher) external;\\n\\n  /// @notice Removes a slasher by updating the slashers mapping\\n  function removeSlasher(address _slasher) external;\\n\\n  /// @notice Registers a disputer by updating the disputers mapping\\n  function addDisputer(address _disputer) external;\\n\\n  /// @notice Removes a disputer by updating the disputers mapping\\n  function removeDisputer(address _disputer) external;\\n}\\n\",\"keccak256\":\"0x56fc1c571eecde75d6bc696f3ed46cdcae5d56ec6635abe6680d6c342b0cea14\",\"license\":\"MIT\"}},\"version\":1}",
          "storageLayout": {
            "storage": [],
            "types": null
          },
          "userdoc": {
            "errors": {
              "DisputerExistent()": [
                {
                  "notice": "Throws if the address is already a registered disputer"
                }
              ],
              "DisputerUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered disputer"
                }
              ],
              "OnlyDisputer()": [
                {
                  "notice": "Throws if the msg.sender is not a disputer or is not a part of governance"
                }
              ],
              "OnlySlasher()": [
                {
                  "notice": "Throws if the msg.sender is not a slasher or is not a part of governance"
                }
              ],
              "SlasherExistent()": [
                {
                  "notice": "Throws if the address is already a registered slasher"
                }
              ],
              "SlasherUnexistent()": [
                {
                  "notice": "Throws if caller is not a registered slasher"
                }
              ]
            },
            "events": {
              "DisputerAdded(address)": {
                "notice": "Emitted when a disputer is added"
              },
              "DisputerRemoved(address)": {
                "notice": "Emitted when a disputer is removed"
              },
              "SlasherAdded(address)": {
                "notice": "Emitted when a slasher is added"
              },
              "SlasherRemoved(address)": {
                "notice": "Emitted when a slasher is removed"
              }
            },
            "kind": "user",
            "methods": {
              "addDisputer(address)": {
                "notice": "Registers a disputer by updating the disputers mapping"
              },
              "addSlasher(address)": {
                "notice": "Registers a slasher by updating the slashers mapping"
              },
              "disputers(address)": {
                "notice": "Tracks whether the address is a disputer or not"
              },
              "removeDisputer(address)": {
                "notice": "Removes a disputer by updating the disputers mapping"
              },
              "removeSlasher(address)": {
                "notice": "Removes a slasher by updating the slashers mapping"
              },
              "slashers(address)": {
                "notice": "Tracks whether the address is a slasher or not"
              }
            },
            "notice": "Manages the Keep3r specific roles",
            "version": 1
          }
        }
      }
    },
    "errors": [
      {
        "component": "general",
        "errorCode": "5574",
        "formattedMessage": "Warning: Contract code size exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.\n --> solidity/for-test/Keep3rForTest.sol:6:1:\n  |\n6 | contract Keep3rForTest is Keep3r {\n  | ^ (Relevant source part starts here and spans across multiple lines).\n\n",
        "message": "Contract code size exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.",
        "severity": "warning",
        "sourceLocation": {
          "end": 483,
          "file": "solidity/for-test/Keep3rForTest.sol",
          "start": 100
        },
        "type": "Warning"
      }
    ],
    "sources": {
      "@openzeppelin/contracts/security/ReentrancyGuard.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
          "exportedSymbols": {
            "ReentrancyGuard": [
              39
            ]
          },
          "id": 40,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:0"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2,
                "nodeType": "StructuredDocumentation",
                "src": "58:750:0",
                "text": " @dev Contract module that helps prevent reentrant calls to a function.\n Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n available, which can be applied to functions to make sure there are no nested\n (reentrant) calls to them.\n Note that because there is a single `nonReentrant` guard, functions marked as\n `nonReentrant` may not call one another. This can be worked around by making\n those functions `private`, and then adding `external` `nonReentrant` entry\n points to them.\n TIP: If you would like to learn more about reentrancy and alternative ways\n to protect against it, check out our blog post\n https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]."
              },
              "fullyImplemented": true,
              "id": 39,
              "linearizedBaseContracts": [
                39
              ],
              "name": "ReentrancyGuard",
              "nameLocation": "827:15:0",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 5,
                  "mutability": "constant",
                  "name": "_NOT_ENTERED",
                  "nameLocation": "1622:12:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 39,
                  "src": "1597:41:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1597:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "31",
                    "id": 4,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1637:1:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 8,
                  "mutability": "constant",
                  "name": "_ENTERED",
                  "nameLocation": "1669:8:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 39,
                  "src": "1644:37:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1644:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "32",
                    "id": 7,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1680:1:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2_by_1",
                      "typeString": "int_const 2"
                    },
                    "value": "2"
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 10,
                  "mutability": "mutable",
                  "name": "_status",
                  "nameLocation": "1704:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 39,
                  "src": "1688:23:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1688:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 17,
                    "nodeType": "Block",
                    "src": "1732:39:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 15,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 13,
                            "name": "_status",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10,
                            "src": "1742:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 14,
                            "name": "_NOT_ENTERED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5,
                            "src": "1752:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1742:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 16,
                        "nodeType": "ExpressionStatement",
                        "src": "1742:22:0"
                      }
                    ]
                  },
                  "id": 18,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1729:2:0"
                  },
                  "returnParameters": {
                    "id": 12,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1732:0:0"
                  },
                  "scope": 39,
                  "src": "1718:53:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 37,
                    "nodeType": "Block",
                    "src": "2170:421:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 24,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 22,
                                "name": "_status",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10,
                                "src": "2259:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 23,
                                "name": "_ENTERED",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8,
                                "src": "2270:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2259:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                              "id": 25,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2280:33:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619",
                                "typeString": "literal_string \"ReentrancyGuard: reentrant call\""
                              },
                              "value": "ReentrancyGuard: reentrant call"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619",
                                "typeString": "literal_string \"ReentrancyGuard: reentrant call\""
                              }
                            ],
                            "id": 21,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2251:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 26,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2251:63:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 27,
                        "nodeType": "ExpressionStatement",
                        "src": "2251:63:0"
                      },
                      {
                        "expression": {
                          "id": 30,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 28,
                            "name": "_status",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10,
                            "src": "2389:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 29,
                            "name": "_ENTERED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8,
                            "src": "2399:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2389:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 31,
                        "nodeType": "ExpressionStatement",
                        "src": "2389:18:0"
                      },
                      {
                        "id": 32,
                        "nodeType": "PlaceholderStatement",
                        "src": "2418:1:0"
                      },
                      {
                        "expression": {
                          "id": 35,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 33,
                            "name": "_status",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10,
                            "src": "2562:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 34,
                            "name": "_NOT_ENTERED",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5,
                            "src": "2572:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2562:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 36,
                        "nodeType": "ExpressionStatement",
                        "src": "2562:22:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 19,
                    "nodeType": "StructuredDocumentation",
                    "src": "1777:364:0",
                    "text": " @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and make it call a\n `private` function that does the actual work."
                  },
                  "id": 38,
                  "name": "nonReentrant",
                  "nameLocation": "2155:12:0",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 20,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2167:2:0"
                  },
                  "src": "2146:445:0",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 40,
              "src": "809:1784:0",
              "usedErrors": []
            }
          ],
          "src": "33:2561:0"
        },
        "id": 0
      },
      "@openzeppelin/contracts/token/ERC20/ERC20.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
          "exportedSymbols": {
            "Context": [
              1231
            ],
            "ERC20": [
              585
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ]
          },
          "id": 586,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 41,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:1"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "./IERC20.sol",
              "id": 42,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 586,
              "sourceUnit": 664,
              "src": "58:22:1",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
              "file": "./extensions/IERC20Metadata.sol",
              "id": 43,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 586,
              "sourceUnit": 689,
              "src": "81:41:1",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
              "file": "../../utils/Context.sol",
              "id": 44,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 586,
              "sourceUnit": 1232,
              "src": "123:33:1",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 46,
                    "name": "Context",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1231,
                    "src": "1349:7:1"
                  },
                  "id": 47,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1349:7:1"
                },
                {
                  "baseName": {
                    "id": 48,
                    "name": "IERC20",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 663,
                    "src": "1358:6:1"
                  },
                  "id": 49,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1358:6:1"
                },
                {
                  "baseName": {
                    "id": 50,
                    "name": "IERC20Metadata",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 688,
                    "src": "1366:14:1"
                  },
                  "id": 51,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1366:14:1"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 45,
                "nodeType": "StructuredDocumentation",
                "src": "158:1172:1",
                "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC20\n applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}."
              },
              "fullyImplemented": true,
              "id": 585,
              "linearizedBaseContracts": [
                585,
                688,
                663,
                1231
              ],
              "name": "ERC20",
              "nameLocation": "1340:5:1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 55,
                  "mutability": "mutable",
                  "name": "_balances",
                  "nameLocation": "1423:9:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 585,
                  "src": "1387:45:1",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 54,
                    "keyType": {
                      "id": 52,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1395:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1387:27:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 53,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1406:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 61,
                  "mutability": "mutable",
                  "name": "_allowances",
                  "nameLocation": "1495:11:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 585,
                  "src": "1439:67:1",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 60,
                    "keyType": {
                      "id": 56,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1447:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1439:47:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 59,
                      "keyType": {
                        "id": 57,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1466:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "1458:27:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 58,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1477:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 63,
                  "mutability": "mutable",
                  "name": "_totalSupply",
                  "nameLocation": "1529:12:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 585,
                  "src": "1513:28:1",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1513:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 65,
                  "mutability": "mutable",
                  "name": "_name",
                  "nameLocation": "1563:5:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 585,
                  "src": "1548:20:1",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 64,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1548:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 67,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nameLocation": "1589:7:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 585,
                  "src": "1574:22:1",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 66,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1574:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 83,
                    "nodeType": "Block",
                    "src": "1962:57:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 77,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 75,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 65,
                            "src": "1972:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 76,
                            "name": "name_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70,
                            "src": "1980:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "1972:13:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 78,
                        "nodeType": "ExpressionStatement",
                        "src": "1972:13:1"
                      },
                      {
                        "expression": {
                          "id": 81,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 79,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67,
                            "src": "1995:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 80,
                            "name": "symbol_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 72,
                            "src": "2005:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "1995:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 82,
                        "nodeType": "ExpressionStatement",
                        "src": "1995:17:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 68,
                    "nodeType": "StructuredDocumentation",
                    "src": "1603:298:1",
                    "text": " @dev Sets the values for {name} and {symbol}.\n The default value of {decimals} is 18. To select a different value for\n {decimals} you should overload it.\n All two of these values are immutable: they can only be set once during\n construction."
                  },
                  "id": 84,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 73,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 70,
                        "mutability": "mutable",
                        "name": "name_",
                        "nameLocation": "1932:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 84,
                        "src": "1918:19:1",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 69,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1918:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 72,
                        "mutability": "mutable",
                        "name": "symbol_",
                        "nameLocation": "1953:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 84,
                        "src": "1939:21:1",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 71,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1939:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1917:44:1"
                  },
                  "returnParameters": {
                    "id": 74,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1962:0:1"
                  },
                  "scope": 585,
                  "src": "1906:113:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    675
                  ],
                  "body": {
                    "id": 93,
                    "nodeType": "Block",
                    "src": "2153:29:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 91,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 65,
                          "src": "2170:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 90,
                        "id": 92,
                        "nodeType": "Return",
                        "src": "2163:12:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 85,
                    "nodeType": "StructuredDocumentation",
                    "src": "2025:54:1",
                    "text": " @dev Returns the name of the token."
                  },
                  "functionSelector": "06fdde03",
                  "id": 94,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nameLocation": "2093:4:1",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 87,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2120:8:1"
                  },
                  "parameters": {
                    "id": 86,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2097:2:1"
                  },
                  "returnParameters": {
                    "id": 90,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 89,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 94,
                        "src": "2138:13:1",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 88,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2138:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2137:15:1"
                  },
                  "scope": 585,
                  "src": "2084:98:1",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    681
                  ],
                  "body": {
                    "id": 103,
                    "nodeType": "Block",
                    "src": "2366:31:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 101,
                          "name": "_symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67,
                          "src": "2383:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 100,
                        "id": 102,
                        "nodeType": "Return",
                        "src": "2376:14:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 95,
                    "nodeType": "StructuredDocumentation",
                    "src": "2188:102:1",
                    "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
                  },
                  "functionSelector": "95d89b41",
                  "id": 104,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nameLocation": "2304:6:1",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 97,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2333:8:1"
                  },
                  "parameters": {
                    "id": 96,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2310:2:1"
                  },
                  "returnParameters": {
                    "id": 100,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 99,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 104,
                        "src": "2351:13:1",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 98,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2351:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2350:15:1"
                  },
                  "scope": 585,
                  "src": "2295:102:1",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    687
                  ],
                  "body": {
                    "id": 113,
                    "nodeType": "Block",
                    "src": "3086:26:1",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "3138",
                          "id": 111,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3103:2:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_18_by_1",
                            "typeString": "int_const 18"
                          },
                          "value": "18"
                        },
                        "functionReturnParameters": 110,
                        "id": 112,
                        "nodeType": "Return",
                        "src": "3096:9:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 105,
                    "nodeType": "StructuredDocumentation",
                    "src": "2403:613:1",
                    "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless this function is\n overridden;\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."
                  },
                  "functionSelector": "313ce567",
                  "id": 114,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decimals",
                  "nameLocation": "3030:8:1",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 107,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3061:8:1"
                  },
                  "parameters": {
                    "id": 106,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3038:2:1"
                  },
                  "returnParameters": {
                    "id": 110,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 109,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 114,
                        "src": "3079:5:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 108,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "3079:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3078:7:1"
                  },
                  "scope": 585,
                  "src": "3021:91:1",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    594
                  ],
                  "body": {
                    "id": 123,
                    "nodeType": "Block",
                    "src": "3242:36:1",
                    "statements": [
                      {
                        "expression": {
                          "id": 121,
                          "name": "_totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 63,
                          "src": "3259:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 120,
                        "id": 122,
                        "nodeType": "Return",
                        "src": "3252:19:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 115,
                    "nodeType": "StructuredDocumentation",
                    "src": "3118:49:1",
                    "text": " @dev See {IERC20-totalSupply}."
                  },
                  "functionSelector": "18160ddd",
                  "id": 124,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nameLocation": "3181:11:1",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 117,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3215:8:1"
                  },
                  "parameters": {
                    "id": 116,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3192:2:1"
                  },
                  "returnParameters": {
                    "id": 120,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 119,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 124,
                        "src": "3233:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 118,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3233:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3232:9:1"
                  },
                  "scope": 585,
                  "src": "3172:106:1",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    602
                  ],
                  "body": {
                    "id": 137,
                    "nodeType": "Block",
                    "src": "3419:42:1",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 133,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55,
                            "src": "3436:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 135,
                          "indexExpression": {
                            "id": 134,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 127,
                            "src": "3446:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3436:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 132,
                        "id": 136,
                        "nodeType": "Return",
                        "src": "3429:25:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 125,
                    "nodeType": "StructuredDocumentation",
                    "src": "3284:47:1",
                    "text": " @dev See {IERC20-balanceOf}."
                  },
                  "functionSelector": "70a08231",
                  "id": 138,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "3345:9:1",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 129,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3392:8:1"
                  },
                  "parameters": {
                    "id": 128,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 127,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "3363:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 138,
                        "src": "3355:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 126,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3355:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3354:17:1"
                  },
                  "returnParameters": {
                    "id": 132,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 131,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 138,
                        "src": "3410:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 130,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3410:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3409:9:1"
                  },
                  "scope": 585,
                  "src": "3336:125:1",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    612
                  ],
                  "body": {
                    "id": 158,
                    "nodeType": "Block",
                    "src": "3756:80:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 150,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1221,
                                "src": "3776:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 151,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3776:12:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 152,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 141,
                              "src": "3790:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 153,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 143,
                              "src": "3801:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 149,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 389,
                            "src": "3766:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 154,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3766:42:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 155,
                        "nodeType": "ExpressionStatement",
                        "src": "3766:42:1"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3825:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 148,
                        "id": 157,
                        "nodeType": "Return",
                        "src": "3818:11:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 139,
                    "nodeType": "StructuredDocumentation",
                    "src": "3467:192:1",
                    "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `recipient` cannot be the zero address.\n - the caller must have a balance of at least `amount`."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 159,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nameLocation": "3673:8:1",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 145,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3732:8:1"
                  },
                  "parameters": {
                    "id": 144,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 141,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "3690:9:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 159,
                        "src": "3682:17:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 140,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3682:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 143,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "3709:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 159,
                        "src": "3701:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 142,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3701:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3681:35:1"
                  },
                  "returnParameters": {
                    "id": 148,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 147,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 159,
                        "src": "3750:4:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 146,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3750:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3749:6:1"
                  },
                  "scope": 585,
                  "src": "3664:172:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    622
                  ],
                  "body": {
                    "id": 176,
                    "nodeType": "Block",
                    "src": "3992:51:1",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 170,
                              "name": "_allowances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61,
                              "src": "4009:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 172,
                            "indexExpression": {
                              "id": 171,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 162,
                              "src": "4021:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4009:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 174,
                          "indexExpression": {
                            "id": 173,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 164,
                            "src": "4028:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4009:27:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 169,
                        "id": 175,
                        "nodeType": "Return",
                        "src": "4002:34:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 160,
                    "nodeType": "StructuredDocumentation",
                    "src": "3842:47:1",
                    "text": " @dev See {IERC20-allowance}."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 177,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nameLocation": "3903:9:1",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 166,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3965:8:1"
                  },
                  "parameters": {
                    "id": 165,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 162,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "3921:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 177,
                        "src": "3913:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 161,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3913:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 164,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "3936:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 177,
                        "src": "3928:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 163,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3928:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3912:32:1"
                  },
                  "returnParameters": {
                    "id": 169,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 168,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 177,
                        "src": "3983:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 167,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3983:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3982:9:1"
                  },
                  "scope": 585,
                  "src": "3894:149:1",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    632
                  ],
                  "body": {
                    "id": 197,
                    "nodeType": "Block",
                    "src": "4270:77:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 189,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1221,
                                "src": "4289:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 190,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4289:12:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 191,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 180,
                              "src": "4303:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 192,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 182,
                              "src": "4312:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 188,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 562,
                            "src": "4280:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4280:39:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 194,
                        "nodeType": "ExpressionStatement",
                        "src": "4280:39:1"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4336:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 187,
                        "id": 196,
                        "nodeType": "Return",
                        "src": "4329:11:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 178,
                    "nodeType": "StructuredDocumentation",
                    "src": "4049:127:1",
                    "text": " @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 198,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nameLocation": "4190:7:1",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 184,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4246:8:1"
                  },
                  "parameters": {
                    "id": 183,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 180,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "4206:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 198,
                        "src": "4198:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 179,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4198:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 182,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "4223:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 198,
                        "src": "4215:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 181,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4215:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4197:33:1"
                  },
                  "returnParameters": {
                    "id": 187,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 186,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 198,
                        "src": "4264:4:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 185,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4264:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4263:6:1"
                  },
                  "scope": 585,
                  "src": "4181:166:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    644
                  ],
                  "body": {
                    "id": 245,
                    "nodeType": "Block",
                    "src": "4956:336:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 212,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 201,
                              "src": "4976:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 213,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 203,
                              "src": "4984:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 214,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 205,
                              "src": "4995:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 211,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 389,
                            "src": "4966:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4966:36:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 216,
                        "nodeType": "ExpressionStatement",
                        "src": "4966:36:1"
                      },
                      {
                        "assignments": [
                          218
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 218,
                            "mutability": "mutable",
                            "name": "currentAllowance",
                            "nameLocation": "5021:16:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 245,
                            "src": "5013:24:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 217,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5013:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 225,
                        "initialValue": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 219,
                              "name": "_allowances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61,
                              "src": "5040:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 221,
                            "indexExpression": {
                              "id": 220,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 201,
                              "src": "5052:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5040:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 224,
                          "indexExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 222,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1221,
                              "src": "5060:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5060:12:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "5040:33:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5013:60:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 229,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 227,
                                "name": "currentAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 218,
                                "src": "5091:16:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 228,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 205,
                                "src": "5111:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5091:26:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365",
                              "id": 230,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5119:42:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                              },
                              "value": "ERC20: transfer amount exceeds allowance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                              }
                            ],
                            "id": 226,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5083:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5083:79:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 232,
                        "nodeType": "ExpressionStatement",
                        "src": "5083:79:1"
                      },
                      {
                        "id": 242,
                        "nodeType": "UncheckedBlock",
                        "src": "5172:92:1",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 234,
                                  "name": "sender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 201,
                                  "src": "5205:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 235,
                                    "name": "_msgSender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1221,
                                    "src": "5213:10:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                      "typeString": "function () view returns (address)"
                                    }
                                  },
                                  "id": 236,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5213:12:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 239,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 237,
                                    "name": "currentAllowance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 218,
                                    "src": "5227:16:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 238,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 205,
                                    "src": "5246:6:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5227:25:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 233,
                                "name": "_approve",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 562,
                                "src": "5196:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,uint256)"
                                }
                              },
                              "id": 240,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5196:57:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 241,
                            "nodeType": "ExpressionStatement",
                            "src": "5196:57:1"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5281:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 210,
                        "id": 244,
                        "nodeType": "Return",
                        "src": "5274:11:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 199,
                    "nodeType": "StructuredDocumentation",
                    "src": "4353:456:1",
                    "text": " @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n Requirements:\n - `sender` and `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`.\n - the caller must have allowance for ``sender``'s tokens of at least\n `amount`."
                  },
                  "functionSelector": "23b872dd",
                  "id": 246,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "4823:12:1",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 207,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4932:8:1"
                  },
                  "parameters": {
                    "id": 206,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 201,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "4853:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 246,
                        "src": "4845:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 200,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4845:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 203,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "4877:9:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 246,
                        "src": "4869:17:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 202,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4869:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 205,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "4904:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 246,
                        "src": "4896:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 204,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4896:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4835:81:1"
                  },
                  "returnParameters": {
                    "id": 210,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 209,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 246,
                        "src": "4950:4:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 208,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4950:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4949:6:1"
                  },
                  "scope": 585,
                  "src": "4814:478:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 272,
                    "nodeType": "Block",
                    "src": "5781:118:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 257,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1221,
                                "src": "5800:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 258,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5800:12:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 259,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 249,
                              "src": "5814:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 260,
                                    "name": "_allowances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 61,
                                    "src": "5823:11:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(address => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 263,
                                  "indexExpression": {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 261,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1221,
                                      "src": "5835:10:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                        "typeString": "function () view returns (address)"
                                      }
                                    },
                                    "id": 262,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5835:12:1",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5823:25:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 265,
                                "indexExpression": {
                                  "id": 264,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 249,
                                  "src": "5849:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5823:34:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "id": 266,
                                "name": "addedValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 251,
                                "src": "5860:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5823:47:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 256,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 562,
                            "src": "5791:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 268,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5791:80:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 269,
                        "nodeType": "ExpressionStatement",
                        "src": "5791:80:1"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5888:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 255,
                        "id": 271,
                        "nodeType": "Return",
                        "src": "5881:11:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 247,
                    "nodeType": "StructuredDocumentation",
                    "src": "5298:384:1",
                    "text": " @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "39509351",
                  "id": 273,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseAllowance",
                  "nameLocation": "5696:17:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 252,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 249,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "5722:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 273,
                        "src": "5714:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 248,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5714:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 251,
                        "mutability": "mutable",
                        "name": "addedValue",
                        "nameLocation": "5739:10:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 273,
                        "src": "5731:18:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 250,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5731:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5713:37:1"
                  },
                  "returnParameters": {
                    "id": 255,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 254,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 273,
                        "src": "5775:4:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 253,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5775:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5774:6:1"
                  },
                  "scope": 585,
                  "src": "5687:212:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 311,
                    "nodeType": "Block",
                    "src": "6485:306:1",
                    "statements": [
                      {
                        "assignments": [
                          284
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 284,
                            "mutability": "mutable",
                            "name": "currentAllowance",
                            "nameLocation": "6503:16:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 311,
                            "src": "6495:24:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 283,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6495:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 291,
                        "initialValue": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 285,
                              "name": "_allowances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61,
                              "src": "6522:11:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 288,
                            "indexExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 286,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1221,
                                "src": "6534:10:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 287,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6534:12:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6522:25:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 290,
                          "indexExpression": {
                            "id": 289,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 276,
                            "src": "6548:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6522:34:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6495:61:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 295,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 293,
                                "name": "currentAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 284,
                                "src": "6574:16:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 294,
                                "name": "subtractedValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 278,
                                "src": "6594:15:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6574:35:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                              "id": 296,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6611:39:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                              },
                              "value": "ERC20: decreased allowance below zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                              }
                            ],
                            "id": 292,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6566:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6566:85:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 298,
                        "nodeType": "ExpressionStatement",
                        "src": "6566:85:1"
                      },
                      {
                        "id": 308,
                        "nodeType": "UncheckedBlock",
                        "src": "6661:102:1",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 300,
                                    "name": "_msgSender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1221,
                                    "src": "6694:10:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                      "typeString": "function () view returns (address)"
                                    }
                                  },
                                  "id": 301,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6694:12:1",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 302,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 276,
                                  "src": "6708:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 305,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 303,
                                    "name": "currentAllowance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 284,
                                    "src": "6717:16:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 304,
                                    "name": "subtractedValue",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 278,
                                    "src": "6736:15:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "6717:34:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 299,
                                "name": "_approve",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 562,
                                "src": "6685:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,uint256)"
                                }
                              },
                              "id": 306,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6685:67:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 307,
                            "nodeType": "ExpressionStatement",
                            "src": "6685:67:1"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6780:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 282,
                        "id": 310,
                        "nodeType": "Return",
                        "src": "6773:11:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 274,
                    "nodeType": "StructuredDocumentation",
                    "src": "5905:476:1",
                    "text": " @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."
                  },
                  "functionSelector": "a457c2d7",
                  "id": 312,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decreaseAllowance",
                  "nameLocation": "6395:17:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 279,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 276,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "6421:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 312,
                        "src": "6413:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 275,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6413:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 278,
                        "mutability": "mutable",
                        "name": "subtractedValue",
                        "nameLocation": "6438:15:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 312,
                        "src": "6430:23:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 277,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6430:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6412:42:1"
                  },
                  "returnParameters": {
                    "id": 282,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 281,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 312,
                        "src": "6479:4:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 280,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "6479:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6478:6:1"
                  },
                  "scope": 585,
                  "src": "6386:405:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 388,
                    "nodeType": "Block",
                    "src": "7382:596:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 328,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 323,
                                "name": "sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 315,
                                "src": "7400:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 326,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7418:1:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 325,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7410:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 324,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7410:7:1",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 327,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7410:10:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "7400:20:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                              "id": 329,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7422:39:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                "typeString": "literal_string \"ERC20: transfer from the zero address\""
                              },
                              "value": "ERC20: transfer from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                "typeString": "literal_string \"ERC20: transfer from the zero address\""
                              }
                            ],
                            "id": 322,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7392:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 330,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7392:70:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 331,
                        "nodeType": "ExpressionStatement",
                        "src": "7392:70:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 338,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 333,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 317,
                                "src": "7480:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 336,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7501:1:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 335,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7493:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 334,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7493:7:1",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 337,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7493:10:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "7480:23:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373",
                              "id": 339,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7505:37:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                "typeString": "literal_string \"ERC20: transfer to the zero address\""
                              },
                              "value": "ERC20: transfer to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                "typeString": "literal_string \"ERC20: transfer to the zero address\""
                              }
                            ],
                            "id": 332,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7472:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 340,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7472:71:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 341,
                        "nodeType": "ExpressionStatement",
                        "src": "7472:71:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 343,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 315,
                              "src": "7575:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 344,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 317,
                              "src": "7583:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 345,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 319,
                              "src": "7594:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 342,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 573,
                            "src": "7554:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7554:47:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 347,
                        "nodeType": "ExpressionStatement",
                        "src": "7554:47:1"
                      },
                      {
                        "assignments": [
                          349
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 349,
                            "mutability": "mutable",
                            "name": "senderBalance",
                            "nameLocation": "7620:13:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 388,
                            "src": "7612:21:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 348,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7612:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 353,
                        "initialValue": {
                          "baseExpression": {
                            "id": 350,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55,
                            "src": "7636:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 352,
                          "indexExpression": {
                            "id": 351,
                            "name": "sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 315,
                            "src": "7646:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7636:17:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7612:41:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 357,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 355,
                                "name": "senderBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 349,
                                "src": "7671:13:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 356,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 319,
                                "src": "7688:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7671:23:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365",
                              "id": 358,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7696:40:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                              },
                              "value": "ERC20: transfer amount exceeds balance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                              }
                            ],
                            "id": 354,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7663:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7663:74:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 360,
                        "nodeType": "ExpressionStatement",
                        "src": "7663:74:1"
                      },
                      {
                        "id": 369,
                        "nodeType": "UncheckedBlock",
                        "src": "7747:77:1",
                        "statements": [
                          {
                            "expression": {
                              "id": 367,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 361,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55,
                                  "src": "7771:9:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 363,
                                "indexExpression": {
                                  "id": 362,
                                  "name": "sender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 315,
                                  "src": "7781:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "7771:17:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 366,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 364,
                                  "name": "senderBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 349,
                                  "src": "7791:13:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 365,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 319,
                                  "src": "7807:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "7791:22:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7771:42:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 368,
                            "nodeType": "ExpressionStatement",
                            "src": "7771:42:1"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 370,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55,
                              "src": "7833:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 372,
                            "indexExpression": {
                              "id": 371,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 317,
                              "src": "7843:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7833:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 373,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 319,
                            "src": "7857:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7833:30:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 375,
                        "nodeType": "ExpressionStatement",
                        "src": "7833:30:1"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 377,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 315,
                              "src": "7888:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 378,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 317,
                              "src": "7896:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 379,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 319,
                              "src": "7907:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 376,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 653,
                            "src": "7879:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7879:35:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 381,
                        "nodeType": "EmitStatement",
                        "src": "7874:40:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 383,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 315,
                              "src": "7945:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 384,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 317,
                              "src": "7953:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 385,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 319,
                              "src": "7964:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 382,
                            "name": "_afterTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 584,
                            "src": "7925:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7925:46:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 387,
                        "nodeType": "ExpressionStatement",
                        "src": "7925:46:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 313,
                    "nodeType": "StructuredDocumentation",
                    "src": "6797:463:1",
                    "text": " @dev Moves `amount` of tokens from `sender` to `recipient`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `sender` cannot be the zero address.\n - `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`."
                  },
                  "id": 389,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nameLocation": "7274:9:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 320,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 315,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "7301:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 389,
                        "src": "7293:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 314,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7293:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 317,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "7325:9:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 389,
                        "src": "7317:17:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 316,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7317:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 319,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "7352:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 389,
                        "src": "7344:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 318,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7344:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7283:81:1"
                  },
                  "returnParameters": {
                    "id": 321,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7382:0:1"
                  },
                  "scope": 585,
                  "src": "7265:713:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 444,
                    "nodeType": "Block",
                    "src": "8319:324:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 403,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 398,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 392,
                                "src": "8337:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 401,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8356:1:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 400,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8348:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 399,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8348:7:1",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 402,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8348:10:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "8337:21:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                              "id": 404,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8360:33:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                "typeString": "literal_string \"ERC20: mint to the zero address\""
                              },
                              "value": "ERC20: mint to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                "typeString": "literal_string \"ERC20: mint to the zero address\""
                              }
                            ],
                            "id": 397,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8329:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 405,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8329:65:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 406,
                        "nodeType": "ExpressionStatement",
                        "src": "8329:65:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 410,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8434:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 409,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8426:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 408,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8426:7:1",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8426:10:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 412,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 392,
                              "src": "8438:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 413,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 394,
                              "src": "8447:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 407,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 573,
                            "src": "8405:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8405:49:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 415,
                        "nodeType": "ExpressionStatement",
                        "src": "8405:49:1"
                      },
                      {
                        "expression": {
                          "id": 418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 416,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63,
                            "src": "8465:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 417,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 394,
                            "src": "8481:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8465:22:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 419,
                        "nodeType": "ExpressionStatement",
                        "src": "8465:22:1"
                      },
                      {
                        "expression": {
                          "id": 424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 420,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55,
                              "src": "8497:9:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 422,
                            "indexExpression": {
                              "id": 421,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 392,
                              "src": "8507:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "8497:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 423,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 394,
                            "src": "8519:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8497:28:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 425,
                        "nodeType": "ExpressionStatement",
                        "src": "8497:28:1"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 429,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8557:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 428,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8549:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 427,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8549:7:1",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 430,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8549:10:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 431,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 392,
                              "src": "8561:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 432,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 394,
                              "src": "8570:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 426,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 653,
                            "src": "8540:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8540:37:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 434,
                        "nodeType": "EmitStatement",
                        "src": "8535:42:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 438,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8616:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 437,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8608:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 436,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8608:7:1",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 439,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8608:10:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 440,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 392,
                              "src": "8620:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 441,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 394,
                              "src": "8629:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 435,
                            "name": "_afterTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 584,
                            "src": "8588:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8588:48:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 443,
                        "nodeType": "ExpressionStatement",
                        "src": "8588:48:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 390,
                    "nodeType": "StructuredDocumentation",
                    "src": "7984:265:1",
                    "text": "@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `account` cannot be the zero address."
                  },
                  "id": 445,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nameLocation": "8263:5:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 395,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 392,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "8277:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 445,
                        "src": "8269:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 391,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8269:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 394,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "8294:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 445,
                        "src": "8286:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 393,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8286:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8268:33:1"
                  },
                  "returnParameters": {
                    "id": 396,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8319:0:1"
                  },
                  "scope": 585,
                  "src": "8254:389:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 516,
                    "nodeType": "Block",
                    "src": "9028:511:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 459,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 454,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 448,
                                "src": "9046:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 457,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9065:1:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 456,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9057:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 455,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9057:7:1",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 458,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9057:10:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "9046:21:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373",
                              "id": 460,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9069:35:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                "typeString": "literal_string \"ERC20: burn from the zero address\""
                              },
                              "value": "ERC20: burn from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                "typeString": "literal_string \"ERC20: burn from the zero address\""
                              }
                            ],
                            "id": 453,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9038:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 461,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9038:67:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 462,
                        "nodeType": "ExpressionStatement",
                        "src": "9038:67:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 464,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 448,
                              "src": "9137:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 467,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9154:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 466,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9146:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 465,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9146:7:1",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 468,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9146:10:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 469,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 450,
                              "src": "9158:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 463,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 573,
                            "src": "9116:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 470,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9116:49:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 471,
                        "nodeType": "ExpressionStatement",
                        "src": "9116:49:1"
                      },
                      {
                        "assignments": [
                          473
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 473,
                            "mutability": "mutable",
                            "name": "accountBalance",
                            "nameLocation": "9184:14:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 516,
                            "src": "9176:22:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 472,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9176:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 477,
                        "initialValue": {
                          "baseExpression": {
                            "id": 474,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55,
                            "src": "9201:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 476,
                          "indexExpression": {
                            "id": 475,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 448,
                            "src": "9211:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9201:18:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9176:43:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 481,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 479,
                                "name": "accountBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 473,
                                "src": "9237:14:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 480,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 450,
                                "src": "9255:6:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9237:24:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365",
                              "id": 482,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9263:36:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                              },
                              "value": "ERC20: burn amount exceeds balance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                              }
                            ],
                            "id": 478,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "9229:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9229:71:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 484,
                        "nodeType": "ExpressionStatement",
                        "src": "9229:71:1"
                      },
                      {
                        "id": 493,
                        "nodeType": "UncheckedBlock",
                        "src": "9310:79:1",
                        "statements": [
                          {
                            "expression": {
                              "id": 491,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 485,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55,
                                  "src": "9334:9:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 487,
                                "indexExpression": {
                                  "id": 486,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 448,
                                  "src": "9344:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "9334:18:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 490,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 488,
                                  "name": "accountBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 473,
                                  "src": "9355:14:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 489,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 450,
                                  "src": "9372:6:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "9355:23:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9334:44:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 492,
                            "nodeType": "ExpressionStatement",
                            "src": "9334:44:1"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 494,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63,
                            "src": "9398:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 495,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 450,
                            "src": "9414:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9398:22:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 497,
                        "nodeType": "ExpressionStatement",
                        "src": "9398:22:1"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 499,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 448,
                              "src": "9445:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 502,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9462:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 501,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9454:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 500,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9454:7:1",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 503,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9454:10:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 504,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 450,
                              "src": "9466:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 498,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 653,
                            "src": "9436:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9436:37:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 506,
                        "nodeType": "EmitStatement",
                        "src": "9431:42:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 508,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 448,
                              "src": "9504:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 511,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "9521:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 510,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9513:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 509,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9513:7:1",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 512,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9513:10:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 513,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 450,
                              "src": "9525:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 507,
                            "name": "_afterTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 584,
                            "src": "9484:19:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9484:48:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 515,
                        "nodeType": "ExpressionStatement",
                        "src": "9484:48:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 446,
                    "nodeType": "StructuredDocumentation",
                    "src": "8649:309:1",
                    "text": " @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."
                  },
                  "id": 517,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nameLocation": "8972:5:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 451,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 448,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "8986:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 517,
                        "src": "8978:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 447,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8978:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 450,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "9003:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 517,
                        "src": "8995:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 449,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8995:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8977:33:1"
                  },
                  "returnParameters": {
                    "id": 452,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9028:0:1"
                  },
                  "scope": 585,
                  "src": "8963:576:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 561,
                    "nodeType": "Block",
                    "src": "10075:257:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 533,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 528,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 520,
                                "src": "10093:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 531,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10110:1:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 530,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10102:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 529,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10102:7:1",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 532,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10102:10:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "10093:19:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                              "id": 534,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10114:38:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                "typeString": "literal_string \"ERC20: approve from the zero address\""
                              },
                              "value": "ERC20: approve from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                "typeString": "literal_string \"ERC20: approve from the zero address\""
                              }
                            ],
                            "id": 527,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "10085:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 535,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10085:68:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 536,
                        "nodeType": "ExpressionStatement",
                        "src": "10085:68:1"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 543,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 538,
                                "name": "spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 522,
                                "src": "10171:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 541,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10190:1:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 540,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10182:7:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 539,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10182:7:1",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 542,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10182:10:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "10171:21:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373",
                              "id": 544,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10194:36:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                "typeString": "literal_string \"ERC20: approve to the zero address\""
                              },
                              "value": "ERC20: approve to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                "typeString": "literal_string \"ERC20: approve to the zero address\""
                              }
                            ],
                            "id": 537,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "10163:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 545,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10163:68:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 546,
                        "nodeType": "ExpressionStatement",
                        "src": "10163:68:1"
                      },
                      {
                        "expression": {
                          "id": 553,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 547,
                                "name": "_allowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61,
                                "src": "10242:11:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 550,
                              "indexExpression": {
                                "id": 548,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 520,
                                "src": "10254:5:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10242:18:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 551,
                            "indexExpression": {
                              "id": 549,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 522,
                              "src": "10261:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "10242:27:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 552,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 524,
                            "src": "10272:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10242:36:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 554,
                        "nodeType": "ExpressionStatement",
                        "src": "10242:36:1"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 556,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 520,
                              "src": "10302:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 557,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 522,
                              "src": "10309:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 558,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 524,
                              "src": "10318:6:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 555,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 662,
                            "src": "10293:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10293:32:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 560,
                        "nodeType": "EmitStatement",
                        "src": "10288:37:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 518,
                    "nodeType": "StructuredDocumentation",
                    "src": "9545:412:1",
                    "text": " @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."
                  },
                  "id": 562,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_approve",
                  "nameLocation": "9971:8:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 525,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 520,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "9997:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 562,
                        "src": "9989:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 519,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9989:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 522,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "10020:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 562,
                        "src": "10012:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 521,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10012:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 524,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "10045:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 562,
                        "src": "10037:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 523,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10037:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9979:78:1"
                  },
                  "returnParameters": {
                    "id": 526,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10075:0:1"
                  },
                  "scope": 585,
                  "src": "9962:370:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 572,
                    "nodeType": "Block",
                    "src": "11035:2:1",
                    "statements": []
                  },
                  "documentation": {
                    "id": 563,
                    "nodeType": "StructuredDocumentation",
                    "src": "10338:573:1",
                    "text": " @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
                  },
                  "id": 573,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_beforeTokenTransfer",
                  "nameLocation": "10925:20:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 570,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 565,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "10963:4:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 573,
                        "src": "10955:12:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 564,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10955:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 567,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "10985:2:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 573,
                        "src": "10977:10:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 566,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10977:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 569,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "11005:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 573,
                        "src": "10997:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 568,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10997:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10945:72:1"
                  },
                  "returnParameters": {
                    "id": 571,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11035:0:1"
                  },
                  "scope": 585,
                  "src": "10916:121:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 583,
                    "nodeType": "Block",
                    "src": "11743:2:1",
                    "statements": []
                  },
                  "documentation": {
                    "id": 574,
                    "nodeType": "StructuredDocumentation",
                    "src": "11043:577:1",
                    "text": " @dev Hook that is called after any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n has been transferred to `to`.\n - when `from` is zero, `amount` tokens have been minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
                  },
                  "id": 584,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_afterTokenTransfer",
                  "nameLocation": "11634:19:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 581,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 576,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "11671:4:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 584,
                        "src": "11663:12:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 575,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11663:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 578,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "11693:2:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 584,
                        "src": "11685:10:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 577,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11685:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 580,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "11713:6:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 584,
                        "src": "11705:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 579,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11705:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11653:72:1"
                  },
                  "returnParameters": {
                    "id": 582,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11743:0:1"
                  },
                  "scope": 585,
                  "src": "11625:120:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 586,
              "src": "1331:10416:1",
              "usedErrors": []
            }
          ],
          "src": "33:11715:1"
        },
        "id": 1
      },
      "@openzeppelin/contracts/token/ERC20/IERC20.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
          "exportedSymbols": {
            "IERC20": [
              663
            ]
          },
          "id": 664,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 587,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:2"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 588,
                "nodeType": "StructuredDocumentation",
                "src": "58:70:2",
                "text": " @dev Interface of the ERC20 standard as defined in the EIP."
              },
              "fullyImplemented": false,
              "id": 663,
              "linearizedBaseContracts": [
                663
              ],
              "name": "IERC20",
              "nameLocation": "139:6:2",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 589,
                    "nodeType": "StructuredDocumentation",
                    "src": "152:66:2",
                    "text": " @dev Returns the amount of tokens in existence."
                  },
                  "functionSelector": "18160ddd",
                  "id": 594,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nameLocation": "232:11:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 590,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "243:2:2"
                  },
                  "returnParameters": {
                    "id": 593,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 592,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 594,
                        "src": "269:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 591,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "269:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "268:9:2"
                  },
                  "scope": 663,
                  "src": "223:55:2",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 595,
                    "nodeType": "StructuredDocumentation",
                    "src": "284:72:2",
                    "text": " @dev Returns the amount of tokens owned by `account`."
                  },
                  "functionSelector": "70a08231",
                  "id": 602,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "370:9:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 598,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 597,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "388:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 602,
                        "src": "380:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 596,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "380:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "379:17:2"
                  },
                  "returnParameters": {
                    "id": 601,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 600,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 602,
                        "src": "420:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 599,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "420:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "419:9:2"
                  },
                  "scope": 663,
                  "src": "361:68:2",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 603,
                    "nodeType": "StructuredDocumentation",
                    "src": "435:209:2",
                    "text": " @dev Moves `amount` tokens from the caller's account to `recipient`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 612,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nameLocation": "658:8:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 608,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 605,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "675:9:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 612,
                        "src": "667:17:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 604,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "667:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 607,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "694:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 612,
                        "src": "686:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 606,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "686:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "666:35:2"
                  },
                  "returnParameters": {
                    "id": 611,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 610,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 612,
                        "src": "720:4:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 609,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "720:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "719:6:2"
                  },
                  "scope": 663,
                  "src": "649:77:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 613,
                    "nodeType": "StructuredDocumentation",
                    "src": "732:264:2",
                    "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 622,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nameLocation": "1010:9:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 618,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 615,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1028:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 622,
                        "src": "1020:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 614,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1020:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 617,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "1043:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 622,
                        "src": "1035:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 616,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1035:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1019:32:2"
                  },
                  "returnParameters": {
                    "id": 621,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 620,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 622,
                        "src": "1075:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 619,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1075:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1074:9:2"
                  },
                  "scope": 663,
                  "src": "1001:83:2",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 623,
                    "nodeType": "StructuredDocumentation",
                    "src": "1090:642:2",
                    "text": " @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 632,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nameLocation": "1746:7:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 628,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 625,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "1762:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 632,
                        "src": "1754:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 624,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1754:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 627,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "1779:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 632,
                        "src": "1771:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 626,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1771:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1753:33:2"
                  },
                  "returnParameters": {
                    "id": 631,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 630,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 632,
                        "src": "1805:4:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 629,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1805:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1804:6:2"
                  },
                  "scope": 663,
                  "src": "1737:74:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 633,
                    "nodeType": "StructuredDocumentation",
                    "src": "1817:296:2",
                    "text": " @dev Moves `amount` tokens from `sender` to `recipient` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "23b872dd",
                  "id": 644,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "2127:12:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 640,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 635,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "2157:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 644,
                        "src": "2149:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 634,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2149:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 637,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "2181:9:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 644,
                        "src": "2173:17:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 636,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2173:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 639,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "2208:6:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 644,
                        "src": "2200:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 638,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2200:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2139:81:2"
                  },
                  "returnParameters": {
                    "id": 643,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 642,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 644,
                        "src": "2239:4:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 641,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2239:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2238:6:2"
                  },
                  "scope": 663,
                  "src": "2118:127:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 645,
                    "nodeType": "StructuredDocumentation",
                    "src": "2251:158:2",
                    "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."
                  },
                  "id": 653,
                  "name": "Transfer",
                  "nameLocation": "2420:8:2",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 652,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 647,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "2445:4:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 653,
                        "src": "2429:20:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 646,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2429:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 649,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "2467:2:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 653,
                        "src": "2451:18:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 648,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2451:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 651,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2479:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 653,
                        "src": "2471:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 650,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2471:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2428:57:2"
                  },
                  "src": "2414:72:2"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 654,
                    "nodeType": "StructuredDocumentation",
                    "src": "2492:148:2",
                    "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."
                  },
                  "id": 662,
                  "name": "Approval",
                  "nameLocation": "2651:8:2",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 661,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 656,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "2676:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 662,
                        "src": "2660:21:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 655,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2660:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 658,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "2699:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 662,
                        "src": "2683:23:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 657,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2683:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 660,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2716:5:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 662,
                        "src": "2708:13:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 659,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2708:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2659:63:2"
                  },
                  "src": "2645:78:2"
                }
              ],
              "scope": 664,
              "src": "129:2596:2",
              "usedErrors": []
            }
          ],
          "src": "33:2693:2"
        },
        "id": 2
      },
      "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
          "exportedSymbols": {
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ]
          },
          "id": 689,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 665,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:3"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "../IERC20.sol",
              "id": 666,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 689,
              "sourceUnit": 664,
              "src": "58:23:3",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 668,
                    "name": "IERC20",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 663,
                    "src": "228:6:3"
                  },
                  "id": 669,
                  "nodeType": "InheritanceSpecifier",
                  "src": "228:6:3"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 667,
                "nodeType": "StructuredDocumentation",
                "src": "83:116:3",
                "text": " @dev Interface for the optional metadata functions from the ERC20 standard.\n _Available since v4.1._"
              },
              "fullyImplemented": false,
              "id": 688,
              "linearizedBaseContracts": [
                688,
                663
              ],
              "name": "IERC20Metadata",
              "nameLocation": "210:14:3",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 670,
                    "nodeType": "StructuredDocumentation",
                    "src": "241:54:3",
                    "text": " @dev Returns the name of the token."
                  },
                  "functionSelector": "06fdde03",
                  "id": 675,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nameLocation": "309:4:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 671,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "313:2:3"
                  },
                  "returnParameters": {
                    "id": 674,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 673,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 675,
                        "src": "339:13:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 672,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "339:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "338:15:3"
                  },
                  "scope": 688,
                  "src": "300:54:3",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 676,
                    "nodeType": "StructuredDocumentation",
                    "src": "360:56:3",
                    "text": " @dev Returns the symbol of the token."
                  },
                  "functionSelector": "95d89b41",
                  "id": 681,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nameLocation": "430:6:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 677,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "436:2:3"
                  },
                  "returnParameters": {
                    "id": 680,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 679,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 681,
                        "src": "462:13:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 678,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "462:6:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "461:15:3"
                  },
                  "scope": 688,
                  "src": "421:56:3",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 682,
                    "nodeType": "StructuredDocumentation",
                    "src": "483:65:3",
                    "text": " @dev Returns the decimals places of the token."
                  },
                  "functionSelector": "313ce567",
                  "id": 687,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decimals",
                  "nameLocation": "562:8:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 683,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "570:2:3"
                  },
                  "returnParameters": {
                    "id": 686,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 685,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 687,
                        "src": "596:5:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 684,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "596:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "595:7:3"
                  },
                  "scope": 688,
                  "src": "553:50:3",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 689,
              "src": "200:405:3",
              "usedErrors": []
            }
          ],
          "src": "33:573:3"
        },
        "id": 3
      },
      "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "IERC20": [
              663
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 913,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 690,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:4"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "../IERC20.sol",
              "id": 691,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 913,
              "sourceUnit": 664,
              "src": "58:23:4",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
              "file": "../../../utils/Address.sol",
              "id": 692,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 913,
              "sourceUnit": 1210,
              "src": "82:36:4",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 693,
                "nodeType": "StructuredDocumentation",
                "src": "120:457:4",
                "text": " @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."
              },
              "fullyImplemented": true,
              "id": 912,
              "linearizedBaseContracts": [
                912
              ],
              "name": "SafeERC20",
              "nameLocation": "586:9:4",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 696,
                  "libraryName": {
                    "id": 694,
                    "name": "Address",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1209,
                    "src": "608:7:4"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "602:26:4",
                  "typeName": {
                    "id": 695,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "620:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                },
                {
                  "body": {
                    "id": 718,
                    "nodeType": "Block",
                    "src": "736:103:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 707,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 699,
                              "src": "766:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 710,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 699,
                                      "src": "796:5:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$663",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 711,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "transfer",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 612,
                                    "src": "796:14:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 712,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "796:23:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "id": 713,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 701,
                                  "src": "821:2:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 714,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 703,
                                  "src": "825:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 708,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "773:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 709,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "773:22:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 715,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "773:58:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 706,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 911,
                            "src": "746:19:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 716,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "746:86:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 717,
                        "nodeType": "ExpressionStatement",
                        "src": "746:86:4"
                      }
                    ]
                  },
                  "id": 719,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransfer",
                  "nameLocation": "643:12:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 704,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 699,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "672:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 719,
                        "src": "665:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$663",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "id": 698,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 697,
                            "name": "IERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 663,
                            "src": "665:6:4"
                          },
                          "referencedDeclaration": 663,
                          "src": "665:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$663",
                            "typeString": "contract IERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 701,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "695:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 719,
                        "src": "687:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 700,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "687:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 703,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "715:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 719,
                        "src": "707:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 702,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "707:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "655:71:4"
                  },
                  "returnParameters": {
                    "id": 705,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "736:0:4"
                  },
                  "scope": 912,
                  "src": "634:205:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 744,
                    "nodeType": "Block",
                    "src": "973:113:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 732,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 722,
                              "src": "1003:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 735,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 722,
                                      "src": "1033:5:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$663",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 736,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "transferFrom",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 644,
                                    "src": "1033:18:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 737,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "1033:27:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "id": 738,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 724,
                                  "src": "1062:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 739,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 726,
                                  "src": "1068:2:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 740,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 728,
                                  "src": "1072:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 733,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "1010:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 734,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "1010:22:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 741,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1010:68:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 731,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 911,
                            "src": "983:19:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "983:96:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 743,
                        "nodeType": "ExpressionStatement",
                        "src": "983:96:4"
                      }
                    ]
                  },
                  "id": 745,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "854:16:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 729,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 722,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "887:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 745,
                        "src": "880:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$663",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "id": 721,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 720,
                            "name": "IERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 663,
                            "src": "880:6:4"
                          },
                          "referencedDeclaration": 663,
                          "src": "880:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$663",
                            "typeString": "contract IERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 724,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "910:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 745,
                        "src": "902:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 723,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "902:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 726,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "932:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 745,
                        "src": "924:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 725,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "924:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 728,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "952:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 745,
                        "src": "944:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 727,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "944:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "870:93:4"
                  },
                  "returnParameters": {
                    "id": 730,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "973:0:4"
                  },
                  "scope": 912,
                  "src": "845:241:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 788,
                    "nodeType": "Block",
                    "src": "1452:497:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 772,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 759,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 757,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 753,
                                      "src": "1701:5:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 758,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1710:1:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1701:10:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 760,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1700:12:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 770,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "id": 765,
                                              "name": "this",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -28,
                                              "src": "1741:4:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_SafeERC20_$912",
                                                "typeString": "library SafeERC20"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_contract$_SafeERC20_$912",
                                                "typeString": "library SafeERC20"
                                              }
                                            ],
                                            "id": 764,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "1733:7:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_address_$",
                                              "typeString": "type(address)"
                                            },
                                            "typeName": {
                                              "id": 763,
                                              "name": "address",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "1733:7:4",
                                              "typeDescriptions": {}
                                            }
                                          },
                                          "id": 766,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "1733:13:4",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 767,
                                          "name": "spender",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 751,
                                          "src": "1748:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "expression": {
                                          "id": 761,
                                          "name": "token",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 749,
                                          "src": "1717:5:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$663",
                                            "typeString": "contract IERC20"
                                          }
                                        },
                                        "id": 762,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "allowance",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 622,
                                        "src": "1717:15:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                          "typeString": "function (address,address) view external returns (uint256)"
                                        }
                                      },
                                      "id": 768,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1717:39:4",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 769,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1760:1:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1717:44:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 771,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1716:46:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1700:62:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365",
                              "id": 773,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1776:56:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25",
                                "typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""
                              },
                              "value": "SafeERC20: approve from non-zero to non-zero allowance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25",
                                "typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""
                              }
                            ],
                            "id": 756,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1679:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1679:163:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 775,
                        "nodeType": "ExpressionStatement",
                        "src": "1679:163:4"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 777,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 749,
                              "src": "1872:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 780,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 749,
                                      "src": "1902:5:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$663",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 781,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 632,
                                    "src": "1902:13:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 782,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "1902:22:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "id": 783,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 751,
                                  "src": "1926:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 784,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 753,
                                  "src": "1935:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 778,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "1879:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 779,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "1879:22:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 785,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1879:62:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 776,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 911,
                            "src": "1852:19:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 786,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1852:90:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 787,
                        "nodeType": "ExpressionStatement",
                        "src": "1852:90:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 746,
                    "nodeType": "StructuredDocumentation",
                    "src": "1092:249:4",
                    "text": " @dev Deprecated. This function has issues similar to the ones found in\n {IERC20-approve}, and its usage is discouraged.\n Whenever possible, use {safeIncreaseAllowance} and\n {safeDecreaseAllowance} instead."
                  },
                  "id": 789,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeApprove",
                  "nameLocation": "1355:11:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 754,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 749,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "1383:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 789,
                        "src": "1376:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$663",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "id": 748,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 747,
                            "name": "IERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 663,
                            "src": "1376:6:4"
                          },
                          "referencedDeclaration": 663,
                          "src": "1376:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$663",
                            "typeString": "contract IERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 751,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "1406:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 789,
                        "src": "1398:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 750,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1398:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 753,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1431:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 789,
                        "src": "1423:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 752,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1423:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1366:76:4"
                  },
                  "returnParameters": {
                    "id": 755,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1452:0:4"
                  },
                  "scope": 912,
                  "src": "1346:603:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 824,
                    "nodeType": "Block",
                    "src": "2071:194:4",
                    "statements": [
                      {
                        "assignments": [
                          800
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 800,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nameLocation": "2089:12:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 824,
                            "src": "2081:20:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 799,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2081:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 811,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 810,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 805,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "2128:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_SafeERC20_$912",
                                      "typeString": "library SafeERC20"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_SafeERC20_$912",
                                      "typeString": "library SafeERC20"
                                    }
                                  ],
                                  "id": 804,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2120:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 803,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2120:7:4",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 806,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2120:13:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 807,
                                "name": "spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 794,
                                "src": "2135:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 801,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 792,
                                "src": "2104:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$663",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 802,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "allowance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 622,
                              "src": "2104:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address,address) view external returns (uint256)"
                              }
                            },
                            "id": 808,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2104:39:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 809,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 796,
                            "src": "2146:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2104:47:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2081:70:4"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 813,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 792,
                              "src": "2181:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 816,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 792,
                                      "src": "2211:5:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$663",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 817,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 632,
                                    "src": "2211:13:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 818,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "2211:22:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "id": 819,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 794,
                                  "src": "2235:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 820,
                                  "name": "newAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 800,
                                  "src": "2244:12:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 814,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "2188:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 815,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "2188:22:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 821,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2188:69:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 812,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 911,
                            "src": "2161:19:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2161:97:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 823,
                        "nodeType": "ExpressionStatement",
                        "src": "2161:97:4"
                      }
                    ]
                  },
                  "id": 825,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeIncreaseAllowance",
                  "nameLocation": "1964:21:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 797,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 792,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "2002:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 825,
                        "src": "1995:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$663",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "id": 791,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 790,
                            "name": "IERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 663,
                            "src": "1995:6:4"
                          },
                          "referencedDeclaration": 663,
                          "src": "1995:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$663",
                            "typeString": "contract IERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 794,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "2025:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 825,
                        "src": "2017:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 793,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2017:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 796,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2050:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 825,
                        "src": "2042:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 795,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2042:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1985:76:4"
                  },
                  "returnParameters": {
                    "id": 798,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2071:0:4"
                  },
                  "scope": 912,
                  "src": "1955:310:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 872,
                    "nodeType": "Block",
                    "src": "2387:370:4",
                    "statements": [
                      {
                        "id": 871,
                        "nodeType": "UncheckedBlock",
                        "src": "2397:354:4",
                        "statements": [
                          {
                            "assignments": [
                              836
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 836,
                                "mutability": "mutable",
                                "name": "oldAllowance",
                                "nameLocation": "2429:12:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 871,
                                "src": "2421:20:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 835,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2421:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 845,
                            "initialValue": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 841,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "2468:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_SafeERC20_$912",
                                        "typeString": "library SafeERC20"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_SafeERC20_$912",
                                        "typeString": "library SafeERC20"
                                      }
                                    ],
                                    "id": 840,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2460:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 839,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2460:7:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 842,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2460:13:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 843,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 830,
                                  "src": "2475:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 837,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 828,
                                  "src": "2444:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$663",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 838,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "allowance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 622,
                                "src": "2444:15:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address,address) view external returns (uint256)"
                                }
                              },
                              "id": 844,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2444:39:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2421:62:4"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 849,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 847,
                                    "name": "oldAllowance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 836,
                                    "src": "2505:12:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">=",
                                  "rightExpression": {
                                    "id": 848,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 832,
                                    "src": "2521:5:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "2505:21:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "hexValue": "5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                                  "id": 850,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2528:43:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a",
                                    "typeString": "literal_string \"SafeERC20: decreased allowance below zero\""
                                  },
                                  "value": "SafeERC20: decreased allowance below zero"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a",
                                    "typeString": "literal_string \"SafeERC20: decreased allowance below zero\""
                                  }
                                ],
                                "id": 846,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "2497:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 851,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2497:75:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 852,
                            "nodeType": "ExpressionStatement",
                            "src": "2497:75:4"
                          },
                          {
                            "assignments": [
                              854
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 854,
                                "mutability": "mutable",
                                "name": "newAllowance",
                                "nameLocation": "2594:12:4",
                                "nodeType": "VariableDeclaration",
                                "scope": 871,
                                "src": "2586:20:4",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 853,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2586:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 858,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 857,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 855,
                                "name": "oldAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 836,
                                "src": "2609:12:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "id": 856,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 832,
                                "src": "2624:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2609:20:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2586:43:4"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 860,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 828,
                                  "src": "2663:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$663",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "expression": {
                                          "id": 863,
                                          "name": "token",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 828,
                                          "src": "2693:5:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$663",
                                            "typeString": "contract IERC20"
                                          }
                                        },
                                        "id": 864,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "approve",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 632,
                                        "src": "2693:13:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                          "typeString": "function (address,uint256) external returns (bool)"
                                        }
                                      },
                                      "id": 865,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "selector",
                                      "nodeType": "MemberAccess",
                                      "src": "2693:22:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    {
                                      "id": 866,
                                      "name": "spender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 830,
                                      "src": "2717:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 867,
                                      "name": "newAllowance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 854,
                                      "src": "2726:12:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 861,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -1,
                                      "src": "2670:3:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 862,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "encodeWithSelector",
                                    "nodeType": "MemberAccess",
                                    "src": "2670:22:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function (bytes4) pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 868,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2670:69:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$663",
                                    "typeString": "contract IERC20"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 859,
                                "name": "_callOptionalReturn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 911,
                                "src": "2643:19:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_bytes_memory_ptr_$returns$__$",
                                  "typeString": "function (contract IERC20,bytes memory)"
                                }
                              },
                              "id": 869,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2643:97:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 870,
                            "nodeType": "ExpressionStatement",
                            "src": "2643:97:4"
                          }
                        ]
                      }
                    ]
                  },
                  "id": 873,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeDecreaseAllowance",
                  "nameLocation": "2280:21:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 833,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 828,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "2318:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 873,
                        "src": "2311:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$663",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "id": 827,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 826,
                            "name": "IERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 663,
                            "src": "2311:6:4"
                          },
                          "referencedDeclaration": 663,
                          "src": "2311:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$663",
                            "typeString": "contract IERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 830,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "2341:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 873,
                        "src": "2333:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 829,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2333:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 832,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2366:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 873,
                        "src": "2358:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 831,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2358:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2301:76:4"
                  },
                  "returnParameters": {
                    "id": 834,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2387:0:4"
                  },
                  "scope": 912,
                  "src": "2271:486:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 910,
                    "nodeType": "Block",
                    "src": "3210:636:4",
                    "statements": [
                      {
                        "assignments": [
                          883
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 883,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "3572:10:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 910,
                            "src": "3559:23:4",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 882,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3559:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 892,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 889,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 879,
                              "src": "3613:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564",
                              "id": 890,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3619:34:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b",
                                "typeString": "literal_string \"SafeERC20: low-level call failed\""
                              },
                              "value": "SafeERC20: low-level call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b",
                                "typeString": "literal_string \"SafeERC20: low-level call failed\""
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 886,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 877,
                                  "src": "3593:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$663",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$663",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 885,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3585:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 884,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3585:7:4",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 887,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3585:14:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 888,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "functionCall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1003,
                            "src": "3585:27:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$",
                              "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3585:69:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3559:95:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 893,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 883,
                              "src": "3668:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 894,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "3668:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 895,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3688:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3668:21:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 909,
                        "nodeType": "IfStatement",
                        "src": "3664:176:4",
                        "trueBody": {
                          "id": 908,
                          "nodeType": "Block",
                          "src": "3691:149:4",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 900,
                                        "name": "returndata",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 883,
                                        "src": "3763:10:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "components": [
                                          {
                                            "id": 902,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "3776:4:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_bool_$",
                                              "typeString": "type(bool)"
                                            },
                                            "typeName": {
                                              "id": 901,
                                              "name": "bool",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "3776:4:4",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "id": 903,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "3775:6:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      ],
                                      "expression": {
                                        "id": 898,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "3752:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 899,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "src": "3752:10:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 904,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3752:30:4",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564",
                                    "id": 905,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3784:44:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
                                      "typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\""
                                    },
                                    "value": "SafeERC20: ERC20 operation did not succeed"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
                                      "typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\""
                                    }
                                  ],
                                  "id": 897,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "3744:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 906,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3744:85:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 907,
                              "nodeType": "ExpressionStatement",
                              "src": "3744:85:4"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 874,
                    "nodeType": "StructuredDocumentation",
                    "src": "2763:372:4",
                    "text": " @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."
                  },
                  "id": 911,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_callOptionalReturn",
                  "nameLocation": "3149:19:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 880,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 877,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "3176:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 911,
                        "src": "3169:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$663",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "id": 876,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 875,
                            "name": "IERC20",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 663,
                            "src": "3169:6:4"
                          },
                          "referencedDeclaration": 663,
                          "src": "3169:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$663",
                            "typeString": "contract IERC20"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 879,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3196:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 911,
                        "src": "3183:17:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 878,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3183:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3168:33:4"
                  },
                  "returnParameters": {
                    "id": 881,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3210:0:4"
                  },
                  "scope": 912,
                  "src": "3140:706:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 913,
              "src": "578:3270:4",
              "usedErrors": []
            }
          ],
          "src": "33:3816:4"
        },
        "id": 4
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ]
          },
          "id": 1210,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 914,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:5"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 915,
                "nodeType": "StructuredDocumentation",
                "src": "58:67:5",
                "text": " @dev Collection of functions related to the address type"
              },
              "fullyImplemented": true,
              "id": 1209,
              "linearizedBaseContracts": [
                1209
              ],
              "name": "Address",
              "nameLocation": "134:7:5",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 931,
                    "nodeType": "Block",
                    "src": "784:311:5",
                    "statements": [
                      {
                        "assignments": [
                          924
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 924,
                            "mutability": "mutable",
                            "name": "size",
                            "nameLocation": "989:4:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 931,
                            "src": "981:12:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 923,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "981:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 925,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "981:12:5"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "1012:52:5",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1026:28:5",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "account",
                                    "nodeType": "YulIdentifier",
                                    "src": "1046:7:5"
                                  }
                                ],
                                "functionName": {
                                  "name": "extcodesize",
                                  "nodeType": "YulIdentifier",
                                  "src": "1034:11:5"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1034:20:5"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "1026:4:5"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 918,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1046:7:5",
                            "valueSize": 1
                          },
                          {
                            "declaration": 924,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1026:4:5",
                            "valueSize": 1
                          }
                        ],
                        "id": 926,
                        "nodeType": "InlineAssembly",
                        "src": "1003:61:5"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 929,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 927,
                            "name": "size",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 924,
                            "src": "1080:4:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 928,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1087:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1080:8:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 922,
                        "id": 930,
                        "nodeType": "Return",
                        "src": "1073:15:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 916,
                    "nodeType": "StructuredDocumentation",
                    "src": "148:565:5",
                    "text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ===="
                  },
                  "id": 932,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isContract",
                  "nameLocation": "727:10:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 919,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 918,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "746:7:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 932,
                        "src": "738:15:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 917,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "738:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "737:17:5"
                  },
                  "returnParameters": {
                    "id": 922,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 921,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 932,
                        "src": "778:4:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 920,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "778:4:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "777:6:5"
                  },
                  "scope": 1209,
                  "src": "718:377:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 965,
                    "nodeType": "Block",
                    "src": "2083:241:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 947,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 943,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "2109:4:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$1209",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$1209",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 942,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2101:7:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 941,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2101:7:5",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 944,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2101:13:5",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 945,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "2101:21:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 946,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 937,
                                "src": "2126:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2101:31:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
                              "id": 948,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2134:31:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                "typeString": "literal_string \"Address: insufficient balance\""
                              },
                              "value": "Address: insufficient balance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                "typeString": "literal_string \"Address: insufficient balance\""
                              }
                            ],
                            "id": 940,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2093:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2093:73:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 950,
                        "nodeType": "ExpressionStatement",
                        "src": "2093:73:5"
                      },
                      {
                        "assignments": [
                          952,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 952,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "2183:7:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 965,
                            "src": "2178:12:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 951,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2178:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 959,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "",
                              "id": 957,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2226:2:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "expression": {
                                "id": 953,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 935,
                                "src": "2196:9:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 954,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "2196:14:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 956,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 955,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 937,
                                "src": "2218:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "2196:29:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2196:33:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2177:52:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 961,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 952,
                              "src": "2247:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
                              "id": 962,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2256:60:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                              },
                              "value": "Address: unable to send value, recipient may have reverted"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                              }
                            ],
                            "id": 960,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2239:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 963,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2239:78:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 964,
                        "nodeType": "ExpressionStatement",
                        "src": "2239:78:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 933,
                    "nodeType": "StructuredDocumentation",
                    "src": "1101:906:5",
                    "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
                  },
                  "id": 966,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sendValue",
                  "nameLocation": "2021:9:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 938,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 935,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "2047:9:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 966,
                        "src": "2031:25:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 934,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2031:15:5",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 937,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "2066:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 966,
                        "src": "2058:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 936,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2058:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2030:43:5"
                  },
                  "returnParameters": {
                    "id": 939,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2083:0:5"
                  },
                  "scope": 1209,
                  "src": "2012:312:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 982,
                    "nodeType": "Block",
                    "src": "3155:84:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 977,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 969,
                              "src": "3185:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 978,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 971,
                              "src": "3193:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
                              "id": 979,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3199:32:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                "typeString": "literal_string \"Address: low-level call failed\""
                              },
                              "value": "Address: low-level call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                "typeString": "literal_string \"Address: low-level call failed\""
                              }
                            ],
                            "id": 976,
                            "name": "functionCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              983,
                              1003
                            ],
                            "referencedDeclaration": 1003,
                            "src": "3172:12:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 980,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3172:60:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 975,
                        "id": 981,
                        "nodeType": "Return",
                        "src": "3165:67:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 967,
                    "nodeType": "StructuredDocumentation",
                    "src": "2330:731:5",
                    "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"
                  },
                  "id": 983,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nameLocation": "3075:12:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 972,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 969,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "3096:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 983,
                        "src": "3088:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 968,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3088:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 971,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3117:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 983,
                        "src": "3104:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 970,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3104:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3087:35:5"
                  },
                  "returnParameters": {
                    "id": 975,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 974,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 983,
                        "src": "3141:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 973,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3141:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3140:14:5"
                  },
                  "scope": 1209,
                  "src": "3066:173:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1002,
                    "nodeType": "Block",
                    "src": "3608:76:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 996,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 986,
                              "src": "3647:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 997,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 988,
                              "src": "3655:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 998,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3661:1:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "id": 999,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 990,
                              "src": "3664:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 995,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1023,
                              1073
                            ],
                            "referencedDeclaration": 1073,
                            "src": "3625:21:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 1000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3625:52:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 994,
                        "id": 1001,
                        "nodeType": "Return",
                        "src": "3618:59:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 984,
                    "nodeType": "StructuredDocumentation",
                    "src": "3245:211:5",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                  },
                  "id": 1003,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nameLocation": "3470:12:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 991,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 986,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "3500:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1003,
                        "src": "3492:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 985,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3492:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 988,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3529:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1003,
                        "src": "3516:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 987,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3516:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 990,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "3557:12:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1003,
                        "src": "3543:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 989,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3543:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3482:93:5"
                  },
                  "returnParameters": {
                    "id": 994,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 993,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1003,
                        "src": "3594:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 992,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3594:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3593:14:5"
                  },
                  "scope": 1209,
                  "src": "3461:223:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1022,
                    "nodeType": "Block",
                    "src": "4189:111:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1016,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1006,
                              "src": "4228:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1017,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1008,
                              "src": "4236:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1018,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1010,
                              "src": "4242:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
                              "id": 1019,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4249:43:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                "typeString": "literal_string \"Address: low-level call with value failed\""
                              },
                              "value": "Address: low-level call with value failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                "typeString": "literal_string \"Address: low-level call with value failed\""
                              }
                            ],
                            "id": 1015,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1023,
                              1073
                            ],
                            "referencedDeclaration": 1073,
                            "src": "4206:21:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 1020,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4206:87:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1014,
                        "id": 1021,
                        "nodeType": "Return",
                        "src": "4199:94:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1004,
                    "nodeType": "StructuredDocumentation",
                    "src": "3690:351:5",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"
                  },
                  "id": 1023,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nameLocation": "4055:21:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1011,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1006,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "4094:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1023,
                        "src": "4086:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1005,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4086:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1008,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "4123:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1023,
                        "src": "4110:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1007,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4110:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1010,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "4145:5:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1023,
                        "src": "4137:13:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1009,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4137:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4076:80:5"
                  },
                  "returnParameters": {
                    "id": 1014,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1013,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1023,
                        "src": "4175:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1012,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4175:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4174:14:5"
                  },
                  "scope": 1209,
                  "src": "4046:254:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1072,
                    "nodeType": "Block",
                    "src": "4727:320:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1044,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1040,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "4753:4:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$1209",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$1209",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 1039,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4745:7:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 1038,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4745:7:5",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1041,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4745:13:5",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 1042,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "4745:21:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 1043,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1030,
                                "src": "4770:5:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4745:30:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
                              "id": 1045,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4777:40:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                "typeString": "literal_string \"Address: insufficient balance for call\""
                              },
                              "value": "Address: insufficient balance for call"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                "typeString": "literal_string \"Address: insufficient balance for call\""
                              }
                            ],
                            "id": 1037,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4737:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4737:81:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1047,
                        "nodeType": "ExpressionStatement",
                        "src": "4737:81:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1050,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1026,
                                  "src": "4847:6:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1049,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 932,
                                "src": "4836:10:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 1051,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4836:18:5",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 1052,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4856:31:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                "typeString": "literal_string \"Address: call to non-contract\""
                              },
                              "value": "Address: call to non-contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                "typeString": "literal_string \"Address: call to non-contract\""
                              }
                            ],
                            "id": 1048,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4828:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4828:60:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1054,
                        "nodeType": "ExpressionStatement",
                        "src": "4828:60:5"
                      },
                      {
                        "assignments": [
                          1056,
                          1058
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1056,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "4905:7:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 1072,
                            "src": "4900:12:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 1055,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4900:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 1058,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "4927:10:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 1072,
                            "src": "4914:23:5",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 1057,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "4914:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1065,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1063,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1028,
                              "src": "4967:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "id": 1059,
                                "name": "target",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1026,
                                "src": "4941:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 1060,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "4941:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 1062,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 1061,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1030,
                                "src": "4960:5:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "4941:25:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 1064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4941:31:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4899:73:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1067,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1056,
                              "src": "5006:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 1068,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1058,
                              "src": "5015:10:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1069,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1032,
                              "src": "5027:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1066,
                            "name": "verifyCallResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1208,
                            "src": "4989:16:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 1070,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4989:51:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1036,
                        "id": 1071,
                        "nodeType": "Return",
                        "src": "4982:58:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1024,
                    "nodeType": "StructuredDocumentation",
                    "src": "4306:237:5",
                    "text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                  },
                  "id": 1073,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nameLocation": "4557:21:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1033,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1026,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "4596:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1073,
                        "src": "4588:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1025,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4588:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1028,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "4625:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1073,
                        "src": "4612:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1027,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4612:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1030,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "4647:5:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1073,
                        "src": "4639:13:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1029,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4639:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1032,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "4676:12:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1073,
                        "src": "4662:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1031,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4662:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4578:116:5"
                  },
                  "returnParameters": {
                    "id": 1036,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1035,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1073,
                        "src": "4713:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1034,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4713:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4712:14:5"
                  },
                  "scope": 1209,
                  "src": "4548:499:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1089,
                    "nodeType": "Block",
                    "src": "5324:97:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1084,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1076,
                              "src": "5360:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1085,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1078,
                              "src": "5368:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
                              "id": 1086,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5374:39:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                "typeString": "literal_string \"Address: low-level static call failed\""
                              },
                              "value": "Address: low-level static call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                "typeString": "literal_string \"Address: low-level static call failed\""
                              }
                            ],
                            "id": 1083,
                            "name": "functionStaticCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1090,
                              1125
                            ],
                            "referencedDeclaration": 1125,
                            "src": "5341:18:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) view returns (bytes memory)"
                            }
                          },
                          "id": 1087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5341:73:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1082,
                        "id": 1088,
                        "nodeType": "Return",
                        "src": "5334:80:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1074,
                    "nodeType": "StructuredDocumentation",
                    "src": "5053:166:5",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                  },
                  "id": 1090,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nameLocation": "5233:18:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1079,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1076,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "5260:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1090,
                        "src": "5252:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1075,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5252:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1078,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "5281:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1090,
                        "src": "5268:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1077,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5268:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5251:35:5"
                  },
                  "returnParameters": {
                    "id": 1082,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1081,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1090,
                        "src": "5310:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1080,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5310:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5309:14:5"
                  },
                  "scope": 1209,
                  "src": "5224:197:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1124,
                    "nodeType": "Block",
                    "src": "5763:228:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1104,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1093,
                                  "src": "5792:6:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1103,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 932,
                                "src": "5781:10:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 1105,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5781:18:5",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 1106,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5801:38:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
                                "typeString": "literal_string \"Address: static call to non-contract\""
                              },
                              "value": "Address: static call to non-contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
                                "typeString": "literal_string \"Address: static call to non-contract\""
                              }
                            ],
                            "id": 1102,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5773:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5773:67:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1108,
                        "nodeType": "ExpressionStatement",
                        "src": "5773:67:5"
                      },
                      {
                        "assignments": [
                          1110,
                          1112
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1110,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "5857:7:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 1124,
                            "src": "5852:12:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 1109,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5852:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 1112,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "5879:10:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 1124,
                            "src": "5866:23:5",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 1111,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "5866:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1117,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1115,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1095,
                              "src": "5911:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 1113,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1093,
                              "src": "5893:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 1114,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "staticcall",
                            "nodeType": "MemberAccess",
                            "src": "5893:17:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                            }
                          },
                          "id": 1116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5893:23:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5851:65:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1119,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1110,
                              "src": "5950:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 1120,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1112,
                              "src": "5959:10:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1121,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1097,
                              "src": "5971:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1118,
                            "name": "verifyCallResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1208,
                            "src": "5933:16:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 1122,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5933:51:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1101,
                        "id": 1123,
                        "nodeType": "Return",
                        "src": "5926:58:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1091,
                    "nodeType": "StructuredDocumentation",
                    "src": "5427:173:5",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                  },
                  "id": 1125,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nameLocation": "5614:18:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1098,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1093,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "5650:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1125,
                        "src": "5642:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1092,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5642:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1095,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "5679:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1125,
                        "src": "5666:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1094,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5666:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1097,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "5707:12:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1125,
                        "src": "5693:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1096,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "5693:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5632:93:5"
                  },
                  "returnParameters": {
                    "id": 1101,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1100,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1125,
                        "src": "5749:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1099,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5749:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5748:14:5"
                  },
                  "scope": 1209,
                  "src": "5605:386:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1141,
                    "nodeType": "Block",
                    "src": "6267:101:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1136,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1128,
                              "src": "6305:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1137,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1130,
                              "src": "6313:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
                              "id": 1138,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6319:41:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
                                "typeString": "literal_string \"Address: low-level delegate call failed\""
                              },
                              "value": "Address: low-level delegate call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
                                "typeString": "literal_string \"Address: low-level delegate call failed\""
                              }
                            ],
                            "id": 1135,
                            "name": "functionDelegateCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1142,
                              1177
                            ],
                            "referencedDeclaration": 1177,
                            "src": "6284:20:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 1139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6284:77:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1134,
                        "id": 1140,
                        "nodeType": "Return",
                        "src": "6277:84:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1126,
                    "nodeType": "StructuredDocumentation",
                    "src": "5997:168:5",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
                  },
                  "id": 1142,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionDelegateCall",
                  "nameLocation": "6179:20:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1131,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1128,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "6208:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1142,
                        "src": "6200:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1127,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6200:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1130,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "6229:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1142,
                        "src": "6216:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1129,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6216:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6199:35:5"
                  },
                  "returnParameters": {
                    "id": 1134,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1133,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1142,
                        "src": "6253:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1132,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6253:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6252:14:5"
                  },
                  "scope": 1209,
                  "src": "6170:198:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1176,
                    "nodeType": "Block",
                    "src": "6709:232:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1156,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1145,
                                  "src": "6738:6:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1155,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 932,
                                "src": "6727:10:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 1157,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6727:18:5",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 1158,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6747:40:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
                                "typeString": "literal_string \"Address: delegate call to non-contract\""
                              },
                              "value": "Address: delegate call to non-contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
                                "typeString": "literal_string \"Address: delegate call to non-contract\""
                              }
                            ],
                            "id": 1154,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6719:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1159,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6719:69:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1160,
                        "nodeType": "ExpressionStatement",
                        "src": "6719:69:5"
                      },
                      {
                        "assignments": [
                          1162,
                          1164
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1162,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "6805:7:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 1176,
                            "src": "6800:12:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 1161,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "6800:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 1164,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "6827:10:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 1176,
                            "src": "6814:23:5",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 1163,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "6814:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1169,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1167,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1147,
                              "src": "6861:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 1165,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1145,
                              "src": "6841:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 1166,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "delegatecall",
                            "nodeType": "MemberAccess",
                            "src": "6841:19:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) returns (bool,bytes memory)"
                            }
                          },
                          "id": 1168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6841:25:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6799:67:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1171,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1162,
                              "src": "6900:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 1172,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1164,
                              "src": "6909:10:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1173,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1149,
                              "src": "6921:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1170,
                            "name": "verifyCallResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1208,
                            "src": "6883:16:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 1174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6883:51:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 1153,
                        "id": 1175,
                        "nodeType": "Return",
                        "src": "6876:58:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1143,
                    "nodeType": "StructuredDocumentation",
                    "src": "6374:175:5",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
                  },
                  "id": 1177,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionDelegateCall",
                  "nameLocation": "6563:20:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1150,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1145,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "6601:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1177,
                        "src": "6593:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1144,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6593:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1147,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "6630:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1177,
                        "src": "6617:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1146,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6617:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1149,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "6658:12:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1177,
                        "src": "6644:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1148,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "6644:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6583:93:5"
                  },
                  "returnParameters": {
                    "id": 1153,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1152,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1177,
                        "src": "6695:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1151,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6695:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6694:14:5"
                  },
                  "scope": 1209,
                  "src": "6554:387:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1207,
                    "nodeType": "Block",
                    "src": "7321:532:5",
                    "statements": [
                      {
                        "condition": {
                          "id": 1189,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1180,
                          "src": "7335:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1205,
                          "nodeType": "Block",
                          "src": "7392:455:5",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 1193,
                                    "name": "returndata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1182,
                                    "src": "7476:10:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 1194,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "7476:17:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 1195,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7496:1:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "7476:21:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 1203,
                                "nodeType": "Block",
                                "src": "7784:53:5",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 1200,
                                          "name": "errorMessage",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1184,
                                          "src": "7809:12:5",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        ],
                                        "id": 1199,
                                        "name": "revert",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [
                                          -19,
                                          -19
                                        ],
                                        "referencedDeclaration": -19,
                                        "src": "7802:6:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                          "typeString": "function (string memory) pure"
                                        }
                                      },
                                      "id": 1201,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7802:20:5",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 1202,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7802:20:5"
                                  }
                                ]
                              },
                              "id": 1204,
                              "nodeType": "IfStatement",
                              "src": "7472:365:5",
                              "trueBody": {
                                "id": 1198,
                                "nodeType": "Block",
                                "src": "7499:279:5",
                                "statements": [
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "7619:145:5",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "7641:40:5",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "returndata",
                                                "nodeType": "YulIdentifier",
                                                "src": "7670:10:5"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mload",
                                              "nodeType": "YulIdentifier",
                                              "src": "7664:5:5"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7664:17:5"
                                          },
                                          "variables": [
                                            {
                                              "name": "returndata_size",
                                              "nodeType": "YulTypedName",
                                              "src": "7645:15:5",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "7713:2:5",
                                                    "type": "",
                                                    "value": "32"
                                                  },
                                                  {
                                                    "name": "returndata",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "7717:10:5"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "7709:3:5"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "7709:19:5"
                                              },
                                              {
                                                "name": "returndata_size",
                                                "nodeType": "YulIdentifier",
                                                "src": "7730:15:5"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "7702:6:5"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7702:44:5"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "7702:44:5"
                                        }
                                      ]
                                    },
                                    "evmVersion": "london",
                                    "externalReferences": [
                                      {
                                        "declaration": 1182,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "7670:10:5",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 1182,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "7717:10:5",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 1197,
                                    "nodeType": "InlineAssembly",
                                    "src": "7610:154:5"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "id": 1206,
                        "nodeType": "IfStatement",
                        "src": "7331:516:5",
                        "trueBody": {
                          "id": 1192,
                          "nodeType": "Block",
                          "src": "7344:42:5",
                          "statements": [
                            {
                              "expression": {
                                "id": 1190,
                                "name": "returndata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1182,
                                "src": "7365:10:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "functionReturnParameters": 1188,
                              "id": 1191,
                              "nodeType": "Return",
                              "src": "7358:17:5"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1178,
                    "nodeType": "StructuredDocumentation",
                    "src": "6947:209:5",
                    "text": " @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason using the provided one.\n _Available since v4.3._"
                  },
                  "id": 1208,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifyCallResult",
                  "nameLocation": "7170:16:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1185,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1180,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "7201:7:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1208,
                        "src": "7196:12:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1179,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7196:4:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1182,
                        "mutability": "mutable",
                        "name": "returndata",
                        "nameLocation": "7231:10:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1208,
                        "src": "7218:23:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1181,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7218:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1184,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "7265:12:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 1208,
                        "src": "7251:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1183,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "7251:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7186:97:5"
                  },
                  "returnParameters": {
                    "id": 1188,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1187,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1208,
                        "src": "7307:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1186,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7307:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7306:14:5"
                  },
                  "scope": 1209,
                  "src": "7161:692:5",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1210,
              "src": "126:7729:5",
              "usedErrors": []
            }
          ],
          "src": "33:7823:5"
        },
        "id": 5
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
          "exportedSymbols": {
            "Context": [
              1231
            ]
          },
          "id": 1232,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1211,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:6"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1212,
                "nodeType": "StructuredDocumentation",
                "src": "58:496:6",
                "text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."
              },
              "fullyImplemented": true,
              "id": 1231,
              "linearizedBaseContracts": [
                1231
              ],
              "name": "Context",
              "nameLocation": "573:7:6",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 1220,
                    "nodeType": "Block",
                    "src": "649:34:6",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 1217,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "666:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1218,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "666:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1216,
                        "id": 1219,
                        "nodeType": "Return",
                        "src": "659:17:6"
                      }
                    ]
                  },
                  "id": 1221,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgSender",
                  "nameLocation": "596:10:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1213,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "606:2:6"
                  },
                  "returnParameters": {
                    "id": 1216,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1215,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1221,
                        "src": "640:7:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1214,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "640:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "639:9:6"
                  },
                  "scope": 1231,
                  "src": "587:96:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1229,
                    "nodeType": "Block",
                    "src": "756:32:6",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 1226,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "773:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "src": "773:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "functionReturnParameters": 1225,
                        "id": 1228,
                        "nodeType": "Return",
                        "src": "766:15:6"
                      }
                    ]
                  },
                  "id": 1230,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgData",
                  "nameLocation": "698:8:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1222,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "706:2:6"
                  },
                  "returnParameters": {
                    "id": 1225,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1224,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1230,
                        "src": "740:14:6",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1223,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "740:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "739:16:6"
                  },
                  "scope": 1231,
                  "src": "689:99:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 1232,
              "src": "555:235:6",
              "usedErrors": []
            }
          ],
          "src": "33:758:6"
        },
        "id": 6
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
          "exportedSymbols": {
            "Math": [
              1319
            ]
          },
          "id": 1320,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1233,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:7"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 1234,
                "nodeType": "StructuredDocumentation",
                "src": "58:73:7",
                "text": " @dev Standard math utilities missing in the Solidity language."
              },
              "fullyImplemented": true,
              "id": 1319,
              "linearizedBaseContracts": [
                1319
              ],
              "name": "Math",
              "nameLocation": "140:4:7",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 1251,
                    "nodeType": "Block",
                    "src": "282:38:7",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1246,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1244,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1237,
                              "src": "299:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "id": 1245,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1239,
                              "src": "304:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "299:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "id": 1248,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1239,
                            "src": "312:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "299:14:7",
                          "trueExpression": {
                            "id": 1247,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1237,
                            "src": "308:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1243,
                        "id": 1250,
                        "nodeType": "Return",
                        "src": "292:21:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1235,
                    "nodeType": "StructuredDocumentation",
                    "src": "151:59:7",
                    "text": " @dev Returns the largest of two numbers."
                  },
                  "id": 1252,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "max",
                  "nameLocation": "224:3:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1240,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1237,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "236:1:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1252,
                        "src": "228:9:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1236,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "228:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1239,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "247:1:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1252,
                        "src": "239:9:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1238,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "239:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "227:22:7"
                  },
                  "returnParameters": {
                    "id": 1243,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1242,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1252,
                        "src": "273:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1241,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "273:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "272:9:7"
                  },
                  "scope": 1319,
                  "src": "215:105:7",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1269,
                    "nodeType": "Block",
                    "src": "458:37:7",
                    "statements": [
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1264,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1262,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1255,
                              "src": "475:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 1263,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1257,
                              "src": "479:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "475:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "id": 1266,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1257,
                            "src": "487:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "475:13:7",
                          "trueExpression": {
                            "id": 1265,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1255,
                            "src": "483:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1261,
                        "id": 1268,
                        "nodeType": "Return",
                        "src": "468:20:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1253,
                    "nodeType": "StructuredDocumentation",
                    "src": "326:60:7",
                    "text": " @dev Returns the smallest of two numbers."
                  },
                  "id": 1270,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "min",
                  "nameLocation": "400:3:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1258,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1255,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "412:1:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1270,
                        "src": "404:9:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1254,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "404:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1257,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "423:1:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1270,
                        "src": "415:9:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1256,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "415:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "403:22:7"
                  },
                  "returnParameters": {
                    "id": 1261,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1260,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1270,
                        "src": "449:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1259,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "449:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "448:9:7"
                  },
                  "scope": 1319,
                  "src": "391:104:7",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1292,
                    "nodeType": "Block",
                    "src": "679:82:7",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1290,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1282,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1280,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1273,
                                  "src": "734:1:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "id": 1281,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1275,
                                  "src": "738:1:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "734:5:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 1283,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "733:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1289,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1286,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 1284,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1273,
                                    "src": "744:1:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "^",
                                  "rightExpression": {
                                    "id": 1285,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1275,
                                    "src": "748:1:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "744:5:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1287,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "743:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 1288,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "753:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "743:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "733:21:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1279,
                        "id": 1291,
                        "nodeType": "Return",
                        "src": "726:28:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1271,
                    "nodeType": "StructuredDocumentation",
                    "src": "501:102:7",
                    "text": " @dev Returns the average of two numbers. The result is rounded towards\n zero."
                  },
                  "id": 1293,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "average",
                  "nameLocation": "617:7:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1273,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "633:1:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1293,
                        "src": "625:9:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1272,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "625:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1275,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "644:1:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1293,
                        "src": "636:9:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1274,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "636:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "624:22:7"
                  },
                  "returnParameters": {
                    "id": 1279,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1278,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1293,
                        "src": "670:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1277,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "670:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "669:9:7"
                  },
                  "scope": 1319,
                  "src": "608:153:7",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1317,
                    "nodeType": "Block",
                    "src": "1031:123:7",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1305,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1303,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1296,
                              "src": "1119:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "id": 1304,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1298,
                              "src": "1123:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1119:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "components": [
                              {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1310,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 1308,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 1306,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1296,
                                      "src": "1128:1:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "%",
                                    "rightExpression": {
                                      "id": 1307,
                                      "name": "b",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1298,
                                      "src": "1132:1:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1128:5:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 1309,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1137:1:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "1128:10:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "hexValue": "31",
                                  "id": 1312,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1145:1:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "id": 1313,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "1128:18:7",
                                "trueExpression": {
                                  "hexValue": "30",
                                  "id": 1311,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1141:1:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "id": 1314,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1127:20:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "1119:28:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1302,
                        "id": 1316,
                        "nodeType": "Return",
                        "src": "1112:35:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1294,
                    "nodeType": "StructuredDocumentation",
                    "src": "767:188:7",
                    "text": " @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds up instead\n of rounding down."
                  },
                  "id": 1318,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ceilDiv",
                  "nameLocation": "969:7:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1299,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1296,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "985:1:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1318,
                        "src": "977:9:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1295,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "977:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1298,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "996:1:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 1318,
                        "src": "988:9:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1297,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "988:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "976:22:7"
                  },
                  "returnParameters": {
                    "id": 1302,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1301,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1318,
                        "src": "1022:7:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1300,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1022:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1021:9:7"
                  },
                  "scope": 1319,
                  "src": "960:194:7",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1320,
              "src": "132:1024:7",
              "usedErrors": []
            }
          ],
          "src": "33:1124:7"
        },
        "id": 7
      },
      "@openzeppelin/contracts/utils/structs/EnumerableSet.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
          "exportedSymbols": {
            "EnumerableSet": [
              1918
            ]
          },
          "id": 1919,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1321,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:23:8"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 1322,
                "nodeType": "StructuredDocumentation",
                "src": "58:686:8",
                "text": " @dev Library for managing\n https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n types.\n Sets have the following properties:\n - Elements are added, removed, and checked for existence in constant time\n (O(1)).\n - Elements are enumerated in O(n). No guarantees are made on the ordering.\n ```\n contract Example {\n     // Add the library methods\n     using EnumerableSet for EnumerableSet.AddressSet;\n     // Declare a set state variable\n     EnumerableSet.AddressSet private mySet;\n }\n ```\n As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n and `uint256` (`UintSet`) are supported."
              },
              "fullyImplemented": true,
              "id": 1918,
              "linearizedBaseContracts": [
                1918
              ],
              "name": "EnumerableSet",
              "nameLocation": "753:13:8",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "EnumerableSet.Set",
                  "id": 1330,
                  "members": [
                    {
                      "constant": false,
                      "id": 1325,
                      "mutability": "mutable",
                      "name": "_values",
                      "nameLocation": "1277:7:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 1330,
                      "src": "1267:17:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 1323,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1267:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1324,
                        "nodeType": "ArrayTypeName",
                        "src": "1267:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1329,
                      "mutability": "mutable",
                      "name": "_indexes",
                      "nameLocation": "1445:8:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 1330,
                      "src": "1417:36:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                        "typeString": "mapping(bytes32 => uint256)"
                      },
                      "typeName": {
                        "id": 1328,
                        "keyType": {
                          "id": 1326,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1425:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "Mapping",
                        "src": "1417:27:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                          "typeString": "mapping(bytes32 => uint256)"
                        },
                        "valueType": {
                          "id": 1327,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1436:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Set",
                  "nameLocation": "1220:3:8",
                  "nodeType": "StructDefinition",
                  "scope": 1918,
                  "src": "1213:247:8",
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1371,
                    "nodeType": "Block",
                    "src": "1699:335:8",
                    "statements": [
                      {
                        "condition": {
                          "id": 1345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "1713:22:8",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 1342,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1334,
                                "src": "1724:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                  "typeString": "struct EnumerableSet.Set storage pointer"
                                }
                              },
                              {
                                "id": 1343,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1336,
                                "src": "1729:5:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                  "typeString": "struct EnumerableSet.Set storage pointer"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 1341,
                              "name": "_contains",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1475,
                              "src": "1714:9:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$_t_bytes32_$returns$_t_bool_$",
                                "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"
                              }
                            },
                            "id": 1344,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1714:21:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1369,
                          "nodeType": "Block",
                          "src": "1991:37:8",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "66616c7365",
                                "id": 1367,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2012:5:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 1340,
                              "id": 1368,
                              "nodeType": "Return",
                              "src": "2005:12:8"
                            }
                          ]
                        },
                        "id": 1370,
                        "nodeType": "IfStatement",
                        "src": "1709:319:8",
                        "trueBody": {
                          "id": 1366,
                          "nodeType": "Block",
                          "src": "1737:248:8",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 1351,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1336,
                                    "src": "1768:5:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "expression": {
                                      "id": 1346,
                                      "name": "set",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1334,
                                      "src": "1751:3:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                        "typeString": "struct EnumerableSet.Set storage pointer"
                                      }
                                    },
                                    "id": 1349,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_values",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1325,
                                    "src": "1751:11:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                      "typeString": "bytes32[] storage ref"
                                    }
                                  },
                                  "id": 1350,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "src": "1751:16:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_bytes32_$returns$__$bound_to$_t_array$_t_bytes32_$dyn_storage_ptr_$",
                                    "typeString": "function (bytes32[] storage pointer,bytes32)"
                                  }
                                },
                                "id": 1352,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1751:23:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1353,
                              "nodeType": "ExpressionStatement",
                              "src": "1751:23:8"
                            },
                            {
                              "expression": {
                                "id": 1362,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "expression": {
                                      "id": 1354,
                                      "name": "set",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1334,
                                      "src": "1909:3:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                        "typeString": "struct EnumerableSet.Set storage pointer"
                                      }
                                    },
                                    "id": 1357,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_indexes",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1329,
                                    "src": "1909:12:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                                      "typeString": "mapping(bytes32 => uint256)"
                                    }
                                  },
                                  "id": 1358,
                                  "indexExpression": {
                                    "id": 1356,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1336,
                                    "src": "1922:5:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "1909:19:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "expression": {
                                      "id": 1359,
                                      "name": "set",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1334,
                                      "src": "1931:3:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                        "typeString": "struct EnumerableSet.Set storage pointer"
                                      }
                                    },
                                    "id": 1360,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_values",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1325,
                                    "src": "1931:11:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                      "typeString": "bytes32[] storage ref"
                                    }
                                  },
                                  "id": 1361,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "1931:18:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1909:40:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1363,
                              "nodeType": "ExpressionStatement",
                              "src": "1909:40:8"
                            },
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 1364,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1970:4:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 1340,
                              "id": 1365,
                              "nodeType": "Return",
                              "src": "1963:11:8"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1331,
                    "nodeType": "StructuredDocumentation",
                    "src": "1466:159:8",
                    "text": " @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."
                  },
                  "id": 1372,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_add",
                  "nameLocation": "1639:4:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1337,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1334,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "1656:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1372,
                        "src": "1644:15:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                          "typeString": "struct EnumerableSet.Set"
                        },
                        "typeName": {
                          "id": 1333,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1332,
                            "name": "Set",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1330,
                            "src": "1644:3:8"
                          },
                          "referencedDeclaration": 1330,
                          "src": "1644:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                            "typeString": "struct EnumerableSet.Set"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1336,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1669:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1372,
                        "src": "1661:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1335,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1661:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1643:32:8"
                  },
                  "returnParameters": {
                    "id": 1340,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1339,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1372,
                        "src": "1693:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1338,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1693:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1692:6:8"
                  },
                  "scope": 1918,
                  "src": "1630:404:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1455,
                    "nodeType": "Block",
                    "src": "2274:1316:8",
                    "statements": [
                      {
                        "assignments": [
                          1384
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1384,
                            "mutability": "mutable",
                            "name": "valueIndex",
                            "nameLocation": "2392:10:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 1455,
                            "src": "2384:18:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1383,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2384:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1389,
                        "initialValue": {
                          "baseExpression": {
                            "expression": {
                              "id": 1385,
                              "name": "set",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1376,
                              "src": "2405:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                "typeString": "struct EnumerableSet.Set storage pointer"
                              }
                            },
                            "id": 1386,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_indexes",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1329,
                            "src": "2405:12:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                              "typeString": "mapping(bytes32 => uint256)"
                            }
                          },
                          "id": 1388,
                          "indexExpression": {
                            "id": 1387,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1378,
                            "src": "2418:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2405:19:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2384:40:8"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1390,
                            "name": "valueIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1384,
                            "src": "2439:10:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1391,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2453:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2439:15:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1453,
                          "nodeType": "Block",
                          "src": "3547:37:8",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "66616c7365",
                                "id": 1451,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3568:5:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 1382,
                              "id": 1452,
                              "nodeType": "Return",
                              "src": "3561:12:8"
                            }
                          ]
                        },
                        "id": 1454,
                        "nodeType": "IfStatement",
                        "src": "2435:1149:8",
                        "trueBody": {
                          "id": 1450,
                          "nodeType": "Block",
                          "src": "2456:1085:8",
                          "statements": [
                            {
                              "assignments": [
                                1394
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1394,
                                  "mutability": "mutable",
                                  "name": "toDeleteIndex",
                                  "nameLocation": "2816:13:8",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1450,
                                  "src": "2808:21:8",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1393,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2808:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1398,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1397,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1395,
                                  "name": "valueIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1384,
                                  "src": "2832:10:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 1396,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2845:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "2832:14:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2808:38:8"
                            },
                            {
                              "assignments": [
                                1400
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1400,
                                  "mutability": "mutable",
                                  "name": "lastIndex",
                                  "nameLocation": "2868:9:8",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1450,
                                  "src": "2860:17:8",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1399,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2860:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1406,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1405,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "expression": {
                                      "id": 1401,
                                      "name": "set",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1376,
                                      "src": "2880:3:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                        "typeString": "struct EnumerableSet.Set storage pointer"
                                      }
                                    },
                                    "id": 1402,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_values",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1325,
                                    "src": "2880:11:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                      "typeString": "bytes32[] storage ref"
                                    }
                                  },
                                  "id": 1403,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "2880:18:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 1404,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2901:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "2880:22:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2860:42:8"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1409,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1407,
                                  "name": "lastIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1400,
                                  "src": "2921:9:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "id": 1408,
                                  "name": "toDeleteIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1394,
                                  "src": "2934:13:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2921:26:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1434,
                              "nodeType": "IfStatement",
                              "src": "2917:398:8",
                              "trueBody": {
                                "id": 1433,
                                "nodeType": "Block",
                                "src": "2949:366:8",
                                "statements": [
                                  {
                                    "assignments": [
                                      1411
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 1411,
                                        "mutability": "mutable",
                                        "name": "lastvalue",
                                        "nameLocation": "2975:9:8",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 1433,
                                        "src": "2967:17:8",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 1410,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "2967:7:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 1416,
                                    "initialValue": {
                                      "baseExpression": {
                                        "expression": {
                                          "id": 1412,
                                          "name": "set",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1376,
                                          "src": "2987:3:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                            "typeString": "struct EnumerableSet.Set storage pointer"
                                          }
                                        },
                                        "id": 1413,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "_values",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 1325,
                                        "src": "2987:11:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                          "typeString": "bytes32[] storage ref"
                                        }
                                      },
                                      "id": 1415,
                                      "indexExpression": {
                                        "id": 1414,
                                        "name": "lastIndex",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1400,
                                        "src": "2999:9:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "2987:22:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2967:42:8"
                                  },
                                  {
                                    "expression": {
                                      "id": 1423,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "expression": {
                                            "id": 1417,
                                            "name": "set",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1376,
                                            "src": "3109:3:8",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                              "typeString": "struct EnumerableSet.Set storage pointer"
                                            }
                                          },
                                          "id": 1420,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "_values",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 1325,
                                          "src": "3109:11:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                            "typeString": "bytes32[] storage ref"
                                          }
                                        },
                                        "id": 1421,
                                        "indexExpression": {
                                          "id": 1419,
                                          "name": "toDeleteIndex",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1394,
                                          "src": "3121:13:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "3109:26:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 1422,
                                        "name": "lastvalue",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1411,
                                        "src": "3138:9:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "3109:38:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "id": 1424,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3109:38:8"
                                  },
                                  {
                                    "expression": {
                                      "id": 1431,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "expression": {
                                            "id": 1425,
                                            "name": "set",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1376,
                                            "src": "3221:3:8",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                              "typeString": "struct EnumerableSet.Set storage pointer"
                                            }
                                          },
                                          "id": 1428,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "_indexes",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 1329,
                                          "src": "3221:12:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                                            "typeString": "mapping(bytes32 => uint256)"
                                          }
                                        },
                                        "id": 1429,
                                        "indexExpression": {
                                          "id": 1427,
                                          "name": "lastvalue",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1411,
                                          "src": "3234:9:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "3221:23:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 1430,
                                        "name": "valueIndex",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1384,
                                        "src": "3247:10:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3221:36:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1432,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3221:36:8"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "expression": {
                                      "id": 1435,
                                      "name": "set",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1376,
                                      "src": "3393:3:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                        "typeString": "struct EnumerableSet.Set storage pointer"
                                      }
                                    },
                                    "id": 1438,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_values",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1325,
                                    "src": "3393:11:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                      "typeString": "bytes32[] storage ref"
                                    }
                                  },
                                  "id": 1439,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "pop",
                                  "nodeType": "MemberAccess",
                                  "src": "3393:15:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_bytes32_$dyn_storage_ptr_$",
                                    "typeString": "function (bytes32[] storage pointer)"
                                  }
                                },
                                "id": 1440,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3393:17:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1441,
                              "nodeType": "ExpressionStatement",
                              "src": "3393:17:8"
                            },
                            {
                              "expression": {
                                "id": 1446,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "3478:26:8",
                                "subExpression": {
                                  "baseExpression": {
                                    "expression": {
                                      "id": 1442,
                                      "name": "set",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1376,
                                      "src": "3485:3:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                        "typeString": "struct EnumerableSet.Set storage pointer"
                                      }
                                    },
                                    "id": 1443,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_indexes",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1329,
                                    "src": "3485:12:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                                      "typeString": "mapping(bytes32 => uint256)"
                                    }
                                  },
                                  "id": 1445,
                                  "indexExpression": {
                                    "id": 1444,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1378,
                                    "src": "3498:5:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "3485:19:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1447,
                              "nodeType": "ExpressionStatement",
                              "src": "3478:26:8"
                            },
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 1448,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3526:4:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 1382,
                              "id": 1449,
                              "nodeType": "Return",
                              "src": "3519:11:8"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1373,
                    "nodeType": "StructuredDocumentation",
                    "src": "2040:157:8",
                    "text": " @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."
                  },
                  "id": 1456,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_remove",
                  "nameLocation": "2211:7:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1379,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1376,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "2231:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1456,
                        "src": "2219:15:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                          "typeString": "struct EnumerableSet.Set"
                        },
                        "typeName": {
                          "id": 1375,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1374,
                            "name": "Set",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1330,
                            "src": "2219:3:8"
                          },
                          "referencedDeclaration": 1330,
                          "src": "2219:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                            "typeString": "struct EnumerableSet.Set"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1378,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2244:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1456,
                        "src": "2236:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1377,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2236:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2218:32:8"
                  },
                  "returnParameters": {
                    "id": 1382,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1381,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1456,
                        "src": "2268:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1380,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2268:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2267:6:8"
                  },
                  "scope": 1918,
                  "src": "2202:1388:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1474,
                    "nodeType": "Block",
                    "src": "3750:48:8",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1472,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "expression": {
                                "id": 1467,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1460,
                                "src": "3767:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                  "typeString": "struct EnumerableSet.Set storage pointer"
                                }
                              },
                              "id": 1468,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_indexes",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1329,
                              "src": "3767:12:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                                "typeString": "mapping(bytes32 => uint256)"
                              }
                            },
                            "id": 1470,
                            "indexExpression": {
                              "id": 1469,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1462,
                              "src": "3780:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3767:19:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1471,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3790:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3767:24:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1466,
                        "id": 1473,
                        "nodeType": "Return",
                        "src": "3760:31:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1457,
                    "nodeType": "StructuredDocumentation",
                    "src": "3596:70:8",
                    "text": " @dev Returns true if the value is in the set. O(1)."
                  },
                  "id": 1475,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_contains",
                  "nameLocation": "3680:9:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1463,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1460,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "3702:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1475,
                        "src": "3690:15:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                          "typeString": "struct EnumerableSet.Set"
                        },
                        "typeName": {
                          "id": 1459,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1458,
                            "name": "Set",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1330,
                            "src": "3690:3:8"
                          },
                          "referencedDeclaration": 1330,
                          "src": "3690:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                            "typeString": "struct EnumerableSet.Set"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1462,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "3715:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1475,
                        "src": "3707:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1461,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3707:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3689:32:8"
                  },
                  "returnParameters": {
                    "id": 1466,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1465,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1475,
                        "src": "3744:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1464,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3744:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3743:6:8"
                  },
                  "scope": 1918,
                  "src": "3671:127:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1488,
                    "nodeType": "Block",
                    "src": "3944:42:8",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "expression": {
                              "id": 1484,
                              "name": "set",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1479,
                              "src": "3961:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                "typeString": "struct EnumerableSet.Set storage pointer"
                              }
                            },
                            "id": 1485,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_values",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1325,
                            "src": "3961:11:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                              "typeString": "bytes32[] storage ref"
                            }
                          },
                          "id": 1486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "3961:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1483,
                        "id": 1487,
                        "nodeType": "Return",
                        "src": "3954:25:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1476,
                    "nodeType": "StructuredDocumentation",
                    "src": "3804:70:8",
                    "text": " @dev Returns the number of values on the set. O(1)."
                  },
                  "id": 1489,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_length",
                  "nameLocation": "3888:7:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1480,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1479,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "3908:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1489,
                        "src": "3896:15:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                          "typeString": "struct EnumerableSet.Set"
                        },
                        "typeName": {
                          "id": 1478,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1477,
                            "name": "Set",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1330,
                            "src": "3896:3:8"
                          },
                          "referencedDeclaration": 1330,
                          "src": "3896:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                            "typeString": "struct EnumerableSet.Set"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3895:17:8"
                  },
                  "returnParameters": {
                    "id": 1483,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1482,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1489,
                        "src": "3935:7:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1481,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3935:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3934:9:8"
                  },
                  "scope": 1918,
                  "src": "3879:107:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1505,
                    "nodeType": "Block",
                    "src": "4404:42:8",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "expression": {
                              "id": 1500,
                              "name": "set",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1493,
                              "src": "4421:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                                "typeString": "struct EnumerableSet.Set storage pointer"
                              }
                            },
                            "id": 1501,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_values",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1325,
                            "src": "4421:11:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                              "typeString": "bytes32[] storage ref"
                            }
                          },
                          "id": 1503,
                          "indexExpression": {
                            "id": 1502,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1495,
                            "src": "4433:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4421:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 1499,
                        "id": 1504,
                        "nodeType": "Return",
                        "src": "4414:25:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1490,
                    "nodeType": "StructuredDocumentation",
                    "src": "3992:331:8",
                    "text": " @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."
                  },
                  "id": 1506,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_at",
                  "nameLocation": "4337:3:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1496,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1493,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "4353:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1506,
                        "src": "4341:15:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                          "typeString": "struct EnumerableSet.Set"
                        },
                        "typeName": {
                          "id": 1492,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1491,
                            "name": "Set",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1330,
                            "src": "4341:3:8"
                          },
                          "referencedDeclaration": 1330,
                          "src": "4341:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                            "typeString": "struct EnumerableSet.Set"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1495,
                        "mutability": "mutable",
                        "name": "index",
                        "nameLocation": "4366:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1506,
                        "src": "4358:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1494,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4358:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4340:32:8"
                  },
                  "returnParameters": {
                    "id": 1499,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1498,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1506,
                        "src": "4395:7:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1497,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4395:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4394:9:8"
                  },
                  "scope": 1918,
                  "src": "4328:118:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1519,
                    "nodeType": "Block",
                    "src": "5060:35:8",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 1516,
                            "name": "set",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1510,
                            "src": "5077:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                              "typeString": "struct EnumerableSet.Set storage pointer"
                            }
                          },
                          "id": 1517,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_values",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1325,
                          "src": "5077:11:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                            "typeString": "bytes32[] storage ref"
                          }
                        },
                        "functionReturnParameters": 1515,
                        "id": 1518,
                        "nodeType": "Return",
                        "src": "5070:18:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1507,
                    "nodeType": "StructuredDocumentation",
                    "src": "4452:529:8",
                    "text": " @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."
                  },
                  "id": 1520,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_values",
                  "nameLocation": "4995:7:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1511,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1510,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "5015:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1520,
                        "src": "5003:15:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                          "typeString": "struct EnumerableSet.Set"
                        },
                        "typeName": {
                          "id": 1509,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1508,
                            "name": "Set",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1330,
                            "src": "5003:3:8"
                          },
                          "referencedDeclaration": 1330,
                          "src": "5003:3:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                            "typeString": "struct EnumerableSet.Set"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5002:17:8"
                  },
                  "returnParameters": {
                    "id": 1515,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1514,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1520,
                        "src": "5042:16:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1512,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "5042:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 1513,
                          "nodeType": "ArrayTypeName",
                          "src": "5042:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5041:18:8"
                  },
                  "scope": 1918,
                  "src": "4986:109:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "canonicalName": "EnumerableSet.Bytes32Set",
                  "id": 1524,
                  "members": [
                    {
                      "constant": false,
                      "id": 1523,
                      "mutability": "mutable",
                      "name": "_inner",
                      "nameLocation": "5152:6:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 1524,
                      "src": "5148:10:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                        "typeString": "struct EnumerableSet.Set"
                      },
                      "typeName": {
                        "id": 1522,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 1521,
                          "name": "Set",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 1330,
                          "src": "5148:3:8"
                        },
                        "referencedDeclaration": 1330,
                        "src": "5148:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                          "typeString": "struct EnumerableSet.Set"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Bytes32Set",
                  "nameLocation": "5127:10:8",
                  "nodeType": "StructDefinition",
                  "scope": 1918,
                  "src": "5120:45:8",
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1541,
                    "nodeType": "Block",
                    "src": "5411:47:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1536,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1528,
                                "src": "5433:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                                  "typeString": "struct EnumerableSet.Bytes32Set storage pointer"
                                }
                              },
                              "id": 1537,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1523,
                              "src": "5433:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            },
                            {
                              "id": 1538,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1530,
                              "src": "5445:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1535,
                            "name": "_add",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1372,
                            "src": "5428:4:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Set_$1330_storage_ptr_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"
                            }
                          },
                          "id": 1539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5428:23:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1534,
                        "id": 1540,
                        "nodeType": "Return",
                        "src": "5421:30:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1525,
                    "nodeType": "StructuredDocumentation",
                    "src": "5171:159:8",
                    "text": " @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."
                  },
                  "id": 1542,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nameLocation": "5344:3:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1531,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1528,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "5367:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1542,
                        "src": "5348:22:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                          "typeString": "struct EnumerableSet.Bytes32Set"
                        },
                        "typeName": {
                          "id": 1527,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1526,
                            "name": "Bytes32Set",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1524,
                            "src": "5348:10:8"
                          },
                          "referencedDeclaration": 1524,
                          "src": "5348:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                            "typeString": "struct EnumerableSet.Bytes32Set"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1530,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "5380:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1542,
                        "src": "5372:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1529,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5372:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5347:39:8"
                  },
                  "returnParameters": {
                    "id": 1534,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1533,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1542,
                        "src": "5405:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1532,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5405:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5404:6:8"
                  },
                  "scope": 1918,
                  "src": "5335:123:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1559,
                    "nodeType": "Block",
                    "src": "5705:50:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1554,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1546,
                                "src": "5730:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                                  "typeString": "struct EnumerableSet.Bytes32Set storage pointer"
                                }
                              },
                              "id": 1555,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1523,
                              "src": "5730:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            },
                            {
                              "id": 1556,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1548,
                              "src": "5742:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1553,
                            "name": "_remove",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1456,
                            "src": "5722:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Set_$1330_storage_ptr_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"
                            }
                          },
                          "id": 1557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5722:26:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1552,
                        "id": 1558,
                        "nodeType": "Return",
                        "src": "5715:33:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1543,
                    "nodeType": "StructuredDocumentation",
                    "src": "5464:157:8",
                    "text": " @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."
                  },
                  "id": 1560,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "remove",
                  "nameLocation": "5635:6:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1549,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1546,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "5661:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1560,
                        "src": "5642:22:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                          "typeString": "struct EnumerableSet.Bytes32Set"
                        },
                        "typeName": {
                          "id": 1545,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1544,
                            "name": "Bytes32Set",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1524,
                            "src": "5642:10:8"
                          },
                          "referencedDeclaration": 1524,
                          "src": "5642:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                            "typeString": "struct EnumerableSet.Bytes32Set"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1548,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "5674:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1560,
                        "src": "5666:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1547,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5666:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5641:39:8"
                  },
                  "returnParameters": {
                    "id": 1552,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1551,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1560,
                        "src": "5699:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1550,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5699:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5698:6:8"
                  },
                  "scope": 1918,
                  "src": "5626:129:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1577,
                    "nodeType": "Block",
                    "src": "5922:52:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1572,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1564,
                                "src": "5949:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                                  "typeString": "struct EnumerableSet.Bytes32Set storage pointer"
                                }
                              },
                              "id": 1573,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1523,
                              "src": "5949:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            },
                            {
                              "id": 1574,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1566,
                              "src": "5961:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1571,
                            "name": "_contains",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1475,
                            "src": "5939:9:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"
                            }
                          },
                          "id": 1575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5939:28:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1570,
                        "id": 1576,
                        "nodeType": "Return",
                        "src": "5932:35:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1561,
                    "nodeType": "StructuredDocumentation",
                    "src": "5761:70:8",
                    "text": " @dev Returns true if the value is in the set. O(1)."
                  },
                  "id": 1578,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "contains",
                  "nameLocation": "5845:8:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1567,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1564,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "5873:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1578,
                        "src": "5854:22:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                          "typeString": "struct EnumerableSet.Bytes32Set"
                        },
                        "typeName": {
                          "id": 1563,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1562,
                            "name": "Bytes32Set",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1524,
                            "src": "5854:10:8"
                          },
                          "referencedDeclaration": 1524,
                          "src": "5854:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                            "typeString": "struct EnumerableSet.Bytes32Set"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1566,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "5886:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1578,
                        "src": "5878:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1565,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5878:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5853:39:8"
                  },
                  "returnParameters": {
                    "id": 1570,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1569,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1578,
                        "src": "5916:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1568,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5916:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5915:6:8"
                  },
                  "scope": 1918,
                  "src": "5836:138:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1592,
                    "nodeType": "Block",
                    "src": "6127:43:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1588,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1582,
                                "src": "6152:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                                  "typeString": "struct EnumerableSet.Bytes32Set storage pointer"
                                }
                              },
                              "id": 1589,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1523,
                              "src": "6152:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            ],
                            "id": 1587,
                            "name": "_length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1489,
                            "src": "6144:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$returns$_t_uint256_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 1590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6144:19:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1586,
                        "id": 1591,
                        "nodeType": "Return",
                        "src": "6137:26:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1579,
                    "nodeType": "StructuredDocumentation",
                    "src": "5980:70:8",
                    "text": " @dev Returns the number of values in the set. O(1)."
                  },
                  "id": 1593,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "length",
                  "nameLocation": "6064:6:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1583,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1582,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "6090:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1593,
                        "src": "6071:22:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                          "typeString": "struct EnumerableSet.Bytes32Set"
                        },
                        "typeName": {
                          "id": 1581,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1580,
                            "name": "Bytes32Set",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1524,
                            "src": "6071:10:8"
                          },
                          "referencedDeclaration": 1524,
                          "src": "6071:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                            "typeString": "struct EnumerableSet.Bytes32Set"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6070:24:8"
                  },
                  "returnParameters": {
                    "id": 1586,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1585,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1593,
                        "src": "6118:7:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1584,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6118:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6117:9:8"
                  },
                  "scope": 1918,
                  "src": "6055:115:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1610,
                    "nodeType": "Block",
                    "src": "6595:46:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1605,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1597,
                                "src": "6616:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                                  "typeString": "struct EnumerableSet.Bytes32Set storage pointer"
                                }
                              },
                              "id": 1606,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1523,
                              "src": "6616:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            },
                            {
                              "id": 1607,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1599,
                              "src": "6628:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1604,
                            "name": "_at",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1506,
                            "src": "6612:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$_t_uint256_$returns$_t_bytes32_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"
                            }
                          },
                          "id": 1608,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6612:22:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 1603,
                        "id": 1609,
                        "nodeType": "Return",
                        "src": "6605:29:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1594,
                    "nodeType": "StructuredDocumentation",
                    "src": "6176:331:8",
                    "text": " @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."
                  },
                  "id": 1611,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "at",
                  "nameLocation": "6521:2:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1600,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1597,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "6543:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1611,
                        "src": "6524:22:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                          "typeString": "struct EnumerableSet.Bytes32Set"
                        },
                        "typeName": {
                          "id": 1596,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1595,
                            "name": "Bytes32Set",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1524,
                            "src": "6524:10:8"
                          },
                          "referencedDeclaration": 1524,
                          "src": "6524:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                            "typeString": "struct EnumerableSet.Bytes32Set"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1599,
                        "mutability": "mutable",
                        "name": "index",
                        "nameLocation": "6556:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1611,
                        "src": "6548:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1598,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6548:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6523:39:8"
                  },
                  "returnParameters": {
                    "id": 1603,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1602,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1611,
                        "src": "6586:7:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 1601,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6586:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6585:9:8"
                  },
                  "scope": 1918,
                  "src": "6512:129:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1626,
                    "nodeType": "Block",
                    "src": "7262:43:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1622,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1615,
                                "src": "7287:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                                  "typeString": "struct EnumerableSet.Bytes32Set storage pointer"
                                }
                              },
                              "id": 1623,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1523,
                              "src": "7287:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            ],
                            "id": 1621,
                            "name": "_values",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1520,
                            "src": "7279:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"
                            }
                          },
                          "id": 1624,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7279:19:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        "functionReturnParameters": 1620,
                        "id": 1625,
                        "nodeType": "Return",
                        "src": "7272:26:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1612,
                    "nodeType": "StructuredDocumentation",
                    "src": "6647:529:8",
                    "text": " @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."
                  },
                  "id": 1627,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "values",
                  "nameLocation": "7190:6:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1616,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1615,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "7216:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1627,
                        "src": "7197:22:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                          "typeString": "struct EnumerableSet.Bytes32Set"
                        },
                        "typeName": {
                          "id": 1614,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1613,
                            "name": "Bytes32Set",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1524,
                            "src": "7197:10:8"
                          },
                          "referencedDeclaration": 1524,
                          "src": "7197:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Bytes32Set_$1524_storage_ptr",
                            "typeString": "struct EnumerableSet.Bytes32Set"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7196:24:8"
                  },
                  "returnParameters": {
                    "id": 1620,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1619,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1627,
                        "src": "7244:16:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1617,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "7244:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 1618,
                          "nodeType": "ArrayTypeName",
                          "src": "7244:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7243:18:8"
                  },
                  "scope": 1918,
                  "src": "7181:124:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "canonicalName": "EnumerableSet.AddressSet",
                  "id": 1631,
                  "members": [
                    {
                      "constant": false,
                      "id": 1630,
                      "mutability": "mutable",
                      "name": "_inner",
                      "nameLocation": "7362:6:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 1631,
                      "src": "7358:10:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                        "typeString": "struct EnumerableSet.Set"
                      },
                      "typeName": {
                        "id": 1629,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 1628,
                          "name": "Set",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 1330,
                          "src": "7358:3:8"
                        },
                        "referencedDeclaration": 1330,
                        "src": "7358:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                          "typeString": "struct EnumerableSet.Set"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "AddressSet",
                  "nameLocation": "7337:10:8",
                  "nodeType": "StructDefinition",
                  "scope": 1918,
                  "src": "7330:45:8",
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1657,
                    "nodeType": "Block",
                    "src": "7621:74:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1643,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1635,
                                "src": "7643:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                                  "typeString": "struct EnumerableSet.AddressSet storage pointer"
                                }
                              },
                              "id": 1644,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1630,
                              "src": "7643:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 1651,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1637,
                                          "src": "7679:5:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 1650,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "7671:7:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        },
                                        "typeName": {
                                          "id": 1649,
                                          "name": "uint160",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "7671:7:8",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 1652,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7671:14:8",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    ],
                                    "id": 1648,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7663:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 1647,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "7663:7:8",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1653,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7663:23:8",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1646,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7655:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 1645,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7655:7:8",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1654,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7655:32:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1642,
                            "name": "_add",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1372,
                            "src": "7638:4:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Set_$1330_storage_ptr_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"
                            }
                          },
                          "id": 1655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7638:50:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1641,
                        "id": 1656,
                        "nodeType": "Return",
                        "src": "7631:57:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1632,
                    "nodeType": "StructuredDocumentation",
                    "src": "7381:159:8",
                    "text": " @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."
                  },
                  "id": 1658,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nameLocation": "7554:3:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1638,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1635,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "7577:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1658,
                        "src": "7558:22:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                          "typeString": "struct EnumerableSet.AddressSet"
                        },
                        "typeName": {
                          "id": 1634,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1633,
                            "name": "AddressSet",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1631,
                            "src": "7558:10:8"
                          },
                          "referencedDeclaration": 1631,
                          "src": "7558:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                            "typeString": "struct EnumerableSet.AddressSet"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1637,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "7590:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1658,
                        "src": "7582:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1636,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7582:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7557:39:8"
                  },
                  "returnParameters": {
                    "id": 1641,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1640,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1658,
                        "src": "7615:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1639,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7615:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7614:6:8"
                  },
                  "scope": 1918,
                  "src": "7545:150:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1684,
                    "nodeType": "Block",
                    "src": "7942:77:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1670,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1662,
                                "src": "7967:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                                  "typeString": "struct EnumerableSet.AddressSet storage pointer"
                                }
                              },
                              "id": 1671,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1630,
                              "src": "7967:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 1678,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1664,
                                          "src": "8003:5:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 1677,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "7995:7:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        },
                                        "typeName": {
                                          "id": 1676,
                                          "name": "uint160",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "7995:7:8",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 1679,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7995:14:8",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    ],
                                    "id": 1675,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7987:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 1674,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "7987:7:8",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1680,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7987:23:8",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1673,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7979:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 1672,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7979:7:8",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1681,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7979:32:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1669,
                            "name": "_remove",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1456,
                            "src": "7959:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Set_$1330_storage_ptr_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"
                            }
                          },
                          "id": 1682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7959:53:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1668,
                        "id": 1683,
                        "nodeType": "Return",
                        "src": "7952:60:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1659,
                    "nodeType": "StructuredDocumentation",
                    "src": "7701:157:8",
                    "text": " @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."
                  },
                  "id": 1685,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "remove",
                  "nameLocation": "7872:6:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1665,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1662,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "7898:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1685,
                        "src": "7879:22:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                          "typeString": "struct EnumerableSet.AddressSet"
                        },
                        "typeName": {
                          "id": 1661,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1660,
                            "name": "AddressSet",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1631,
                            "src": "7879:10:8"
                          },
                          "referencedDeclaration": 1631,
                          "src": "7879:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                            "typeString": "struct EnumerableSet.AddressSet"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1664,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "7911:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1685,
                        "src": "7903:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1663,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7903:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7878:39:8"
                  },
                  "returnParameters": {
                    "id": 1668,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1667,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1685,
                        "src": "7936:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1666,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7936:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7935:6:8"
                  },
                  "scope": 1918,
                  "src": "7863:156:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1711,
                    "nodeType": "Block",
                    "src": "8186:79:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1697,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1689,
                                "src": "8213:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                                  "typeString": "struct EnumerableSet.AddressSet storage pointer"
                                }
                              },
                              "id": 1698,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1630,
                              "src": "8213:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 1705,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1691,
                                          "src": "8249:5:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 1704,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "8241:7:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        },
                                        "typeName": {
                                          "id": 1703,
                                          "name": "uint160",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "8241:7:8",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 1706,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8241:14:8",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    ],
                                    "id": 1702,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8233:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 1701,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "8233:7:8",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1707,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8233:23:8",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1700,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8225:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 1699,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8225:7:8",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1708,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8225:32:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1696,
                            "name": "_contains",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1475,
                            "src": "8203:9:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"
                            }
                          },
                          "id": 1709,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8203:55:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1695,
                        "id": 1710,
                        "nodeType": "Return",
                        "src": "8196:62:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1686,
                    "nodeType": "StructuredDocumentation",
                    "src": "8025:70:8",
                    "text": " @dev Returns true if the value is in the set. O(1)."
                  },
                  "id": 1712,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "contains",
                  "nameLocation": "8109:8:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1692,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1689,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "8137:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1712,
                        "src": "8118:22:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                          "typeString": "struct EnumerableSet.AddressSet"
                        },
                        "typeName": {
                          "id": 1688,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1687,
                            "name": "AddressSet",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1631,
                            "src": "8118:10:8"
                          },
                          "referencedDeclaration": 1631,
                          "src": "8118:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                            "typeString": "struct EnumerableSet.AddressSet"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1691,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "8150:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1712,
                        "src": "8142:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1690,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8142:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8117:39:8"
                  },
                  "returnParameters": {
                    "id": 1695,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1694,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1712,
                        "src": "8180:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1693,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "8180:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8179:6:8"
                  },
                  "scope": 1918,
                  "src": "8100:165:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1726,
                    "nodeType": "Block",
                    "src": "8418:43:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1722,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1716,
                                "src": "8443:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                                  "typeString": "struct EnumerableSet.AddressSet storage pointer"
                                }
                              },
                              "id": 1723,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1630,
                              "src": "8443:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            ],
                            "id": 1721,
                            "name": "_length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1489,
                            "src": "8435:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$returns$_t_uint256_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 1724,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8435:19:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1720,
                        "id": 1725,
                        "nodeType": "Return",
                        "src": "8428:26:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1713,
                    "nodeType": "StructuredDocumentation",
                    "src": "8271:70:8",
                    "text": " @dev Returns the number of values in the set. O(1)."
                  },
                  "id": 1727,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "length",
                  "nameLocation": "8355:6:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1717,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1716,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "8381:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1727,
                        "src": "8362:22:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                          "typeString": "struct EnumerableSet.AddressSet"
                        },
                        "typeName": {
                          "id": 1715,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1714,
                            "name": "AddressSet",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1631,
                            "src": "8362:10:8"
                          },
                          "referencedDeclaration": 1631,
                          "src": "8362:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                            "typeString": "struct EnumerableSet.AddressSet"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8361:24:8"
                  },
                  "returnParameters": {
                    "id": 1720,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1719,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1727,
                        "src": "8409:7:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1718,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8409:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8408:9:8"
                  },
                  "scope": 1918,
                  "src": "8346:115:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1753,
                    "nodeType": "Block",
                    "src": "8886:73:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 1745,
                                            "name": "set",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1731,
                                            "src": "8931:3:8",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                                              "typeString": "struct EnumerableSet.AddressSet storage pointer"
                                            }
                                          },
                                          "id": 1746,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "_inner",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 1630,
                                          "src": "8931:10:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Set_$1330_storage",
                                            "typeString": "struct EnumerableSet.Set storage ref"
                                          }
                                        },
                                        {
                                          "id": 1747,
                                          "name": "index",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1733,
                                          "src": "8943:5:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_struct$_Set_$1330_storage",
                                            "typeString": "struct EnumerableSet.Set storage ref"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 1744,
                                        "name": "_at",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1506,
                                        "src": "8927:3:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                          "typeString": "function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"
                                        }
                                      },
                                      "id": 1748,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8927:22:8",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1743,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8919:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 1742,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "8919:7:8",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1749,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8919:31:8",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1741,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8911:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint160_$",
                                  "typeString": "type(uint160)"
                                },
                                "typeName": {
                                  "id": 1740,
                                  "name": "uint160",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8911:7:8",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1750,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8911:40:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            ],
                            "id": 1739,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8903:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1738,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "8903:7:8",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8903:49:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1737,
                        "id": 1752,
                        "nodeType": "Return",
                        "src": "8896:56:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1728,
                    "nodeType": "StructuredDocumentation",
                    "src": "8467:331:8",
                    "text": " @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."
                  },
                  "id": 1754,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "at",
                  "nameLocation": "8812:2:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1734,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1731,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "8834:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1754,
                        "src": "8815:22:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                          "typeString": "struct EnumerableSet.AddressSet"
                        },
                        "typeName": {
                          "id": 1730,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1729,
                            "name": "AddressSet",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1631,
                            "src": "8815:10:8"
                          },
                          "referencedDeclaration": 1631,
                          "src": "8815:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                            "typeString": "struct EnumerableSet.AddressSet"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1733,
                        "mutability": "mutable",
                        "name": "index",
                        "nameLocation": "8847:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1754,
                        "src": "8839:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1732,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8839:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8814:39:8"
                  },
                  "returnParameters": {
                    "id": 1737,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1736,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1754,
                        "src": "8877:7:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1735,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8877:7:8",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8876:9:8"
                  },
                  "scope": 1918,
                  "src": "8803:156:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1783,
                    "nodeType": "Block",
                    "src": "9580:176:8",
                    "statements": [
                      {
                        "assignments": [
                          1768
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1768,
                            "mutability": "mutable",
                            "name": "store",
                            "nameLocation": "9607:5:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 1783,
                            "src": "9590:22:8",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1766,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "9590:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 1767,
                              "nodeType": "ArrayTypeName",
                              "src": "9590:9:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                "typeString": "bytes32[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1773,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1770,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1758,
                                "src": "9623:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                                  "typeString": "struct EnumerableSet.AddressSet storage pointer"
                                }
                              },
                              "id": 1771,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1630,
                              "src": "9623:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            ],
                            "id": 1769,
                            "name": "_values",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1520,
                            "src": "9615:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"
                            }
                          },
                          "id": 1772,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9615:19:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9590:44:8"
                      },
                      {
                        "assignments": [
                          1778
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1778,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "9661:6:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 1783,
                            "src": "9644:23:8",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1776,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "9644:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 1777,
                              "nodeType": "ArrayTypeName",
                              "src": "9644:9:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                "typeString": "address[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1779,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9644:23:8"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "9687:39:8",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "9701:15:8",
                              "value": {
                                "name": "store",
                                "nodeType": "YulIdentifier",
                                "src": "9711:5:8"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nodeType": "YulIdentifier",
                                  "src": "9701:6:8"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 1778,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "9701:6:8",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1768,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "9711:5:8",
                            "valueSize": 1
                          }
                        ],
                        "id": 1780,
                        "nodeType": "InlineAssembly",
                        "src": "9678:48:8"
                      },
                      {
                        "expression": {
                          "id": 1781,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1778,
                          "src": "9743:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "functionReturnParameters": 1763,
                        "id": 1782,
                        "nodeType": "Return",
                        "src": "9736:13:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1755,
                    "nodeType": "StructuredDocumentation",
                    "src": "8965:529:8",
                    "text": " @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."
                  },
                  "id": 1784,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "values",
                  "nameLocation": "9508:6:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1759,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1758,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "9534:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1784,
                        "src": "9515:22:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                          "typeString": "struct EnumerableSet.AddressSet"
                        },
                        "typeName": {
                          "id": 1757,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1756,
                            "name": "AddressSet",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1631,
                            "src": "9515:10:8"
                          },
                          "referencedDeclaration": 1631,
                          "src": "9515:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                            "typeString": "struct EnumerableSet.AddressSet"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9514:24:8"
                  },
                  "returnParameters": {
                    "id": 1763,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1762,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1784,
                        "src": "9562:16:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1760,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9562:7:8",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1761,
                          "nodeType": "ArrayTypeName",
                          "src": "9562:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9561:18:8"
                  },
                  "scope": 1918,
                  "src": "9499:257:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "canonicalName": "EnumerableSet.UintSet",
                  "id": 1788,
                  "members": [
                    {
                      "constant": false,
                      "id": 1787,
                      "mutability": "mutable",
                      "name": "_inner",
                      "nameLocation": "9807:6:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 1788,
                      "src": "9803:10:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                        "typeString": "struct EnumerableSet.Set"
                      },
                      "typeName": {
                        "id": 1786,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 1785,
                          "name": "Set",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 1330,
                          "src": "9803:3:8"
                        },
                        "referencedDeclaration": 1330,
                        "src": "9803:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Set_$1330_storage_ptr",
                          "typeString": "struct EnumerableSet.Set"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "UintSet",
                  "nameLocation": "9785:7:8",
                  "nodeType": "StructDefinition",
                  "scope": 1918,
                  "src": "9778:42:8",
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1808,
                    "nodeType": "Block",
                    "src": "10063:56:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1800,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1792,
                                "src": "10085:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                                  "typeString": "struct EnumerableSet.UintSet storage pointer"
                                }
                              },
                              "id": 1801,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1787,
                              "src": "10085:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 1804,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1794,
                                  "src": "10105:5:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1803,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10097:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 1802,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10097:7:8",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1805,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10097:14:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1799,
                            "name": "_add",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1372,
                            "src": "10080:4:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Set_$1330_storage_ptr_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"
                            }
                          },
                          "id": 1806,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10080:32:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1798,
                        "id": 1807,
                        "nodeType": "Return",
                        "src": "10073:39:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1789,
                    "nodeType": "StructuredDocumentation",
                    "src": "9826:159:8",
                    "text": " @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."
                  },
                  "id": 1809,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nameLocation": "9999:3:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1795,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1792,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "10019:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1809,
                        "src": "10003:19:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                          "typeString": "struct EnumerableSet.UintSet"
                        },
                        "typeName": {
                          "id": 1791,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1790,
                            "name": "UintSet",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1788,
                            "src": "10003:7:8"
                          },
                          "referencedDeclaration": 1788,
                          "src": "10003:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                            "typeString": "struct EnumerableSet.UintSet"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1794,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "10032:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1809,
                        "src": "10024:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1793,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10024:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10002:36:8"
                  },
                  "returnParameters": {
                    "id": 1798,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1797,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1809,
                        "src": "10057:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1796,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "10057:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10056:6:8"
                  },
                  "scope": 1918,
                  "src": "9990:129:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1829,
                    "nodeType": "Block",
                    "src": "10363:59:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1821,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1813,
                                "src": "10388:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                                  "typeString": "struct EnumerableSet.UintSet storage pointer"
                                }
                              },
                              "id": 1822,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1787,
                              "src": "10388:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 1825,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1815,
                                  "src": "10408:5:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1824,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10400:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 1823,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10400:7:8",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1826,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10400:14:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1820,
                            "name": "_remove",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1456,
                            "src": "10380:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Set_$1330_storage_ptr_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"
                            }
                          },
                          "id": 1827,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10380:35:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1819,
                        "id": 1828,
                        "nodeType": "Return",
                        "src": "10373:42:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1810,
                    "nodeType": "StructuredDocumentation",
                    "src": "10125:157:8",
                    "text": " @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."
                  },
                  "id": 1830,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "remove",
                  "nameLocation": "10296:6:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1816,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1813,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "10319:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1830,
                        "src": "10303:19:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                          "typeString": "struct EnumerableSet.UintSet"
                        },
                        "typeName": {
                          "id": 1812,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1811,
                            "name": "UintSet",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1788,
                            "src": "10303:7:8"
                          },
                          "referencedDeclaration": 1788,
                          "src": "10303:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                            "typeString": "struct EnumerableSet.UintSet"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1815,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "10332:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1830,
                        "src": "10324:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1814,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10324:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10302:36:8"
                  },
                  "returnParameters": {
                    "id": 1819,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1818,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1830,
                        "src": "10357:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1817,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "10357:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10356:6:8"
                  },
                  "scope": 1918,
                  "src": "10287:135:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1850,
                    "nodeType": "Block",
                    "src": "10586:61:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1842,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1834,
                                "src": "10613:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                                  "typeString": "struct EnumerableSet.UintSet storage pointer"
                                }
                              },
                              "id": 1843,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1787,
                              "src": "10613:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 1846,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1836,
                                  "src": "10633:5:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1845,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10625:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 1844,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10625:7:8",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1847,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10625:14:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1841,
                            "name": "_contains",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1475,
                            "src": "10603:9:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"
                            }
                          },
                          "id": 1848,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10603:37:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1840,
                        "id": 1849,
                        "nodeType": "Return",
                        "src": "10596:44:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1831,
                    "nodeType": "StructuredDocumentation",
                    "src": "10428:70:8",
                    "text": " @dev Returns true if the value is in the set. O(1)."
                  },
                  "id": 1851,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "contains",
                  "nameLocation": "10512:8:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1837,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1834,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "10537:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1851,
                        "src": "10521:19:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                          "typeString": "struct EnumerableSet.UintSet"
                        },
                        "typeName": {
                          "id": 1833,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1832,
                            "name": "UintSet",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1788,
                            "src": "10521:7:8"
                          },
                          "referencedDeclaration": 1788,
                          "src": "10521:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                            "typeString": "struct EnumerableSet.UintSet"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1836,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "10550:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1851,
                        "src": "10542:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1835,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10542:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10520:36:8"
                  },
                  "returnParameters": {
                    "id": 1840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1839,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1851,
                        "src": "10580:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1838,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "10580:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10579:6:8"
                  },
                  "scope": 1918,
                  "src": "10503:144:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1865,
                    "nodeType": "Block",
                    "src": "10797:43:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1861,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1855,
                                "src": "10822:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                                  "typeString": "struct EnumerableSet.UintSet storage pointer"
                                }
                              },
                              "id": 1862,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1787,
                              "src": "10822:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            ],
                            "id": 1860,
                            "name": "_length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1489,
                            "src": "10814:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$returns$_t_uint256_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 1863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10814:19:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1859,
                        "id": 1864,
                        "nodeType": "Return",
                        "src": "10807:26:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1852,
                    "nodeType": "StructuredDocumentation",
                    "src": "10653:70:8",
                    "text": " @dev Returns the number of values on the set. O(1)."
                  },
                  "id": 1866,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "length",
                  "nameLocation": "10737:6:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1856,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1855,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "10760:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1866,
                        "src": "10744:19:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                          "typeString": "struct EnumerableSet.UintSet"
                        },
                        "typeName": {
                          "id": 1854,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1853,
                            "name": "UintSet",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1788,
                            "src": "10744:7:8"
                          },
                          "referencedDeclaration": 1788,
                          "src": "10744:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                            "typeString": "struct EnumerableSet.UintSet"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10743:21:8"
                  },
                  "returnParameters": {
                    "id": 1859,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1858,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1866,
                        "src": "10788:7:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1857,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10788:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10787:9:8"
                  },
                  "scope": 1918,
                  "src": "10728:112:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1886,
                    "nodeType": "Block",
                    "src": "11262:55:8",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 1880,
                                    "name": "set",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1870,
                                    "src": "11291:3:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                                      "typeString": "struct EnumerableSet.UintSet storage pointer"
                                    }
                                  },
                                  "id": 1881,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_inner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1787,
                                  "src": "11291:10:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Set_$1330_storage",
                                    "typeString": "struct EnumerableSet.Set storage ref"
                                  }
                                },
                                {
                                  "id": 1882,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1872,
                                  "src": "11303:5:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_Set_$1330_storage",
                                    "typeString": "struct EnumerableSet.Set storage ref"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1879,
                                "name": "_at",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1506,
                                "src": "11287:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                  "typeString": "function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"
                                }
                              },
                              "id": 1883,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11287:22:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 1878,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11279:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 1877,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "11279:7:8",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1884,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11279:31:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1876,
                        "id": 1885,
                        "nodeType": "Return",
                        "src": "11272:38:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1867,
                    "nodeType": "StructuredDocumentation",
                    "src": "10846:331:8",
                    "text": " @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."
                  },
                  "id": 1887,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "at",
                  "nameLocation": "11191:2:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1873,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1870,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "11210:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1887,
                        "src": "11194:19:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                          "typeString": "struct EnumerableSet.UintSet"
                        },
                        "typeName": {
                          "id": 1869,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1868,
                            "name": "UintSet",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1788,
                            "src": "11194:7:8"
                          },
                          "referencedDeclaration": 1788,
                          "src": "11194:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                            "typeString": "struct EnumerableSet.UintSet"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1872,
                        "mutability": "mutable",
                        "name": "index",
                        "nameLocation": "11223:5:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1887,
                        "src": "11215:13:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1871,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11215:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11193:36:8"
                  },
                  "returnParameters": {
                    "id": 1876,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1875,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1887,
                        "src": "11253:7:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1874,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11253:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11252:9:8"
                  },
                  "scope": 1918,
                  "src": "11182:135:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1916,
                    "nodeType": "Block",
                    "src": "11935:176:8",
                    "statements": [
                      {
                        "assignments": [
                          1901
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1901,
                            "mutability": "mutable",
                            "name": "store",
                            "nameLocation": "11962:5:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 1916,
                            "src": "11945:22:8",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1899,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "11945:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 1900,
                              "nodeType": "ArrayTypeName",
                              "src": "11945:9:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                "typeString": "bytes32[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1906,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1903,
                                "name": "set",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1891,
                                "src": "11978:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                                  "typeString": "struct EnumerableSet.UintSet storage pointer"
                                }
                              },
                              "id": 1904,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_inner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1787,
                              "src": "11978:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Set_$1330_storage",
                                "typeString": "struct EnumerableSet.Set storage ref"
                              }
                            ],
                            "id": 1902,
                            "name": "_values",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1520,
                            "src": "11970:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$1330_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                              "typeString": "function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"
                            }
                          },
                          "id": 1905,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11970:19:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "11945:44:8"
                      },
                      {
                        "assignments": [
                          1911
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1911,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "12016:6:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 1916,
                            "src": "11999:23:8",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1909,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "11999:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1910,
                              "nodeType": "ArrayTypeName",
                              "src": "11999:9:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1912,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "11999:23:8"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "12042:39:8",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "12056:15:8",
                              "value": {
                                "name": "store",
                                "nodeType": "YulIdentifier",
                                "src": "12066:5:8"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nodeType": "YulIdentifier",
                                  "src": "12056:6:8"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 1911,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "12056:6:8",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1901,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "12066:5:8",
                            "valueSize": 1
                          }
                        ],
                        "id": 1913,
                        "nodeType": "InlineAssembly",
                        "src": "12033:48:8"
                      },
                      {
                        "expression": {
                          "id": 1914,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1911,
                          "src": "12098:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "functionReturnParameters": 1896,
                        "id": 1915,
                        "nodeType": "Return",
                        "src": "12091:13:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1888,
                    "nodeType": "StructuredDocumentation",
                    "src": "11323:529:8",
                    "text": " @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."
                  },
                  "id": 1917,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "values",
                  "nameLocation": "11866:6:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1892,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1891,
                        "mutability": "mutable",
                        "name": "set",
                        "nameLocation": "11889:3:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 1917,
                        "src": "11873:19:8",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                          "typeString": "struct EnumerableSet.UintSet"
                        },
                        "typeName": {
                          "id": 1890,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1889,
                            "name": "UintSet",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1788,
                            "src": "11873:7:8"
                          },
                          "referencedDeclaration": 1788,
                          "src": "11873:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_UintSet_$1788_storage_ptr",
                            "typeString": "struct EnumerableSet.UintSet"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11872:21:8"
                  },
                  "returnParameters": {
                    "id": 1896,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1895,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1917,
                        "src": "11917:16:8",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1893,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "11917:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1894,
                          "nodeType": "ArrayTypeName",
                          "src": "11917:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11916:18:8"
                  },
                  "scope": 1918,
                  "src": "11857:254:8",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 1919,
              "src": "745:11368:8",
              "usedErrors": []
            }
          ],
          "src": "33:12081:8"
        },
        "id": 8
      },
      "@uniswap/v3-core/contracts/interfaces/IERC20Minimal.sol": {
        "ast": {
          "absolutePath": "@uniswap/v3-core/contracts/interfaces/IERC20Minimal.sol",
          "exportedSymbols": {
            "IERC20Minimal": [
              1990
            ]
          },
          "id": 1991,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1920,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:9"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 1921,
                "nodeType": "StructuredDocumentation",
                "src": "71:132:9",
                "text": "@title Minimal ERC20 interface for Uniswap\n @notice Contains a subset of the full ERC20 interface that is used in Uniswap V3"
              },
              "fullyImplemented": false,
              "id": 1990,
              "linearizedBaseContracts": [
                1990
              ],
              "name": "IERC20Minimal",
              "nameLocation": "213:13:9",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 1922,
                    "nodeType": "StructuredDocumentation",
                    "src": "233:201:9",
                    "text": "@notice Returns the balance of a token\n @param account The account for which to look up the number of tokens it has, i.e. its balance\n @return The number of tokens held by the account"
                  },
                  "functionSelector": "70a08231",
                  "id": 1929,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "448:9:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1925,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1924,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "466:7:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1929,
                        "src": "458:15:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1923,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "458:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "457:17:9"
                  },
                  "returnParameters": {
                    "id": 1928,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1927,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1929,
                        "src": "498:7:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1926,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "498:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "497:9:9"
                  },
                  "scope": 1990,
                  "src": "439:68:9",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1930,
                    "nodeType": "StructuredDocumentation",
                    "src": "513:333:9",
                    "text": "@notice Transfers the amount of token from the `msg.sender` to the recipient\n @param recipient The account that will receive the amount transferred\n @param amount The number of tokens to send from the sender to the recipient\n @return Returns true for a successful transfer, false for an unsuccessful transfer"
                  },
                  "functionSelector": "a9059cbb",
                  "id": 1939,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nameLocation": "860:8:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1935,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1932,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "877:9:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1939,
                        "src": "869:17:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1931,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "869:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1934,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "896:6:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1939,
                        "src": "888:14:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1933,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "888:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "868:35:9"
                  },
                  "returnParameters": {
                    "id": 1938,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1937,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1939,
                        "src": "922:4:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1936,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "922:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "921:6:9"
                  },
                  "scope": 1990,
                  "src": "851:77:9",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1940,
                    "nodeType": "StructuredDocumentation",
                    "src": "934:250:9",
                    "text": "@notice Returns the current allowance given to a spender by an owner\n @param owner The account of the token owner\n @param spender The account of the token spender\n @return The current allowance granted by `owner` to `spender`"
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 1949,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nameLocation": "1198:9:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1945,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1942,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1216:5:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1949,
                        "src": "1208:13:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1941,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1208:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1944,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "1231:7:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1949,
                        "src": "1223:15:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1943,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1223:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1207:32:9"
                  },
                  "returnParameters": {
                    "id": 1948,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1947,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1949,
                        "src": "1263:7:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1946,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1263:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1262:9:9"
                  },
                  "scope": 1990,
                  "src": "1189:83:9",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1950,
                    "nodeType": "StructuredDocumentation",
                    "src": "1278:343:9",
                    "text": "@notice Sets the allowance of a spender from the `msg.sender` to the value `amount`\n @param spender The account which will be allowed to spend a given amount of the owners tokens\n @param amount The amount of tokens allowed to be used by `spender`\n @return Returns true for a successful approval, false for unsuccessful"
                  },
                  "functionSelector": "095ea7b3",
                  "id": 1959,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nameLocation": "1635:7:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1955,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1952,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "1651:7:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1959,
                        "src": "1643:15:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1951,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1643:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1954,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "1668:6:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1959,
                        "src": "1660:14:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1953,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1660:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1642:33:9"
                  },
                  "returnParameters": {
                    "id": 1958,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1957,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1959,
                        "src": "1694:4:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1956,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1694:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1693:6:9"
                  },
                  "scope": 1990,
                  "src": "1626:74:9",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 1960,
                    "nodeType": "StructuredDocumentation",
                    "src": "1706:371:9",
                    "text": "@notice Transfers `amount` tokens from `sender` to `recipient` up to the allowance given to the `msg.sender`\n @param sender The account from which the transfer will be initiated\n @param recipient The recipient of the transfer\n @param amount The amount of the transfer\n @return Returns true for a successful transfer, false for unsuccessful"
                  },
                  "functionSelector": "23b872dd",
                  "id": 1971,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "2091:12:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1967,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1962,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "2121:6:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1971,
                        "src": "2113:14:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1961,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2113:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1964,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "2145:9:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1971,
                        "src": "2137:17:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1963,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2137:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1966,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "2172:6:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1971,
                        "src": "2164:14:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1965,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2164:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2103:81:9"
                  },
                  "returnParameters": {
                    "id": 1970,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1969,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1971,
                        "src": "2203:4:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1968,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2203:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2202:6:9"
                  },
                  "scope": 1990,
                  "src": "2082:127:9",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1972,
                    "nodeType": "StructuredDocumentation",
                    "src": "2215:369:9",
                    "text": "@notice Event emitted when tokens are transferred from one address to another, either via `#transfer` or `#transferFrom`.\n @param from The account from which the tokens were sent, i.e. the balance decreased\n @param to The account to which the tokens were sent, i.e. the balance increased\n @param value The amount of tokens that were transferred"
                  },
                  "id": 1980,
                  "name": "Transfer",
                  "nameLocation": "2595:8:9",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1979,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1974,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "2620:4:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1980,
                        "src": "2604:20:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1973,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2604:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1976,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "2642:2:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1980,
                        "src": "2626:18:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1975,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2626:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1978,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2654:5:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1980,
                        "src": "2646:13:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1977,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2646:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2603:57:9"
                  },
                  "src": "2589:72:9"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1981,
                    "nodeType": "StructuredDocumentation",
                    "src": "2667:321:9",
                    "text": "@notice Event emitted when the approval amount for the spender of a given owner's tokens changes.\n @param owner The account that approved spending of its tokens\n @param spender The account for which the spending allowance was modified\n @param value The new allowance from the owner to the spender"
                  },
                  "id": 1989,
                  "name": "Approval",
                  "nameLocation": "2999:8:9",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1988,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1983,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "3024:5:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1989,
                        "src": "3008:21:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1982,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3008:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1985,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "3047:7:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1989,
                        "src": "3031:23:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1984,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3031:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1987,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "3064:5:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 1989,
                        "src": "3056:13:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1986,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3056:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3007:63:9"
                  },
                  "src": "2993:78:9"
                }
              ],
              "scope": 1991,
              "src": "203:2870:9",
              "usedErrors": []
            }
          ],
          "src": "45:3029:9"
        },
        "id": 9
      },
      "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol": {
        "ast": {
          "absolutePath": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
          "exportedSymbols": {
            "IUniswapV3Pool": [
              2012
            ],
            "IUniswapV3PoolActions": [
              2108
            ],
            "IUniswapV3PoolDerivedState": [
              2139
            ],
            "IUniswapV3PoolEvents": [
              2258
            ],
            "IUniswapV3PoolImmutables": [
              2298
            ],
            "IUniswapV3PoolOwnerActions": [
              2324
            ],
            "IUniswapV3PoolState": [
              2432
            ]
          },
          "id": 2013,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1992,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:10"
            },
            {
              "absolutePath": "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol",
              "file": "./pool/IUniswapV3PoolImmutables.sol",
              "id": 1993,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2013,
              "sourceUnit": 2299,
              "src": "71:45:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol",
              "file": "./pool/IUniswapV3PoolState.sol",
              "id": 1994,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2013,
              "sourceUnit": 2433,
              "src": "117:40:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol",
              "file": "./pool/IUniswapV3PoolDerivedState.sol",
              "id": 1995,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2013,
              "sourceUnit": 2140,
              "src": "158:47:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol",
              "file": "./pool/IUniswapV3PoolActions.sol",
              "id": 1996,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2013,
              "sourceUnit": 2109,
              "src": "206:42:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol",
              "file": "./pool/IUniswapV3PoolOwnerActions.sol",
              "id": 1997,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2013,
              "sourceUnit": 2325,
              "src": "249:47:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol",
              "file": "./pool/IUniswapV3PoolEvents.sol",
              "id": 1998,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2013,
              "sourceUnit": 2259,
              "src": "297:41:10",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2000,
                    "name": "IUniswapV3PoolImmutables",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2298,
                    "src": "637:24:10"
                  },
                  "id": 2001,
                  "nodeType": "InheritanceSpecifier",
                  "src": "637:24:10"
                },
                {
                  "baseName": {
                    "id": 2002,
                    "name": "IUniswapV3PoolState",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2432,
                    "src": "667:19:10"
                  },
                  "id": 2003,
                  "nodeType": "InheritanceSpecifier",
                  "src": "667:19:10"
                },
                {
                  "baseName": {
                    "id": 2004,
                    "name": "IUniswapV3PoolDerivedState",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2139,
                    "src": "692:26:10"
                  },
                  "id": 2005,
                  "nodeType": "InheritanceSpecifier",
                  "src": "692:26:10"
                },
                {
                  "baseName": {
                    "id": 2006,
                    "name": "IUniswapV3PoolActions",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2108,
                    "src": "724:21:10"
                  },
                  "id": 2007,
                  "nodeType": "InheritanceSpecifier",
                  "src": "724:21:10"
                },
                {
                  "baseName": {
                    "id": 2008,
                    "name": "IUniswapV3PoolOwnerActions",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2324,
                    "src": "751:26:10"
                  },
                  "id": 2009,
                  "nodeType": "InheritanceSpecifier",
                  "src": "751:26:10"
                },
                {
                  "baseName": {
                    "id": 2010,
                    "name": "IUniswapV3PoolEvents",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2258,
                    "src": "783:20:10"
                  },
                  "id": 2011,
                  "nodeType": "InheritanceSpecifier",
                  "src": "783:20:10"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 1999,
                "nodeType": "StructuredDocumentation",
                "src": "340:265:10",
                "text": "@title The interface for a Uniswap V3 Pool\n @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform\n to the ERC20 specification\n @dev The pool interface is broken up into many smaller pieces"
              },
              "fullyImplemented": false,
              "id": 2012,
              "linearizedBaseContracts": [
                2012,
                2258,
                2324,
                2108,
                2139,
                2432,
                2298
              ],
              "name": "IUniswapV3Pool",
              "nameLocation": "615:14:10",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 2013,
              "src": "605:203:10",
              "usedErrors": []
            }
          ],
          "src": "45:764:10"
        },
        "id": 10
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol": {
        "ast": {
          "absolutePath": "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol",
          "exportedSymbols": {
            "IUniswapV3PoolActions": [
              2108
            ]
          },
          "id": 2109,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2014,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:11"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2015,
                "nodeType": "StructuredDocumentation",
                "src": "71:102:11",
                "text": "@title Permissionless pool actions\n @notice Contains pool methods that can be called by anyone"
              },
              "fullyImplemented": false,
              "id": 2108,
              "linearizedBaseContracts": [
                2108
              ],
              "name": "IUniswapV3PoolActions",
              "nameLocation": "183:21:11",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2016,
                    "nodeType": "StructuredDocumentation",
                    "src": "211:206:11",
                    "text": "@notice Sets the initial price for the pool\n @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value\n @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96"
                  },
                  "functionSelector": "f637731d",
                  "id": 2021,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "initialize",
                  "nameLocation": "431:10:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2019,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2018,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nameLocation": "450:12:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2021,
                        "src": "442:20:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 2017,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "442:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "441:22:11"
                  },
                  "returnParameters": {
                    "id": 2020,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "472:0:11"
                  },
                  "scope": 2108,
                  "src": "422:51:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2022,
                    "nodeType": "StructuredDocumentation",
                    "src": "479:1029:11",
                    "text": "@notice Adds liquidity for the given recipient/tickLower/tickUpper position\n @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback\n in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends\n on tickLower, tickUpper, the amount of liquidity, and the current price.\n @param recipient The address for which the liquidity will be created\n @param tickLower The lower tick of the position in which to add liquidity\n @param tickUpper The upper tick of the position in which to add liquidity\n @param amount The amount of liquidity to mint\n @param data Any data that should be passed through to the callback\n @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback\n @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback"
                  },
                  "functionSelector": "3c8a7d8d",
                  "id": 2039,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nameLocation": "1522:4:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2033,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2024,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "1544:9:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2039,
                        "src": "1536:17:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2023,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1536:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2026,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nameLocation": "1569:9:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2039,
                        "src": "1563:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2025,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1563:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2028,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nameLocation": "1594:9:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2039,
                        "src": "1588:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2027,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1588:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2030,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "1621:6:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2039,
                        "src": "1613:14:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2029,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1613:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2032,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "1652:4:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2039,
                        "src": "1637:19:11",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2031,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1637:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1526:136:11"
                  },
                  "returnParameters": {
                    "id": 2038,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2035,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "1689:7:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2039,
                        "src": "1681:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2034,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1681:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2037,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "1706:7:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2039,
                        "src": "1698:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2036,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1698:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1680:34:11"
                  },
                  "scope": 2108,
                  "src": "1513:202:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2040,
                    "nodeType": "StructuredDocumentation",
                    "src": "1721:1053:11",
                    "text": "@notice Collects tokens owed to a position\n @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity.\n Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or\n amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the\n actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity.\n @param recipient The address which should receive the fees collected\n @param tickLower The lower tick of the position for which to collect fees\n @param tickUpper The upper tick of the position for which to collect fees\n @param amount0Requested How much token0 should be withdrawn from the fees owed\n @param amount1Requested How much token1 should be withdrawn from the fees owed\n @return amount0 The amount of fees collected in token0\n @return amount1 The amount of fees collected in token1"
                  },
                  "functionSelector": "4f1eb3d8",
                  "id": 2057,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collect",
                  "nameLocation": "2788:7:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2051,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2042,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "2813:9:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2057,
                        "src": "2805:17:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2041,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2805:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2044,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nameLocation": "2838:9:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2057,
                        "src": "2832:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2043,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2832:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2046,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nameLocation": "2863:9:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2057,
                        "src": "2857:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2045,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2857:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2048,
                        "mutability": "mutable",
                        "name": "amount0Requested",
                        "nameLocation": "2890:16:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2057,
                        "src": "2882:24:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2047,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2882:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2050,
                        "mutability": "mutable",
                        "name": "amount1Requested",
                        "nameLocation": "2924:16:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2057,
                        "src": "2916:24:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2049,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2916:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2795:151:11"
                  },
                  "returnParameters": {
                    "id": 2056,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2053,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "2973:7:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2057,
                        "src": "2965:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2052,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2965:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2055,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "2990:7:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2057,
                        "src": "2982:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2054,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2982:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2964:34:11"
                  },
                  "scope": 2108,
                  "src": "2779:220:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2058,
                    "nodeType": "StructuredDocumentation",
                    "src": "3005:631:11",
                    "text": "@notice Burn liquidity from the sender and account tokens owed for the liquidity to the position\n @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0\n @dev Fees must be collected separately via a call to #collect\n @param tickLower The lower tick of the position for which to burn liquidity\n @param tickUpper The upper tick of the position for which to burn liquidity\n @param amount How much liquidity to burn\n @return amount0 The amount of token0 sent to the recipient\n @return amount1 The amount of token1 sent to the recipient"
                  },
                  "functionSelector": "a34123a7",
                  "id": 2071,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nameLocation": "3650:4:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2065,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2060,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nameLocation": "3670:9:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2071,
                        "src": "3664:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2059,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3664:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2062,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nameLocation": "3695:9:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2071,
                        "src": "3689:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2061,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3689:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2064,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "3722:6:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2071,
                        "src": "3714:14:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2063,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "3714:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3654:80:11"
                  },
                  "returnParameters": {
                    "id": 2070,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2067,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "3761:7:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2071,
                        "src": "3753:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2066,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3753:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2069,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "3778:7:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2071,
                        "src": "3770:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2068,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3770:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3752:34:11"
                  },
                  "scope": 2108,
                  "src": "3641:146:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2072,
                    "nodeType": "StructuredDocumentation",
                    "src": "3793:1015:11",
                    "text": "@notice Swap token0 for token1, or token1 for token0\n @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback\n @param recipient The address to receive the output of the swap\n @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0\n @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative)\n @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this\n value after the swap. If one for zero, the price cannot be greater than this value after the swap\n @param data Any data to be passed through to the callback\n @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive\n @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive"
                  },
                  "functionSelector": "128acb08",
                  "id": 2089,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swap",
                  "nameLocation": "4822:4:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2083,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2074,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "4844:9:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2089,
                        "src": "4836:17:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2073,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4836:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2076,
                        "mutability": "mutable",
                        "name": "zeroForOne",
                        "nameLocation": "4868:10:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2089,
                        "src": "4863:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2075,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4863:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2078,
                        "mutability": "mutable",
                        "name": "amountSpecified",
                        "nameLocation": "4895:15:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2089,
                        "src": "4888:22:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2077,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4888:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2080,
                        "mutability": "mutable",
                        "name": "sqrtPriceLimitX96",
                        "nameLocation": "4928:17:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2089,
                        "src": "4920:25:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 2079,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "4920:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2082,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "4970:4:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2089,
                        "src": "4955:19:11",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2081,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4955:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4826:154:11"
                  },
                  "returnParameters": {
                    "id": 2088,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2085,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "5006:7:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2089,
                        "src": "4999:14:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2084,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4999:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2087,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "5022:7:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2089,
                        "src": "5015:14:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2086,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5015:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4998:32:11"
                  },
                  "scope": 2108,
                  "src": "4813:218:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2090,
                    "nodeType": "StructuredDocumentation",
                    "src": "5037:657:11",
                    "text": "@notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback\n @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback\n @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling\n with 0 amount{0,1} and sending the donation amount(s) from the callback\n @param recipient The address which will receive the token0 and token1 amounts\n @param amount0 The amount of token0 to send\n @param amount1 The amount of token1 to send\n @param data Any data to be passed through to the callback"
                  },
                  "functionSelector": "490e6cbc",
                  "id": 2101,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "flash",
                  "nameLocation": "5708:5:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2099,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2092,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "5731:9:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2101,
                        "src": "5723:17:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2091,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5723:7:11",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2094,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "5758:7:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2101,
                        "src": "5750:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2093,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5750:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2096,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "5783:7:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2101,
                        "src": "5775:15:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2095,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5775:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2098,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "5815:4:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2101,
                        "src": "5800:19:11",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2097,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5800:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5713:112:11"
                  },
                  "returnParameters": {
                    "id": 2100,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5834:0:11"
                  },
                  "scope": 2108,
                  "src": "5699:136:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2102,
                    "nodeType": "StructuredDocumentation",
                    "src": "5841:367:11",
                    "text": "@notice Increase the maximum number of price and liquidity observations that this pool will store\n @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to\n the input observationCardinalityNext.\n @param observationCardinalityNext The desired minimum number of observations for the pool to store"
                  },
                  "functionSelector": "32148f67",
                  "id": 2107,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseObservationCardinalityNext",
                  "nameLocation": "6222:34:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2105,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2104,
                        "mutability": "mutable",
                        "name": "observationCardinalityNext",
                        "nameLocation": "6264:26:11",
                        "nodeType": "VariableDeclaration",
                        "scope": 2107,
                        "src": "6257:33:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 2103,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "6257:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6256:35:11"
                  },
                  "returnParameters": {
                    "id": 2106,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6300:0:11"
                  },
                  "scope": 2108,
                  "src": "6213:88:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2109,
              "src": "173:6130:11",
              "usedErrors": []
            }
          ],
          "src": "45:6259:11"
        },
        "id": 11
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol": {
        "ast": {
          "absolutePath": "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol",
          "exportedSymbols": {
            "IUniswapV3PoolDerivedState": [
              2139
            ]
          },
          "id": 2140,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2110,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:12"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2111,
                "nodeType": "StructuredDocumentation",
                "src": "71:222:12",
                "text": "@title Pool state that is not stored\n @notice Contains view functions to provide information about the pool that is computed rather than stored on the\n blockchain. The functions here may have variable gas costs."
              },
              "fullyImplemented": false,
              "id": 2139,
              "linearizedBaseContracts": [
                2139
              ],
              "name": "IUniswapV3PoolDerivedState",
              "nameLocation": "303:26:12",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2112,
                    "nodeType": "StructuredDocumentation",
                    "src": "336:1045:12",
                    "text": "@notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp\n @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing\n the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,\n you must call it with secondsAgos = [3600, 0].\n @dev The time weighted average tick represents the geometric time weighted average price of the pool, in\n log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.\n @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned\n @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp\n @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block\n timestamp"
                  },
                  "functionSelector": "883bdbfd",
                  "id": 2124,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "observe",
                  "nameLocation": "1395:7:12",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2116,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2115,
                        "mutability": "mutable",
                        "name": "secondsAgos",
                        "nameLocation": "1421:11:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2124,
                        "src": "1403:29:12",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_calldata_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2113,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "1403:6:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 2114,
                          "nodeType": "ArrayTypeName",
                          "src": "1403:8:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1402:31:12"
                  },
                  "returnParameters": {
                    "id": 2123,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2119,
                        "mutability": "mutable",
                        "name": "tickCumulatives",
                        "nameLocation": "1496:15:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2124,
                        "src": "1481:30:12",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                          "typeString": "int56[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2117,
                            "name": "int56",
                            "nodeType": "ElementaryTypeName",
                            "src": "1481:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "id": 2118,
                          "nodeType": "ArrayTypeName",
                          "src": "1481:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_int56_$dyn_storage_ptr",
                            "typeString": "int56[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2122,
                        "mutability": "mutable",
                        "name": "secondsPerLiquidityCumulativeX128s",
                        "nameLocation": "1530:34:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2124,
                        "src": "1513:51:12",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                          "typeString": "uint160[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2120,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "1513:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "id": 2121,
                          "nodeType": "ArrayTypeName",
                          "src": "1513:9:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                            "typeString": "uint160[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1480:85:12"
                  },
                  "scope": 2139,
                  "src": "1386:180:12",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2125,
                    "nodeType": "StructuredDocumentation",
                    "src": "1572:771:12",
                    "text": "@notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range\n @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.\n I.e., snapshots cannot be compared if a position is not held for the entire period between when the first\n snapshot is taken and the second snapshot is taken.\n @param tickLower The lower tick of the range\n @param tickUpper The upper tick of the range\n @return tickCumulativeInside The snapshot of the tick accumulator for the range\n @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range\n @return secondsInside The snapshot of seconds per liquidity for the range"
                  },
                  "functionSelector": "a38807f2",
                  "id": 2138,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "snapshotCumulativesInside",
                  "nameLocation": "2357:25:12",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2130,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2127,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nameLocation": "2389:9:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2138,
                        "src": "2383:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2126,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2383:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2129,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nameLocation": "2406:9:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2138,
                        "src": "2400:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2128,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2400:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2382:34:12"
                  },
                  "returnParameters": {
                    "id": 2137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2132,
                        "mutability": "mutable",
                        "name": "tickCumulativeInside",
                        "nameLocation": "2483:20:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2138,
                        "src": "2477:26:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 2131,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "2477:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2134,
                        "mutability": "mutable",
                        "name": "secondsPerLiquidityInsideX128",
                        "nameLocation": "2525:29:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2138,
                        "src": "2517:37:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 2133,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2517:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2136,
                        "mutability": "mutable",
                        "name": "secondsInside",
                        "nameLocation": "2575:13:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2138,
                        "src": "2568:20:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 2135,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2568:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2463:135:12"
                  },
                  "scope": 2139,
                  "src": "2348:251:12",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2140,
              "src": "293:2308:12",
              "usedErrors": []
            }
          ],
          "src": "45:2557:12"
        },
        "id": 12
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol": {
        "ast": {
          "absolutePath": "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol",
          "exportedSymbols": {
            "IUniswapV3PoolEvents": [
              2258
            ]
          },
          "id": 2259,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2141,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:13"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2142,
                "nodeType": "StructuredDocumentation",
                "src": "71:88:13",
                "text": "@title Events emitted by a pool\n @notice Contains all events emitted by the pool"
              },
              "fullyImplemented": true,
              "id": 2258,
              "linearizedBaseContracts": [
                2258
              ],
              "name": "IUniswapV3PoolEvents",
              "nameLocation": "169:20:13",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2143,
                    "nodeType": "StructuredDocumentation",
                    "src": "196:344:13",
                    "text": "@notice Emitted exactly once by a pool when #initialize is first called on the pool\n @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize\n @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96\n @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool"
                  },
                  "id": 2149,
                  "name": "Initialize",
                  "nameLocation": "551:10:13",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2148,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2145,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nameLocation": "570:12:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2149,
                        "src": "562:20:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 2144,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "562:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2147,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "tick",
                        "nameLocation": "590:4:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2149,
                        "src": "584:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2146,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "584:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "561:34:13"
                  },
                  "src": "545:51:13"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2150,
                    "nodeType": "StructuredDocumentation",
                    "src": "602:551:13",
                    "text": "@notice Emitted when liquidity is minted for a given position\n @param sender The address that minted the liquidity\n @param owner The owner of the position and recipient of any minted liquidity\n @param tickLower The lower tick of the position\n @param tickUpper The upper tick of the position\n @param amount The amount of liquidity minted to the position range\n @param amount0 How much token0 was required for the minted liquidity\n @param amount1 How much token1 was required for the minted liquidity"
                  },
                  "id": 2166,
                  "name": "Mint",
                  "nameLocation": "1164:4:13",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2165,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2152,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "1186:6:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2166,
                        "src": "1178:14:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2151,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1178:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2154,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1218:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2166,
                        "src": "1202:21:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2153,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1202:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2156,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nameLocation": "1247:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2166,
                        "src": "1233:23:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2155,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1233:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2158,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nameLocation": "1280:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2166,
                        "src": "1266:23:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2157,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1266:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2160,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "1307:6:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2166,
                        "src": "1299:14:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2159,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1299:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2162,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "1331:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2166,
                        "src": "1323:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2161,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1323:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2164,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "1356:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2166,
                        "src": "1348:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2163,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1348:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1168:201:13"
                  },
                  "src": "1158:212:13"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2167,
                    "nodeType": "StructuredDocumentation",
                    "src": "1376:493:13",
                    "text": "@notice Emitted when fees are collected by the owner of a position\n @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees\n @param owner The owner of the position for which fees are collected\n @param tickLower The lower tick of the position\n @param tickUpper The upper tick of the position\n @param amount0 The amount of token0 fees collected\n @param amount1 The amount of token1 fees collected"
                  },
                  "id": 2181,
                  "name": "Collect",
                  "nameLocation": "1880:7:13",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2180,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2169,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1913:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2181,
                        "src": "1897:21:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2168,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1897:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2171,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "1936:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2181,
                        "src": "1928:17:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2170,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1928:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2173,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nameLocation": "1969:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2181,
                        "src": "1955:23:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2172,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1955:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2175,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nameLocation": "2002:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2181,
                        "src": "1988:23:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2174,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1988:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2177,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "2029:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2181,
                        "src": "2021:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2176,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2021:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2179,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "2054:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2181,
                        "src": "2046:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2178,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2046:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1887:180:13"
                  },
                  "src": "1874:194:13"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2182,
                    "nodeType": "StructuredDocumentation",
                    "src": "2074:523:13",
                    "text": "@notice Emitted when a position's liquidity is removed\n @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect\n @param owner The owner of the position for which liquidity is removed\n @param tickLower The lower tick of the position\n @param tickUpper The upper tick of the position\n @param amount The amount of liquidity to remove\n @param amount0 The amount of token0 withdrawn\n @param amount1 The amount of token1 withdrawn"
                  },
                  "id": 2196,
                  "name": "Burn",
                  "nameLocation": "2608:4:13",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2195,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2184,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "2638:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2196,
                        "src": "2622:21:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2183,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2622:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2186,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tickLower",
                        "nameLocation": "2667:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2196,
                        "src": "2653:23:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2185,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2653:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2188,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tickUpper",
                        "nameLocation": "2700:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2196,
                        "src": "2686:23:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2187,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "2686:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2190,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "2727:6:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2196,
                        "src": "2719:14:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2189,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2719:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2192,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "2751:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2196,
                        "src": "2743:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2191,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2743:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2194,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "2776:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2196,
                        "src": "2768:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2193,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2768:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2612:177:13"
                  },
                  "src": "2602:188:13"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2197,
                    "nodeType": "StructuredDocumentation",
                    "src": "2796:600:13",
                    "text": "@notice Emitted by the pool for any swaps between token0 and token1\n @param sender The address that initiated the swap call, and that received the callback\n @param recipient The address that received the output of the swap\n @param amount0 The delta of the token0 balance of the pool\n @param amount1 The delta of the token1 balance of the pool\n @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96\n @param liquidity The liquidity of the pool after the swap\n @param tick The log base 1.0001 of price of the pool after the swap"
                  },
                  "id": 2213,
                  "name": "Swap",
                  "nameLocation": "3407:4:13",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2212,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2199,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "3437:6:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2213,
                        "src": "3421:22:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2198,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3421:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2201,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "3469:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2213,
                        "src": "3453:25:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2200,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3453:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2203,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "3495:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2213,
                        "src": "3488:14:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2202,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3488:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2205,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "3519:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2213,
                        "src": "3512:14:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2204,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3512:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2207,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nameLocation": "3544:12:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2213,
                        "src": "3536:20:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 2206,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "3536:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2209,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "3574:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2213,
                        "src": "3566:17:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2208,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "3566:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2211,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "tick",
                        "nameLocation": "3599:4:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2213,
                        "src": "3593:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2210,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3593:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3411:198:13"
                  },
                  "src": "3401:209:13"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2214,
                    "nodeType": "StructuredDocumentation",
                    "src": "3616:562:13",
                    "text": "@notice Emitted by the pool for any flashes of token0/token1\n @param sender The address that initiated the swap call, and that received the callback\n @param recipient The address that received the tokens from flash\n @param amount0 The amount of token0 that was flashed\n @param amount1 The amount of token1 that was flashed\n @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee\n @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee"
                  },
                  "id": 2228,
                  "name": "Flash",
                  "nameLocation": "4189:5:13",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2227,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2216,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "4220:6:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2228,
                        "src": "4204:22:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2215,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4204:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2218,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "4252:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2228,
                        "src": "4236:25:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2217,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4236:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2220,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "4279:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2228,
                        "src": "4271:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2219,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4271:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2222,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "4304:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2228,
                        "src": "4296:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2221,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4296:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2224,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "paid0",
                        "nameLocation": "4329:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2228,
                        "src": "4321:13:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2223,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4321:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2226,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "paid1",
                        "nameLocation": "4352:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2228,
                        "src": "4344:13:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2225,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4344:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4194:169:13"
                  },
                  "src": "4183:181:13"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2229,
                    "nodeType": "StructuredDocumentation",
                    "src": "4370:451:13",
                    "text": "@notice Emitted by the pool for increases to the number of observations that can be stored\n @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index\n just before a mint/swap/burn.\n @param observationCardinalityNextOld The previous value of the next observation cardinality\n @param observationCardinalityNextNew The updated value of the next observation cardinality"
                  },
                  "id": 2235,
                  "name": "IncreaseObservationCardinalityNext",
                  "nameLocation": "4832:34:13",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2234,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2231,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "observationCardinalityNextOld",
                        "nameLocation": "4883:29:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2235,
                        "src": "4876:36:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 2230,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "4876:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2233,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "observationCardinalityNextNew",
                        "nameLocation": "4929:29:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2235,
                        "src": "4922:36:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 2232,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "4922:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4866:98:13"
                  },
                  "src": "4826:139:13"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2236,
                    "nodeType": "StructuredDocumentation",
                    "src": "4971:370:13",
                    "text": "@notice Emitted when the protocol fee is changed by the pool\n @param feeProtocol0Old The previous value of the token0 protocol fee\n @param feeProtocol1Old The previous value of the token1 protocol fee\n @param feeProtocol0New The updated value of the token0 protocol fee\n @param feeProtocol1New The updated value of the token1 protocol fee"
                  },
                  "id": 2246,
                  "name": "SetFeeProtocol",
                  "nameLocation": "5352:14:13",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2245,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2238,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "feeProtocol0Old",
                        "nameLocation": "5373:15:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2246,
                        "src": "5367:21:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2237,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "5367:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2240,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "feeProtocol1Old",
                        "nameLocation": "5396:15:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2246,
                        "src": "5390:21:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2239,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "5390:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2242,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "feeProtocol0New",
                        "nameLocation": "5419:15:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2246,
                        "src": "5413:21:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2241,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "5413:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2244,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "feeProtocol1New",
                        "nameLocation": "5442:15:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2246,
                        "src": "5436:21:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2243,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "5436:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5366:92:13"
                  },
                  "src": "5346:113:13"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2247,
                    "nodeType": "StructuredDocumentation",
                    "src": "5465:384:13",
                    "text": "@notice Emitted when the collected protocol fees are withdrawn by the factory owner\n @param sender The address that collects the protocol fees\n @param recipient The address that receives the collected protocol fees\n @param amount0 The amount of token0 protocol fees that is withdrawn\n @param amount0 The amount of token1 protocol fees that is withdrawn"
                  },
                  "id": 2257,
                  "name": "CollectProtocol",
                  "nameLocation": "5860:15:13",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2256,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2249,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "5892:6:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2257,
                        "src": "5876:22:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2248,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5876:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2251,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "5916:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2257,
                        "src": "5900:25:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2250,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5900:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2253,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "5935:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2257,
                        "src": "5927:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2252,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5927:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2255,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "5952:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2257,
                        "src": "5944:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2254,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5944:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5875:85:13"
                  },
                  "src": "5854:107:13"
                }
              ],
              "scope": 2259,
              "src": "159:5804:13",
              "usedErrors": []
            }
          ],
          "src": "45:5919:13"
        },
        "id": 13
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol": {
        "ast": {
          "absolutePath": "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol",
          "exportedSymbols": {
            "IUniswapV3PoolImmutables": [
              2298
            ]
          },
          "id": 2299,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2260,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:14"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2261,
                "nodeType": "StructuredDocumentation",
                "src": "71:153:14",
                "text": "@title Pool state that never changes\n @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values"
              },
              "fullyImplemented": false,
              "id": 2298,
              "linearizedBaseContracts": [
                2298
              ],
              "name": "IUniswapV3PoolImmutables",
              "nameLocation": "234:24:14",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2262,
                    "nodeType": "StructuredDocumentation",
                    "src": "265:138:14",
                    "text": "@notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface\n @return The contract address"
                  },
                  "functionSelector": "c45a0155",
                  "id": 2267,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factory",
                  "nameLocation": "417:7:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2263,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "424:2:14"
                  },
                  "returnParameters": {
                    "id": 2266,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2265,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2267,
                        "src": "450:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2264,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "450:7:14",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "449:9:14"
                  },
                  "scope": 2298,
                  "src": "408:51:14",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2268,
                    "nodeType": "StructuredDocumentation",
                    "src": "465:113:14",
                    "text": "@notice The first of the two tokens of the pool, sorted by address\n @return The token contract address"
                  },
                  "functionSelector": "0dfe1681",
                  "id": 2273,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "token0",
                  "nameLocation": "592:6:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2269,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "598:2:14"
                  },
                  "returnParameters": {
                    "id": 2272,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2271,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2273,
                        "src": "624:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2270,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "624:7:14",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "623:9:14"
                  },
                  "scope": 2298,
                  "src": "583:50:14",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2274,
                    "nodeType": "StructuredDocumentation",
                    "src": "639:114:14",
                    "text": "@notice The second of the two tokens of the pool, sorted by address\n @return The token contract address"
                  },
                  "functionSelector": "d21220a7",
                  "id": 2279,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "token1",
                  "nameLocation": "767:6:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2275,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "773:2:14"
                  },
                  "returnParameters": {
                    "id": 2278,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2277,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2279,
                        "src": "799:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2276,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "799:7:14",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "798:9:14"
                  },
                  "scope": 2298,
                  "src": "758:50:14",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2280,
                    "nodeType": "StructuredDocumentation",
                    "src": "814:84:14",
                    "text": "@notice The pool's fee in hundredths of a bip, i.e. 1e-6\n @return The fee"
                  },
                  "functionSelector": "ddca3f43",
                  "id": 2285,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fee",
                  "nameLocation": "912:3:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2281,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "915:2:14"
                  },
                  "returnParameters": {
                    "id": 2284,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2283,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2285,
                        "src": "941:6:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 2282,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "941:6:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "940:8:14"
                  },
                  "scope": 2298,
                  "src": "903:46:14",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2286,
                    "nodeType": "StructuredDocumentation",
                    "src": "955:358:14",
                    "text": "@notice The pool tick spacing\n @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive\n e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...\n This value is an int24 to avoid casting even though it is always positive.\n @return The tick spacing"
                  },
                  "functionSelector": "d0c93a7c",
                  "id": 2291,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tickSpacing",
                  "nameLocation": "1327:11:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2287,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1338:2:14"
                  },
                  "returnParameters": {
                    "id": 2290,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2289,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2291,
                        "src": "1364:5:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2288,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1364:5:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1363:7:14"
                  },
                  "scope": 2298,
                  "src": "1318:53:14",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2292,
                    "nodeType": "StructuredDocumentation",
                    "src": "1377:363:14",
                    "text": "@notice The maximum amount of position liquidity that can use any tick in the range\n @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and\n also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool\n @return The max amount of liquidity per tick"
                  },
                  "functionSelector": "70cf754a",
                  "id": 2297,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "maxLiquidityPerTick",
                  "nameLocation": "1754:19:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2293,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1773:2:14"
                  },
                  "returnParameters": {
                    "id": 2296,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2295,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2297,
                        "src": "1799:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2294,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1799:7:14",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1798:9:14"
                  },
                  "scope": 2298,
                  "src": "1745:63:14",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2299,
              "src": "224:1586:14",
              "usedErrors": []
            }
          ],
          "src": "45:1766:14"
        },
        "id": 14
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol": {
        "ast": {
          "absolutePath": "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol",
          "exportedSymbols": {
            "IUniswapV3PoolOwnerActions": [
              2324
            ]
          },
          "id": 2325,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2300,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:15"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2301,
                "nodeType": "StructuredDocumentation",
                "src": "71:116:15",
                "text": "@title Permissioned pool actions\n @notice Contains pool methods that may only be called by the factory owner"
              },
              "fullyImplemented": false,
              "id": 2324,
              "linearizedBaseContracts": [
                2324
              ],
              "name": "IUniswapV3PoolOwnerActions",
              "nameLocation": "197:26:15",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2302,
                    "nodeType": "StructuredDocumentation",
                    "src": "230:205:15",
                    "text": "@notice Set the denominator of the protocol's % share of the fees\n @param feeProtocol0 new protocol fee for token0 of the pool\n @param feeProtocol1 new protocol fee for token1 of the pool"
                  },
                  "functionSelector": "8206a4d1",
                  "id": 2309,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setFeeProtocol",
                  "nameLocation": "449:14:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2307,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2304,
                        "mutability": "mutable",
                        "name": "feeProtocol0",
                        "nameLocation": "470:12:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2309,
                        "src": "464:18:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2303,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "464:5:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2306,
                        "mutability": "mutable",
                        "name": "feeProtocol1",
                        "nameLocation": "490:12:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2309,
                        "src": "484:18:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2305,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "484:5:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "463:40:15"
                  },
                  "returnParameters": {
                    "id": 2308,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "512:0:15"
                  },
                  "scope": 2324,
                  "src": "440:73:15",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2310,
                    "nodeType": "StructuredDocumentation",
                    "src": "519:483:15",
                    "text": "@notice Collect the protocol fee accrued to the pool\n @param recipient The address to which collected protocol fees should be sent\n @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1\n @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0\n @return amount0 The protocol fee collected in token0\n @return amount1 The protocol fee collected in token1"
                  },
                  "functionSelector": "85b66729",
                  "id": 2323,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collectProtocol",
                  "nameLocation": "1016:15:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2317,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2312,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "1049:9:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2323,
                        "src": "1041:17:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2311,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1041:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2314,
                        "mutability": "mutable",
                        "name": "amount0Requested",
                        "nameLocation": "1076:16:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2323,
                        "src": "1068:24:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2313,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1068:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2316,
                        "mutability": "mutable",
                        "name": "amount1Requested",
                        "nameLocation": "1110:16:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2323,
                        "src": "1102:24:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2315,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1102:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1031:101:15"
                  },
                  "returnParameters": {
                    "id": 2322,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2319,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "1159:7:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2323,
                        "src": "1151:15:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2318,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1151:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2321,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "1176:7:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 2323,
                        "src": "1168:15:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2320,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1168:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1150:34:15"
                  },
                  "scope": 2324,
                  "src": "1007:178:15",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2325,
              "src": "187:1000:15",
              "usedErrors": []
            }
          ],
          "src": "45:1143:15"
        },
        "id": 15
      },
      "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol": {
        "ast": {
          "absolutePath": "@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol",
          "exportedSymbols": {
            "IUniswapV3PoolState": [
              2432
            ]
          },
          "id": 2433,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2326,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:16"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2327,
                "nodeType": "StructuredDocumentation",
                "src": "71:169:16",
                "text": "@title Pool state that can change\n @notice These methods compose the pool's state, and can change with any frequency including multiple times\n per transaction"
              },
              "fullyImplemented": false,
              "id": 2432,
              "linearizedBaseContracts": [
                2432
              ],
              "name": "IUniswapV3PoolState",
              "nameLocation": "250:19:16",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2328,
                    "nodeType": "StructuredDocumentation",
                    "src": "276:1140:16",
                    "text": "@notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas\n when accessed externally.\n @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value\n tick The current tick of the pool, i.e. according to the last tick transition that was run.\n This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick\n boundary.\n observationIndex The index of the last oracle observation that was written,\n observationCardinality The current maximum number of observations stored in the pool,\n observationCardinalityNext The next maximum number of observations, to be updated when the observation.\n feeProtocol The protocol fee for both tokens of the pool.\n Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0\n is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.\n unlocked Whether the pool is currently locked to reentrancy"
                  },
                  "functionSelector": "3850c7bd",
                  "id": 2345,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "slot0",
                  "nameLocation": "1430:5:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2329,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1435:2:16"
                  },
                  "returnParameters": {
                    "id": 2344,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2331,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nameLocation": "1506:12:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2345,
                        "src": "1498:20:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 2330,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1498:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2333,
                        "mutability": "mutable",
                        "name": "tick",
                        "nameLocation": "1538:4:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2345,
                        "src": "1532:10:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2332,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1532:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2335,
                        "mutability": "mutable",
                        "name": "observationIndex",
                        "nameLocation": "1563:16:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2345,
                        "src": "1556:23:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 2334,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "1556:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2337,
                        "mutability": "mutable",
                        "name": "observationCardinality",
                        "nameLocation": "1600:22:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2345,
                        "src": "1593:29:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 2336,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "1593:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2339,
                        "mutability": "mutable",
                        "name": "observationCardinalityNext",
                        "nameLocation": "1643:26:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2345,
                        "src": "1636:33:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 2338,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "1636:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2341,
                        "mutability": "mutable",
                        "name": "feeProtocol",
                        "nameLocation": "1689:11:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2345,
                        "src": "1683:17:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2340,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1683:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2343,
                        "mutability": "mutable",
                        "name": "unlocked",
                        "nameLocation": "1719:8:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2345,
                        "src": "1714:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2342,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1714:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1484:253:16"
                  },
                  "scope": 2432,
                  "src": "1421:317:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2346,
                    "nodeType": "StructuredDocumentation",
                    "src": "1744:168:16",
                    "text": "@notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool\n @dev This value can overflow the uint256"
                  },
                  "functionSelector": "f3058399",
                  "id": 2351,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "feeGrowthGlobal0X128",
                  "nameLocation": "1926:20:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2347,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1946:2:16"
                  },
                  "returnParameters": {
                    "id": 2350,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2349,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2351,
                        "src": "1972:7:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2348,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1972:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1971:9:16"
                  },
                  "scope": 2432,
                  "src": "1917:64:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2352,
                    "nodeType": "StructuredDocumentation",
                    "src": "1987:168:16",
                    "text": "@notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool\n @dev This value can overflow the uint256"
                  },
                  "functionSelector": "46141319",
                  "id": 2357,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "feeGrowthGlobal1X128",
                  "nameLocation": "2169:20:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2353,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2189:2:16"
                  },
                  "returnParameters": {
                    "id": 2356,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2355,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2357,
                        "src": "2215:7:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2354,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2215:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2214:9:16"
                  },
                  "scope": 2432,
                  "src": "2160:64:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2358,
                    "nodeType": "StructuredDocumentation",
                    "src": "2230:147:16",
                    "text": "@notice The amounts of token0 and token1 that are owed to the protocol\n @dev Protocol fees will never exceed uint128 max in either token"
                  },
                  "functionSelector": "1ad8b03b",
                  "id": 2365,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "protocolFees",
                  "nameLocation": "2391:12:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2359,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2403:2:16"
                  },
                  "returnParameters": {
                    "id": 2364,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2361,
                        "mutability": "mutable",
                        "name": "token0",
                        "nameLocation": "2437:6:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2365,
                        "src": "2429:14:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2360,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2429:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2363,
                        "mutability": "mutable",
                        "name": "token1",
                        "nameLocation": "2453:6:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2365,
                        "src": "2445:14:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2362,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2445:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2428:32:16"
                  },
                  "scope": 2432,
                  "src": "2382:79:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2366,
                    "nodeType": "StructuredDocumentation",
                    "src": "2467:150:16",
                    "text": "@notice The currently in range liquidity available to the pool\n @dev This value has no relationship to the total liquidity across all ticks"
                  },
                  "functionSelector": "1a686502",
                  "id": 2371,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidity",
                  "nameLocation": "2631:9:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2367,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2640:2:16"
                  },
                  "returnParameters": {
                    "id": 2370,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2369,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2371,
                        "src": "2666:7:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2368,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2666:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2665:9:16"
                  },
                  "scope": 2432,
                  "src": "2622:53:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2372,
                    "nodeType": "StructuredDocumentation",
                    "src": "2681:1244:16",
                    "text": "@notice Look up information about a specific tick in the pool\n @param tick The tick to look up\n @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or\n tick upper,\n liquidityNet how much liquidity changes when the pool price crosses the tick,\n feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0,\n feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1,\n tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick\n secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick,\n secondsOutside the seconds spent on the other side of the tick from the current tick,\n initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false.\n Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0.\n In addition, these values are only relative and must be used only in comparison to previous snapshots for\n a specific position."
                  },
                  "functionSelector": "f30dba93",
                  "id": 2393,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ticks",
                  "nameLocation": "3939:5:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2375,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2374,
                        "mutability": "mutable",
                        "name": "tick",
                        "nameLocation": "3951:4:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2393,
                        "src": "3945:10:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 2373,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "3945:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3944:12:16"
                  },
                  "returnParameters": {
                    "id": 2392,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2377,
                        "mutability": "mutable",
                        "name": "liquidityGross",
                        "nameLocation": "4025:14:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2393,
                        "src": "4017:22:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2376,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "4017:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2379,
                        "mutability": "mutable",
                        "name": "liquidityNet",
                        "nameLocation": "4060:12:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2393,
                        "src": "4053:19:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int128",
                          "typeString": "int128"
                        },
                        "typeName": {
                          "id": 2378,
                          "name": "int128",
                          "nodeType": "ElementaryTypeName",
                          "src": "4053:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int128",
                            "typeString": "int128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2381,
                        "mutability": "mutable",
                        "name": "feeGrowthOutside0X128",
                        "nameLocation": "4094:21:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2393,
                        "src": "4086:29:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2380,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4086:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2383,
                        "mutability": "mutable",
                        "name": "feeGrowthOutside1X128",
                        "nameLocation": "4137:21:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2393,
                        "src": "4129:29:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2382,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4129:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2385,
                        "mutability": "mutable",
                        "name": "tickCumulativeOutside",
                        "nameLocation": "4178:21:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2393,
                        "src": "4172:27:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 2384,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "4172:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2387,
                        "mutability": "mutable",
                        "name": "secondsPerLiquidityOutsideX128",
                        "nameLocation": "4221:30:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2393,
                        "src": "4213:38:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 2386,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "4213:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2389,
                        "mutability": "mutable",
                        "name": "secondsOutside",
                        "nameLocation": "4272:14:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2393,
                        "src": "4265:21:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 2388,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4265:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2391,
                        "mutability": "mutable",
                        "name": "initialized",
                        "nameLocation": "4305:11:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2393,
                        "src": "4300:16:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2390,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4300:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4003:323:16"
                  },
                  "scope": 2432,
                  "src": "3930:397:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2394,
                    "nodeType": "StructuredDocumentation",
                    "src": "4333:99:16",
                    "text": "@notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information"
                  },
                  "functionSelector": "5339c296",
                  "id": 2401,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tickBitmap",
                  "nameLocation": "4446:10:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2397,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2396,
                        "mutability": "mutable",
                        "name": "wordPosition",
                        "nameLocation": "4463:12:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2401,
                        "src": "4457:18:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int16",
                          "typeString": "int16"
                        },
                        "typeName": {
                          "id": 2395,
                          "name": "int16",
                          "nodeType": "ElementaryTypeName",
                          "src": "4457:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int16",
                            "typeString": "int16"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4456:20:16"
                  },
                  "returnParameters": {
                    "id": 2400,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2399,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2401,
                        "src": "4500:7:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2398,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4500:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4499:9:16"
                  },
                  "scope": 2432,
                  "src": "4437:72:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2402,
                    "nodeType": "StructuredDocumentation",
                    "src": "4515:700:16",
                    "text": "@notice Returns the information about a position by the position's key\n @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper\n @return _liquidity The amount of liquidity in the position,\n Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke,\n Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke,\n Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke,\n Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke"
                  },
                  "functionSelector": "514ea4bf",
                  "id": 2417,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "positions",
                  "nameLocation": "5229:9:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2405,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2404,
                        "mutability": "mutable",
                        "name": "key",
                        "nameLocation": "5247:3:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2417,
                        "src": "5239:11:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2403,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5239:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5238:13:16"
                  },
                  "returnParameters": {
                    "id": 2416,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2407,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "5320:10:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2417,
                        "src": "5312:18:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2406,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5312:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2409,
                        "mutability": "mutable",
                        "name": "feeGrowthInside0LastX128",
                        "nameLocation": "5352:24:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2417,
                        "src": "5344:32:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2408,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5344:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2411,
                        "mutability": "mutable",
                        "name": "feeGrowthInside1LastX128",
                        "nameLocation": "5398:24:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2417,
                        "src": "5390:32:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2410,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5390:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2413,
                        "mutability": "mutable",
                        "name": "tokensOwed0",
                        "nameLocation": "5444:11:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2417,
                        "src": "5436:19:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2412,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5436:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2415,
                        "mutability": "mutable",
                        "name": "tokensOwed1",
                        "nameLocation": "5477:11:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2417,
                        "src": "5469:19:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2414,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5469:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5298:200:16"
                  },
                  "scope": 2432,
                  "src": "5220:279:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2418,
                    "nodeType": "StructuredDocumentation",
                    "src": "5505:749:16",
                    "text": "@notice Returns data about a specific observation index\n @param index The element of the observations array to fetch\n @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time\n ago, rather than at a specific index in the array.\n @return blockTimestamp The timestamp of the observation,\n Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp,\n Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp,\n Returns initialized whether the observation has been initialized and the values are safe to use"
                  },
                  "functionSelector": "252c09d7",
                  "id": 2431,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "observations",
                  "nameLocation": "6268:12:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2421,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2420,
                        "mutability": "mutable",
                        "name": "index",
                        "nameLocation": "6289:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2431,
                        "src": "6281:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2419,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6281:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6280:15:16"
                  },
                  "returnParameters": {
                    "id": 2430,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2423,
                        "mutability": "mutable",
                        "name": "blockTimestamp",
                        "nameLocation": "6363:14:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2431,
                        "src": "6356:21:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 2422,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6356:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2425,
                        "mutability": "mutable",
                        "name": "tickCumulative",
                        "nameLocation": "6397:14:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2431,
                        "src": "6391:20:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 2424,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "6391:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2427,
                        "mutability": "mutable",
                        "name": "secondsPerLiquidityCumulativeX128",
                        "nameLocation": "6433:33:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2431,
                        "src": "6425:41:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 2426,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "6425:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2429,
                        "mutability": "mutable",
                        "name": "initialized",
                        "nameLocation": "6485:11:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 2431,
                        "src": "6480:16:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2428,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "6480:4:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6342:164:16"
                  },
                  "scope": 2432,
                  "src": "6259:248:16",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2433,
              "src": "240:6269:16",
              "usedErrors": []
            }
          ],
          "src": "45:6465:16"
        },
        "id": 16
      },
      "solidity/contracts/Keep3r.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/Keep3r.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "DustCollector": [
              5257
            ],
            "EnumerableSet": [
              1918
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IDustCollector": [
              12818
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rDisputable": [
              13033
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IKeep3rV1": [
              12600
            ],
            "IKeep3rV1Proxy": [
              12773
            ],
            "IPairManager": [
              11703
            ],
            "Keep3r": [
              2472
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rDisputable": [
              5578
            ],
            "Keep3rJobDisputable": [
              6259
            ],
            "Keep3rJobFundableCredits": [
              6508
            ],
            "Keep3rJobFundableLiquidity": [
              7939
            ],
            "Keep3rJobManager": [
              8000
            ],
            "Keep3rJobMigration": [
              8292
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rJobWorkable": [
              8908
            ],
            "Keep3rJobs": [
              8920
            ],
            "Keep3rKeeperDisputable": [
              9079
            ],
            "Keep3rKeeperFundable": [
              9479
            ],
            "Keep3rKeepers": [
              9485
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 2473,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2434,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "2216:31:17"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol",
              "file": "./peripherals/jobs/Keep3rJobs.sol",
              "id": 2435,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2473,
              "sourceUnit": 8921,
              "src": "2249:43:17",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol",
              "file": "./peripherals/keepers/Keep3rKeepers.sol",
              "id": 2436,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2473,
              "sourceUnit": 9486,
              "src": "2293:49:17",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rAccountance.sol",
              "file": "./peripherals/Keep3rAccountance.sol",
              "id": 2437,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2473,
              "sourceUnit": 5508,
              "src": "2343:45:17",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rRoles.sol",
              "file": "./peripherals/Keep3rRoles.sol",
              "id": 2438,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2473,
              "sourceUnit": 6102,
              "src": "2389:39:17",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rParameters.sol",
              "file": "./peripherals/Keep3rParameters.sol",
              "id": 2439,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2473,
              "sourceUnit": 5935,
              "src": "2429:44:17",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/DustCollector.sol",
              "file": "./peripherals/DustCollector.sol",
              "id": 2440,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2473,
              "sourceUnit": 5258,
              "src": "2474:41:17",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2441,
                    "name": "DustCollector",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5257,
                    "src": "2536:13:17"
                  },
                  "id": 2442,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2536:13:17"
                },
                {
                  "baseName": {
                    "id": 2443,
                    "name": "Keep3rJobs",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 8920,
                    "src": "2551:10:17"
                  },
                  "id": 2444,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2551:10:17"
                },
                {
                  "baseName": {
                    "id": 2445,
                    "name": "Keep3rKeepers",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 9485,
                    "src": "2563:13:17"
                  },
                  "id": 2446,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2563:13:17"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 2472,
              "linearizedBaseContracts": [
                2472,
                9485,
                9079,
                9479,
                8920,
                8908,
                8292,
                8000,
                6259,
                7939,
                6508,
                5934,
                5578,
                6101,
                5257,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12818,
                12793,
                8406,
                13456,
                39,
                13623,
                13326,
                13033,
                13659,
                13559,
                13305,
                13100,
                13505,
                13400
              ],
              "name": "Keep3r",
              "nameLocation": "2526:6:17",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 2470,
                    "nodeType": "Block",
                    "src": "2842:2:17",
                    "statements": []
                  },
                  "id": 2471,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 2459,
                          "name": "_keep3rHelper",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2450,
                          "src": "2744:13:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 2460,
                          "name": "_keep3rV1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2452,
                          "src": "2759:9:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 2461,
                          "name": "_keep3rV1Proxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2454,
                          "src": "2770:14:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 2462,
                          "name": "_kp3rWethPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2456,
                          "src": "2786:13:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 2463,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 2458,
                        "name": "Keep3rParameters",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5934,
                        "src": "2727:16:17"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2727:73:17"
                    },
                    {
                      "arguments": [
                        {
                          "id": 2465,
                          "name": "_governance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2448,
                          "src": "2813:11:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 2466,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 2464,
                        "name": "Keep3rRoles",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6101,
                        "src": "2801:11:17"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2801:24:17"
                    },
                    {
                      "arguments": [],
                      "id": 2468,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 2467,
                        "name": "DustCollector",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5257,
                        "src": "2826:13:17"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2826:15:17"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2457,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2448,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "2606:11:17",
                        "nodeType": "VariableDeclaration",
                        "scope": 2471,
                        "src": "2598:19:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2447,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2598:7:17",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2450,
                        "mutability": "mutable",
                        "name": "_keep3rHelper",
                        "nameLocation": "2631:13:17",
                        "nodeType": "VariableDeclaration",
                        "scope": 2471,
                        "src": "2623:21:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2449,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2623:7:17",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2452,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "2658:9:17",
                        "nodeType": "VariableDeclaration",
                        "scope": 2471,
                        "src": "2650:17:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2451,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2650:7:17",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2454,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "2681:14:17",
                        "nodeType": "VariableDeclaration",
                        "scope": 2471,
                        "src": "2673:22:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2453,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2673:7:17",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2456,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "2709:13:17",
                        "nodeType": "VariableDeclaration",
                        "scope": 2471,
                        "src": "2701:21:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2455,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2701:7:17",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2592:134:17"
                  },
                  "returnParameters": {
                    "id": 2469,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2842:0:17"
                  },
                  "scope": 2472,
                  "src": "2581:263:17",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 2473,
              "src": "2517:329:17",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13017,
                13020,
                13061,
                13064,
                13067,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13316,
                13319,
                13348,
                13351,
                13422,
                13425,
                13474,
                13477,
                13480,
                13535,
                13538,
                13594,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "2216:631:17"
        },
        "id": 17
      },
      "solidity/contracts/Keep3rHelper.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/Keep3rHelper.sol",
          "exportedSymbols": {
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3r": [
              11407
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rHelperParameters": [
              11672
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IKeep3rV1": [
              12600
            ],
            "IUniswapV3Pool": [
              2012
            ],
            "IUniswapV3PoolActions": [
              2108
            ],
            "IUniswapV3PoolDerivedState": [
              2139
            ],
            "IUniswapV3PoolEvents": [
              2258
            ],
            "IUniswapV3PoolImmutables": [
              2298
            ],
            "IUniswapV3PoolOwnerActions": [
              2324
            ],
            "IUniswapV3PoolState": [
              2432
            ],
            "Keep3rHelper": [
              2956
            ],
            "Keep3rHelperParameters": [
              3207
            ],
            "Math": [
              1319
            ],
            "TickMath": [
              5188
            ]
          },
          "id": 2957,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2474,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".7",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "2216:31:18"
            },
            {
              "absolutePath": "solidity/contracts/libraries/FullMath.sol",
              "file": "./libraries/FullMath.sol",
              "id": 2475,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2957,
              "sourceUnit": 4309,
              "src": "2249:34:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/TickMath.sol",
              "file": "./libraries/TickMath.sol",
              "id": 2476,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2957,
              "sourceUnit": 5189,
              "src": "2284:34:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/IKeep3r.sol",
              "file": "../interfaces/IKeep3r.sol",
              "id": 2477,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2957,
              "sourceUnit": 11408,
              "src": "2319:35:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/IKeep3rHelper.sol",
              "file": "../interfaces/IKeep3rHelper.sol",
              "id": 2478,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2957,
              "sourceUnit": 11526,
              "src": "2355:41:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/Keep3rHelperParameters.sol",
              "file": "./Keep3rHelperParameters.sol",
              "id": 2479,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2957,
              "sourceUnit": 3208,
              "src": "2397:38:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
              "file": "@openzeppelin/contracts/utils/math/Math.sol",
              "id": 2480,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2957,
              "sourceUnit": 1320,
              "src": "2437:53:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
              "file": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
              "id": 2481,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2957,
              "sourceUnit": 2013,
              "src": "2491:66:18",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2482,
                    "name": "IKeep3rHelper",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 11525,
                    "src": "2584:13:18"
                  },
                  "id": 2483,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2584:13:18"
                },
                {
                  "baseName": {
                    "id": 2484,
                    "name": "Keep3rHelperParameters",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 3207,
                    "src": "2599:22:18"
                  },
                  "id": 2485,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2599:22:18"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 2956,
              "linearizedBaseContracts": [
                2956,
                3207,
                5354,
                12863,
                11672,
                11525
              ],
              "name": "Keep3rHelper",
              "nameLocation": "2568:12:18",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 2496,
                    "nodeType": "Block",
                    "src": "2725:2:18",
                    "statements": []
                  },
                  "id": 2497,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 2492,
                          "name": "_keep3rV2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2487,
                          "src": "2701:9:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 2493,
                          "name": "_governance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2489,
                          "src": "2712:11:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 2494,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 2491,
                        "name": "Keep3rHelperParameters",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 3207,
                        "src": "2678:22:18"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2678:46:18"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2490,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2487,
                        "mutability": "mutable",
                        "name": "_keep3rV2",
                        "nameLocation": "2646:9:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2497,
                        "src": "2638:17:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2486,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2638:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2489,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "2665:11:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2497,
                        "src": "2657:19:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2488,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2657:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2637:40:18"
                  },
                  "returnParameters": {
                    "id": 2495,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2725:0:18"
                  },
                  "scope": 2956,
                  "src": "2626:101:18",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11421
                  ],
                  "body": {
                    "id": 2562,
                    "nodeType": "Block",
                    "src": "2842:387:18",
                    "statements": [
                      {
                        "assignments": [
                          2510
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2510,
                            "mutability": "mutable",
                            "name": "_secondsAgos",
                            "nameLocation": "2864:12:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2562,
                            "src": "2848:28:18",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 2508,
                                "name": "uint32",
                                "nodeType": "ElementaryTypeName",
                                "src": "2848:6:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 2509,
                              "nodeType": "ArrayTypeName",
                              "src": "2848:8:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                "typeString": "uint32[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2516,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "32",
                              "id": 2514,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2892:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              }
                            ],
                            "id": 2513,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "2879:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (uint32[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 2511,
                                "name": "uint32",
                                "nodeType": "ElementaryTypeName",
                                "src": "2883:6:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "id": 2512,
                              "nodeType": "ArrayTypeName",
                              "src": "2883:8:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                "typeString": "uint32[]"
                              }
                            }
                          },
                          "id": 2515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2879:15:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                            "typeString": "uint32[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2848:46:18"
                      },
                      {
                        "expression": {
                          "id": 2521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 2517,
                              "name": "_secondsAgos",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2510,
                              "src": "2900:12:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            },
                            "id": 2519,
                            "indexExpression": {
                              "hexValue": "31",
                              "id": 2518,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2913:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2900:15:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2520,
                            "name": "quoteTwapTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3006,
                            "src": "2918:13:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "2900:31:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 2522,
                        "nodeType": "ExpressionStatement",
                        "src": "2900:31:18"
                      },
                      {
                        "assignments": [
                          2527,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2527,
                            "mutability": "mutable",
                            "name": "_tickCumulatives",
                            "nameLocation": "2954:16:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2562,
                            "src": "2939:31:18",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                              "typeString": "int56[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 2525,
                                "name": "int56",
                                "nodeType": "ElementaryTypeName",
                                "src": "2939:5:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                }
                              },
                              "id": 2526,
                              "nodeType": "ArrayTypeName",
                              "src": "2939:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_int56_$dyn_storage_ptr",
                                "typeString": "int56[]"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 2535,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 2533,
                              "name": "_secondsAgos",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2510,
                              "src": "3025:12:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 2529,
                                    "name": "kp3rWethPool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3015,
                                    "src": "2991:12:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Kp3rWethPool_$11533_storage",
                                      "typeString": "struct IKeep3rHelperParameters.Kp3rWethPool storage ref"
                                    }
                                  },
                                  "id": 2530,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "poolAddress",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 11530,
                                  "src": "2991:24:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2528,
                                "name": "IUniswapV3Pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2012,
                                "src": "2976:14:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                  "typeString": "type(contract IUniswapV3Pool)"
                                }
                              },
                              "id": 2531,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2976:40:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                "typeString": "contract IUniswapV3Pool"
                              }
                            },
                            "id": 2532,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "observe",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2124,
                            "src": "2976:48:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_array$_t_int56_$dyn_memory_ptr_$_t_array$_t_uint160_$dyn_memory_ptr_$",
                              "typeString": "function (uint32[] memory) view external returns (int56[] memory,uint160[] memory)"
                            }
                          },
                          "id": 2534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2976:62:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_array$_t_int56_$dyn_memory_ptr_$_t_array$_t_uint160_$dyn_memory_ptr_$",
                            "typeString": "tuple(int56[] memory,uint160[] memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2938:100:18"
                      },
                      {
                        "assignments": [
                          2537
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2537,
                            "mutability": "mutable",
                            "name": "_difference",
                            "nameLocation": "3050:11:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2562,
                            "src": "3044:17:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            },
                            "typeName": {
                              "id": 2536,
                              "name": "int56",
                              "nodeType": "ElementaryTypeName",
                              "src": "3044:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2545,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          },
                          "id": 2544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 2538,
                              "name": "_tickCumulatives",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2527,
                              "src": "3064:16:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                                "typeString": "int56[] memory"
                              }
                            },
                            "id": 2540,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 2539,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3081:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3064:19:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 2541,
                              "name": "_tickCumulatives",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2527,
                              "src": "3086:16:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                                "typeString": "int56[] memory"
                              }
                            },
                            "id": 2543,
                            "indexExpression": {
                              "hexValue": "31",
                              "id": 2542,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3103:1:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3086:19:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "src": "3064:41:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3044:61:18"
                      },
                      {
                        "expression": {
                          "id": 2560,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2546,
                            "name": "_amountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2504,
                            "src": "3111:10:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 2550,
                                    "name": "_eth",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2500,
                                    "src": "3147:4:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2549,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3139:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  },
                                  "typeName": {
                                    "id": 2548,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3139:7:18",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2551,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3139:13:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "condition": {
                                  "expression": {
                                    "id": 2552,
                                    "name": "kp3rWethPool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3015,
                                    "src": "3154:12:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Kp3rWethPool_$11533_storage",
                                      "typeString": "struct IKeep3rHelperParameters.Kp3rWethPool storage ref"
                                    }
                                  },
                                  "id": 2553,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "isKP3RToken0",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 11532,
                                  "src": "3154:25:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "id": 2556,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "-",
                                  "prefix": true,
                                  "src": "3196:12:18",
                                  "subExpression": {
                                    "id": 2555,
                                    "name": "_difference",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2537,
                                    "src": "3197:11:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int56",
                                      "typeString": "int56"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  }
                                },
                                "id": 2557,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "3154:54:18",
                                "trueExpression": {
                                  "id": 2554,
                                  "name": "_difference",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2537,
                                  "src": "3182:11:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                }
                              },
                              {
                                "id": 2558,
                                "name": "quoteTwapTime",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3006,
                                "src": "3210:13:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 2547,
                              "name": "getQuoteAtTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2945,
                              "src": "3124:14:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint128_$_t_int56_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint128,int56,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 2559,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3124:100:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3111:113:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2561,
                        "nodeType": "ExpressionStatement",
                        "src": "3111:113:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2498,
                    "nodeType": "StructuredDocumentation",
                    "src": "2731:29:18",
                    "text": "@inheritdoc IKeep3rHelper"
                  },
                  "functionSelector": "ed1bd76c",
                  "id": 2563,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quote",
                  "nameLocation": "2772:5:18",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2502,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2804:8:18"
                  },
                  "parameters": {
                    "id": 2501,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2500,
                        "mutability": "mutable",
                        "name": "_eth",
                        "nameLocation": "2786:4:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2563,
                        "src": "2778:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2499,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2778:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2777:14:18"
                  },
                  "returnParameters": {
                    "id": 2505,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2504,
                        "mutability": "mutable",
                        "name": "_amountOut",
                        "nameLocation": "2830:10:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2563,
                        "src": "2822:18:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2503,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2822:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2821:20:18"
                  },
                  "scope": 2956,
                  "src": "2763:466:18",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11429
                  ],
                  "body": {
                    "id": 2580,
                    "nodeType": "Block",
                    "src": "3350:56:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2576,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2566,
                              "src": "3387:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2577,
                              "name": "KP3R",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2976,
                              "src": "3396:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2573,
                                  "name": "keep3rV2",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3010,
                                  "src": "3371:8:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2572,
                                "name": "IKeep3r",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11407,
                                "src": "3363:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IKeep3r_$11407_$",
                                  "typeString": "type(contract IKeep3r)"
                                }
                              },
                              "id": 2574,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3363:17:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IKeep3r_$11407",
                                "typeString": "contract IKeep3r"
                              }
                            },
                            "id": 2575,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "bonds",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12918,
                            "src": "3363:23:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 2578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3363:38:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2571,
                        "id": 2579,
                        "nodeType": "Return",
                        "src": "3356:45:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2564,
                    "nodeType": "StructuredDocumentation",
                    "src": "3233:29:18",
                    "text": "@inheritdoc IKeep3rHelper"
                  },
                  "functionSelector": "fe10d774",
                  "id": 2581,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bonds",
                  "nameLocation": "3274:5:18",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2568,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3309:8:18"
                  },
                  "parameters": {
                    "id": 2567,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2566,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3288:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2581,
                        "src": "3280:15:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2565,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3280:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3279:17:18"
                  },
                  "returnParameters": {
                    "id": 2571,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2570,
                        "mutability": "mutable",
                        "name": "_amountBonded",
                        "nameLocation": "3335:13:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2581,
                        "src": "3327:21:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2569,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3327:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3326:23:18"
                  },
                  "scope": 2956,
                  "src": "3265:141:18",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11439
                  ],
                  "body": {
                    "id": 2611,
                    "nodeType": "Block",
                    "src": "3550:114:18",
                    "statements": [
                      {
                        "assignments": [
                          2593
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2593,
                            "mutability": "mutable",
                            "name": "_boost",
                            "nameLocation": "3564:6:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2611,
                            "src": "3556:14:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2592,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3556:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2599,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 2596,
                                  "name": "_keeper",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2584,
                                  "src": "3597:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2595,
                                "name": "bonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2581,
                                "src": "3591:5:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 2597,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3591:14:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2594,
                            "name": "getRewardBoostFor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2671,
                            "src": "3573:17:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256) view returns (uint256)"
                            }
                          },
                          "id": 2598,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3573:33:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3556:50:18"
                      },
                      {
                        "expression": {
                          "id": 2609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2600,
                            "name": "_kp3r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2590,
                            "src": "3612:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2607,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2604,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2602,
                                        "name": "_gasUsed",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2586,
                                        "src": "3627:8:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "id": 2603,
                                        "name": "_boost",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2593,
                                        "src": "3638:6:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3627:17:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2605,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "3626:19:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "id": 2606,
                                  "name": "BOOST_BASE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2981,
                                  "src": "3648:10:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3626:32:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2601,
                              "name": "quote",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2563,
                              "src": "3620:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 2608,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3620:39:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3612:47:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2610,
                        "nodeType": "ExpressionStatement",
                        "src": "3612:47:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2582,
                    "nodeType": "StructuredDocumentation",
                    "src": "3410:29:18",
                    "text": "@inheritdoc IKeep3rHelper"
                  },
                  "functionSelector": "2248e82d",
                  "id": 2612,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRewardAmountFor",
                  "nameLocation": "3451:18:18",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2588,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3517:8:18"
                  },
                  "parameters": {
                    "id": 2587,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2584,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3478:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2612,
                        "src": "3470:15:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2583,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3470:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2586,
                        "mutability": "mutable",
                        "name": "_gasUsed",
                        "nameLocation": "3495:8:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2612,
                        "src": "3487:16:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2585,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3487:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3469:35:18"
                  },
                  "returnParameters": {
                    "id": 2591,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2590,
                        "mutability": "mutable",
                        "name": "_kp3r",
                        "nameLocation": "3543:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2612,
                        "src": "3535:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2589,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3535:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3534:15:18"
                  },
                  "scope": 2956,
                  "src": "3442:222:18",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11455
                  ],
                  "body": {
                    "id": 2627,
                    "nodeType": "Block",
                    "src": "3792:106:18",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2622,
                                "name": "tx",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -26,
                                "src": "3873:2:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_transaction",
                                  "typeString": "tx"
                                }
                              },
                              "id": 2623,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "origin",
                              "nodeType": "MemberAccess",
                              "src": "3873:9:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2624,
                              "name": "_gasUsed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2615,
                              "src": "3884:8:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2621,
                            "name": "getRewardAmountFor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2612,
                            "src": "3854:18:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256) view returns (uint256)"
                            }
                          },
                          "id": 2625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3854:39:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2620,
                        "id": 2626,
                        "nodeType": "Return",
                        "src": "3847:46:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2613,
                    "nodeType": "StructuredDocumentation",
                    "src": "3668:29:18",
                    "text": "@inheritdoc IKeep3rHelper"
                  },
                  "functionSelector": "c84993af",
                  "id": 2628,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRewardAmount",
                  "nameLocation": "3709:15:18",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2617,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3757:8:18"
                  },
                  "parameters": {
                    "id": 2616,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2615,
                        "mutability": "mutable",
                        "name": "_gasUsed",
                        "nameLocation": "3733:8:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2628,
                        "src": "3725:16:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2614,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3725:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3724:18:18"
                  },
                  "returnParameters": {
                    "id": 2620,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2619,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "3783:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2628,
                        "src": "3775:15:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2618,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3775:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3774:17:18"
                  },
                  "scope": 2956,
                  "src": "3700:198:18",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    11447
                  ],
                  "body": {
                    "id": 2670,
                    "nodeType": "Block",
                    "src": "4029:186:18",
                    "statements": [
                      {
                        "expression": {
                          "id": 2643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2637,
                            "name": "_bonds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2631,
                            "src": "4035:6:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 2640,
                                "name": "_bonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2631,
                                "src": "4053:6:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 2641,
                                "name": "targetBond",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2996,
                                "src": "4061:10:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 2638,
                                "name": "Math",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1319,
                                "src": "4044:4:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Math_$1319_$",
                                  "typeString": "type(library Math)"
                                }
                              },
                              "id": 2639,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "min",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1270,
                              "src": "4044:8:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 2642,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4044:28:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4035:37:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2644,
                        "nodeType": "ExpressionStatement",
                        "src": "4035:37:18"
                      },
                      {
                        "assignments": [
                          2646
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2646,
                            "mutability": "mutable",
                            "name": "_cap",
                            "nameLocation": "4086:4:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2670,
                            "src": "4078:12:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2645,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4078:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2662,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 2649,
                              "name": "minBoost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2986,
                              "src": "4102:8:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2660,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2650,
                                "name": "minBoost",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2986,
                                "src": "4112:8:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2659,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2656,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "components": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 2653,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 2651,
                                              "name": "maxBoost",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2991,
                                              "src": "4125:8:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                              "id": 2652,
                                              "name": "minBoost",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2986,
                                              "src": "4136:8:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "4125:19:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "id": 2654,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "4124:21:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "id": 2655,
                                        "name": "_bonds",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2631,
                                        "src": "4148:6:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "4124:30:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2657,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4123:32:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "id": 2658,
                                  "name": "targetBond",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2996,
                                  "src": "4158:10:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4123:45:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4112:56:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 2647,
                              "name": "Math",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1319,
                              "src": "4093:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Math_$1319_$",
                                "typeString": "type(library Math)"
                              }
                            },
                            "id": 2648,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1252,
                            "src": "4093:8:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4093:76:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4078:91:18"
                      },
                      {
                        "expression": {
                          "id": 2668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2663,
                            "name": "_rewardBoost",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2635,
                            "src": "4175:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2667,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2664,
                              "name": "_cap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2646,
                              "src": "4190:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 2665,
                                "name": "_getBasefee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2955,
                                "src": "4197:11:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 2666,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4197:13:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4190:20:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4175:35:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2669,
                        "nodeType": "ExpressionStatement",
                        "src": "4175:35:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2629,
                    "nodeType": "StructuredDocumentation",
                    "src": "3902:29:18",
                    "text": "@inheritdoc IKeep3rHelper"
                  },
                  "functionSelector": "516c3323",
                  "id": 2671,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRewardBoostFor",
                  "nameLocation": "3943:17:18",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2633,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3989:8:18"
                  },
                  "parameters": {
                    "id": 2632,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2631,
                        "mutability": "mutable",
                        "name": "_bonds",
                        "nameLocation": "3969:6:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2671,
                        "src": "3961:14:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2630,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3961:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3960:16:18"
                  },
                  "returnParameters": {
                    "id": 2636,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2635,
                        "mutability": "mutable",
                        "name": "_rewardBoost",
                        "nameLocation": "4015:12:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2671,
                        "src": "4007:20:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2634,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4007:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4006:22:18"
                  },
                  "scope": 2956,
                  "src": "3934:281:18",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11465
                  ],
                  "body": {
                    "id": 2694,
                    "nodeType": "Block",
                    "src": "4353:82:18",
                    "statements": [
                      {
                        "expression": {
                          "components": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 2683,
                                      "name": "_pool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2674,
                                      "src": "4382:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 2682,
                                    "name": "IUniswapV3Pool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2012,
                                    "src": "4367:14:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                      "typeString": "type(contract IUniswapV3Pool)"
                                    }
                                  },
                                  "id": 2684,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4367:21:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                    "typeString": "contract IUniswapV3Pool"
                                  }
                                },
                                "id": 2685,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token0",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2273,
                                "src": "4367:28:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 2686,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4367:30:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 2688,
                                      "name": "_pool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2674,
                                      "src": "4414:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 2687,
                                    "name": "IUniswapV3Pool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2012,
                                    "src": "4399:14:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                      "typeString": "type(contract IUniswapV3Pool)"
                                    }
                                  },
                                  "id": 2689,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4399:21:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                    "typeString": "contract IUniswapV3Pool"
                                  }
                                },
                                "id": 2690,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token1",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2279,
                                "src": "4399:28:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 2691,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4399:30:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 2692,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4366:64:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                            "typeString": "tuple(address,address)"
                          }
                        },
                        "functionReturnParameters": 2681,
                        "id": 2693,
                        "nodeType": "Return",
                        "src": "4359:71:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2672,
                    "nodeType": "StructuredDocumentation",
                    "src": "4219:29:18",
                    "text": "@inheritdoc IKeep3rHelper"
                  },
                  "functionSelector": "ca4f2803",
                  "id": 2695,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPoolTokens",
                  "nameLocation": "4260:13:18",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2676,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4301:8:18"
                  },
                  "parameters": {
                    "id": 2675,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2674,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "4282:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2695,
                        "src": "4274:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2673,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4274:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4273:15:18"
                  },
                  "returnParameters": {
                    "id": 2681,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2678,
                        "mutability": "mutable",
                        "name": "_token0",
                        "nameLocation": "4327:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2695,
                        "src": "4319:15:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2677,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4319:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2680,
                        "mutability": "mutable",
                        "name": "_token1",
                        "nameLocation": "4344:7:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2695,
                        "src": "4336:15:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2679,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4336:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4318:34:18"
                  },
                  "scope": 2956,
                  "src": "4251:184:18",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11473
                  ],
                  "body": {
                    "id": 2733,
                    "nodeType": "Block",
                    "src": "4558:217:18",
                    "statements": [
                      {
                        "assignments": [
                          2705
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2705,
                            "mutability": "mutable",
                            "name": "_token0",
                            "nameLocation": "4572:7:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2733,
                            "src": "4564:15:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 2704,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4564:7:18",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2706,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4564:15:18"
                      },
                      {
                        "assignments": [
                          2708
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2708,
                            "mutability": "mutable",
                            "name": "_token1",
                            "nameLocation": "4593:7:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2733,
                            "src": "4585:15:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 2707,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4585:7:18",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2709,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4585:15:18"
                      },
                      {
                        "expression": {
                          "id": 2716,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 2710,
                                "name": "_token0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2705,
                                "src": "4607:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 2711,
                                "name": "_token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2708,
                                "src": "4616:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "id": 2712,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "4606:18:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                              "typeString": "tuple(address,address)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 2714,
                                "name": "_pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2698,
                                "src": "4641:5:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 2713,
                              "name": "getPoolTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2695,
                              "src": "4627:13:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$_t_address_$",
                                "typeString": "function (address) view returns (address,address)"
                              }
                            },
                            "id": 2715,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4627:20:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_address_$_t_address_$",
                              "typeString": "tuple(address,address)"
                            }
                          },
                          "src": "4606:41:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2717,
                        "nodeType": "ExpressionStatement",
                        "src": "4606:41:18"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2718,
                            "name": "_token0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2705,
                            "src": "4657:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 2719,
                            "name": "KP3R",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2976,
                            "src": "4668:4:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4657:15:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2726,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2724,
                              "name": "_token1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2708,
                              "src": "4710:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "id": 2725,
                              "name": "KP3R",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2976,
                              "src": "4721:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "4710:15:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 2731,
                          "nodeType": "IfStatement",
                          "src": "4706:65:18",
                          "trueBody": {
                            "id": 2730,
                            "nodeType": "Block",
                            "src": "4727:44:18",
                            "statements": [
                              {
                                "errorCall": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 2727,
                                    "name": "LiquidityPairInvalid",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11413,
                                    "src": "4742:20:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 2728,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4742:22:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 2729,
                                "nodeType": "RevertStatement",
                                "src": "4735:29:18"
                              }
                            ]
                          }
                        },
                        "id": 2732,
                        "nodeType": "IfStatement",
                        "src": "4653:118:18",
                        "trueBody": {
                          "id": 2723,
                          "nodeType": "Block",
                          "src": "4674:26:18",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 2721,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4689:4:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 2703,
                              "id": 2722,
                              "nodeType": "Return",
                              "src": "4682:11:18"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2696,
                    "nodeType": "StructuredDocumentation",
                    "src": "4439:29:18",
                    "text": "@inheritdoc IKeep3rHelper"
                  },
                  "functionSelector": "696a437b",
                  "id": 2734,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isKP3RToken0",
                  "nameLocation": "4480:12:18",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2700,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4520:8:18"
                  },
                  "parameters": {
                    "id": 2699,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2698,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "4501:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2734,
                        "src": "4493:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2697,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4493:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4492:15:18"
                  },
                  "returnParameters": {
                    "id": 2703,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2702,
                        "mutability": "mutable",
                        "name": "_isKP3RToken0",
                        "nameLocation": "4543:13:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2734,
                        "src": "4538:18:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2701,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4538:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4537:20:18"
                  },
                  "scope": 2956,
                  "src": "4471:304:18",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11488
                  ],
                  "body": {
                    "id": 2793,
                    "nodeType": "Block",
                    "src": "5007:314:18",
                    "statements": [
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 2785,
                              "nodeType": "Block",
                              "src": "5120:173:18",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2767,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2763,
                                      "name": "_tickCumulative1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2744,
                                      "src": "5128:16:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "baseExpression": {
                                        "id": 2764,
                                        "name": "_uniswapResponse",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2758,
                                        "src": "5147:16:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                                          "typeString": "int56[] memory"
                                        }
                                      },
                                      "id": 2766,
                                      "indexExpression": {
                                        "hexValue": "30",
                                        "id": 2765,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5164:1:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "5147:19:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      }
                                    },
                                    "src": "5128:38:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int56",
                                      "typeString": "int56"
                                    }
                                  },
                                  "id": 2768,
                                  "nodeType": "ExpressionStatement",
                                  "src": "5128:38:18"
                                },
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2772,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 2769,
                                        "name": "_uniswapResponse",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2758,
                                        "src": "5178:16:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                                          "typeString": "int56[] memory"
                                        }
                                      },
                                      "id": 2770,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "src": "5178:23:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 2771,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5204:1:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "5178:27:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 2780,
                                  "nodeType": "IfStatement",
                                  "src": "5174:90:18",
                                  "trueBody": {
                                    "id": 2779,
                                    "nodeType": "Block",
                                    "src": "5207:57:18",
                                    "statements": [
                                      {
                                        "expression": {
                                          "id": 2777,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "id": 2773,
                                            "name": "_tickCumulative2",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2746,
                                            "src": "5217:16:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int56",
                                              "typeString": "int56"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "baseExpression": {
                                              "id": 2774,
                                              "name": "_uniswapResponse",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2758,
                                              "src": "5236:16:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                                                "typeString": "int56[] memory"
                                              }
                                            },
                                            "id": 2776,
                                            "indexExpression": {
                                              "hexValue": "31",
                                              "id": 2775,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "5253:1:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "5236:19:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int56",
                                              "typeString": "int56"
                                            }
                                          },
                                          "src": "5217:38:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int56",
                                            "typeString": "int56"
                                          }
                                        },
                                        "id": 2778,
                                        "nodeType": "ExpressionStatement",
                                        "src": "5217:38:18"
                                      }
                                    ]
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 2783,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2781,
                                      "name": "_success",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2748,
                                      "src": "5271:8:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "hexValue": "74727565",
                                      "id": 2782,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5282:4:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    "src": "5271:15:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 2784,
                                  "nodeType": "ExpressionStatement",
                                  "src": "5271:15:18"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 2786,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 2762,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 2758,
                                  "mutability": "mutable",
                                  "name": "_uniswapResponse",
                                  "nameLocation": "5084:16:18",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2786,
                                  "src": "5069:31:18",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                                    "typeString": "int56[]"
                                  },
                                  "typeName": {
                                    "baseType": {
                                      "id": 2756,
                                      "name": "int56",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5069:5:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      }
                                    },
                                    "id": 2757,
                                    "nodeType": "ArrayTypeName",
                                    "src": "5069:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_int56_$dyn_storage_ptr",
                                      "typeString": "int56[]"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 2761,
                                  "mutability": "mutable",
                                  "name": "",
                                  "nameLocation": "-1:-1:-1",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2786,
                                  "src": "5102:16:18",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                                    "typeString": "uint160[]"
                                  },
                                  "typeName": {
                                    "baseType": {
                                      "id": 2759,
                                      "name": "uint160",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5102:7:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "id": 2760,
                                    "nodeType": "ArrayTypeName",
                                    "src": "5102:9:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                                      "typeString": "uint160[]"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "5068:51:18"
                            },
                            "src": "5060:233:18"
                          },
                          {
                            "block": {
                              "id": 2790,
                              "nodeType": "Block",
                              "src": "5315:2:18",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 2791,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 2789,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 2788,
                                  "mutability": "mutable",
                                  "name": "",
                                  "nameLocation": "-1:-1:-1",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2791,
                                  "src": "5301:12:18",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 2787,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5301:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "5300:14:18"
                            },
                            "src": "5294:23:18"
                          }
                        ],
                        "externalCall": {
                          "arguments": [
                            {
                              "id": 2754,
                              "name": "_secondsAgo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2740,
                              "src": "5047:11:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                "typeString": "uint32[] memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2751,
                                  "name": "_pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2737,
                                  "src": "5032:5:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2750,
                                "name": "IUniswapV3Pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2012,
                                "src": "5017:14:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                  "typeString": "type(contract IUniswapV3Pool)"
                                }
                              },
                              "id": 2752,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5017:21:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                "typeString": "contract IUniswapV3Pool"
                              }
                            },
                            "id": 2753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "observe",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2124,
                            "src": "5017:29:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_array$_t_int56_$dyn_memory_ptr_$_t_array$_t_uint160_$dyn_memory_ptr_$",
                              "typeString": "function (uint32[] memory) view external returns (int56[] memory,uint160[] memory)"
                            }
                          },
                          "id": 2755,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5017:42:18",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_array$_t_int56_$dyn_memory_ptr_$_t_array$_t_uint160_$dyn_memory_ptr_$",
                            "typeString": "tuple(int56[] memory,uint160[] memory)"
                          }
                        },
                        "id": 2792,
                        "nodeType": "TryStatement",
                        "src": "5013:304:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2735,
                    "nodeType": "StructuredDocumentation",
                    "src": "4779:29:18",
                    "text": "@inheritdoc IKeep3rHelper"
                  },
                  "functionSelector": "dc686d91",
                  "id": 2794,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "observe",
                  "nameLocation": "4820:7:18",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2742,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4896:8:18"
                  },
                  "parameters": {
                    "id": 2741,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2737,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "4836:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2794,
                        "src": "4828:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2736,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4828:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2740,
                        "mutability": "mutable",
                        "name": "_secondsAgo",
                        "nameLocation": "4859:11:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2794,
                        "src": "4843:27:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2738,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "4843:6:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 2739,
                          "nodeType": "ArrayTypeName",
                          "src": "4843:8:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4827:44:18"
                  },
                  "returnParameters": {
                    "id": 2749,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2744,
                        "mutability": "mutable",
                        "name": "_tickCumulative1",
                        "nameLocation": "4931:16:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2794,
                        "src": "4925:22:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 2743,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "4925:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2746,
                        "mutability": "mutable",
                        "name": "_tickCumulative2",
                        "nameLocation": "4961:16:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2794,
                        "src": "4955:22:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 2745,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "4955:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2748,
                        "mutability": "mutable",
                        "name": "_success",
                        "nameLocation": "4990:8:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2794,
                        "src": "4985:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2747,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4985:4:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4917:87:18"
                  },
                  "scope": 2956,
                  "src": "4811:510:18",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11500
                  ],
                  "body": {
                    "id": 2823,
                    "nodeType": "Block",
                    "src": "5527:107:18",
                    "statements": [
                      {
                        "expression": {
                          "id": 2811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2807,
                            "name": "_oneEthQuote",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2803,
                            "src": "5533:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "31",
                                "id": 2809,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5554:7:18",
                                "subdenomination": "ether",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                  "typeString": "int_const 1000000000000000000"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                  "typeString": "int_const 1000000000000000000"
                                }
                              ],
                              "id": 2808,
                              "name": "quote",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2563,
                              "src": "5548:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 2810,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5548:14:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5533:29:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2812,
                        "nodeType": "ExpressionStatement",
                        "src": "5533:29:18"
                      },
                      {
                        "expression": {
                          "id": 2817,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2813,
                            "name": "_boost",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2801,
                            "src": "5568:6:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 2815,
                                "name": "_bonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2797,
                                "src": "5595:6:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2814,
                              "name": "getRewardBoostFor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2671,
                              "src": "5577:17:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 2816,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5577:25:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5568:34:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2818,
                        "nodeType": "ExpressionStatement",
                        "src": "5568:34:18"
                      },
                      {
                        "expression": {
                          "id": 2821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2819,
                            "name": "_extra",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2805,
                            "src": "5608:6:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2820,
                            "name": "workExtraGas",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3001,
                            "src": "5617:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5608:21:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2822,
                        "nodeType": "ExpressionStatement",
                        "src": "5608:21:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2795,
                    "nodeType": "StructuredDocumentation",
                    "src": "5325:29:18",
                    "text": "@inheritdoc IKeep3rHelper"
                  },
                  "functionSelector": "435b21c1",
                  "id": 2824,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPaymentParams",
                  "nameLocation": "5366:16:18",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2799,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "5425:8:18"
                  },
                  "parameters": {
                    "id": 2798,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2797,
                        "mutability": "mutable",
                        "name": "_bonds",
                        "nameLocation": "5391:6:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2824,
                        "src": "5383:14:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2796,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5383:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5382:16:18"
                  },
                  "returnParameters": {
                    "id": 2806,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2801,
                        "mutability": "mutable",
                        "name": "_boost",
                        "nameLocation": "5462:6:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2824,
                        "src": "5454:14:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2800,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5454:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2803,
                        "mutability": "mutable",
                        "name": "_oneEthQuote",
                        "nameLocation": "5484:12:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2824,
                        "src": "5476:20:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2802,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5476:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2805,
                        "mutability": "mutable",
                        "name": "_extra",
                        "nameLocation": "5512:6:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2824,
                        "src": "5504:14:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2804,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5504:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5446:78:18"
                  },
                  "scope": 2956,
                  "src": "5357:277:18",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    11512
                  ],
                  "body": {
                    "id": 2863,
                    "nodeType": "Block",
                    "src": "5833:185:18",
                    "statements": [
                      {
                        "assignments": [
                          2838
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2838,
                            "mutability": "mutable",
                            "name": "sqrtRatioX96",
                            "nameLocation": "5847:12:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2863,
                            "src": "5839:20:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "typeName": {
                              "id": 2837,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "5839:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2851,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "id": 2848,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2843,
                                    "name": "_tickDifference",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2829,
                                    "src": "5896:15:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int56",
                                      "typeString": "int56"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "arguments": [
                                      {
                                        "id": 2846,
                                        "name": "_timeInterval",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2831,
                                        "src": "5921:13:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 2845,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "5914:6:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_int256_$",
                                        "typeString": "type(int256)"
                                      },
                                      "typeName": {
                                        "id": 2844,
                                        "name": "int256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5914:6:18",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 2847,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5914:21:18",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "src": "5896:39:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                ],
                                "id": 2842,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5890:5:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int24_$",
                                  "typeString": "type(int24)"
                                },
                                "typeName": {
                                  "id": 2841,
                                  "name": "int24",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5890:5:18",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5890:46:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            ],
                            "expression": {
                              "id": 2839,
                              "name": "TickMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5188,
                              "src": "5862:8:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_TickMath_$5188_$",
                                "typeString": "type(library TickMath)"
                              }
                            },
                            "id": 2840,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getSqrtRatioAtTick",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5048,
                            "src": "5862:27:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int24_$returns$_t_uint160_$",
                              "typeString": "function (int24) pure returns (uint160)"
                            }
                          },
                          "id": 2850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5862:75:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5839:98:18"
                      },
                      {
                        "expression": {
                          "id": 2861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2852,
                            "name": "_kp3rAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2835,
                            "src": "5943:11:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_rational_79228162514264337593543950336_by_1",
                                  "typeString": "int_const 79228162514264337593543950336"
                                },
                                "id": 2857,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "31",
                                  "id": 2855,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5973:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<<",
                                "rightExpression": {
                                  "hexValue": "3936",
                                  "id": 2856,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5978:2:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_96_by_1",
                                    "typeString": "int_const 96"
                                  },
                                  "value": "96"
                                },
                                "src": "5973:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_79228162514264337593543950336_by_1",
                                  "typeString": "int_const 79228162514264337593543950336"
                                }
                              },
                              {
                                "id": 2858,
                                "name": "_liquidityAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2827,
                                "src": "5982:16:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 2859,
                                "name": "sqrtRatioX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2838,
                                "src": "6000:12:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_79228162514264337593543950336_by_1",
                                  "typeString": "int_const 79228162514264337593543950336"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "expression": {
                                "id": 2853,
                                "name": "FullMath",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4308,
                                "src": "5957:8:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                  "typeString": "type(library FullMath)"
                                }
                              },
                              "id": 2854,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mulDiv",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4263,
                              "src": "5957:15:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 2860,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5957:56:18",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5943:70:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2862,
                        "nodeType": "ExpressionStatement",
                        "src": "5943:70:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2825,
                    "nodeType": "StructuredDocumentation",
                    "src": "5638:29:18",
                    "text": "@inheritdoc IKeep3rHelper"
                  },
                  "functionSelector": "a0d27107",
                  "id": 2864,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getKP3RsAtTick",
                  "nameLocation": "5679:14:18",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2833,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "5794:8:18"
                  },
                  "parameters": {
                    "id": 2832,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2827,
                        "mutability": "mutable",
                        "name": "_liquidityAmount",
                        "nameLocation": "5707:16:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2864,
                        "src": "5699:24:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2826,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5699:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2829,
                        "mutability": "mutable",
                        "name": "_tickDifference",
                        "nameLocation": "5735:15:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2864,
                        "src": "5729:21:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 2828,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "5729:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2831,
                        "mutability": "mutable",
                        "name": "_timeInterval",
                        "nameLocation": "5764:13:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2864,
                        "src": "5756:21:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2830,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5756:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5693:88:18"
                  },
                  "returnParameters": {
                    "id": 2836,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2835,
                        "mutability": "mutable",
                        "name": "_kp3rAmount",
                        "nameLocation": "5820:11:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2864,
                        "src": "5812:19:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2834,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5812:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5811:21:18"
                  },
                  "scope": 2956,
                  "src": "5670:348:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11524
                  ],
                  "body": {
                    "id": 2944,
                    "nodeType": "Block",
                    "src": "6213:462:18",
                    "statements": [
                      {
                        "assignments": [
                          2878
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2878,
                            "mutability": "mutable",
                            "name": "sqrtRatioX96",
                            "nameLocation": "6227:12:18",
                            "nodeType": "VariableDeclaration",
                            "scope": 2944,
                            "src": "6219:20:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "typeName": {
                              "id": 2877,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "6219:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2891,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "id": 2888,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2883,
                                    "name": "_tickDifference",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2869,
                                    "src": "6276:15:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int56",
                                      "typeString": "int56"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "arguments": [
                                      {
                                        "id": 2886,
                                        "name": "_timeInterval",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2871,
                                        "src": "6301:13:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 2885,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "6294:6:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_int256_$",
                                        "typeString": "type(int256)"
                                      },
                                      "typeName": {
                                        "id": 2884,
                                        "name": "int256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6294:6:18",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 2887,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6294:21:18",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "src": "6276:39:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                ],
                                "id": 2882,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6270:5:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int24_$",
                                  "typeString": "type(int24)"
                                },
                                "typeName": {
                                  "id": 2881,
                                  "name": "int24",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6270:5:18",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2889,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6270:46:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            ],
                            "expression": {
                              "id": 2879,
                              "name": "TickMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5188,
                              "src": "6242:8:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_TickMath_$5188_$",
                                "typeString": "type(library TickMath)"
                              }
                            },
                            "id": 2880,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getSqrtRatioAtTick",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5048,
                            "src": "6242:27:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int24_$returns$_t_uint160_$",
                              "typeString": "function (int24) pure returns (uint160)"
                            }
                          },
                          "id": 2890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6242:75:18",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6219:98:18"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 2898,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2892,
                            "name": "sqrtRatioX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2878,
                            "src": "6328:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2895,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "6349:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  },
                                  "typeName": {
                                    "id": 2894,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6349:7:18",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  }
                                ],
                                "id": 2893,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "6344:4:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 2896,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6344:13:18",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint128",
                                "typeString": "type(uint128)"
                              }
                            },
                            "id": 2897,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "6344:17:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "6328:33:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2942,
                          "nodeType": "Block",
                          "src": "6512:159:18",
                          "statements": [
                            {
                              "assignments": [
                                2921
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2921,
                                  "mutability": "mutable",
                                  "name": "ratioX128",
                                  "nameLocation": "6528:9:18",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2942,
                                  "src": "6520:17:18",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 2920,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6520:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2930,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 2924,
                                    "name": "sqrtRatioX96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2878,
                                    "src": "6556:12:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  {
                                    "id": 2925,
                                    "name": "sqrtRatioX96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2878,
                                    "src": "6570:12:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                      "typeString": "int_const 18446744073709551616"
                                    },
                                    "id": 2928,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 2926,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6584:1:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "3634",
                                      "id": 2927,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6589:2:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "6584:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                      "typeString": "int_const 18446744073709551616"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                      "typeString": "int_const 18446744073709551616"
                                    }
                                  ],
                                  "expression": {
                                    "id": 2922,
                                    "name": "FullMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4308,
                                    "src": "6540:8:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                      "typeString": "type(library FullMath)"
                                    }
                                  },
                                  "id": 2923,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mulDiv",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4263,
                                  "src": "6540:15:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 2929,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6540:52:18",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6520:72:18"
                            },
                            {
                              "expression": {
                                "id": 2940,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2931,
                                  "name": "_quoteAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2875,
                                  "src": "6600:12:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                        "typeString": "int_const 3402...(31 digits omitted)...1456"
                                      },
                                      "id": 2936,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "31",
                                        "id": 2934,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6631:1:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<<",
                                      "rightExpression": {
                                        "hexValue": "313238",
                                        "id": 2935,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6636:3:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_128_by_1",
                                          "typeString": "int_const 128"
                                        },
                                        "value": "128"
                                      },
                                      "src": "6631:8:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                        "typeString": "int_const 3402...(31 digits omitted)...1456"
                                      }
                                    },
                                    {
                                      "id": 2937,
                                      "name": "_baseAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2867,
                                      "src": "6641:11:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    {
                                      "id": 2938,
                                      "name": "ratioX128",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2921,
                                      "src": "6654:9:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                        "typeString": "int_const 3402...(31 digits omitted)...1456"
                                      },
                                      {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 2932,
                                      "name": "FullMath",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4308,
                                      "src": "6615:8:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                        "typeString": "type(library FullMath)"
                                      }
                                    },
                                    "id": 2933,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mulDiv",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4263,
                                    "src": "6615:15:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 2939,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6615:49:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6600:64:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2941,
                              "nodeType": "ExpressionStatement",
                              "src": "6600:64:18"
                            }
                          ]
                        },
                        "id": 2943,
                        "nodeType": "IfStatement",
                        "src": "6324:347:18",
                        "trueBody": {
                          "id": 2919,
                          "nodeType": "Block",
                          "src": "6363:143:18",
                          "statements": [
                            {
                              "assignments": [
                                2900
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2900,
                                  "mutability": "mutable",
                                  "name": "ratioX192",
                                  "nameLocation": "6379:9:18",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2919,
                                  "src": "6371:17:18",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 2899,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6371:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2907,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2906,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 2903,
                                      "name": "sqrtRatioX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2878,
                                      "src": "6399:12:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    ],
                                    "id": 2902,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "6391:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 2901,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "6391:7:18",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 2904,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6391:21:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 2905,
                                  "name": "sqrtRatioX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2878,
                                  "src": "6415:12:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "6391:36:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6371:56:18"
                            },
                            {
                              "expression": {
                                "id": 2917,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2908,
                                  "name": "_quoteAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2875,
                                  "src": "6435:12:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                        "typeString": "int_const 6277...(50 digits omitted)...2896"
                                      },
                                      "id": 2913,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "31",
                                        "id": 2911,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6466:1:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<<",
                                      "rightExpression": {
                                        "hexValue": "313932",
                                        "id": 2912,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6471:3:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_192_by_1",
                                          "typeString": "int_const 192"
                                        },
                                        "value": "192"
                                      },
                                      "src": "6466:8:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                        "typeString": "int_const 6277...(50 digits omitted)...2896"
                                      }
                                    },
                                    {
                                      "id": 2914,
                                      "name": "_baseAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2867,
                                      "src": "6476:11:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    {
                                      "id": 2915,
                                      "name": "ratioX192",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2900,
                                      "src": "6489:9:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1",
                                        "typeString": "int_const 6277...(50 digits omitted)...2896"
                                      },
                                      {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 2909,
                                      "name": "FullMath",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4308,
                                      "src": "6450:8:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                        "typeString": "type(library FullMath)"
                                      }
                                    },
                                    "id": 2910,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mulDiv",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4263,
                                    "src": "6450:15:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 2916,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6450:49:18",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6435:64:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2918,
                              "nodeType": "ExpressionStatement",
                              "src": "6435:64:18"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2865,
                    "nodeType": "StructuredDocumentation",
                    "src": "6022:29:18",
                    "text": "@inheritdoc IKeep3rHelper"
                  },
                  "functionSelector": "ab8cedc5",
                  "id": 2945,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getQuoteAtTick",
                  "nameLocation": "6063:14:18",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2873,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "6173:8:18"
                  },
                  "parameters": {
                    "id": 2872,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2867,
                        "mutability": "mutable",
                        "name": "_baseAmount",
                        "nameLocation": "6091:11:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2945,
                        "src": "6083:19:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 2866,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "6083:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2869,
                        "mutability": "mutable",
                        "name": "_tickDifference",
                        "nameLocation": "6114:15:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2945,
                        "src": "6108:21:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 2868,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "6108:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2871,
                        "mutability": "mutable",
                        "name": "_timeInterval",
                        "nameLocation": "6143:13:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2945,
                        "src": "6135:21:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2870,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6135:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6077:83:18"
                  },
                  "returnParameters": {
                    "id": 2876,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2875,
                        "mutability": "mutable",
                        "name": "_quoteAmount",
                        "nameLocation": "6199:12:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2945,
                        "src": "6191:20:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2874,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6191:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6190:22:18"
                  },
                  "scope": 2956,
                  "src": "6054:621:18",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2954,
                    "nodeType": "Block",
                    "src": "6834:31:18",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 2951,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "6847:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 2952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "basefee",
                          "nodeType": "MemberAccess",
                          "src": "6847:13:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2950,
                        "id": 2953,
                        "nodeType": "Return",
                        "src": "6840:20:18"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2946,
                    "nodeType": "StructuredDocumentation",
                    "src": "6679:80:18",
                    "text": "@notice Gets the block's base fee\n @return _baseFee The block's basefee"
                  },
                  "id": 2955,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getBasefee",
                  "nameLocation": "6771:11:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2947,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6782:2:18"
                  },
                  "returnParameters": {
                    "id": 2950,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2949,
                        "mutability": "mutable",
                        "name": "_baseFee",
                        "nameLocation": "6824:8:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 2955,
                        "src": "6816:16:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2948,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6816:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6815:18:18"
                  },
                  "scope": 2956,
                  "src": "6762:103:18",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 2957,
              "src": "2559:4308:18",
              "usedErrors": [
                11413,
                11536,
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "2216:4652:18"
        },
        "id": 18
      },
      "solidity/contracts/Keep3rHelperParameters.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/Keep3rHelperParameters.sol",
          "exportedSymbols": {
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3r": [
              11407
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelperParameters": [
              11672
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IKeep3rV1": [
              12600
            ],
            "IUniswapV3Pool": [
              2012
            ],
            "IUniswapV3PoolActions": [
              2108
            ],
            "IUniswapV3PoolDerivedState": [
              2139
            ],
            "IUniswapV3PoolEvents": [
              2258
            ],
            "IUniswapV3PoolImmutables": [
              2298
            ],
            "IUniswapV3PoolOwnerActions": [
              2324
            ],
            "IUniswapV3PoolState": [
              2432
            ],
            "Keep3rHelperParameters": [
              3207
            ],
            "Math": [
              1319
            ],
            "TickMath": [
              5188
            ]
          },
          "id": 3208,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2958,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".7",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:19"
            },
            {
              "absolutePath": "solidity/contracts/libraries/FullMath.sol",
              "file": "./libraries/FullMath.sol",
              "id": 2959,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3208,
              "sourceUnit": 4309,
              "src": "65:34:19",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/TickMath.sol",
              "file": "./libraries/TickMath.sol",
              "id": 2960,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3208,
              "sourceUnit": 5189,
              "src": "100:34:19",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/IKeep3r.sol",
              "file": "../interfaces/IKeep3r.sol",
              "id": 2961,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3208,
              "sourceUnit": 11408,
              "src": "135:35:19",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/external/IKeep3rV1.sol",
              "file": "../interfaces/external/IKeep3rV1.sol",
              "id": 2962,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3208,
              "sourceUnit": 12601,
              "src": "171:46:19",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/IKeep3rHelperParameters.sol",
              "file": "../interfaces/IKeep3rHelperParameters.sol",
              "id": 2963,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3208,
              "sourceUnit": 11673,
              "src": "218:51:19",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Governable.sol",
              "file": "./peripherals/Governable.sol",
              "id": 2964,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3208,
              "sourceUnit": 5355,
              "src": "270:38:19",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/Keep3rHelperParameters.sol",
              "file": "./Keep3rHelperParameters.sol",
              "id": 2965,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3208,
              "sourceUnit": 3208,
              "src": "309:38:19",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
              "file": "@openzeppelin/contracts/utils/math/Math.sol",
              "id": 2966,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3208,
              "sourceUnit": 1320,
              "src": "349:53:19",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
              "file": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
              "id": 2967,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3208,
              "sourceUnit": 2013,
              "src": "403:66:19",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2968,
                    "name": "IKeep3rHelperParameters",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 11672,
                    "src": "506:23:19"
                  },
                  "id": 2969,
                  "nodeType": "InheritanceSpecifier",
                  "src": "506:23:19"
                },
                {
                  "baseName": {
                    "id": 2970,
                    "name": "Governable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5354,
                    "src": "531:10:19"
                  },
                  "id": 2971,
                  "nodeType": "InheritanceSpecifier",
                  "src": "531:10:19"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 3207,
              "linearizedBaseContracts": [
                3207,
                5354,
                12863,
                11672
              ],
              "name": "Keep3rHelperParameters",
              "nameLocation": "480:22:19",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    11579
                  ],
                  "constant": true,
                  "documentation": {
                    "id": 2972,
                    "nodeType": "StructuredDocumentation",
                    "src": "546:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "05e0b9a0",
                  "id": 2976,
                  "mutability": "constant",
                  "name": "KP3R",
                  "nameLocation": "621:4:19",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 2974,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "612:8:19"
                  },
                  "scope": 3207,
                  "src": "588:82:19",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2973,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "588:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": {
                    "hexValue": "307831634542356342353743344434453262323433333634316239354464333330413333313835413434",
                    "id": 2975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "628:42:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "value": "0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11585
                  ],
                  "constant": true,
                  "documentation": {
                    "id": 2977,
                    "nodeType": "StructuredDocumentation",
                    "src": "675:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "25f09e61",
                  "id": 2981,
                  "mutability": "constant",
                  "name": "BOOST_BASE",
                  "nameLocation": "750:10:19",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 2979,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "741:8:19"
                  },
                  "scope": 3207,
                  "src": "717:52:19",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2978,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "717:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "31305f303030",
                    "id": 2980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "763:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_10000_by_1",
                      "typeString": "int_const 10000"
                    },
                    "value": "10_000"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11599
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 2982,
                    "nodeType": "StructuredDocumentation",
                    "src": "774:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "8561579c",
                  "id": 2986,
                  "mutability": "mutable",
                  "name": "minBoost",
                  "nameLocation": "840:8:19",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 2984,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "831:8:19"
                  },
                  "scope": 3207,
                  "src": "816:41:19",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2983,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "816:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "31315f303030",
                    "id": 2985,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "851:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_11000_by_1",
                      "typeString": "int_const 11000"
                    },
                    "value": "11_000"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11605
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 2987,
                    "nodeType": "StructuredDocumentation",
                    "src": "862:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "37090c2f",
                  "id": 2991,
                  "mutability": "mutable",
                  "name": "maxBoost",
                  "nameLocation": "928:8:19",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 2989,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "919:8:19"
                  },
                  "scope": 3207,
                  "src": "904:41:19",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2988,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "904:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "31325f303030",
                    "id": 2990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "939:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_12000_by_1",
                      "typeString": "int_const 12000"
                    },
                    "value": "12_000"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11611
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 2992,
                    "nodeType": "StructuredDocumentation",
                    "src": "950:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "2742b9e7",
                  "id": 2996,
                  "mutability": "mutable",
                  "name": "targetBond",
                  "nameLocation": "1016:10:19",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 2994,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1007:8:19"
                  },
                  "scope": 3207,
                  "src": "992:46:19",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2993,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "992:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "323030",
                    "id": 2995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1029:9:19",
                    "subdenomination": "ether",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_200000000000000000000_by_1",
                      "typeString": "int_const 200000000000000000000"
                    },
                    "value": "200"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11617
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 2997,
                    "nodeType": "StructuredDocumentation",
                    "src": "1043:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "3facf242",
                  "id": 3001,
                  "mutability": "mutable",
                  "name": "workExtraGas",
                  "nameLocation": "1109:12:19",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 2999,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1100:8:19"
                  },
                  "scope": 3207,
                  "src": "1085:45:19",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2998,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1085:7:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "35305f303030",
                    "id": 3000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1124:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_50000_by_1",
                      "typeString": "int_const 50000"
                    },
                    "value": "50_000"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11623
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3002,
                    "nodeType": "StructuredDocumentation",
                    "src": "1135:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "9aaad679",
                  "id": 3006,
                  "mutability": "mutable",
                  "name": "quoteTwapTime",
                  "nameLocation": "1200:13:19",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3004,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1191:8:19"
                  },
                  "scope": 3207,
                  "src": "1177:49:19",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 3003,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1177:6:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": {
                    "hexValue": "3130",
                    "id": 3005,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1216:10:19",
                    "subdenomination": "minutes",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_600_by_1",
                      "typeString": "int_const 600"
                    },
                    "value": "10"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11629
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3007,
                    "nodeType": "StructuredDocumentation",
                    "src": "1231:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "117cfc1b",
                  "id": 3010,
                  "mutability": "mutable",
                  "name": "keep3rV2",
                  "nameLocation": "1297:8:19",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3009,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1288:8:19"
                  },
                  "scope": 3207,
                  "src": "1273:32:19",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3008,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1273:7:19",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11593
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3011,
                    "nodeType": "StructuredDocumentation",
                    "src": "1310:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "7b40c913",
                  "id": 3015,
                  "mutability": "mutable",
                  "name": "kp3rWethPool",
                  "nameLocation": "1405:12:19",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3014,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1396:8:19"
                  },
                  "scope": 3207,
                  "src": "1352:65:19",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Kp3rWethPool_$11533_storage",
                    "typeString": "struct IKeep3rHelperParameters.Kp3rWethPool"
                  },
                  "typeName": {
                    "id": 3013,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3012,
                      "name": "IKeep3rHelperParameters.Kp3rWethPool",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 11533,
                      "src": "1352:36:19"
                    },
                    "referencedDeclaration": 11533,
                    "src": "1352:36:19",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Kp3rWethPool_$11533_storage_ptr",
                      "typeString": "struct IKeep3rHelperParameters.Kp3rWethPool"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3033,
                    "nodeType": "Block",
                    "src": "1498:97:19",
                    "statements": [
                      {
                        "expression": {
                          "id": 3027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3025,
                            "name": "keep3rV2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3010,
                            "src": "1504:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3026,
                            "name": "_keep3rV2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3017,
                            "src": "1515:9:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1504:20:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3028,
                        "nodeType": "ExpressionStatement",
                        "src": "1504:20:19"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "307831314237613662633032353965643643663944423846343939393838463965436337313637626635",
                              "id": 3030,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1547:42:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "value": "0x11B7a6bc0259ed6Cf9DB8F499988F9eCc7167bf5"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3029,
                            "name": "_setKp3rWethPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3206,
                            "src": "1530:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 3031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1530:60:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3032,
                        "nodeType": "ExpressionStatement",
                        "src": "1530:60:19"
                      }
                    ]
                  },
                  "id": 3034,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 3022,
                          "name": "_governance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3019,
                          "src": "1485:11:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 3023,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 3021,
                        "name": "Governable",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5354,
                        "src": "1474:10:19"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1474:23:19"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3020,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3017,
                        "mutability": "mutable",
                        "name": "_keep3rV2",
                        "nameLocation": "1442:9:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3034,
                        "src": "1434:17:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3016,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1434:7:19",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3019,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "1461:11:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3034,
                        "src": "1453:19:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3018,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1453:7:19",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1433:40:19"
                  },
                  "returnParameters": {
                    "id": 3024,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1498:0:19"
                  },
                  "scope": 3207,
                  "src": "1422:173:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11635
                  ],
                  "body": {
                    "id": 3054,
                    "nodeType": "Block",
                    "src": "1721:123:19",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3044,
                              "name": "_poolAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3037,
                              "src": "1744:12:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3043,
                            "name": "_setKp3rWethPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3206,
                            "src": "1727:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 3045,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1727:30:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3046,
                        "nodeType": "ExpressionStatement",
                        "src": "1727:30:19"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 3048,
                                "name": "kp3rWethPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3015,
                                "src": "1787:12:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Kp3rWethPool_$11533_storage",
                                  "typeString": "struct IKeep3rHelperParameters.Kp3rWethPool storage ref"
                                }
                              },
                              "id": 3049,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "poolAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11530,
                              "src": "1787:24:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 3050,
                                "name": "kp3rWethPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3015,
                                "src": "1813:12:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Kp3rWethPool_$11533_storage",
                                  "typeString": "struct IKeep3rHelperParameters.Kp3rWethPool storage ref"
                                }
                              },
                              "id": 3051,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "isKP3RToken0",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11532,
                              "src": "1813:25:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 3047,
                            "name": "Kp3rWethPoolChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11543,
                            "src": "1768:18:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,bool)"
                            }
                          },
                          "id": 3052,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1768:71:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3053,
                        "nodeType": "EmitStatement",
                        "src": "1763:76:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3035,
                    "nodeType": "StructuredDocumentation",
                    "src": "1599:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "160e1e31",
                  "id": 3055,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3041,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 3040,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "1706:14:19"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1706:14:19"
                    }
                  ],
                  "name": "setKp3rWethPool",
                  "nameLocation": "1650:15:19",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3039,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1697:8:19"
                  },
                  "parameters": {
                    "id": 3038,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3037,
                        "mutability": "mutable",
                        "name": "_poolAddress",
                        "nameLocation": "1674:12:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3055,
                        "src": "1666:20:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3036,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1666:7:19",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1665:22:19"
                  },
                  "returnParameters": {
                    "id": 3042,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1721:0:19"
                  },
                  "scope": 3207,
                  "src": "1641:203:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    11641
                  ],
                  "body": {
                    "id": 3072,
                    "nodeType": "Block",
                    "src": "1963:66:19",
                    "statements": [
                      {
                        "expression": {
                          "id": 3066,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3064,
                            "name": "minBoost",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2986,
                            "src": "1969:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3065,
                            "name": "_minBoost",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3058,
                            "src": "1980:9:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1969:20:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3067,
                        "nodeType": "ExpressionStatement",
                        "src": "1969:20:19"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3069,
                              "name": "minBoost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2986,
                              "src": "2015:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3068,
                            "name": "MinBoostChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11548,
                            "src": "2000:14:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 3070,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2000:24:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3071,
                        "nodeType": "EmitStatement",
                        "src": "1995:29:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3056,
                    "nodeType": "StructuredDocumentation",
                    "src": "1848:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "0c525835",
                  "id": 3073,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3062,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 3061,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "1948:14:19"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1948:14:19"
                    }
                  ],
                  "name": "setMinBoost",
                  "nameLocation": "1899:11:19",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3060,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1939:8:19"
                  },
                  "parameters": {
                    "id": 3059,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3058,
                        "mutability": "mutable",
                        "name": "_minBoost",
                        "nameLocation": "1919:9:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3073,
                        "src": "1911:17:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3057,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1911:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1910:19:19"
                  },
                  "returnParameters": {
                    "id": 3063,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1963:0:19"
                  },
                  "scope": 3207,
                  "src": "1890:139:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    11647
                  ],
                  "body": {
                    "id": 3090,
                    "nodeType": "Block",
                    "src": "2148:66:19",
                    "statements": [
                      {
                        "expression": {
                          "id": 3084,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3082,
                            "name": "maxBoost",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2991,
                            "src": "2154:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3083,
                            "name": "_maxBoost",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3076,
                            "src": "2165:9:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2154:20:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3085,
                        "nodeType": "ExpressionStatement",
                        "src": "2154:20:19"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3087,
                              "name": "maxBoost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2991,
                              "src": "2200:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3086,
                            "name": "MaxBoostChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11553,
                            "src": "2185:14:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 3088,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2185:24:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3089,
                        "nodeType": "EmitStatement",
                        "src": "2180:29:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3074,
                    "nodeType": "StructuredDocumentation",
                    "src": "2033:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "b2e0df96",
                  "id": 3091,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3080,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 3079,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "2133:14:19"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2133:14:19"
                    }
                  ],
                  "name": "setMaxBoost",
                  "nameLocation": "2084:11:19",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3078,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2124:8:19"
                  },
                  "parameters": {
                    "id": 3077,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3076,
                        "mutability": "mutable",
                        "name": "_maxBoost",
                        "nameLocation": "2104:9:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3091,
                        "src": "2096:17:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3075,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2096:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2095:19:19"
                  },
                  "returnParameters": {
                    "id": 3081,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2148:0:19"
                  },
                  "scope": 3207,
                  "src": "2075:139:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    11653
                  ],
                  "body": {
                    "id": 3108,
                    "nodeType": "Block",
                    "src": "2337:74:19",
                    "statements": [
                      {
                        "expression": {
                          "id": 3102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3100,
                            "name": "targetBond",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2996,
                            "src": "2343:10:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3101,
                            "name": "_targetBond",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3094,
                            "src": "2356:11:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2343:24:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3103,
                        "nodeType": "ExpressionStatement",
                        "src": "2343:24:19"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3105,
                              "name": "targetBond",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2996,
                              "src": "2395:10:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3104,
                            "name": "TargetBondChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11558,
                            "src": "2378:16:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 3106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2378:28:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3107,
                        "nodeType": "EmitStatement",
                        "src": "2373:33:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3092,
                    "nodeType": "StructuredDocumentation",
                    "src": "2218:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "ab5dce00",
                  "id": 3109,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3098,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 3097,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "2322:14:19"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2322:14:19"
                    }
                  ],
                  "name": "setTargetBond",
                  "nameLocation": "2269:13:19",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3096,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2313:8:19"
                  },
                  "parameters": {
                    "id": 3095,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3094,
                        "mutability": "mutable",
                        "name": "_targetBond",
                        "nameLocation": "2291:11:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3109,
                        "src": "2283:19:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3093,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2283:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2282:21:19"
                  },
                  "returnParameters": {
                    "id": 3099,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2337:0:19"
                  },
                  "scope": 3207,
                  "src": "2260:151:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    11659
                  ],
                  "body": {
                    "id": 3126,
                    "nodeType": "Block",
                    "src": "2530:66:19",
                    "statements": [
                      {
                        "expression": {
                          "id": 3120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3118,
                            "name": "keep3rV2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3010,
                            "src": "2536:8:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3119,
                            "name": "_keep3rV2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3112,
                            "src": "2547:9:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2536:20:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3121,
                        "nodeType": "ExpressionStatement",
                        "src": "2536:20:19"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3123,
                              "name": "keep3rV2",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3010,
                              "src": "2582:8:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3122,
                            "name": "Keep3rV2Change",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11563,
                            "src": "2567:14:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 3124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2567:24:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3125,
                        "nodeType": "EmitStatement",
                        "src": "2562:29:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3110,
                    "nodeType": "StructuredDocumentation",
                    "src": "2415:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "3cc7ab30",
                  "id": 3127,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3116,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 3115,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "2515:14:19"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2515:14:19"
                    }
                  ],
                  "name": "setKeep3rV2",
                  "nameLocation": "2466:11:19",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3114,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2506:8:19"
                  },
                  "parameters": {
                    "id": 3113,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3112,
                        "mutability": "mutable",
                        "name": "_keep3rV2",
                        "nameLocation": "2486:9:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3127,
                        "src": "2478:17:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3111,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2478:7:19",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2477:19:19"
                  },
                  "returnParameters": {
                    "id": 3117,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2530:0:19"
                  },
                  "scope": 3207,
                  "src": "2457:139:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    11665
                  ],
                  "body": {
                    "id": 3144,
                    "nodeType": "Block",
                    "src": "2723:82:19",
                    "statements": [
                      {
                        "expression": {
                          "id": 3138,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3136,
                            "name": "workExtraGas",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3001,
                            "src": "2729:12:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3137,
                            "name": "_workExtraGas",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3130,
                            "src": "2744:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2729:28:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3139,
                        "nodeType": "ExpressionStatement",
                        "src": "2729:28:19"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3141,
                              "name": "workExtraGas",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3001,
                              "src": "2787:12:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3140,
                            "name": "WorkExtraGasChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11568,
                            "src": "2768:18:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 3142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2768:32:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3143,
                        "nodeType": "EmitStatement",
                        "src": "2763:37:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3128,
                    "nodeType": "StructuredDocumentation",
                    "src": "2600:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "289adb44",
                  "id": 3145,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3134,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 3133,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "2708:14:19"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2708:14:19"
                    }
                  ],
                  "name": "setWorkExtraGas",
                  "nameLocation": "2651:15:19",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3132,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2699:8:19"
                  },
                  "parameters": {
                    "id": 3131,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3130,
                        "mutability": "mutable",
                        "name": "_workExtraGas",
                        "nameLocation": "2675:13:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3145,
                        "src": "2667:21:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3129,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2667:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2666:23:19"
                  },
                  "returnParameters": {
                    "id": 3135,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2723:0:19"
                  },
                  "scope": 3207,
                  "src": "2642:163:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    11671
                  ],
                  "body": {
                    "id": 3162,
                    "nodeType": "Block",
                    "src": "2933:86:19",
                    "statements": [
                      {
                        "expression": {
                          "id": 3156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3154,
                            "name": "quoteTwapTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3006,
                            "src": "2939:13:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3155,
                            "name": "_quoteTwapTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3148,
                            "src": "2955:14:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "2939:30:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 3157,
                        "nodeType": "ExpressionStatement",
                        "src": "2939:30:19"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3159,
                              "name": "quoteTwapTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3006,
                              "src": "3000:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 3158,
                            "name": "QuoteTwapTimeChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11573,
                            "src": "2980:19:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$returns$__$",
                              "typeString": "function (uint32)"
                            }
                          },
                          "id": 3160,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2980:34:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3161,
                        "nodeType": "EmitStatement",
                        "src": "2975:39:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3146,
                    "nodeType": "StructuredDocumentation",
                    "src": "2809:39:19",
                    "text": "@inheritdoc IKeep3rHelperParameters"
                  },
                  "functionSelector": "b93f5af0",
                  "id": 3163,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3152,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 3151,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "2918:14:19"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2918:14:19"
                    }
                  ],
                  "name": "setQuoteTwapTime",
                  "nameLocation": "2860:16:19",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3150,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2909:8:19"
                  },
                  "parameters": {
                    "id": 3149,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3148,
                        "mutability": "mutable",
                        "name": "_quoteTwapTime",
                        "nameLocation": "2884:14:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3163,
                        "src": "2877:21:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 3147,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2877:6:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2876:23:19"
                  },
                  "returnParameters": {
                    "id": 3153,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2933:0:19"
                  },
                  "scope": 3207,
                  "src": "2851:168:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 3205,
                    "nodeType": "Block",
                    "src": "3174:281:19",
                    "statements": [
                      {
                        "assignments": [
                          3170
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3170,
                            "mutability": "mutable",
                            "name": "_isKP3RToken0",
                            "nameLocation": "3185:13:19",
                            "nodeType": "VariableDeclaration",
                            "scope": 3205,
                            "src": "3180:18:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3169,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "3180:4:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3178,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3172,
                                    "name": "_poolAddress",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3166,
                                    "src": "3216:12:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3171,
                                  "name": "IUniswapV3Pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2012,
                                  "src": "3201:14:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                    "typeString": "type(contract IUniswapV3Pool)"
                                  }
                                },
                                "id": 3173,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3201:28:19",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                  "typeString": "contract IUniswapV3Pool"
                                }
                              },
                              "id": 3174,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "token0",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2273,
                              "src": "3201:35:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 3175,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3201:37:19",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 3176,
                            "name": "KP3R",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2976,
                            "src": "3242:4:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3201:45:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3180:66:19"
                      },
                      {
                        "assignments": [
                          3180
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3180,
                            "mutability": "mutable",
                            "name": "_isKP3RToken1",
                            "nameLocation": "3257:13:19",
                            "nodeType": "VariableDeclaration",
                            "scope": 3205,
                            "src": "3252:18:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3179,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "3252:4:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3188,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3182,
                                    "name": "_poolAddress",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3166,
                                    "src": "3288:12:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3181,
                                  "name": "IUniswapV3Pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2012,
                                  "src": "3273:14:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                    "typeString": "type(contract IUniswapV3Pool)"
                                  }
                                },
                                "id": 3183,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3273:28:19",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                  "typeString": "contract IUniswapV3Pool"
                                }
                              },
                              "id": 3184,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "token1",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2279,
                              "src": "3273:35:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 3185,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3273:37:19",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 3186,
                            "name": "KP3R",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2976,
                            "src": "3314:4:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3273:45:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3252:66:19"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3190,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "3329:14:19",
                            "subExpression": {
                              "id": 3189,
                              "name": "_isKP3RToken0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3170,
                              "src": "3330:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "id": 3192,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "3347:14:19",
                            "subExpression": {
                              "id": 3191,
                              "name": "_isKP3RToken1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3180,
                              "src": "3348:13:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3329:32:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3197,
                        "nodeType": "IfStatement",
                        "src": "3325:62:19",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3194,
                              "name": "InvalidKp3rPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11536,
                              "src": "3370:15:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3195,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3370:17:19",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3196,
                          "nodeType": "RevertStatement",
                          "src": "3363:24:19"
                        }
                      },
                      {
                        "expression": {
                          "id": 3203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3198,
                            "name": "kp3rWethPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3015,
                            "src": "3394:12:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Kp3rWethPool_$11533_storage",
                              "typeString": "struct IKeep3rHelperParameters.Kp3rWethPool storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3200,
                                "name": "_poolAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3166,
                                "src": "3422:12:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3201,
                                "name": "_isKP3RToken0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3170,
                                "src": "3436:13:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "id": 3199,
                              "name": "Kp3rWethPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11533,
                              "src": "3409:12:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Kp3rWethPool_$11533_storage_ptr_$",
                                "typeString": "type(struct IKeep3rHelperParameters.Kp3rWethPool storage pointer)"
                              }
                            },
                            "id": 3202,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3409:41:19",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Kp3rWethPool_$11533_memory_ptr",
                              "typeString": "struct IKeep3rHelperParameters.Kp3rWethPool memory"
                            }
                          },
                          "src": "3394:56:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Kp3rWethPool_$11533_storage",
                            "typeString": "struct IKeep3rHelperParameters.Kp3rWethPool storage ref"
                          }
                        },
                        "id": 3204,
                        "nodeType": "ExpressionStatement",
                        "src": "3394:56:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3164,
                    "nodeType": "StructuredDocumentation",
                    "src": "3023:91:19",
                    "text": "@notice Sets KP3R-WETH pool\n @param _poolAddress The address of the KP3R-WETH pool"
                  },
                  "id": 3206,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setKp3rWethPool",
                  "nameLocation": "3126:16:19",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3167,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3166,
                        "mutability": "mutable",
                        "name": "_poolAddress",
                        "nameLocation": "3151:12:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3206,
                        "src": "3143:20:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3165,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3143:7:19",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3142:22:19"
                  },
                  "returnParameters": {
                    "id": 3168,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3174:0:19"
                  },
                  "scope": 3207,
                  "src": "3117:338:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 3208,
              "src": "471:2986:19",
              "usedErrors": [
                11536,
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "32:3426:19"
        },
        "id": 19
      },
      "solidity/contracts/UniV3PairManager.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/UniV3PairManager.sol",
          "exportedSymbols": {
            "Context": [
              1231
            ],
            "ERC20": [
              585
            ],
            "FixedPoint96": [
              4130
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IPairManager": [
              11703
            ],
            "IUniV3PairManager": [
              11866
            ],
            "IUniswapV3Pool": [
              2012
            ],
            "IUniswapV3PoolActions": [
              2108
            ],
            "IUniswapV3PoolDerivedState": [
              2139
            ],
            "IUniswapV3PoolEvents": [
              2258
            ],
            "IUniswapV3PoolImmutables": [
              2298
            ],
            "IUniswapV3PoolOwnerActions": [
              2324
            ],
            "IUniswapV3PoolState": [
              2432
            ],
            "IWeth9": [
              12787
            ],
            "LiquidityAmounts": [
              4640
            ],
            "PoolAddress": [
              4650
            ],
            "TickMath": [
              5188
            ],
            "UniV3PairManager": [
              4051
            ]
          },
          "id": 4052,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3209,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "2216:31:20"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "id": 3210,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4052,
              "sourceUnit": 586,
              "src": "2249:55:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
              "file": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
              "id": 3211,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4052,
              "sourceUnit": 2013,
              "src": "2305:66:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/LiquidityAmounts.sol",
              "file": "./libraries/LiquidityAmounts.sol",
              "id": 3212,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4052,
              "sourceUnit": 4641,
              "src": "2373:42:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/PoolAddress.sol",
              "file": "./libraries/PoolAddress.sol",
              "id": 3213,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4052,
              "sourceUnit": 4651,
              "src": "2416:37:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/FixedPoint96.sol",
              "file": "./libraries/FixedPoint96.sol",
              "id": 3214,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4052,
              "sourceUnit": 4131,
              "src": "2454:38:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/FullMath.sol",
              "file": "./libraries/FullMath.sol",
              "id": 3215,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4052,
              "sourceUnit": 4309,
              "src": "2493:34:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/TickMath.sol",
              "file": "./libraries/TickMath.sol",
              "id": 3216,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4052,
              "sourceUnit": 5189,
              "src": "2528:34:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/external/IWeth9.sol",
              "file": "../interfaces/external/IWeth9.sol",
              "id": 3217,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4052,
              "sourceUnit": 12788,
              "src": "2564:43:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/IUniV3PairManager.sol",
              "file": "../interfaces/IUniV3PairManager.sol",
              "id": 3218,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4052,
              "sourceUnit": 11867,
              "src": "2608:45:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Governable.sol",
              "file": "./peripherals/Governable.sol",
              "id": 3219,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4052,
              "sourceUnit": 5355,
              "src": "2655:38:20",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 3220,
                    "name": "IUniV3PairManager",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 11866,
                    "src": "2724:17:20"
                  },
                  "id": 3221,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2724:17:20"
                },
                {
                  "baseName": {
                    "id": 3222,
                    "name": "Governable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5354,
                    "src": "2743:10:20"
                  },
                  "id": 3223,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2743:10:20"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 4051,
              "linearizedBaseContracts": [
                4051,
                5354,
                11866,
                11703,
                688,
                663,
                12863
              ],
              "name": "UniV3PairManager",
              "nameLocation": "2704:16:20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    675
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3224,
                    "nodeType": "StructuredDocumentation",
                    "src": "2758:30:20",
                    "text": "@inheritdoc IERC20Metadata"
                  },
                  "functionSelector": "06fdde03",
                  "id": 3227,
                  "mutability": "mutable",
                  "name": "name",
                  "nameLocation": "2814:4:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3226,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2805:8:20"
                  },
                  "scope": 4051,
                  "src": "2791:27:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3225,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2791:6:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    681
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3228,
                    "nodeType": "StructuredDocumentation",
                    "src": "2823:30:20",
                    "text": "@inheritdoc IERC20Metadata"
                  },
                  "functionSelector": "95d89b41",
                  "id": 3231,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nameLocation": "2879:6:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3230,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2870:8:20"
                  },
                  "scope": 4051,
                  "src": "2856:29:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3229,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2856:6:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    594
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3232,
                    "nodeType": "StructuredDocumentation",
                    "src": "2890:22:20",
                    "text": "@inheritdoc IERC20"
                  },
                  "functionSelector": "18160ddd",
                  "id": 3235,
                  "mutability": "mutable",
                  "name": "totalSupply",
                  "nameLocation": "2939:11:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3234,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2930:8:20"
                  },
                  "scope": 4051,
                  "src": "2915:35:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3233,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2915:7:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11684
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3236,
                    "nodeType": "StructuredDocumentation",
                    "src": "2955:28:20",
                    "text": "@inheritdoc IPairManager"
                  },
                  "functionSelector": "c45a0155",
                  "id": 3239,
                  "mutability": "immutable",
                  "name": "factory",
                  "nameLocation": "3020:7:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3238,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3011:8:20"
                  },
                  "scope": 4051,
                  "src": "2986:41:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3237,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2986:7:20",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11696
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3240,
                    "nodeType": "StructuredDocumentation",
                    "src": "3032:28:20",
                    "text": "@inheritdoc IPairManager"
                  },
                  "functionSelector": "0dfe1681",
                  "id": 3243,
                  "mutability": "immutable",
                  "name": "token0",
                  "nameLocation": "3097:6:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3242,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3088:8:20"
                  },
                  "scope": 4051,
                  "src": "3063:40:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3241,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3063:7:20",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11702
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3244,
                    "nodeType": "StructuredDocumentation",
                    "src": "3108:28:20",
                    "text": "@inheritdoc IPairManager"
                  },
                  "functionSelector": "d21220a7",
                  "id": 3247,
                  "mutability": "immutable",
                  "name": "token1",
                  "nameLocation": "3173:6:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3246,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3164:8:20"
                  },
                  "scope": 4051,
                  "src": "3139:40:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3245,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3139:7:20",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11690
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3248,
                    "nodeType": "StructuredDocumentation",
                    "src": "3184:28:20",
                    "text": "@inheritdoc IPairManager"
                  },
                  "functionSelector": "16f0115b",
                  "id": 3251,
                  "mutability": "immutable",
                  "name": "pool",
                  "nameLocation": "3249:4:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3250,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3240:8:20"
                  },
                  "scope": 4051,
                  "src": "3215:38:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3249,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3215:7:20",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11762
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3252,
                    "nodeType": "StructuredDocumentation",
                    "src": "3258:33:20",
                    "text": "@inheritdoc IUniV3PairManager"
                  },
                  "functionSelector": "ddca3f43",
                  "id": 3255,
                  "mutability": "immutable",
                  "name": "fee",
                  "nameLocation": "3327:3:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3254,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3318:8:20"
                  },
                  "scope": 4051,
                  "src": "3294:36:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 3253,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "3294:6:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11786
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3256,
                    "nodeType": "StructuredDocumentation",
                    "src": "3335:33:20",
                    "text": "@inheritdoc IUniV3PairManager"
                  },
                  "functionSelector": "2ea28f5b",
                  "id": 3259,
                  "mutability": "immutable",
                  "name": "sqrtRatioAX96",
                  "nameLocation": "3405:13:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3258,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3396:8:20"
                  },
                  "scope": 4051,
                  "src": "3371:47:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3257,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "3371:7:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11792
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3260,
                    "nodeType": "StructuredDocumentation",
                    "src": "3423:33:20",
                    "text": "@inheritdoc IUniV3PairManager"
                  },
                  "functionSelector": "c6275261",
                  "id": 3263,
                  "mutability": "immutable",
                  "name": "sqrtRatioBX96",
                  "nameLocation": "3493:13:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3262,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3484:8:20"
                  },
                  "scope": 4051,
                  "src": "3459:47:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 3261,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "3459:7:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11774
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3264,
                    "nodeType": "StructuredDocumentation",
                    "src": "3511:33:20",
                    "text": "@inheritdoc IUniV3PairManager"
                  },
                  "functionSelector": "59c4f905",
                  "id": 3267,
                  "mutability": "immutable",
                  "name": "tickLower",
                  "nameLocation": "3579:9:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3266,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3570:8:20"
                  },
                  "scope": 4051,
                  "src": "3547:41:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 3265,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "3547:5:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11768
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3268,
                    "nodeType": "StructuredDocumentation",
                    "src": "3593:33:20",
                    "text": "@inheritdoc IUniV3PairManager"
                  },
                  "functionSelector": "55b812a8",
                  "id": 3271,
                  "mutability": "immutable",
                  "name": "tickUpper",
                  "nameLocation": "3661:9:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3270,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3652:8:20"
                  },
                  "scope": 4051,
                  "src": "3629:41:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 3269,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "3629:5:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11780
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3272,
                    "nodeType": "StructuredDocumentation",
                    "src": "3675:33:20",
                    "text": "@inheritdoc IUniV3PairManager"
                  },
                  "functionSelector": "d0c93a7c",
                  "id": 3275,
                  "mutability": "immutable",
                  "name": "tickSpacing",
                  "nameLocation": "3743:11:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3274,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3734:8:20"
                  },
                  "scope": 4051,
                  "src": "3711:43:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 3273,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "3711:5:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 3276,
                    "nodeType": "StructuredDocumentation",
                    "src": "3759:194:20",
                    "text": "@notice Uniswap's maximum tick\n @dev Due to tick spacing, pools with different fees may have differences between _MAX_TICK and tickUpper. Use tickUpper to find the max tick of the pool."
                  },
                  "id": 3279,
                  "mutability": "constant",
                  "name": "_MAX_TICK",
                  "nameLocation": "3979:9:20",
                  "nodeType": "VariableDeclaration",
                  "scope": 4051,
                  "src": "3956:41:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 3277,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "3956:5:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "value": {
                    "hexValue": "383837323732",
                    "id": 3278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3991:6:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_887272_by_1",
                      "typeString": "int_const 887272"
                    },
                    "value": "887272"
                  },
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    687
                  ],
                  "constant": true,
                  "documentation": {
                    "id": 3280,
                    "nodeType": "StructuredDocumentation",
                    "src": "4002:30:20",
                    "text": "@inheritdoc IERC20Metadata"
                  },
                  "functionSelector": "313ce567",
                  "id": 3284,
                  "mutability": "constant",
                  "name": "decimals",
                  "nameLocation": "4117:8:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3282,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4108:8:20"
                  },
                  "scope": 4051,
                  "src": "4086:44:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3281,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4086:5:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": {
                    "hexValue": "3138",
                    "id": 3283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4128:2:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_18_by_1",
                      "typeString": "int_const 18"
                    },
                    "value": "18"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    622
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3285,
                    "nodeType": "StructuredDocumentation",
                    "src": "4135:22:20",
                    "text": "@inheritdoc IERC20"
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 3292,
                  "mutability": "mutable",
                  "name": "allowance",
                  "nameLocation": "4224:9:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3291,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4215:8:20"
                  },
                  "scope": 4051,
                  "src": "4160:73:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 3290,
                    "keyType": {
                      "id": 3286,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "4168:7:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "4160:47:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 3289,
                      "keyType": {
                        "id": 3287,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4187:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "4179:27:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 3288,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4198:7:20",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    602
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 3293,
                    "nodeType": "StructuredDocumentation",
                    "src": "4238:22:20",
                    "text": "@inheritdoc IERC20"
                  },
                  "functionSelector": "70a08231",
                  "id": 3298,
                  "mutability": "mutable",
                  "name": "balanceOf",
                  "nameLocation": "4307:9:20",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3297,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4298:8:20"
                  },
                  "scope": 4051,
                  "src": "4263:53:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 3296,
                    "keyType": {
                      "id": 3294,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "4271:7:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "4263:27:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 3295,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "4282:7:20",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 3299,
                    "nodeType": "StructuredDocumentation",
                    "src": "4321:76:20",
                    "text": "@notice Struct that contains token0, token1, and fee of the Uniswap pool"
                  },
                  "id": 3302,
                  "mutability": "mutable",
                  "name": "_poolKey",
                  "nameLocation": "4428:8:20",
                  "nodeType": "VariableDeclaration",
                  "scope": 4051,
                  "src": "4400:36:20",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_PoolKey_$4649_storage",
                    "typeString": "struct PoolAddress.PoolKey"
                  },
                  "typeName": {
                    "id": 3301,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3300,
                      "name": "PoolAddress.PoolKey",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4649,
                      "src": "4400:19:20"
                    },
                    "referencedDeclaration": 4649,
                    "src": "4400:19:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_PoolKey_$4649_storage_ptr",
                      "typeString": "struct PoolAddress.PoolKey"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3456,
                    "nodeType": "Block",
                    "src": "4513:929:20",
                    "statements": [
                      {
                        "assignments": [
                          3313
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3313,
                            "mutability": "mutable",
                            "name": "_fee",
                            "nameLocation": "4526:4:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 3456,
                            "src": "4519:11:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            },
                            "typeName": {
                              "id": 3312,
                              "name": "uint24",
                              "nodeType": "ElementaryTypeName",
                              "src": "4519:6:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint24",
                                "typeString": "uint24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3319,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3315,
                                  "name": "_pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3304,
                                  "src": "4548:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3314,
                                "name": "IUniswapV3Pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2012,
                                "src": "4533:14:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                  "typeString": "type(contract IUniswapV3Pool)"
                                }
                              },
                              "id": 3316,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4533:21:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                "typeString": "contract IUniswapV3Pool"
                              }
                            },
                            "id": 3317,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fee",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2285,
                            "src": "4533:25:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint24_$",
                              "typeString": "function () view external returns (uint24)"
                            }
                          },
                          "id": 3318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4533:27:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4519:41:20"
                      },
                      {
                        "assignments": [
                          3321
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3321,
                            "mutability": "mutable",
                            "name": "_token0",
                            "nameLocation": "4574:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 3456,
                            "src": "4566:15:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 3320,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4566:7:20",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3327,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3323,
                                  "name": "_pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3304,
                                  "src": "4599:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3322,
                                "name": "IUniswapV3Pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2012,
                                "src": "4584:14:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                  "typeString": "type(contract IUniswapV3Pool)"
                                }
                              },
                              "id": 3324,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4584:21:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                "typeString": "contract IUniswapV3Pool"
                              }
                            },
                            "id": 3325,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "token0",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2273,
                            "src": "4584:28:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 3326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4584:30:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4566:48:20"
                      },
                      {
                        "assignments": [
                          3329
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3329,
                            "mutability": "mutable",
                            "name": "_token1",
                            "nameLocation": "4628:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 3456,
                            "src": "4620:15:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 3328,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4620:7:20",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3335,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3331,
                                  "name": "_pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3304,
                                  "src": "4653:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3330,
                                "name": "IUniswapV3Pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2012,
                                "src": "4638:14:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                  "typeString": "type(contract IUniswapV3Pool)"
                                }
                              },
                              "id": 3332,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4638:21:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                "typeString": "contract IUniswapV3Pool"
                              }
                            },
                            "id": 3333,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "token1",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2279,
                            "src": "4638:28:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 3334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4638:30:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4620:48:20"
                      },
                      {
                        "assignments": [
                          3337
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3337,
                            "mutability": "mutable",
                            "name": "_tickSpacing",
                            "nameLocation": "4680:12:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 3456,
                            "src": "4674:18:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 3336,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "4674:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3343,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3339,
                                  "name": "_pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3304,
                                  "src": "4710:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3338,
                                "name": "IUniswapV3Pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2012,
                                "src": "4695:14:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                  "typeString": "type(contract IUniswapV3Pool)"
                                }
                              },
                              "id": 3340,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4695:21:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                "typeString": "contract IUniswapV3Pool"
                              }
                            },
                            "id": 3341,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "tickSpacing",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2291,
                            "src": "4695:33:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_int24_$",
                              "typeString": "function () view external returns (int24)"
                            }
                          },
                          "id": 3342,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4695:35:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4674:56:20"
                      },
                      {
                        "assignments": [
                          3345
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3345,
                            "mutability": "mutable",
                            "name": "_tickUpper",
                            "nameLocation": "4742:10:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 3456,
                            "src": "4736:16:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 3344,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "4736:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3352,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          },
                          "id": 3351,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3346,
                            "name": "_MAX_TICK",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3279,
                            "src": "4755:9:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                "id": 3349,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3347,
                                  "name": "_MAX_TICK",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3279,
                                  "src": "4768:9:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "%",
                                "rightExpression": {
                                  "id": 3348,
                                  "name": "_tickSpacing",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3337,
                                  "src": "4780:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                "src": "4768:24:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              }
                            ],
                            "id": 3350,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "4767:26:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "4755:38:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4736:57:20"
                      },
                      {
                        "assignments": [
                          3354
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3354,
                            "mutability": "mutable",
                            "name": "_tickLower",
                            "nameLocation": "4805:10:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 3456,
                            "src": "4799:16:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 3353,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "4799:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3357,
                        "initialValue": {
                          "id": 3356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "4818:11:20",
                          "subExpression": {
                            "id": 3355,
                            "name": "_tickUpper",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3345,
                            "src": "4819:10:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4799:30:20"
                      },
                      {
                        "expression": {
                          "id": 3361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3358,
                            "name": "factory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3239,
                            "src": "4836:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 3359,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "4846:3:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 3360,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "4846:10:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4836:20:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3362,
                        "nodeType": "ExpressionStatement",
                        "src": "4836:20:20"
                      },
                      {
                        "expression": {
                          "id": 3365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3363,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3251,
                            "src": "4862:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3364,
                            "name": "_pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3304,
                            "src": "4869:5:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4862:12:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3366,
                        "nodeType": "ExpressionStatement",
                        "src": "4862:12:20"
                      },
                      {
                        "expression": {
                          "id": 3369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3367,
                            "name": "fee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3255,
                            "src": "4880:3:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3368,
                            "name": "_fee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3313,
                            "src": "4886:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            }
                          },
                          "src": "4880:10:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "id": 3370,
                        "nodeType": "ExpressionStatement",
                        "src": "4880:10:20"
                      },
                      {
                        "expression": {
                          "id": 3373,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3371,
                            "name": "tickSpacing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3275,
                            "src": "4896:11:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3372,
                            "name": "_tickSpacing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3337,
                            "src": "4910:12:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "4896:26:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "id": 3374,
                        "nodeType": "ExpressionStatement",
                        "src": "4896:26:20"
                      },
                      {
                        "expression": {
                          "id": 3377,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3375,
                            "name": "tickUpper",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3271,
                            "src": "4928:9:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3376,
                            "name": "_tickUpper",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3345,
                            "src": "4940:10:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "4928:22:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "id": 3378,
                        "nodeType": "ExpressionStatement",
                        "src": "4928:22:20"
                      },
                      {
                        "expression": {
                          "id": 3381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3379,
                            "name": "tickLower",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3267,
                            "src": "4956:9:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3380,
                            "name": "_tickLower",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3354,
                            "src": "4968:10:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "4956:22:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "id": 3382,
                        "nodeType": "ExpressionStatement",
                        "src": "4956:22:20"
                      },
                      {
                        "expression": {
                          "id": 3385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3383,
                            "name": "token0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3243,
                            "src": "4984:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3384,
                            "name": "_token0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3321,
                            "src": "4993:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4984:16:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3386,
                        "nodeType": "ExpressionStatement",
                        "src": "4984:16:20"
                      },
                      {
                        "expression": {
                          "id": 3389,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3387,
                            "name": "token1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "5006:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3388,
                            "name": "_token1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3329,
                            "src": "5015:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5006:16:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3390,
                        "nodeType": "ExpressionStatement",
                        "src": "5006:16:20"
                      },
                      {
                        "expression": {
                          "id": 3410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3391,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3227,
                            "src": "5028:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "hexValue": "4b65657033724c50202d20",
                                    "id": 3396,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5059:13:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_a94178d1c412eed8fa1a51e4eb44d52d54f9449839aa27e515bcce7b97754416",
                                      "typeString": "literal_string \"Keep3rLP - \""
                                    },
                                    "value": "Keep3rLP - "
                                  },
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 3398,
                                            "name": "_token0",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3321,
                                            "src": "5080:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 3397,
                                          "name": "ERC20",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 585,
                                          "src": "5074:5:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_ERC20_$585_$",
                                            "typeString": "type(contract ERC20)"
                                          }
                                        },
                                        "id": 3399,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5074:14:20",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ERC20_$585",
                                          "typeString": "contract ERC20"
                                        }
                                      },
                                      "id": 3400,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "symbol",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 104,
                                      "src": "5074:21:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
                                        "typeString": "function () view external returns (string memory)"
                                      }
                                    },
                                    "id": 3401,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5074:23:20",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  {
                                    "hexValue": "2f",
                                    "id": 3402,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5099:3:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527",
                                      "typeString": "literal_string \"/\""
                                    },
                                    "value": "/"
                                  },
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 3404,
                                            "name": "_token1",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3329,
                                            "src": "5110:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 3403,
                                          "name": "ERC20",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 585,
                                          "src": "5104:5:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_ERC20_$585_$",
                                            "typeString": "type(contract ERC20)"
                                          }
                                        },
                                        "id": 3405,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5104:14:20",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ERC20_$585",
                                          "typeString": "contract ERC20"
                                        }
                                      },
                                      "id": 3406,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "symbol",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 104,
                                      "src": "5104:21:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
                                        "typeString": "function () view external returns (string memory)"
                                      }
                                    },
                                    "id": 3407,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5104:23:20",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_a94178d1c412eed8fa1a51e4eb44d52d54f9449839aa27e515bcce7b97754416",
                                      "typeString": "literal_string \"Keep3rLP - \""
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527",
                                      "typeString": "literal_string \"/\""
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 3394,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "5042:3:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 3395,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "src": "5042:16:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 3408,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5042:86:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 3393,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5035:6:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                "typeString": "type(string storage pointer)"
                              },
                              "typeName": {
                                "id": 3392,
                                "name": "string",
                                "nodeType": "ElementaryTypeName",
                                "src": "5035:6:20",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3409,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5035:94:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "5028:101:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 3411,
                        "nodeType": "ExpressionStatement",
                        "src": "5028:101:20"
                      },
                      {
                        "expression": {
                          "id": 3431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3412,
                            "name": "symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3231,
                            "src": "5135:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "hexValue": "6b4c502d",
                                    "id": 3417,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5168:6:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_88128fd802ffcab61bb615f5267c4adf0904a425ac58e0dbd5ba48ded50c3374",
                                      "typeString": "literal_string \"kLP-\""
                                    },
                                    "value": "kLP-"
                                  },
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 3419,
                                            "name": "_token0",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3321,
                                            "src": "5182:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 3418,
                                          "name": "ERC20",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 585,
                                          "src": "5176:5:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_ERC20_$585_$",
                                            "typeString": "type(contract ERC20)"
                                          }
                                        },
                                        "id": 3420,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5176:14:20",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ERC20_$585",
                                          "typeString": "contract ERC20"
                                        }
                                      },
                                      "id": 3421,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "symbol",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 104,
                                      "src": "5176:21:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
                                        "typeString": "function () view external returns (string memory)"
                                      }
                                    },
                                    "id": 3422,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5176:23:20",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  {
                                    "hexValue": "2f",
                                    "id": 3423,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5201:3:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527",
                                      "typeString": "literal_string \"/\""
                                    },
                                    "value": "/"
                                  },
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 3425,
                                            "name": "_token1",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3329,
                                            "src": "5212:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 3424,
                                          "name": "ERC20",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 585,
                                          "src": "5206:5:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_ERC20_$585_$",
                                            "typeString": "type(contract ERC20)"
                                          }
                                        },
                                        "id": 3426,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5206:14:20",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ERC20_$585",
                                          "typeString": "contract ERC20"
                                        }
                                      },
                                      "id": 3427,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "symbol",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 104,
                                      "src": "5206:21:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
                                        "typeString": "function () view external returns (string memory)"
                                      }
                                    },
                                    "id": 3428,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5206:23:20",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_88128fd802ffcab61bb615f5267c4adf0904a425ac58e0dbd5ba48ded50c3374",
                                      "typeString": "literal_string \"kLP-\""
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_fba9715e477e68952d3f1df7a185b3708aadad50ec10cc793973864023868527",
                                      "typeString": "literal_string \"/\""
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 3415,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "5151:3:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 3416,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "src": "5151:16:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 3429,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5151:79:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 3414,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5144:6:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                "typeString": "type(string storage pointer)"
                              },
                              "typeName": {
                                "id": 3413,
                                "name": "string",
                                "nodeType": "ElementaryTypeName",
                                "src": "5144:6:20",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3430,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5144:87:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "5135:96:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 3432,
                        "nodeType": "ExpressionStatement",
                        "src": "5135:96:20"
                      },
                      {
                        "expression": {
                          "id": 3438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3433,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3259,
                            "src": "5238:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3436,
                                "name": "_tickLower",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3354,
                                "src": "5282:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              ],
                              "expression": {
                                "id": 3434,
                                "name": "TickMath",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5188,
                                "src": "5254:8:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_TickMath_$5188_$",
                                  "typeString": "type(library TickMath)"
                                }
                              },
                              "id": 3435,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getSqrtRatioAtTick",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5048,
                              "src": "5254:27:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_int24_$returns$_t_uint160_$",
                                "typeString": "function (int24) pure returns (uint160)"
                              }
                            },
                            "id": 3437,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5254:39:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "5238:55:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "id": 3439,
                        "nodeType": "ExpressionStatement",
                        "src": "5238:55:20"
                      },
                      {
                        "expression": {
                          "id": 3445,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3440,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3263,
                            "src": "5299:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3443,
                                "name": "_tickUpper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3345,
                                "src": "5343:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              ],
                              "expression": {
                                "id": 3441,
                                "name": "TickMath",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5188,
                                "src": "5315:8:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_TickMath_$5188_$",
                                  "typeString": "type(library TickMath)"
                                }
                              },
                              "id": 3442,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getSqrtRatioAtTick",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5048,
                              "src": "5315:27:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_int24_$returns$_t_uint160_$",
                                "typeString": "function (int24) pure returns (uint160)"
                              }
                            },
                            "id": 3444,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5315:39:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "5299:55:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "id": 3446,
                        "nodeType": "ExpressionStatement",
                        "src": "5299:55:20"
                      },
                      {
                        "expression": {
                          "id": 3454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3447,
                            "name": "_poolKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3302,
                            "src": "5360:8:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PoolKey_$4649_storage",
                              "typeString": "struct PoolAddress.PoolKey storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3450,
                                "name": "_token0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3321,
                                "src": "5400:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3451,
                                "name": "_token1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3329,
                                "src": "5417:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3452,
                                "name": "_fee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3313,
                                "src": "5431:4:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint24",
                                  "typeString": "uint24"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint24",
                                  "typeString": "uint24"
                                }
                              ],
                              "expression": {
                                "id": 3448,
                                "name": "PoolAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4650,
                                "src": "5371:11:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_PoolAddress_$4650_$",
                                  "typeString": "type(library PoolAddress)"
                                }
                              },
                              "id": 3449,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "PoolKey",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4649,
                              "src": "5371:19:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_PoolKey_$4649_storage_ptr_$",
                                "typeString": "type(struct PoolAddress.PoolKey storage pointer)"
                              }
                            },
                            "id": 3453,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "names": [
                              "token0",
                              "token1",
                              "fee"
                            ],
                            "nodeType": "FunctionCall",
                            "src": "5371:66:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PoolKey_$4649_memory_ptr",
                              "typeString": "struct PoolAddress.PoolKey memory"
                            }
                          },
                          "src": "5360:77:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PoolKey_$4649_storage",
                            "typeString": "struct PoolAddress.PoolKey storage ref"
                          }
                        },
                        "id": 3455,
                        "nodeType": "ExpressionStatement",
                        "src": "5360:77:20"
                      }
                    ]
                  },
                  "id": 3457,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 3309,
                          "name": "_governance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3306,
                          "src": "4500:11:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 3310,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 3308,
                        "name": "Governable",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5354,
                        "src": "4489:10:20"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "4489:23:20"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3307,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3304,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "4461:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3457,
                        "src": "4453:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3303,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4453:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3306,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "4476:11:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3457,
                        "src": "4468:19:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3305,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4468:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4452:36:20"
                  },
                  "returnParameters": {
                    "id": 3311,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4513:0:20"
                  },
                  "scope": 4051,
                  "src": "4441:1001:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11827
                  ],
                  "body": {
                    "id": 3489,
                    "nodeType": "Block",
                    "src": "5767:124:20",
                    "statements": [
                      {
                        "expression": {
                          "id": 3482,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 3474,
                                "name": "liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3472,
                                "src": "5774:9:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              null,
                              null
                            ],
                            "id": 3475,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "5773:15:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint128_$__$__$",
                              "typeString": "tuple(uint128,,)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3477,
                                "name": "amount0Desired",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3460,
                                "src": "5805:14:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 3478,
                                "name": "amount1Desired",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3462,
                                "src": "5821:14:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 3479,
                                "name": "amount0Min",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3464,
                                "src": "5837:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 3480,
                                "name": "amount1Min",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3466,
                                "src": "5849:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 3476,
                              "name": "_addLiquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3894,
                              "src": "5791:13:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint128_$_t_uint256_$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256,uint256) returns (uint128,uint256,uint256)"
                              }
                            },
                            "id": 3481,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5791:69:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint128_$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint128,uint256,uint256)"
                            }
                          },
                          "src": "5773:87:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3483,
                        "nodeType": "ExpressionStatement",
                        "src": "5773:87:20"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3485,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3468,
                              "src": "5872:2:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3486,
                              "name": "liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3472,
                              "src": "5876:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 3484,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3942,
                            "src": "5866:5:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 3487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5866:20:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3488,
                        "nodeType": "ExpressionStatement",
                        "src": "5866:20:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3458,
                    "nodeType": "StructuredDocumentation",
                    "src": "5547:33:20",
                    "text": "@inheritdoc IUniV3PairManager"
                  },
                  "functionSelector": "a3e6dc28",
                  "id": 3490,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nameLocation": "5592:4:20",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3470,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "5730:8:20"
                  },
                  "parameters": {
                    "id": 3469,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3460,
                        "mutability": "mutable",
                        "name": "amount0Desired",
                        "nameLocation": "5610:14:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3490,
                        "src": "5602:22:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3459,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5602:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3462,
                        "mutability": "mutable",
                        "name": "amount1Desired",
                        "nameLocation": "5638:14:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3490,
                        "src": "5630:22:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3461,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5630:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3464,
                        "mutability": "mutable",
                        "name": "amount0Min",
                        "nameLocation": "5666:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3490,
                        "src": "5658:18:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3463,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5658:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3466,
                        "mutability": "mutable",
                        "name": "amount1Min",
                        "nameLocation": "5690:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3490,
                        "src": "5682:18:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3465,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5682:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3468,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "5714:2:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3490,
                        "src": "5706:10:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3467,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5706:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5596:124:20"
                  },
                  "returnParameters": {
                    "id": 3473,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3472,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "5756:9:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3490,
                        "src": "5748:17:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 3471,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5748:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5747:19:20"
                  },
                  "scope": 4051,
                  "src": "5583:308:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    11811
                  ],
                  "body": {
                    "id": 3547,
                    "nodeType": "Block",
                    "src": "6059:308:20",
                    "statements": [
                      {
                        "assignments": [
                          3503
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3503,
                            "mutability": "mutable",
                            "name": "decoded",
                            "nameLocation": "6089:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 3547,
                            "src": "6065:31:20",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintCallbackData_$11756_memory_ptr",
                              "typeString": "struct IUniV3PairManager.MintCallbackData"
                            },
                            "typeName": {
                              "id": 3502,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 3501,
                                "name": "MintCallbackData",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 11756,
                                "src": "6065:16:20"
                              },
                              "referencedDeclaration": 11756,
                              "src": "6065:16:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MintCallbackData_$11756_storage_ptr",
                                "typeString": "struct IUniV3PairManager.MintCallbackData"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3510,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3506,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3497,
                              "src": "6110:4:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 3507,
                                  "name": "MintCallbackData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11756,
                                  "src": "6117:16:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_MintCallbackData_$11756_storage_ptr_$",
                                    "typeString": "type(struct IUniV3PairManager.MintCallbackData storage pointer)"
                                  }
                                }
                              ],
                              "id": 3508,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "6116:18:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_MintCallbackData_$11756_storage_ptr_$",
                                "typeString": "type(struct IUniV3PairManager.MintCallbackData storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_MintCallbackData_$11756_storage_ptr_$",
                                "typeString": "type(struct IUniV3PairManager.MintCallbackData storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 3504,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "6099:3:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 3505,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "6099:10:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 3509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6099:36:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintCallbackData_$11756_memory_ptr",
                            "typeString": "struct IUniV3PairManager.MintCallbackData memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6065:70:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 3511,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "6145:3:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 3512,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "6145:10:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 3513,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3251,
                            "src": "6159:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "6145:18:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3518,
                        "nodeType": "IfStatement",
                        "src": "6141:41:20",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3515,
                              "name": "OnlyPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11795,
                              "src": "6172:8:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3516,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6172:10:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3517,
                          "nodeType": "RevertStatement",
                          "src": "6165:17:20"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3519,
                            "name": "amount0Owed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3493,
                            "src": "6192:11:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3520,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6206:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6192:15:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3532,
                        "nodeType": "IfStatement",
                        "src": "6188:84:20",
                        "trueBody": {
                          "expression": {
                            "arguments": [
                              {
                                "expression": {
                                  "expression": {
                                    "id": 3523,
                                    "name": "decoded",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3503,
                                    "src": "6214:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MintCallbackData_$11756_memory_ptr",
                                      "typeString": "struct IUniV3PairManager.MintCallbackData memory"
                                    }
                                  },
                                  "id": 3524,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_poolKey",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 11753,
                                  "src": "6214:16:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_PoolKey_$4649_memory_ptr",
                                    "typeString": "struct PoolAddress.PoolKey memory"
                                  }
                                },
                                "id": 3525,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token0",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4644,
                                "src": "6214:23:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "expression": {
                                  "id": 3526,
                                  "name": "decoded",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3503,
                                  "src": "6239:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MintCallbackData_$11756_memory_ptr",
                                    "typeString": "struct IUniV3PairManager.MintCallbackData memory"
                                  }
                                },
                                "id": 3527,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "payer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 11755,
                                "src": "6239:13:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3528,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3251,
                                "src": "6254:4:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3529,
                                "name": "amount0Owed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3493,
                                "src": "6260:11:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 3522,
                              "name": "_pay",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3914,
                              "src": "6209:4:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                "typeString": "function (address,address,address,uint256)"
                              }
                            },
                            "id": 3530,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6209:63:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3531,
                          "nodeType": "ExpressionStatement",
                          "src": "6209:63:20"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3535,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3533,
                            "name": "amount1Owed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3495,
                            "src": "6282:11:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3534,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6296:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6282:15:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3546,
                        "nodeType": "IfStatement",
                        "src": "6278:84:20",
                        "trueBody": {
                          "expression": {
                            "arguments": [
                              {
                                "expression": {
                                  "expression": {
                                    "id": 3537,
                                    "name": "decoded",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3503,
                                    "src": "6304:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MintCallbackData_$11756_memory_ptr",
                                      "typeString": "struct IUniV3PairManager.MintCallbackData memory"
                                    }
                                  },
                                  "id": 3538,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_poolKey",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 11753,
                                  "src": "6304:16:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_PoolKey_$4649_memory_ptr",
                                    "typeString": "struct PoolAddress.PoolKey memory"
                                  }
                                },
                                "id": 3539,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token1",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4646,
                                "src": "6304:23:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "expression": {
                                  "id": 3540,
                                  "name": "decoded",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3503,
                                  "src": "6329:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MintCallbackData_$11756_memory_ptr",
                                    "typeString": "struct IUniV3PairManager.MintCallbackData memory"
                                  }
                                },
                                "id": 3541,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "payer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 11755,
                                "src": "6329:13:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3542,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3251,
                                "src": "6344:4:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3543,
                                "name": "amount1Owed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3495,
                                "src": "6350:11:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 3536,
                              "name": "_pay",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3914,
                              "src": "6299:4:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                "typeString": "function (address,address,address,uint256)"
                              }
                            },
                            "id": 3544,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6299:63:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3545,
                          "nodeType": "ExpressionStatement",
                          "src": "6299:63:20"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3491,
                    "nodeType": "StructuredDocumentation",
                    "src": "5895:33:20",
                    "text": "@inheritdoc IUniV3PairManager"
                  },
                  "functionSelector": "d3487997",
                  "id": 3548,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "uniswapV3MintCallback",
                  "nameLocation": "5940:21:20",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3499,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "6050:8:20"
                  },
                  "parameters": {
                    "id": 3498,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3493,
                        "mutability": "mutable",
                        "name": "amount0Owed",
                        "nameLocation": "5975:11:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3548,
                        "src": "5967:19:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3492,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5967:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3495,
                        "mutability": "mutable",
                        "name": "amount1Owed",
                        "nameLocation": "6000:11:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3548,
                        "src": "5992:19:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3494,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5992:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3497,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "6032:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3548,
                        "src": "6017:19:20",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3496,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6017:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5961:79:20"
                  },
                  "returnParameters": {
                    "id": 3500,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6059:0:20"
                  },
                  "scope": 4051,
                  "src": "5931:436:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    11865
                  ],
                  "body": {
                    "id": 3612,
                    "nodeType": "Block",
                    "src": "6573:304:20",
                    "statements": [
                      {
                        "expression": {
                          "id": 3576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 3565,
                                "name": "amount0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3561,
                                "src": "6580:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 3566,
                                "name": "amount1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3563,
                                "src": "6589:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 3567,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "6579:18:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3572,
                                "name": "tickLower",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3267,
                                "src": "6626:9:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              {
                                "id": 3573,
                                "name": "tickUpper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3271,
                                "src": "6637:9:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              {
                                "id": 3574,
                                "name": "liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3551,
                                "src": "6648:9:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3569,
                                    "name": "pool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3251,
                                    "src": "6615:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3568,
                                  "name": "IUniswapV3Pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2012,
                                  "src": "6600:14:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                    "typeString": "type(contract IUniswapV3Pool)"
                                  }
                                },
                                "id": 3570,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6600:20:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                  "typeString": "contract IUniswapV3Pool"
                                }
                              },
                              "id": 3571,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "burn",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2071,
                              "src": "6600:25:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_int24_$_t_int24_$_t_uint128_$returns$_t_uint256_$_t_uint256_$",
                                "typeString": "function (int24,int24,uint128) external returns (uint256,uint256)"
                              }
                            },
                            "id": 3575,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6600:58:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "src": "6579:79:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3577,
                        "nodeType": "ExpressionStatement",
                        "src": "6579:79:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3580,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3578,
                              "name": "amount0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3561,
                              "src": "6669:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 3579,
                              "name": "amount0Min",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3553,
                              "src": "6679:10:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "6669:20:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3583,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3581,
                              "name": "amount1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3563,
                              "src": "6693:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 3582,
                              "name": "amount1Min",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3555,
                              "src": "6703:10:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "6693:20:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "6669:44:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3588,
                        "nodeType": "IfStatement",
                        "src": "6665:76:20",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3585,
                              "name": "ExcessiveSlippage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11798,
                              "src": "6722:17:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6722:19:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3587,
                          "nodeType": "RevertStatement",
                          "src": "6715:26:20"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3593,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3557,
                              "src": "6777:2:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3594,
                              "name": "tickLower",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3267,
                              "src": "6781:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            {
                              "id": 3595,
                              "name": "tickUpper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3271,
                              "src": "6792:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 3598,
                                  "name": "amount0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3561,
                                  "src": "6811:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3597,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6803:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint128_$",
                                  "typeString": "type(uint128)"
                                },
                                "typeName": {
                                  "id": 3596,
                                  "name": "uint128",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6803:7:20",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3599,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6803:16:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 3602,
                                  "name": "amount1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3563,
                                  "src": "6829:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3601,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6821:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint128_$",
                                  "typeString": "type(uint128)"
                                },
                                "typeName": {
                                  "id": 3600,
                                  "name": "uint128",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6821:7:20",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3603,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6821:16:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              },
                              {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3590,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3251,
                                  "src": "6763:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3589,
                                "name": "IUniswapV3Pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2012,
                                "src": "6748:14:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                  "typeString": "type(contract IUniswapV3Pool)"
                                }
                              },
                              "id": 3591,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6748:20:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                "typeString": "contract IUniswapV3Pool"
                              }
                            },
                            "id": 3592,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "collect",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2057,
                            "src": "6748:28:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_int24_$_t_int24_$_t_uint128_$_t_uint128_$returns$_t_uint128_$_t_uint128_$",
                              "typeString": "function (address,int24,int24,uint128,uint128) external returns (uint128,uint128)"
                            }
                          },
                          "id": 3604,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6748:90:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$",
                            "typeString": "tuple(uint128,uint128)"
                          }
                        },
                        "id": 3605,
                        "nodeType": "ExpressionStatement",
                        "src": "6748:90:20"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 3607,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "6850:3:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3608,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "6850:10:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3609,
                              "name": "liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3551,
                              "src": "6862:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "id": 3606,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3970,
                            "src": "6844:5:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 3610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6844:28:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3611,
                        "nodeType": "ExpressionStatement",
                        "src": "6844:28:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3549,
                    "nodeType": "StructuredDocumentation",
                    "src": "6371:33:20",
                    "text": "@inheritdoc IUniV3PairManager"
                  },
                  "functionSelector": "cf51148d",
                  "id": 3613,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nameLocation": "6416:4:20",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3559,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "6521:8:20"
                  },
                  "parameters": {
                    "id": 3558,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3551,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "6434:9:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3613,
                        "src": "6426:17:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 3550,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "6426:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3553,
                        "mutability": "mutable",
                        "name": "amount0Min",
                        "nameLocation": "6457:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3613,
                        "src": "6449:18:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3552,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6449:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3555,
                        "mutability": "mutable",
                        "name": "amount1Min",
                        "nameLocation": "6481:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3613,
                        "src": "6473:18:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3554,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6473:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3557,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "6505:2:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3613,
                        "src": "6497:10:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3556,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6497:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6420:91:20"
                  },
                  "returnParameters": {
                    "id": 3564,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3561,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "6547:7:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3613,
                        "src": "6539:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3560,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6539:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3563,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "6564:7:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3613,
                        "src": "6556:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3562,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6556:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6538:34:20"
                  },
                  "scope": 4051,
                  "src": "6407:470:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    11849
                  ],
                  "body": {
                    "id": 3660,
                    "nodeType": "Block",
                    "src": "7012:285:20",
                    "statements": [
                      {
                        "assignments": [
                          null,
                          null,
                          null,
                          3625,
                          3627
                        ],
                        "declarations": [
                          null,
                          null,
                          null,
                          {
                            "constant": false,
                            "id": 3625,
                            "mutability": "mutable",
                            "name": "tokensOwed0",
                            "nameLocation": "7033:11:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 3660,
                            "src": "7025:19:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            "typeName": {
                              "id": 3624,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "7025:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3627,
                            "mutability": "mutable",
                            "name": "tokensOwed1",
                            "nameLocation": "7054:11:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 3660,
                            "src": "7046:19:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            "typeName": {
                              "id": 3626,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "7046:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3644,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 3637,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "7142:4:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_UniV3PairManager_$4051",
                                            "typeString": "contract UniV3PairManager"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_UniV3PairManager_$4051",
                                            "typeString": "contract UniV3PairManager"
                                          }
                                        ],
                                        "id": 3636,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "7134:7:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 3635,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "7134:7:20",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 3638,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "7134:13:20",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "id": 3639,
                                      "name": "tickLower",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3267,
                                      "src": "7149:9:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    },
                                    {
                                      "id": 3640,
                                      "name": "tickUpper",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3271,
                                      "src": "7160:9:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      },
                                      {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    ],
                                    "expression": {
                                      "id": 3633,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -1,
                                      "src": "7117:3:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 3634,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "encodePacked",
                                    "nodeType": "MemberAccess",
                                    "src": "7117:16:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 3641,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7117:53:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 3632,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "7107:9:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 3642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7107:64:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3629,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3251,
                                  "src": "7084:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3628,
                                "name": "IUniswapV3Pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2012,
                                "src": "7069:14:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                  "typeString": "type(contract IUniswapV3Pool)"
                                }
                              },
                              "id": 3630,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7069:20:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                "typeString": "contract IUniswapV3Pool"
                              }
                            },
                            "id": 3631,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "positions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2417,
                            "src": "7069:30:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_uint128_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$",
                              "typeString": "function (bytes32) view external returns (uint128,uint256,uint256,uint128,uint128)"
                            }
                          },
                          "id": 3643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7069:108:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint128_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$",
                            "typeString": "tuple(uint128,uint256,uint256,uint128,uint128)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7018:159:20"
                      },
                      {
                        "expression": {
                          "id": 3658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 3645,
                                "name": "amount0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3620,
                                "src": "7184:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 3646,
                                "name": "amount1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3622,
                                "src": "7193:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 3647,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "7183:18:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3652,
                                "name": "governance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5266,
                                "src": "7233:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3653,
                                "name": "tickLower",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3267,
                                "src": "7245:9:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              {
                                "id": 3654,
                                "name": "tickUpper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3271,
                                "src": "7256:9:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              {
                                "id": 3655,
                                "name": "tokensOwed0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3625,
                                "src": "7267:11:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "id": 3656,
                                "name": "tokensOwed1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3627,
                                "src": "7280:11:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3649,
                                    "name": "pool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3251,
                                    "src": "7219:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3648,
                                  "name": "IUniswapV3Pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2012,
                                  "src": "7204:14:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                    "typeString": "type(contract IUniswapV3Pool)"
                                  }
                                },
                                "id": 3650,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7204:20:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                  "typeString": "contract IUniswapV3Pool"
                                }
                              },
                              "id": 3651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collect",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2057,
                              "src": "7204:28:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_int24_$_t_int24_$_t_uint128_$_t_uint128_$returns$_t_uint128_$_t_uint128_$",
                                "typeString": "function (address,int24,int24,uint128,uint128) external returns (uint128,uint128)"
                              }
                            },
                            "id": 3657,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7204:88:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$",
                              "typeString": "tuple(uint128,uint128)"
                            }
                          },
                          "src": "7183:109:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3659,
                        "nodeType": "ExpressionStatement",
                        "src": "7183:109:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3614,
                    "nodeType": "StructuredDocumentation",
                    "src": "6881:33:20",
                    "text": "@inheritdoc IUniV3PairManager"
                  },
                  "functionSelector": "e5225381",
                  "id": 3661,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 3618,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 3617,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "6954:14:20"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "6954:14:20"
                    }
                  ],
                  "name": "collect",
                  "nameLocation": "6926:7:20",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3616,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "6945:8:20"
                  },
                  "parameters": {
                    "id": 3615,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6933:2:20"
                  },
                  "returnParameters": {
                    "id": 3623,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3620,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "6986:7:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3661,
                        "src": "6978:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3619,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6978:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3622,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "7003:7:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3661,
                        "src": "6995:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3621,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6995:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6977:34:20"
                  },
                  "scope": 4051,
                  "src": "6917:380:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    11841
                  ],
                  "body": {
                    "id": 3700,
                    "nodeType": "Block",
                    "src": "7572:211:20",
                    "statements": [
                      {
                        "expression": {
                          "id": 3698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 3676,
                                "name": "liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3666,
                                "src": "7579:9:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "id": 3677,
                                "name": "feeGrowthInside0LastX128",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3668,
                                "src": "7590:24:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 3678,
                                "name": "feeGrowthInside1LastX128",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3670,
                                "src": "7616:24:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 3679,
                                "name": "tokensOwed0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3672,
                                "src": "7642:11:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "id": 3680,
                                "name": "tokensOwed1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3674,
                                "src": "7655:11:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              }
                            ],
                            "id": 3681,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "7578:89:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint128_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$",
                              "typeString": "tuple(uint128,uint256,uint256,uint128,uint128)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "id": 3691,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -28,
                                            "src": "7743:4:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_UniV3PairManager_$4051",
                                              "typeString": "contract UniV3PairManager"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_UniV3PairManager_$4051",
                                              "typeString": "contract UniV3PairManager"
                                            }
                                          ],
                                          "id": 3690,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "7735:7:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 3689,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "7735:7:20",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 3692,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7735:13:20",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 3693,
                                        "name": "tickLower",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3267,
                                        "src": "7750:9:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      },
                                      {
                                        "id": 3694,
                                        "name": "tickUpper",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3271,
                                        "src": "7761:9:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        },
                                        {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      ],
                                      "expression": {
                                        "id": 3687,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "7718:3:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 3688,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "encodePacked",
                                      "nodeType": "MemberAccess",
                                      "src": "7718:16:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 3695,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7718:53:20",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 3686,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -8,
                                  "src": "7708:9:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 3696,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7708:64:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3683,
                                    "name": "pool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3251,
                                    "src": "7685:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3682,
                                  "name": "IUniswapV3Pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2012,
                                  "src": "7670:14:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                    "typeString": "type(contract IUniswapV3Pool)"
                                  }
                                },
                                "id": 3684,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7670:20:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                  "typeString": "contract IUniswapV3Pool"
                                }
                              },
                              "id": 3685,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "positions",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2417,
                              "src": "7670:30:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_uint128_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$",
                                "typeString": "function (bytes32) view external returns (uint128,uint256,uint256,uint128,uint128)"
                              }
                            },
                            "id": 3697,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7670:108:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint128_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$",
                              "typeString": "tuple(uint128,uint256,uint256,uint128,uint128)"
                            }
                          },
                          "src": "7578:200:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3699,
                        "nodeType": "ExpressionStatement",
                        "src": "7578:200:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3662,
                    "nodeType": "StructuredDocumentation",
                    "src": "7301:33:20",
                    "text": "@inheritdoc IUniV3PairManager"
                  },
                  "functionSelector": "09218e91",
                  "id": 3701,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "position",
                  "nameLocation": "7346:8:20",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3664,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "7383:8:20"
                  },
                  "parameters": {
                    "id": 3663,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7354:2:20"
                  },
                  "returnParameters": {
                    "id": 3675,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3666,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "7420:9:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3701,
                        "src": "7412:17:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 3665,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "7412:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3668,
                        "mutability": "mutable",
                        "name": "feeGrowthInside0LastX128",
                        "nameLocation": "7445:24:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3701,
                        "src": "7437:32:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3667,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7437:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3670,
                        "mutability": "mutable",
                        "name": "feeGrowthInside1LastX128",
                        "nameLocation": "7485:24:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3701,
                        "src": "7477:32:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3669,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7477:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3672,
                        "mutability": "mutable",
                        "name": "tokensOwed0",
                        "nameLocation": "7525:11:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3701,
                        "src": "7517:19:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 3671,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "7517:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3674,
                        "mutability": "mutable",
                        "name": "tokensOwed1",
                        "nameLocation": "7552:11:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3701,
                        "src": "7544:19:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 3673,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "7544:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7404:165:20"
                  },
                  "scope": 4051,
                  "src": "7337:446:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    632
                  ],
                  "body": {
                    "id": 3730,
                    "nodeType": "Block",
                    "src": "7895:116:20",
                    "statements": [
                      {
                        "expression": {
                          "id": 3719,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 3712,
                                "name": "allowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3292,
                                "src": "7901:9:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 3716,
                              "indexExpression": {
                                "expression": {
                                  "id": 3713,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "7911:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3714,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "7911:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7901:21:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 3717,
                            "indexExpression": {
                              "id": 3715,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3704,
                              "src": "7923:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7901:30:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3718,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3706,
                            "src": "7934:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7901:39:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3720,
                        "nodeType": "ExpressionStatement",
                        "src": "7901:39:20"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 3722,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "7961:3:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3723,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "7961:10:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3724,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3704,
                              "src": "7973:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3725,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3706,
                              "src": "7982:6:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3721,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 662,
                            "src": "7952:8:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3726,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7952:37:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3727,
                        "nodeType": "EmitStatement",
                        "src": "7947:42:20"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 3728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8002:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 3711,
                        "id": 3729,
                        "nodeType": "Return",
                        "src": "7995:11:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3702,
                    "nodeType": "StructuredDocumentation",
                    "src": "7787:22:20",
                    "text": "@inheritdoc IERC20"
                  },
                  "functionSelector": "095ea7b3",
                  "id": 3731,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nameLocation": "7821:7:20",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3708,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "7871:8:20"
                  },
                  "parameters": {
                    "id": 3707,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3704,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "7837:7:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3731,
                        "src": "7829:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3703,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7829:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3706,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "7854:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3731,
                        "src": "7846:14:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3705,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7846:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7828:33:20"
                  },
                  "returnParameters": {
                    "id": 3711,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3710,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3731,
                        "src": "7889:4:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3709,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7889:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7888:6:20"
                  },
                  "scope": 4051,
                  "src": "7812:199:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    612
                  ],
                  "body": {
                    "id": 3751,
                    "nodeType": "Block",
                    "src": "8119:67:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 3743,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "8141:3:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3744,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "8141:10:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3745,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3734,
                              "src": "8153:2:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3746,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3736,
                              "src": "8157:6:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3742,
                            "name": "_transferTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3999,
                            "src": "8125:15:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3747,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8125:39:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3748,
                        "nodeType": "ExpressionStatement",
                        "src": "8125:39:20"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 3749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8177:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 3741,
                        "id": 3750,
                        "nodeType": "Return",
                        "src": "8170:11:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3732,
                    "nodeType": "StructuredDocumentation",
                    "src": "8015:22:20",
                    "text": "@inheritdoc IERC20"
                  },
                  "functionSelector": "a9059cbb",
                  "id": 3752,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nameLocation": "8049:8:20",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3738,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8095:8:20"
                  },
                  "parameters": {
                    "id": 3737,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3734,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "8066:2:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3752,
                        "src": "8058:10:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3733,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8058:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3736,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "8078:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3752,
                        "src": "8070:14:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3735,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8070:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8057:28:20"
                  },
                  "returnParameters": {
                    "id": 3741,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3740,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3752,
                        "src": "8113:4:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3739,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "8113:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8112:6:20"
                  },
                  "scope": 4051,
                  "src": "8040:146:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    644
                  ],
                  "body": {
                    "id": 3819,
                    "nodeType": "Block",
                    "src": "8328:382:20",
                    "statements": [
                      {
                        "assignments": [
                          3766
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3766,
                            "mutability": "mutable",
                            "name": "spender",
                            "nameLocation": "8342:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 3819,
                            "src": "8334:15:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 3765,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "8334:7:20",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3769,
                        "initialValue": {
                          "expression": {
                            "id": 3767,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "8352:3:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "8352:10:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8334:28:20"
                      },
                      {
                        "assignments": [
                          3771
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3771,
                            "mutability": "mutable",
                            "name": "spenderAllowance",
                            "nameLocation": "8376:16:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 3819,
                            "src": "8368:24:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3770,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8368:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3777,
                        "initialValue": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 3772,
                              "name": "allowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3292,
                              "src": "8395:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 3774,
                            "indexExpression": {
                              "id": 3773,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3755,
                              "src": "8405:4:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8395:15:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 3776,
                          "indexExpression": {
                            "id": 3775,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3766,
                            "src": "8411:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8395:24:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8368:51:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3788,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3780,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3778,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3766,
                              "src": "8430:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "id": 3779,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3755,
                              "src": "8441:4:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "8430:15:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3787,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3781,
                              "name": "spenderAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3771,
                              "src": "8449:16:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3784,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8474:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 3783,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "8474:7:20",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "id": 3782,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "8469:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 3785,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8469:13:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint256",
                                  "typeString": "type(uint256)"
                                }
                              },
                              "id": 3786,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "8469:17:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "8449:37:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "8430:56:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3810,
                        "nodeType": "IfStatement",
                        "src": "8426:223:20",
                        "trueBody": {
                          "id": 3809,
                          "nodeType": "Block",
                          "src": "8488:161:20",
                          "statements": [
                            {
                              "assignments": [
                                3790
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3790,
                                  "mutability": "mutable",
                                  "name": "newAllowance",
                                  "nameLocation": "8504:12:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3809,
                                  "src": "8496:20:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3789,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8496:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3794,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3793,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3791,
                                  "name": "spenderAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3771,
                                  "src": "8519:16:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 3792,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3759,
                                  "src": "8538:6:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "8519:25:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "8496:48:20"
                            },
                            {
                              "expression": {
                                "id": 3801,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 3795,
                                      "name": "allowance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3292,
                                      "src": "8552:9:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 3798,
                                    "indexExpression": {
                                      "id": 3796,
                                      "name": "from",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3755,
                                      "src": "8562:4:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "8552:15:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 3799,
                                  "indexExpression": {
                                    "id": 3797,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3766,
                                    "src": "8568:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "8552:24:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 3800,
                                  "name": "newAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3790,
                                  "src": "8579:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "8552:39:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3802,
                              "nodeType": "ExpressionStatement",
                              "src": "8552:39:20"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 3804,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3755,
                                    "src": "8614:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3805,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3766,
                                    "src": "8620:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3806,
                                    "name": "newAllowance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3790,
                                    "src": "8629:12:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3803,
                                  "name": "Approval",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 662,
                                  "src": "8605:8:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,uint256)"
                                  }
                                },
                                "id": 3807,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8605:37:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3808,
                              "nodeType": "EmitStatement",
                              "src": "8600:42:20"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3812,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3755,
                              "src": "8671:4:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3813,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3757,
                              "src": "8677:2:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3814,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3759,
                              "src": "8681:6:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3811,
                            "name": "_transferTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3999,
                            "src": "8655:15:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8655:33:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3816,
                        "nodeType": "ExpressionStatement",
                        "src": "8655:33:20"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 3817,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8701:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 3764,
                        "id": 3818,
                        "nodeType": "Return",
                        "src": "8694:11:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3753,
                    "nodeType": "StructuredDocumentation",
                    "src": "8190:22:20",
                    "text": "@inheritdoc IERC20"
                  },
                  "functionSelector": "23b872dd",
                  "id": 3820,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "8224:12:20",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3761,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8304:8:20"
                  },
                  "parameters": {
                    "id": 3760,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3755,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "8250:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3820,
                        "src": "8242:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3754,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8242:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3757,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "8268:2:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3820,
                        "src": "8260:10:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3756,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8260:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3759,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "8284:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3820,
                        "src": "8276:14:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3758,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8276:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8236:58:20"
                  },
                  "returnParameters": {
                    "id": 3764,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3763,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3820,
                        "src": "8322:4:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3762,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "8322:4:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8321:6:20"
                  },
                  "scope": 4051,
                  "src": "8215:495:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 3893,
                    "nodeType": "Block",
                    "src": "9741:501:20",
                    "statements": [
                      {
                        "assignments": [
                          3839,
                          null,
                          null,
                          null,
                          null,
                          null,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3839,
                            "mutability": "mutable",
                            "name": "sqrtPriceX96",
                            "nameLocation": "9756:12:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 3893,
                            "src": "9748:20:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "typeName": {
                              "id": 3838,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "9748:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "visibility": "internal"
                          },
                          null,
                          null,
                          null,
                          null,
                          null,
                          null
                        ],
                        "id": 3845,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3841,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3251,
                                  "src": "9799:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 3840,
                                "name": "IUniswapV3Pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2012,
                                "src": "9784:14:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                  "typeString": "type(contract IUniswapV3Pool)"
                                }
                              },
                              "id": 3842,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9784:20:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                "typeString": "contract IUniswapV3Pool"
                              }
                            },
                            "id": 3843,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "slot0",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2345,
                            "src": "9784:26:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                              "typeString": "function () view external returns (uint160,int24,uint16,uint16,uint16,uint8,bool)"
                            }
                          },
                          "id": 3844,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9784:28:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint160_$_t_int24_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint8_$_t_bool_$",
                            "typeString": "tuple(uint160,int24,uint16,uint16,uint16,uint8,bool)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9747:65:20"
                      },
                      {
                        "expression": {
                          "id": 3855,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3846,
                            "name": "liquidity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3832,
                            "src": "9819:9:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3849,
                                "name": "sqrtPriceX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3839,
                                "src": "9871:12:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "id": 3850,
                                "name": "sqrtRatioAX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3259,
                                "src": "9885:13:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "id": 3851,
                                "name": "sqrtRatioBX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3263,
                                "src": "9900:13:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "id": 3852,
                                "name": "amount0Desired",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3823,
                                "src": "9915:14:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 3853,
                                "name": "amount1Desired",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3825,
                                "src": "9931:14:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 3847,
                                "name": "LiquidityAmounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4640,
                                "src": "9831:16:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_LiquidityAmounts_$4640_$",
                                  "typeString": "type(library LiquidityAmounts)"
                                }
                              },
                              "id": 3848,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getLiquidityForAmounts",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4493,
                              "src": "9831:39:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint160_$_t_uint256_$_t_uint256_$returns$_t_uint128_$",
                                "typeString": "function (uint160,uint160,uint160,uint256,uint256) pure returns (uint128)"
                              }
                            },
                            "id": 3854,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9831:115:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "9819:127:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 3856,
                        "nodeType": "ExpressionStatement",
                        "src": "9819:127:20"
                      },
                      {
                        "expression": {
                          "id": 3880,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 3857,
                                "name": "amount0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3834,
                                "src": "9954:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 3858,
                                "name": "amount1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3836,
                                "src": "9963:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 3859,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "9953:18:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 3866,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "10015:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_UniV3PairManager_$4051",
                                      "typeString": "contract UniV3PairManager"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_UniV3PairManager_$4051",
                                      "typeString": "contract UniV3PairManager"
                                    }
                                  ],
                                  "id": 3865,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10007:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 3864,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10007:7:20",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3867,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10007:13:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3868,
                                "name": "tickLower",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3267,
                                "src": "10028:9:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              {
                                "id": 3869,
                                "name": "tickUpper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3271,
                                "src": "10045:9:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              {
                                "id": 3870,
                                "name": "liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3832,
                                "src": "10062:9:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 3874,
                                        "name": "_poolKey",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3302,
                                        "src": "10118:8:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_PoolKey_$4649_storage",
                                          "typeString": "struct PoolAddress.PoolKey storage ref"
                                        }
                                      },
                                      {
                                        "expression": {
                                          "id": 3875,
                                          "name": "msg",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -15,
                                          "src": "10135:3:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_message",
                                            "typeString": "msg"
                                          }
                                        },
                                        "id": 3876,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sender",
                                        "nodeType": "MemberAccess",
                                        "src": "10135:10:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_struct$_PoolKey_$4649_storage",
                                          "typeString": "struct PoolAddress.PoolKey storage ref"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 3873,
                                      "name": "MintCallbackData",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11756,
                                      "src": "10090:16:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_struct$_MintCallbackData_$11756_storage_ptr_$",
                                        "typeString": "type(struct IUniV3PairManager.MintCallbackData storage pointer)"
                                      }
                                    },
                                    "id": 3877,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "structConstructorCall",
                                    "lValueRequested": false,
                                    "names": [
                                      "_poolKey",
                                      "payer"
                                    ],
                                    "nodeType": "FunctionCall",
                                    "src": "10090:57:20",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MintCallbackData_$11756_memory_ptr",
                                      "typeString": "struct IUniV3PairManager.MintCallbackData memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_MintCallbackData_$11756_memory_ptr",
                                      "typeString": "struct IUniV3PairManager.MintCallbackData memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 3871,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "10079:3:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 3872,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encode",
                                  "nodeType": "MemberAccess",
                                  "src": "10079:10:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 3878,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10079:69:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3861,
                                    "name": "pool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3251,
                                    "src": "9989:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3860,
                                  "name": "IUniswapV3Pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2012,
                                  "src": "9974:14:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IUniswapV3Pool_$2012_$",
                                    "typeString": "type(contract IUniswapV3Pool)"
                                  }
                                },
                                "id": 3862,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9974:20:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUniswapV3Pool_$2012",
                                  "typeString": "contract IUniswapV3Pool"
                                }
                              },
                              "id": 3863,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mint",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2039,
                              "src": "9974:25:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_int24_$_t_int24_$_t_uint128_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_uint256_$",
                                "typeString": "function (address,int24,int24,uint128,bytes memory) external returns (uint256,uint256)"
                              }
                            },
                            "id": 3879,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9974:180:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "src": "9953:201:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3881,
                        "nodeType": "ExpressionStatement",
                        "src": "9953:201:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 3888,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3884,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3882,
                              "name": "amount0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3834,
                              "src": "10165:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 3883,
                              "name": "amount0Min",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3827,
                              "src": "10175:10:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10165:20:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3887,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3885,
                              "name": "amount1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3836,
                              "src": "10189:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 3886,
                              "name": "amount1Min",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3829,
                              "src": "10199:10:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10189:20:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "10165:44:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3892,
                        "nodeType": "IfStatement",
                        "src": "10161:76:20",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3889,
                              "name": "ExcessiveSlippage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11798,
                              "src": "10218:17:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 3890,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10218:19:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3891,
                          "nodeType": "RevertStatement",
                          "src": "10211:26:20"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3821,
                    "nodeType": "StructuredDocumentation",
                    "src": "8714:788:20",
                    "text": "@notice Adds liquidity to an initialized pool\n @dev Reverts if the returned amount0 is less than amount0Min or if amount1 is less than amount1Min\n @dev This function calls the mint function of the corresponding Uniswap pool, which in turn calls UniswapV3Callback\n @param amount0Desired The amount of token0 we would like to provide\n @param amount1Desired The amount of token1 we would like to provide\n @param amount0Min The minimum amount of token0 we want to provide\n @param amount1Min The minimum amount of token1 we want to provide\n @return liquidity The calculated liquidity we get for the token amounts we provided\n @return amount0 The amount of token0 we ended up providing\n @return amount1 The amount of token1 we ended up providing"
                  },
                  "id": 3894,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_addLiquidity",
                  "nameLocation": "9514:13:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3830,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3823,
                        "mutability": "mutable",
                        "name": "amount0Desired",
                        "nameLocation": "9541:14:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3894,
                        "src": "9533:22:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3822,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9533:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3825,
                        "mutability": "mutable",
                        "name": "amount1Desired",
                        "nameLocation": "9569:14:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3894,
                        "src": "9561:22:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3824,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9561:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3827,
                        "mutability": "mutable",
                        "name": "amount0Min",
                        "nameLocation": "9597:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3894,
                        "src": "9589:18:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3826,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9589:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3829,
                        "mutability": "mutable",
                        "name": "amount1Min",
                        "nameLocation": "9621:10:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3894,
                        "src": "9613:18:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3828,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9613:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9527:108:20"
                  },
                  "returnParameters": {
                    "id": 3837,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3832,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "9677:9:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3894,
                        "src": "9669:17:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 3831,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "9669:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3834,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "9702:7:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3894,
                        "src": "9694:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3833,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9694:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3836,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "9725:7:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3894,
                        "src": "9717:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3835,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9717:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9661:77:20"
                  },
                  "scope": 4051,
                  "src": "9505:737:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3913,
                    "nodeType": "Block",
                    "src": "10706:52:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3907,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3897,
                              "src": "10730:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3908,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3899,
                              "src": "10737:4:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3909,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3901,
                              "src": "10743:2:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3910,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3903,
                              "src": "10747:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3906,
                            "name": "_safeTransferFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4050,
                            "src": "10712:17:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 3911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10712:41:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3912,
                        "nodeType": "ExpressionStatement",
                        "src": "10712:41:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3895,
                    "nodeType": "StructuredDocumentation",
                    "src": "10246:358:20",
                    "text": "@notice Transfers the passed-in token from the payer to the recipient for the corresponding value\n @param token The token to be transferred to the recipient\n @param from The address of the payer\n @param to The address of the passed-in tokens recipient\n @param value How much of that token to be transferred from payer to the recipient"
                  },
                  "id": 3914,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_pay",
                  "nameLocation": "10616:4:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3904,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3897,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "10634:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3914,
                        "src": "10626:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3896,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10626:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3899,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "10653:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3914,
                        "src": "10645:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3898,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10645:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3901,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "10671:2:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3914,
                        "src": "10663:10:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3900,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10663:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3903,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "10687:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3914,
                        "src": "10679:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3902,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10679:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10620:76:20"
                  },
                  "returnParameters": {
                    "id": 3905,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10706:0:20"
                  },
                  "scope": 4051,
                  "src": "10607:151:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3941,
                    "nodeType": "Block",
                    "src": "11088:104:20",
                    "statements": [
                      {
                        "expression": {
                          "id": 3924,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3922,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3235,
                            "src": "11094:11:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 3923,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3919,
                            "src": "11109:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11094:21:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3925,
                        "nodeType": "ExpressionStatement",
                        "src": "11094:21:20"
                      },
                      {
                        "expression": {
                          "id": 3930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3926,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3298,
                              "src": "11121:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 3928,
                            "indexExpression": {
                              "id": 3927,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3917,
                              "src": "11131:2:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11121:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 3929,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3919,
                            "src": "11138:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11121:23:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3931,
                        "nodeType": "ExpressionStatement",
                        "src": "11121:23:20"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 3935,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11172:1:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 3934,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11164:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 3933,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11164:7:20",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3936,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11164:10:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3937,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3917,
                              "src": "11176:2:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3938,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3919,
                              "src": "11180:6:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3932,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 653,
                            "src": "11155:8:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3939,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11155:32:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3940,
                        "nodeType": "EmitStatement",
                        "src": "11150:37:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3915,
                    "nodeType": "StructuredDocumentation",
                    "src": "10762:271:20",
                    "text": "@notice Mints Keep3r credits to the passed-in address of recipient and increases total supply of Keep3r credits by the corresponding amount\n @param to The recipient of the Keep3r credits\n @param amount The amount Keep3r credits to be minted to the recipient"
                  },
                  "id": 3942,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nameLocation": "11045:5:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3920,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3917,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "11059:2:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3942,
                        "src": "11051:10:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3916,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11051:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3919,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "11071:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3942,
                        "src": "11063:14:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3918,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11063:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11050:28:20"
                  },
                  "returnParameters": {
                    "id": 3921,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11088:0:20"
                  },
                  "scope": 4051,
                  "src": "11036:156:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3969,
                    "nodeType": "Block",
                    "src": "11548:104:20",
                    "statements": [
                      {
                        "expression": {
                          "id": 3952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3950,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3235,
                            "src": "11554:11:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 3951,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3947,
                            "src": "11569:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11554:21:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3953,
                        "nodeType": "ExpressionStatement",
                        "src": "11554:21:20"
                      },
                      {
                        "expression": {
                          "id": 3958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3954,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3298,
                              "src": "11581:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 3956,
                            "indexExpression": {
                              "id": 3955,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3945,
                              "src": "11591:2:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11581:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 3957,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3947,
                            "src": "11598:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11581:23:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3959,
                        "nodeType": "ExpressionStatement",
                        "src": "11581:23:20"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3961,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3945,
                              "src": "11624:2:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 3964,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11636:1:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 3963,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11628:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 3962,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11628:7:20",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3965,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11628:10:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3966,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3947,
                              "src": "11640:6:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3960,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 653,
                            "src": "11615:8:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3967,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11615:32:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3968,
                        "nodeType": "EmitStatement",
                        "src": "11610:37:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3943,
                    "nodeType": "StructuredDocumentation",
                    "src": "11196:297:20",
                    "text": "@notice Burns Keep3r credits to the passed-in address of recipient and reduces total supply of Keep3r credits by the corresponding amount\n @param to The address that will get its Keep3r credits burned\n @param amount The amount Keep3r credits to be burned from the recipient/recipient"
                  },
                  "id": 3970,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nameLocation": "11505:5:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3948,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3945,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "11519:2:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3970,
                        "src": "11511:10:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3944,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11511:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3947,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "11531:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3970,
                        "src": "11523:14:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3946,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11523:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11510:28:20"
                  },
                  "returnParameters": {
                    "id": 3949,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11548:0:20"
                  },
                  "scope": 4051,
                  "src": "11496:156:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3998,
                    "nodeType": "Block",
                    "src": "12005:103:20",
                    "statements": [
                      {
                        "expression": {
                          "id": 3984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3980,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3298,
                              "src": "12011:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 3982,
                            "indexExpression": {
                              "id": 3981,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3973,
                              "src": "12021:4:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "12011:15:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 3983,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3977,
                            "src": "12030:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12011:25:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3985,
                        "nodeType": "ExpressionStatement",
                        "src": "12011:25:20"
                      },
                      {
                        "expression": {
                          "id": 3990,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3986,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3298,
                              "src": "12042:9:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 3988,
                            "indexExpression": {
                              "id": 3987,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3975,
                              "src": "12052:2:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "12042:13:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 3989,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3977,
                            "src": "12059:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12042:23:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3991,
                        "nodeType": "ExpressionStatement",
                        "src": "12042:23:20"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 3993,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3973,
                              "src": "12086:4:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3994,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3975,
                              "src": "12092:2:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3995,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3977,
                              "src": "12096:6:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3992,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 653,
                            "src": "12077:8:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 3996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12077:26:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3997,
                        "nodeType": "EmitStatement",
                        "src": "12072:31:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3971,
                    "nodeType": "StructuredDocumentation",
                    "src": "11656:254:20",
                    "text": "@notice Transfers amount of Keep3r credits between two addresses\n @param from The user that transfers the Keep3r credits\n @param to The user that receives the Keep3r credits\n @param amount The amount of Keep3r credits to be transferred"
                  },
                  "id": 3999,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transferTokens",
                  "nameLocation": "11922:15:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3978,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3973,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "11951:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3999,
                        "src": "11943:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3972,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11943:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3975,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "11969:2:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3999,
                        "src": "11961:10:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3974,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11961:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3977,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "11985:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3999,
                        "src": "11977:14:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3976,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11977:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11937:58:20"
                  },
                  "returnParameters": {
                    "id": 3979,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12005:0:20"
                  },
                  "scope": 4051,
                  "src": "11913:195:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4049,
                    "nodeType": "Block",
                    "src": "12759:283:20",
                    "statements": [
                      {
                        "assignments": [
                          4012,
                          4014
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4012,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "12826:7:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4049,
                            "src": "12821:12:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4011,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "12821:4:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 4014,
                            "mutability": "mutable",
                            "name": "data",
                            "nameLocation": "12848:4:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4049,
                            "src": "12835:17:20",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 4013,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "12835:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4027,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "expression": {
                                      "id": 4019,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 663,
                                      "src": "12890:6:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 4020,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "transferFrom",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 644,
                                    "src": "12890:19:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function IERC20.transferFrom(address,address,uint256) returns (bool)"
                                    }
                                  },
                                  "id": 4021,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "src": "12890:28:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "id": 4022,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4004,
                                  "src": "12920:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4023,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4006,
                                  "src": "12926:2:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4024,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4008,
                                  "src": "12930:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 4017,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "12867:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4018,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "src": "12867:22:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4025,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12867:69:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 4015,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4002,
                              "src": "12856:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 4016,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "src": "12856:10:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4026,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12856:81:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12820:117:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4029,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "12947:8:20",
                            "subExpression": {
                              "id": 4028,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4012,
                              "src": "12948:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 4042,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4033,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 4030,
                                      "name": "data",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4014,
                                      "src": "12960:4:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 4031,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "src": "12960:11:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "!=",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 4032,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12975:1:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "12960:16:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "id": 4041,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "!",
                                  "prefix": true,
                                  "src": "12980:25:20",
                                  "subExpression": {
                                    "arguments": [
                                      {
                                        "id": 4036,
                                        "name": "data",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4014,
                                        "src": "12992:4:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "components": [
                                          {
                                            "id": 4038,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "12999:4:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_bool_$",
                                              "typeString": "type(bool)"
                                            },
                                            "typeName": {
                                              "id": 4037,
                                              "name": "bool",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "12999:4:20",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "id": 4039,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "12998:6:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      ],
                                      "expression": {
                                        "id": 4034,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "12981:3:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 4035,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "src": "12981:10:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 4040,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "12981:24:20",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "12960:45:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 4043,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "12959:47:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "12947:59:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4048,
                        "nodeType": "IfStatement",
                        "src": "12943:94:20",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 4045,
                              "name": "UnsuccessfulTransfer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11801,
                              "src": "13015:20:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 4046,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13015:22:20",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 4047,
                          "nodeType": "RevertStatement",
                          "src": "13008:29:20"
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4000,
                    "nodeType": "StructuredDocumentation",
                    "src": "12112:532:20",
                    "text": "@notice Transfers the passed-in token from the specified \"from\" to the specified \"to\" for the corresponding value\n @dev Reverts with IUniV3PairManager#UnsuccessfulTransfer if the transfer was not successful,\n      or if the passed data length is different than 0 and the decoded data is not a boolean\n @param token The token to be transferred to the specified \"to\"\n @param from  The address which is going to transfer the tokens\n @param value How much of that token to be transferred from \"from\" to \"to\""
                  },
                  "id": 4050,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeTransferFrom",
                  "nameLocation": "12656:17:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4009,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4002,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "12687:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4050,
                        "src": "12679:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4001,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12679:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4004,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "12706:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4050,
                        "src": "12698:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4003,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12698:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4006,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "12724:2:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4050,
                        "src": "12716:10:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4005,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12716:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4008,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "12740:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4050,
                        "src": "12732:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4007,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12732:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12673:76:20"
                  },
                  "returnParameters": {
                    "id": 4010,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12759:0:20"
                  },
                  "scope": 4051,
                  "src": "12647:395:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4052,
              "src": "2695:10349:20",
              "usedErrors": [
                11795,
                11798,
                11801,
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "2216:10829:20"
        },
        "id": 20
      },
      "solidity/contracts/UniV3PairManagerFactory.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/UniV3PairManagerFactory.sol",
          "exportedSymbols": {
            "Context": [
              1231
            ],
            "ERC20": [
              585
            ],
            "FixedPoint96": [
              4130
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IPairManager": [
              11703
            ],
            "IPairManagerFactory": [
              11739
            ],
            "IUniV3PairManager": [
              11866
            ],
            "IUniswapV3Pool": [
              2012
            ],
            "IUniswapV3PoolActions": [
              2108
            ],
            "IUniswapV3PoolDerivedState": [
              2139
            ],
            "IUniswapV3PoolEvents": [
              2258
            ],
            "IUniswapV3PoolImmutables": [
              2298
            ],
            "IUniswapV3PoolOwnerActions": [
              2324
            ],
            "IUniswapV3PoolState": [
              2432
            ],
            "IWeth9": [
              12787
            ],
            "LiquidityAmounts": [
              4640
            ],
            "PoolAddress": [
              4650
            ],
            "TickMath": [
              5188
            ],
            "UniV3PairManager": [
              4051
            ],
            "UniV3PairManagerFactory": [
              4121
            ]
          },
          "id": 4122,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4053,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "2216:31:21"
            },
            {
              "absolutePath": "solidity/interfaces/IPairManagerFactory.sol",
              "file": "../interfaces/IPairManagerFactory.sol",
              "id": 4054,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4122,
              "sourceUnit": 11740,
              "src": "2249:47:21",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/UniV3PairManager.sol",
              "file": "./UniV3PairManager.sol",
              "id": 4055,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4122,
              "sourceUnit": 4052,
              "src": "2297:32:21",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Governable.sol",
              "file": "./peripherals/Governable.sol",
              "id": 4056,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4122,
              "sourceUnit": 5355,
              "src": "2330:38:21",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 4058,
                    "name": "IPairManagerFactory",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 11739,
                    "src": "2494:19:21"
                  },
                  "id": 4059,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2494:19:21"
                },
                {
                  "baseName": {
                    "id": 4060,
                    "name": "Governable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5354,
                    "src": "2515:10:21"
                  },
                  "id": 4061,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2515:10:21"
                }
              ],
              "contractDependencies": [
                4051
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 4057,
                "nodeType": "StructuredDocumentation",
                "src": "2370:88:21",
                "text": "@title Factory of Pair Managers\n @notice This contract creates new pair managers"
              },
              "fullyImplemented": true,
              "id": 4121,
              "linearizedBaseContracts": [
                4121,
                5354,
                11739,
                12863
              ],
              "name": "UniV3PairManagerFactory",
              "nameLocation": "2467:23:21",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    11717
                  ],
                  "constant": false,
                  "functionSelector": "9cd7bef0",
                  "id": 4066,
                  "mutability": "mutable",
                  "name": "pairManagers",
                  "nameLocation": "2574:12:21",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 4065,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2565:8:21"
                  },
                  "scope": 4121,
                  "src": "2530:56:21",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                    "typeString": "mapping(address => address)"
                  },
                  "typeName": {
                    "id": 4064,
                    "keyType": {
                      "id": 4062,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2538:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "2530:27:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                      "typeString": "mapping(address => address)"
                    },
                    "valueType": {
                      "id": 4063,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2549:7:21",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4074,
                    "nodeType": "Block",
                    "src": "2648:2:21",
                    "statements": []
                  },
                  "id": 4075,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 4071,
                          "name": "_governance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4068,
                          "src": "2635:11:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 4072,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 4070,
                        "name": "Governable",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5354,
                        "src": "2624:10:21"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2624:23:21"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4069,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4068,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "2611:11:21",
                        "nodeType": "VariableDeclaration",
                        "scope": 4075,
                        "src": "2603:19:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4067,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2603:7:21",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2602:21:21"
                  },
                  "returnParameters": {
                    "id": 4073,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2648:0:21"
                  },
                  "scope": 4121,
                  "src": "2591:59:21",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    11738
                  ],
                  "body": {
                    "id": 4119,
                    "nodeType": "Block",
                    "src": "2782:229:21",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4091,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 4084,
                              "name": "pairManagers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4066,
                              "src": "2792:12:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 4086,
                            "indexExpression": {
                              "id": 4085,
                              "name": "_pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4078,
                              "src": "2805:5:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2792:19:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 4089,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2823:1:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 4088,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2815:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4087,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2815:7:21",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4090,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2815:10:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2792:33:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4095,
                        "nodeType": "IfStatement",
                        "src": "2788:66:21",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 4092,
                              "name": "AlreadyInitialized",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11727,
                              "src": "2834:18:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 4093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2834:20:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 4094,
                          "nodeType": "RevertStatement",
                          "src": "2827:27:21"
                        }
                      },
                      {
                        "expression": {
                          "id": 4106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4096,
                            "name": "_pairManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4082,
                            "src": "2860:12:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 4102,
                                    "name": "_pool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4078,
                                    "src": "2904:5:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 4103,
                                    "name": "governance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5266,
                                    "src": "2911:10:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 4101,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "NewExpression",
                                  "src": "2883:20:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_UniV3PairManager_$4051_$",
                                    "typeString": "function (address,address) returns (contract UniV3PairManager)"
                                  },
                                  "typeName": {
                                    "id": 4100,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                      "id": 4099,
                                      "name": "UniV3PairManager",
                                      "nodeType": "IdentifierPath",
                                      "referencedDeclaration": 4051,
                                      "src": "2887:16:21"
                                    },
                                    "referencedDeclaration": 4051,
                                    "src": "2887:16:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_UniV3PairManager_$4051",
                                      "typeString": "contract UniV3PairManager"
                                    }
                                  }
                                },
                                "id": 4104,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2883:39:21",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_UniV3PairManager_$4051",
                                  "typeString": "contract UniV3PairManager"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_UniV3PairManager_$4051",
                                  "typeString": "contract UniV3PairManager"
                                }
                              ],
                              "id": 4098,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2875:7:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4097,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2875:7:21",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4105,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2875:48:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2860:63:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4107,
                        "nodeType": "ExpressionStatement",
                        "src": "2860:63:21"
                      },
                      {
                        "expression": {
                          "id": 4112,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 4108,
                              "name": "pairManagers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4066,
                              "src": "2929:12:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 4110,
                            "indexExpression": {
                              "id": 4109,
                              "name": "_pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4078,
                              "src": "2942:5:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2929:19:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4111,
                            "name": "_pairManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4082,
                            "src": "2951:12:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2929:34:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4113,
                        "nodeType": "ExpressionStatement",
                        "src": "2929:34:21"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 4115,
                              "name": "_pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4078,
                              "src": "2986:5:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4116,
                              "name": "_pairManager",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4082,
                              "src": "2993:12:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4114,
                            "name": "PairCreated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11724,
                            "src": "2974:11:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 4117,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2974:32:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4118,
                        "nodeType": "EmitStatement",
                        "src": "2969:37:21"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4076,
                    "nodeType": "StructuredDocumentation",
                    "src": "2654:34:21",
                    "text": "@inheritdoc IPairManagerFactory"
                  },
                  "functionSelector": "869fb514",
                  "id": 4120,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createPairManager",
                  "nameLocation": "2700:17:21",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4080,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2742:8:21"
                  },
                  "parameters": {
                    "id": 4079,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4078,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "2726:5:21",
                        "nodeType": "VariableDeclaration",
                        "scope": 4120,
                        "src": "2718:13:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4077,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2718:7:21",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2717:15:21"
                  },
                  "returnParameters": {
                    "id": 4083,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4082,
                        "mutability": "mutable",
                        "name": "_pairManager",
                        "nameLocation": "2768:12:21",
                        "nodeType": "VariableDeclaration",
                        "scope": 4120,
                        "src": "2760:20:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4081,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2760:7:21",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2759:22:21"
                  },
                  "scope": 4121,
                  "src": "2691:320:21",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 4122,
              "src": "2458:555:21",
              "usedErrors": [
                11727,
                11730,
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "2216:798:21"
        },
        "id": 21
      },
      "solidity/contracts/libraries/FixedPoint96.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/libraries/FixedPoint96.sol",
          "exportedSymbols": {
            "FixedPoint96": [
              4130
            ]
          },
          "id": 4131,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4123,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:31:22"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "fullyImplemented": true,
              "id": 4130,
              "linearizedBaseContracts": [
                4130
              ],
              "name": "FixedPoint96",
              "nameLocation": "86:12:22",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 4126,
                  "mutability": "constant",
                  "name": "RESOLUTION",
                  "nameLocation": "148:10:22",
                  "nodeType": "VariableDeclaration",
                  "scope": 4130,
                  "src": "124:39:22",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4124,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "124:5:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": {
                    "hexValue": "3936",
                    "id": 4125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "161:2:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_96_by_1",
                      "typeString": "int_const 96"
                    },
                    "value": "96"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 4129,
                  "mutability": "constant",
                  "name": "Q96",
                  "nameLocation": "193:3:22",
                  "nodeType": "VariableDeclaration",
                  "scope": 4130,
                  "src": "167:59:22",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4127,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "167:7:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "307831303030303030303030303030303030303030303030303030",
                    "id": 4128,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "199:27:22",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_79228162514264337593543950336_by_1",
                      "typeString": "int_const 79228162514264337593543950336"
                    },
                    "value": "0x1000000000000000000000000"
                  },
                  "visibility": "internal"
                }
              ],
              "scope": 4131,
              "src": "78:151:22",
              "usedErrors": []
            }
          ],
          "src": "45:185:22"
        },
        "id": 22
      },
      "solidity/contracts/libraries/FullMath.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/libraries/FullMath.sol",
          "exportedSymbols": {
            "FullMath": [
              4308
            ]
          },
          "id": 4309,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4132,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:23"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4133,
                "nodeType": "StructuredDocumentation",
                "src": "65:297:23",
                "text": "@title Contains 512-bit math functions\n @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\n @dev Handles \"phantom overflow\" i.e., allows multiplication and division where an intermediate value overflows 256 bits"
              },
              "fullyImplemented": true,
              "id": 4308,
              "linearizedBaseContracts": [
                4308
              ],
              "name": "FullMath",
              "nameLocation": "370:8:23",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4262,
                    "nodeType": "Block",
                    "src": "849:3486:23",
                    "statements": [
                      {
                        "id": 4261,
                        "nodeType": "UncheckedBlock",
                        "src": "855:3476:23",
                        "statements": [
                          {
                            "assignments": [
                              4146
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 4146,
                                "mutability": "mutable",
                                "name": "prod0",
                                "nameLocation": "1174:5:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 4261,
                                "src": "1166:13:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 4145,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1166:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 4147,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1166:13:23"
                          },
                          {
                            "assignments": [
                              4149
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 4149,
                                "mutability": "mutable",
                                "name": "prod1",
                                "nameLocation": "1240:5:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 4261,
                                "src": "1232:13:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 4148,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1232:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 4150,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1232:13:23"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "1306:127:23",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "1316:30:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "a",
                                        "nodeType": "YulIdentifier",
                                        "src": "1333:1:23"
                                      },
                                      {
                                        "name": "b",
                                        "nodeType": "YulIdentifier",
                                        "src": "1336:1:23"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1343:1:23",
                                            "type": "",
                                            "value": "0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "not",
                                          "nodeType": "YulIdentifier",
                                          "src": "1339:3:23"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1339:6:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mulmod",
                                      "nodeType": "YulIdentifier",
                                      "src": "1326:6:23"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1326:20:23"
                                  },
                                  "variables": [
                                    {
                                      "name": "mm",
                                      "nodeType": "YulTypedName",
                                      "src": "1320:2:23",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "1355:18:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "a",
                                        "nodeType": "YulIdentifier",
                                        "src": "1368:1:23"
                                      },
                                      {
                                        "name": "b",
                                        "nodeType": "YulIdentifier",
                                        "src": "1371:1:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "1364:3:23"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1364:9:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod0",
                                      "nodeType": "YulIdentifier",
                                      "src": "1355:5:23"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "1382:43:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "mm",
                                            "nodeType": "YulIdentifier",
                                            "src": "1399:2:23"
                                          },
                                          {
                                            "name": "prod0",
                                            "nodeType": "YulIdentifier",
                                            "src": "1403:5:23"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "1395:3:23"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1395:14:23"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "mm",
                                            "nodeType": "YulIdentifier",
                                            "src": "1414:2:23"
                                          },
                                          {
                                            "name": "prod0",
                                            "nodeType": "YulIdentifier",
                                            "src": "1418:5:23"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "lt",
                                          "nodeType": "YulIdentifier",
                                          "src": "1411:2:23"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1411:13:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1391:3:23"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1391:34:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod1",
                                      "nodeType": "YulIdentifier",
                                      "src": "1382:5:23"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "london",
                            "externalReferences": [
                              {
                                "declaration": 4136,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1333:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4136,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1368:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4138,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1336:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4138,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1371:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4146,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1355:5:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4146,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1403:5:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4146,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1418:5:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4149,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1382:5:23",
                                "valueSize": 1
                              }
                            ],
                            "id": 4151,
                            "nodeType": "InlineAssembly",
                            "src": "1297:136:23"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4154,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4152,
                                "name": "prod1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4149,
                                "src": "1501:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 4153,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1510:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1501:10:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 4165,
                            "nodeType": "IfStatement",
                            "src": "1497:155:23",
                            "trueBody": {
                              "id": 4164,
                              "nodeType": "Block",
                              "src": "1513:139:23",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 4158,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 4156,
                                          "name": "denominator",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4140,
                                          "src": "1531:11:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                          "hexValue": "30",
                                          "id": 4157,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1545:1:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        },
                                        "src": "1531:15:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      ],
                                      "id": 4155,
                                      "name": "require",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "src": "1523:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                        "typeString": "function (bool) pure"
                                      }
                                    },
                                    "id": 4159,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1523:24:23",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 4160,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1523:24:23"
                                },
                                {
                                  "AST": {
                                    "nodeType": "YulBlock",
                                    "src": "1566:55:23",
                                    "statements": [
                                      {
                                        "nodeType": "YulAssignment",
                                        "src": "1578:33:23",
                                        "value": {
                                          "arguments": [
                                            {
                                              "name": "prod0",
                                              "nodeType": "YulIdentifier",
                                              "src": "1592:5:23"
                                            },
                                            {
                                              "name": "denominator",
                                              "nodeType": "YulIdentifier",
                                              "src": "1599:11:23"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "div",
                                            "nodeType": "YulIdentifier",
                                            "src": "1588:3:23"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1588:23:23"
                                        },
                                        "variableNames": [
                                          {
                                            "name": "result",
                                            "nodeType": "YulIdentifier",
                                            "src": "1578:6:23"
                                          }
                                        ]
                                      }
                                    ]
                                  },
                                  "evmVersion": "london",
                                  "externalReferences": [
                                    {
                                      "declaration": 4140,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "1599:11:23",
                                      "valueSize": 1
                                    },
                                    {
                                      "declaration": 4146,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "1592:5:23",
                                      "valueSize": 1
                                    },
                                    {
                                      "declaration": 4143,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "1578:6:23",
                                      "valueSize": 1
                                    }
                                  ],
                                  "id": 4161,
                                  "nodeType": "InlineAssembly",
                                  "src": "1557:64:23"
                                },
                                {
                                  "expression": {
                                    "id": 4162,
                                    "name": "result",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4143,
                                    "src": "1637:6:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "functionReturnParameters": 4144,
                                  "id": 4163,
                                  "nodeType": "Return",
                                  "src": "1630:13:23"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4169,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4167,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4140,
                                    "src": "1759:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "id": 4168,
                                    "name": "prod1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4149,
                                    "src": "1773:5:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1759:19:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "id": 4166,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "1751:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                  "typeString": "function (bool) pure"
                                }
                              },
                              "id": 4170,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1751:28:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 4171,
                            "nodeType": "ExpressionStatement",
                            "src": "1751:28:23"
                          },
                          {
                            "assignments": [
                              4173
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 4173,
                                "mutability": "mutable",
                                "name": "remainder",
                                "nameLocation": "2052:9:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 4261,
                                "src": "2044:17:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 4172,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2044:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 4174,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2044:17:23"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "2078:56:23",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "2088:38:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "a",
                                        "nodeType": "YulIdentifier",
                                        "src": "2108:1:23"
                                      },
                                      {
                                        "name": "b",
                                        "nodeType": "YulIdentifier",
                                        "src": "2111:1:23"
                                      },
                                      {
                                        "name": "denominator",
                                        "nodeType": "YulIdentifier",
                                        "src": "2114:11:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mulmod",
                                      "nodeType": "YulIdentifier",
                                      "src": "2101:6:23"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2101:25:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "remainder",
                                      "nodeType": "YulIdentifier",
                                      "src": "2088:9:23"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "london",
                            "externalReferences": [
                              {
                                "declaration": 4136,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2108:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4138,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2111:1:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4140,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2114:11:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4173,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2088:9:23",
                                "valueSize": 1
                              }
                            ],
                            "id": 4175,
                            "nodeType": "InlineAssembly",
                            "src": "2069:65:23"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "2203:98:23",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "2213:41:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "prod1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2226:5:23"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "remainder",
                                            "nodeType": "YulIdentifier",
                                            "src": "2236:9:23"
                                          },
                                          {
                                            "name": "prod0",
                                            "nodeType": "YulIdentifier",
                                            "src": "2247:5:23"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "gt",
                                          "nodeType": "YulIdentifier",
                                          "src": "2233:2:23"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2233:20:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2222:3:23"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2222:32:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod1",
                                      "nodeType": "YulIdentifier",
                                      "src": "2213:5:23"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "2263:30:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "prod0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2276:5:23"
                                      },
                                      {
                                        "name": "remainder",
                                        "nodeType": "YulIdentifier",
                                        "src": "2283:9:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2272:3:23"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2272:21:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod0",
                                      "nodeType": "YulIdentifier",
                                      "src": "2263:5:23"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "london",
                            "externalReferences": [
                              {
                                "declaration": 4146,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2247:5:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4146,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2263:5:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4146,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2276:5:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4149,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2213:5:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4149,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2226:5:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4173,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2236:9:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4173,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2283:9:23",
                                "valueSize": 1
                              }
                            ],
                            "id": 4176,
                            "nodeType": "InlineAssembly",
                            "src": "2194:107:23"
                          },
                          {
                            "assignments": [
                              4178
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 4178,
                                "mutability": "mutable",
                                "name": "twos",
                                "nameLocation": "2450:4:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 4261,
                                "src": "2442:12:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 4177,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2442:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 4186,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4185,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4182,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4180,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "~",
                                      "prefix": true,
                                      "src": "2458:12:23",
                                      "subExpression": {
                                        "id": 4179,
                                        "name": "denominator",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4140,
                                        "src": "2459:11:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 4181,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2473:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "2458:16:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4183,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2457:18:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "id": 4184,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4140,
                                "src": "2478:11:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2457:32:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2442:47:23"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "2550:55:23",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "2560:37:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "denominator",
                                        "nodeType": "YulIdentifier",
                                        "src": "2579:11:23"
                                      },
                                      {
                                        "name": "twos",
                                        "nodeType": "YulIdentifier",
                                        "src": "2592:4:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nodeType": "YulIdentifier",
                                      "src": "2575:3:23"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2575:22:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "denominator",
                                      "nodeType": "YulIdentifier",
                                      "src": "2560:11:23"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "london",
                            "externalReferences": [
                              {
                                "declaration": 4140,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2560:11:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4140,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2579:11:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4178,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2592:4:23",
                                "valueSize": 1
                              }
                            ],
                            "id": 4187,
                            "nodeType": "InlineAssembly",
                            "src": "2541:64:23"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "2674:43:23",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "2684:25:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "prod0",
                                        "nodeType": "YulIdentifier",
                                        "src": "2697:5:23"
                                      },
                                      {
                                        "name": "twos",
                                        "nodeType": "YulIdentifier",
                                        "src": "2704:4:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nodeType": "YulIdentifier",
                                      "src": "2693:3:23"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2693:16:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "prod0",
                                      "nodeType": "YulIdentifier",
                                      "src": "2684:5:23"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "london",
                            "externalReferences": [
                              {
                                "declaration": 4146,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2684:5:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4146,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2697:5:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4178,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2704:4:23",
                                "valueSize": 1
                              }
                            ],
                            "id": 4188,
                            "nodeType": "InlineAssembly",
                            "src": "2665:52:23"
                          },
                          {
                            "AST": {
                              "nodeType": "YulBlock",
                              "src": "2897:57:23",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "2907:39:23",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2927:1:23",
                                                "type": "",
                                                "value": "0"
                                              },
                                              {
                                                "name": "twos",
                                                "nodeType": "YulIdentifier",
                                                "src": "2930:4:23"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "2923:3:23"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2923:12:23"
                                          },
                                          {
                                            "name": "twos",
                                            "nodeType": "YulIdentifier",
                                            "src": "2937:4:23"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "2919:3:23"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2919:23:23"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2944:1:23",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2915:3:23"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2915:31:23"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "twos",
                                      "nodeType": "YulIdentifier",
                                      "src": "2907:4:23"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "london",
                            "externalReferences": [
                              {
                                "declaration": 4178,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2907:4:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4178,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2930:4:23",
                                "valueSize": 1
                              },
                              {
                                "declaration": 4178,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2937:4:23",
                                "valueSize": 1
                              }
                            ],
                            "id": 4189,
                            "nodeType": "InlineAssembly",
                            "src": "2888:66:23"
                          },
                          {
                            "expression": {
                              "id": 4194,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 4190,
                                "name": "prod0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4146,
                                "src": "2961:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "|=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4193,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 4191,
                                  "name": "prod1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4149,
                                  "src": "2970:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 4192,
                                  "name": "twos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4178,
                                  "src": "2978:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2970:12:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2961:21:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4195,
                            "nodeType": "ExpressionStatement",
                            "src": "2961:21:23"
                          },
                          {
                            "assignments": [
                              4197
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 4197,
                                "mutability": "mutable",
                                "name": "inv",
                                "nameLocation": "3312:3:23",
                                "nodeType": "VariableDeclaration",
                                "scope": 4261,
                                "src": "3304:11:23",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 4196,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3304:7:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 4204,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4203,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4200,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "33",
                                      "id": 4198,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3319:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "id": 4199,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4140,
                                      "src": "3323:11:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "3319:15:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4201,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3318:17:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "^",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 4202,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3338:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "3318:21:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "3304:35:23"
                          },
                          {
                            "expression": {
                              "id": 4211,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 4205,
                                "name": "inv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4197,
                                "src": "3546:3:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4210,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 4206,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3553:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4209,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4207,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4140,
                                    "src": "3557:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 4208,
                                    "name": "inv",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4197,
                                    "src": "3571:3:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3557:17:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3553:21:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3546:28:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4212,
                            "nodeType": "ExpressionStatement",
                            "src": "3546:28:23"
                          },
                          {
                            "expression": {
                              "id": 4219,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 4213,
                                "name": "inv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4197,
                                "src": "3602:3:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4218,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 4214,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3609:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4217,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4215,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4140,
                                    "src": "3613:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 4216,
                                    "name": "inv",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4197,
                                    "src": "3627:3:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3613:17:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3609:21:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3602:28:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4220,
                            "nodeType": "ExpressionStatement",
                            "src": "3602:28:23"
                          },
                          {
                            "expression": {
                              "id": 4227,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 4221,
                                "name": "inv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4197,
                                "src": "3659:3:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4226,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 4222,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3666:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4225,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4223,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4140,
                                    "src": "3670:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 4224,
                                    "name": "inv",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4197,
                                    "src": "3684:3:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3670:17:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3666:21:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3659:28:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4228,
                            "nodeType": "ExpressionStatement",
                            "src": "3659:28:23"
                          },
                          {
                            "expression": {
                              "id": 4235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 4229,
                                "name": "inv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4197,
                                "src": "3716:3:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4234,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 4230,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3723:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4233,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4231,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4140,
                                    "src": "3727:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 4232,
                                    "name": "inv",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4197,
                                    "src": "3741:3:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3727:17:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3723:21:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3716:28:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4236,
                            "nodeType": "ExpressionStatement",
                            "src": "3716:28:23"
                          },
                          {
                            "expression": {
                              "id": 4243,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 4237,
                                "name": "inv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4197,
                                "src": "3773:3:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4242,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 4238,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3780:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4241,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4239,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4140,
                                    "src": "3784:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 4240,
                                    "name": "inv",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4197,
                                    "src": "3798:3:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3784:17:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3780:21:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3773:28:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4244,
                            "nodeType": "ExpressionStatement",
                            "src": "3773:28:23"
                          },
                          {
                            "expression": {
                              "id": 4251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 4245,
                                "name": "inv",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4197,
                                "src": "3831:3:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4250,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 4246,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3838:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4249,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4247,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4140,
                                    "src": "3842:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 4248,
                                    "name": "inv",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4197,
                                    "src": "3856:3:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3842:17:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3838:21:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3831:28:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4252,
                            "nodeType": "ExpressionStatement",
                            "src": "3831:28:23"
                          },
                          {
                            "expression": {
                              "id": 4257,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 4253,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4143,
                                "src": "4283:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4256,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 4254,
                                  "name": "prod0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4146,
                                  "src": "4292:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 4255,
                                  "name": "inv",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4197,
                                  "src": "4300:3:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4292:11:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4283:20:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4258,
                            "nodeType": "ExpressionStatement",
                            "src": "4283:20:23"
                          },
                          {
                            "expression": {
                              "id": 4259,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4143,
                              "src": "4318:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 4144,
                            "id": 4260,
                            "nodeType": "Return",
                            "src": "4311:13:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4134,
                    "nodeType": "StructuredDocumentation",
                    "src": "383:349:23",
                    "text": "@notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @param a The multiplicand\n @param b The multiplier\n @param denominator The divisor\n @return result The 256-bit result\n @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv"
                  },
                  "id": 4263,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulDiv",
                  "nameLocation": "744:6:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4141,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4136,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "764:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 4263,
                        "src": "756:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4135,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "756:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4138,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "779:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 4263,
                        "src": "771:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4137,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "771:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4140,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nameLocation": "794:11:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 4263,
                        "src": "786:19:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4139,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "786:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "750:59:23"
                  },
                  "returnParameters": {
                    "id": 4144,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4143,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "841:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 4263,
                        "src": "833:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4142,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "833:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "832:16:23"
                  },
                  "scope": 4308,
                  "src": "735:3600:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4306,
                    "nodeType": "Block",
                    "src": "4729:183:23",
                    "statements": [
                      {
                        "id": 4305,
                        "nodeType": "UncheckedBlock",
                        "src": "4735:173:23",
                        "statements": [
                          {
                            "expression": {
                              "id": 4281,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 4275,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4273,
                                "src": "4753:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "id": 4277,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4266,
                                    "src": "4769:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 4278,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4268,
                                    "src": "4772:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 4279,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4270,
                                    "src": "4775:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 4276,
                                  "name": "mulDiv",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4263,
                                  "src": "4762:6:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 4280,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4762:25:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4753:34:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4282,
                            "nodeType": "ExpressionStatement",
                            "src": "4753:34:23"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4289,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 4284,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4266,
                                    "src": "4806:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 4285,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4268,
                                    "src": "4809:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 4286,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4270,
                                    "src": "4812:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 4283,
                                  "name": "mulmod",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -16,
                                  "src": "4799:6:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 4287,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4799:25:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 4288,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4827:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "4799:29:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 4304,
                            "nodeType": "IfStatement",
                            "src": "4795:107:23",
                            "trueBody": {
                              "id": 4303,
                              "nodeType": "Block",
                              "src": "4830:72:23",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 4297,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 4291,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4273,
                                          "src": "4848:6:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<",
                                        "rightExpression": {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "id": 4294,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "4862:7:23",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_uint256_$",
                                                  "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                  "id": 4293,
                                                  "name": "uint256",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "4862:7:23",
                                                  "typeDescriptions": {}
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_type$_t_uint256_$",
                                                  "typeString": "type(uint256)"
                                                }
                                              ],
                                              "id": 4292,
                                              "name": "type",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -27,
                                              "src": "4857:4:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                "typeString": "function () pure"
                                              }
                                            },
                                            "id": 4295,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4857:13:23",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_meta_type_t_uint256",
                                              "typeString": "type(uint256)"
                                            }
                                          },
                                          "id": 4296,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "max",
                                          "nodeType": "MemberAccess",
                                          "src": "4857:17:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "4848:26:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      ],
                                      "id": 4290,
                                      "name": "require",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "src": "4840:7:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                        "typeString": "function (bool) pure"
                                      }
                                    },
                                    "id": 4298,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4840:35:23",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 4299,
                                  "nodeType": "ExpressionStatement",
                                  "src": "4840:35:23"
                                },
                                {
                                  "expression": {
                                    "id": 4301,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "4885:8:23",
                                    "subExpression": {
                                      "id": 4300,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4273,
                                      "src": "4885:6:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 4302,
                                  "nodeType": "ExpressionStatement",
                                  "src": "4885:8:23"
                                }
                              ]
                            }
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4264,
                    "nodeType": "StructuredDocumentation",
                    "src": "4339:263:23",
                    "text": "@notice Calculates ceil(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @param a The multiplicand\n @param b The multiplier\n @param denominator The divisor\n @return result The 256-bit result"
                  },
                  "id": 4307,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulDivRoundingUp",
                  "nameLocation": "4614:16:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4271,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4266,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "4644:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 4307,
                        "src": "4636:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4265,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4636:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4268,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "4659:1:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 4307,
                        "src": "4651:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4267,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4651:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4270,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nameLocation": "4674:11:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 4307,
                        "src": "4666:19:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4269,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4666:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4630:59:23"
                  },
                  "returnParameters": {
                    "id": 4274,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4273,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "4721:6:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 4307,
                        "src": "4713:14:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4272,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4713:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4712:16:23"
                  },
                  "scope": 4308,
                  "src": "4605:307:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4309,
              "src": "362:4552:23",
              "usedErrors": []
            }
          ],
          "src": "32:4883:23"
        },
        "id": 23
      },
      "solidity/contracts/libraries/LiquidityAmounts.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/libraries/LiquidityAmounts.sol",
          "exportedSymbols": {
            "FixedPoint96": [
              4130
            ],
            "FullMath": [
              4308
            ],
            "LiquidityAmounts": [
              4640
            ]
          },
          "id": 4641,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4310,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:31:24"
            },
            {
              "absolutePath": "solidity/contracts/libraries/FullMath.sol",
              "file": "./FullMath.sol",
              "id": 4311,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4641,
              "sourceUnit": 4309,
              "src": "78:24:24",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/FixedPoint96.sol",
              "file": "./FixedPoint96.sol",
              "id": 4312,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4641,
              "sourceUnit": 4131,
              "src": "103:28:24",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "fullyImplemented": true,
              "id": 4640,
              "linearizedBaseContracts": [
                4640
              ],
              "name": "LiquidityAmounts",
              "nameLocation": "160:16:24",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4331,
                    "nodeType": "Block",
                    "src": "244:41:24",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4328,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "id": 4325,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 4320,
                                      "name": "y",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4317,
                                      "src": "259:1:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "arguments": [
                                        {
                                          "id": 4323,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4314,
                                          "src": "271:1:24",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 4322,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "263:7:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint128_$",
                                          "typeString": "type(uint128)"
                                        },
                                        "typeName": {
                                          "id": 4321,
                                          "name": "uint128",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "263:7:24",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 4324,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "263:10:24",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "src": "259:14:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "id": 4326,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "258:16:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 4327,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4314,
                                "src": "278:1:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "258:21:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 4319,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "250:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 4329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "250:30:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4330,
                        "nodeType": "ExpressionStatement",
                        "src": "250:30:24"
                      }
                    ]
                  },
                  "id": 4332,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint128",
                  "nameLocation": "190:9:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4315,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4314,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "208:1:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4332,
                        "src": "200:9:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4313,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "200:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "199:11:24"
                  },
                  "returnParameters": {
                    "id": 4318,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4317,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "241:1:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4332,
                        "src": "233:9:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 4316,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "233:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "232:11:24"
                  },
                  "scope": 4640,
                  "src": "181:104:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 4376,
                    "nodeType": "Block",
                    "src": "442:294:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 4345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4343,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4334,
                            "src": "452:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 4344,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4336,
                            "src": "468:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "452:29:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4354,
                        "nodeType": "IfStatement",
                        "src": "448:98:24",
                        "trueBody": {
                          "expression": {
                            "id": 4352,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 4346,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4334,
                                  "src": "484:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 4347,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4336,
                                  "src": "499:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 4348,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "483:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 4349,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4336,
                                  "src": "517:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 4350,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4334,
                                  "src": "532:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 4351,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "516:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "src": "483:63:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 4353,
                          "nodeType": "ExpressionStatement",
                          "src": "483:63:24"
                        }
                      },
                      {
                        "assignments": [
                          4356
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4356,
                            "mutability": "mutable",
                            "name": "intermediate",
                            "nameLocation": "560:12:24",
                            "nodeType": "VariableDeclaration",
                            "scope": 4376,
                            "src": "552:20:24",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4355,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "552:7:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4364,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4359,
                              "name": "sqrtRatioAX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4334,
                              "src": "591:13:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "id": 4360,
                              "name": "sqrtRatioBX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4336,
                              "src": "606:13:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "expression": {
                                "id": 4361,
                                "name": "FixedPoint96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4130,
                                "src": "621:12:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$4130_$",
                                  "typeString": "type(library FixedPoint96)"
                                }
                              },
                              "id": 4362,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "Q96",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4129,
                              "src": "621:16:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 4357,
                              "name": "FullMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4308,
                              "src": "575:8:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                "typeString": "type(library FullMath)"
                              }
                            },
                            "id": 4358,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mulDiv",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4263,
                            "src": "575:15:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "575:63:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "552:86:24"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4368,
                                  "name": "amount0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4338,
                                  "src": "677:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 4369,
                                  "name": "intermediate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4356,
                                  "src": "686:12:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  "id": 4372,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4370,
                                    "name": "sqrtRatioBX96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4336,
                                    "src": "700:13:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 4371,
                                    "name": "sqrtRatioAX96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4334,
                                    "src": "716:13:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  "src": "700:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                ],
                                "expression": {
                                  "id": 4366,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4308,
                                  "src": "661:8:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 4367,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4263,
                                "src": "661:15:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 4373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "661:69:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4365,
                            "name": "toUint128",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4332,
                            "src": "651:9:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$",
                              "typeString": "function (uint256) pure returns (uint128)"
                            }
                          },
                          "id": 4374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "651:80:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "functionReturnParameters": 4342,
                        "id": 4375,
                        "nodeType": "Return",
                        "src": "644:87:24"
                      }
                    ]
                  },
                  "id": 4377,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getLiquidityForAmount0",
                  "nameLocation": "298:22:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4339,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4334,
                        "mutability": "mutable",
                        "name": "sqrtRatioAX96",
                        "nameLocation": "334:13:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4377,
                        "src": "326:21:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4333,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "326:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4336,
                        "mutability": "mutable",
                        "name": "sqrtRatioBX96",
                        "nameLocation": "361:13:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4377,
                        "src": "353:21:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4335,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "353:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4338,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "388:7:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4377,
                        "src": "380:15:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4337,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "380:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "320:79:24"
                  },
                  "returnParameters": {
                    "id": 4342,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4341,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "431:9:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4377,
                        "src": "423:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 4340,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "423:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "422:19:24"
                  },
                  "scope": 4640,
                  "src": "289:447:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4412,
                    "nodeType": "Block",
                    "src": "893:206:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 4390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4388,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4379,
                            "src": "903:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 4389,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4381,
                            "src": "919:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "903:29:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4399,
                        "nodeType": "IfStatement",
                        "src": "899:98:24",
                        "trueBody": {
                          "expression": {
                            "id": 4397,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 4391,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4379,
                                  "src": "935:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 4392,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4381,
                                  "src": "950:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 4393,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "934:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 4394,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4381,
                                  "src": "968:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 4395,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4379,
                                  "src": "983:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 4396,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "967:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "src": "934:63:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 4398,
                          "nodeType": "ExpressionStatement",
                          "src": "934:63:24"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4403,
                                  "name": "amount1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4383,
                                  "src": "1036:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 4404,
                                    "name": "FixedPoint96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4130,
                                    "src": "1045:12:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$4130_$",
                                      "typeString": "type(library FixedPoint96)"
                                    }
                                  },
                                  "id": 4405,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "Q96",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4129,
                                  "src": "1045:16:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  "id": 4408,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4406,
                                    "name": "sqrtRatioBX96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4381,
                                    "src": "1063:13:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 4407,
                                    "name": "sqrtRatioAX96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4379,
                                    "src": "1079:13:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  "src": "1063:29:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                ],
                                "expression": {
                                  "id": 4401,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4308,
                                  "src": "1020:8:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 4402,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4263,
                                "src": "1020:15:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 4409,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1020:73:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4400,
                            "name": "toUint128",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4332,
                            "src": "1010:9:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$",
                              "typeString": "function (uint256) pure returns (uint128)"
                            }
                          },
                          "id": 4410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1010:84:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "functionReturnParameters": 4387,
                        "id": 4411,
                        "nodeType": "Return",
                        "src": "1003:91:24"
                      }
                    ]
                  },
                  "id": 4413,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getLiquidityForAmount1",
                  "nameLocation": "749:22:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4384,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4379,
                        "mutability": "mutable",
                        "name": "sqrtRatioAX96",
                        "nameLocation": "785:13:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4413,
                        "src": "777:21:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4378,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "777:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4381,
                        "mutability": "mutable",
                        "name": "sqrtRatioBX96",
                        "nameLocation": "812:13:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4413,
                        "src": "804:21:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4380,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "804:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4383,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "839:7:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4413,
                        "src": "831:15:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4382,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "831:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "771:79:24"
                  },
                  "returnParameters": {
                    "id": 4387,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4386,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "882:9:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4413,
                        "src": "874:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 4385,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "874:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "873:19:24"
                  },
                  "scope": 4640,
                  "src": "740:359:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4492,
                    "nodeType": "Block",
                    "src": "1303:627:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 4430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4428,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4417,
                            "src": "1313:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 4429,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4419,
                            "src": "1329:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "1313:29:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4439,
                        "nodeType": "IfStatement",
                        "src": "1309:98:24",
                        "trueBody": {
                          "expression": {
                            "id": 4437,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 4431,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4417,
                                  "src": "1345:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 4432,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4419,
                                  "src": "1360:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 4433,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "1344:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 4434,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4419,
                                  "src": "1378:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 4435,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4417,
                                  "src": "1393:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 4436,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1377:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "src": "1344:63:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 4438,
                          "nodeType": "ExpressionStatement",
                          "src": "1344:63:24"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 4442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4440,
                            "name": "sqrtRatioX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4415,
                            "src": "1418:12:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 4441,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4417,
                            "src": "1434:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "1418:29:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "id": 4454,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4452,
                              "name": "sqrtRatioX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4415,
                              "src": "1547:12:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 4453,
                              "name": "sqrtRatioBX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4419,
                              "src": "1562:13:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "src": "1547:28:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 4489,
                            "nodeType": "Block",
                            "src": "1838:88:24",
                            "statements": [
                              {
                                "expression": {
                                  "id": 4487,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 4481,
                                    "name": "liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4426,
                                    "src": "1846:9:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "arguments": [
                                      {
                                        "id": 4483,
                                        "name": "sqrtRatioAX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4417,
                                        "src": "1881:13:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 4484,
                                        "name": "sqrtRatioBX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4419,
                                        "src": "1896:13:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 4485,
                                        "name": "amount1",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4423,
                                        "src": "1911:7:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 4482,
                                      "name": "getLiquidityForAmount1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4413,
                                      "src": "1858:22:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint256_$returns$_t_uint128_$",
                                        "typeString": "function (uint160,uint160,uint256) pure returns (uint128)"
                                      }
                                    },
                                    "id": 4486,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1858:61:24",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "src": "1846:73:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "id": 4488,
                                "nodeType": "ExpressionStatement",
                                "src": "1846:73:24"
                              }
                            ]
                          },
                          "id": 4490,
                          "nodeType": "IfStatement",
                          "src": "1543:383:24",
                          "trueBody": {
                            "id": 4480,
                            "nodeType": "Block",
                            "src": "1577:255:24",
                            "statements": [
                              {
                                "assignments": [
                                  4456
                                ],
                                "declarations": [
                                  {
                                    "constant": false,
                                    "id": 4456,
                                    "mutability": "mutable",
                                    "name": "liquidity0",
                                    "nameLocation": "1593:10:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4480,
                                    "src": "1585:18:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    "typeName": {
                                      "id": 4455,
                                      "name": "uint128",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1585:7:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "visibility": "internal"
                                  }
                                ],
                                "id": 4462,
                                "initialValue": {
                                  "arguments": [
                                    {
                                      "id": 4458,
                                      "name": "sqrtRatioX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4415,
                                      "src": "1629:12:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 4459,
                                      "name": "sqrtRatioBX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4419,
                                      "src": "1643:13:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 4460,
                                      "name": "amount0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4421,
                                      "src": "1658:7:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 4457,
                                    "name": "getLiquidityForAmount0",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4377,
                                    "src": "1606:22:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint256_$returns$_t_uint128_$",
                                      "typeString": "function (uint160,uint160,uint256) pure returns (uint128)"
                                    }
                                  },
                                  "id": 4461,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1606:60:24",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "nodeType": "VariableDeclarationStatement",
                                "src": "1585:81:24"
                              },
                              {
                                "assignments": [
                                  4464
                                ],
                                "declarations": [
                                  {
                                    "constant": false,
                                    "id": 4464,
                                    "mutability": "mutable",
                                    "name": "liquidity1",
                                    "nameLocation": "1682:10:24",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 4480,
                                    "src": "1674:18:24",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    "typeName": {
                                      "id": 4463,
                                      "name": "uint128",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1674:7:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "visibility": "internal"
                                  }
                                ],
                                "id": 4470,
                                "initialValue": {
                                  "arguments": [
                                    {
                                      "id": 4466,
                                      "name": "sqrtRatioAX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4417,
                                      "src": "1718:13:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 4467,
                                      "name": "sqrtRatioX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4415,
                                      "src": "1733:12:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 4468,
                                      "name": "amount1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4423,
                                      "src": "1747:7:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 4465,
                                    "name": "getLiquidityForAmount1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4413,
                                    "src": "1695:22:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint256_$returns$_t_uint128_$",
                                      "typeString": "function (uint160,uint160,uint256) pure returns (uint128)"
                                    }
                                  },
                                  "id": 4469,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1695:60:24",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "nodeType": "VariableDeclarationStatement",
                                "src": "1674:81:24"
                              },
                              {
                                "expression": {
                                  "id": 4478,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 4471,
                                    "name": "liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4426,
                                    "src": "1764:9:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      },
                                      "id": 4474,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 4472,
                                        "name": "liquidity0",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4456,
                                        "src": "1776:10:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "id": 4473,
                                        "name": "liquidity1",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4464,
                                        "src": "1789:10:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      "src": "1776:23:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "id": 4476,
                                      "name": "liquidity1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4464,
                                      "src": "1815:10:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "id": 4477,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "1776:49:24",
                                    "trueExpression": {
                                      "id": 4475,
                                      "name": "liquidity0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4456,
                                      "src": "1802:10:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "src": "1764:61:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "id": 4479,
                                "nodeType": "ExpressionStatement",
                                "src": "1764:61:24"
                              }
                            ]
                          }
                        },
                        "id": 4491,
                        "nodeType": "IfStatement",
                        "src": "1414:512:24",
                        "trueBody": {
                          "id": 4451,
                          "nodeType": "Block",
                          "src": "1449:88:24",
                          "statements": [
                            {
                              "expression": {
                                "id": 4449,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 4443,
                                  "name": "liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4426,
                                  "src": "1457:9:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 4445,
                                      "name": "sqrtRatioAX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4417,
                                      "src": "1492:13:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 4446,
                                      "name": "sqrtRatioBX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4419,
                                      "src": "1507:13:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 4447,
                                      "name": "amount0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4421,
                                      "src": "1522:7:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 4444,
                                    "name": "getLiquidityForAmount0",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4377,
                                    "src": "1469:22:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint256_$returns$_t_uint128_$",
                                      "typeString": "function (uint160,uint160,uint256) pure returns (uint128)"
                                    }
                                  },
                                  "id": 4448,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1469:61:24",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "src": "1457:73:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "id": 4450,
                              "nodeType": "ExpressionStatement",
                              "src": "1457:73:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 4493,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getLiquidityForAmounts",
                  "nameLocation": "1112:22:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4424,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4415,
                        "mutability": "mutable",
                        "name": "sqrtRatioX96",
                        "nameLocation": "1148:12:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4493,
                        "src": "1140:20:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4414,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1140:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4417,
                        "mutability": "mutable",
                        "name": "sqrtRatioAX96",
                        "nameLocation": "1174:13:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4493,
                        "src": "1166:21:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4416,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1166:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4419,
                        "mutability": "mutable",
                        "name": "sqrtRatioBX96",
                        "nameLocation": "1201:13:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4493,
                        "src": "1193:21:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4418,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1193:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4421,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "1228:7:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4493,
                        "src": "1220:15:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4420,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1220:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4423,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "1249:7:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4493,
                        "src": "1241:15:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4422,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1241:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1134:126:24"
                  },
                  "returnParameters": {
                    "id": 4427,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4426,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "1292:9:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4493,
                        "src": "1284:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 4425,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1284:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1283:19:24"
                  },
                  "scope": 4640,
                  "src": "1103:827:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4533,
                    "nodeType": "Block",
                    "src": "2087:247:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 4506,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4504,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4495,
                            "src": "2097:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 4505,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4497,
                            "src": "2113:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "2097:29:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4515,
                        "nodeType": "IfStatement",
                        "src": "2093:98:24",
                        "trueBody": {
                          "expression": {
                            "id": 4513,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 4507,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4495,
                                  "src": "2129:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 4508,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4497,
                                  "src": "2144:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 4509,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "2128:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 4510,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4497,
                                  "src": "2162:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 4511,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4495,
                                  "src": "2177:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 4512,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2161:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "src": "2128:63:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 4514,
                          "nodeType": "ExpressionStatement",
                          "src": "2128:63:24"
                        }
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4524,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 4520,
                                      "name": "liquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4499,
                                      "src": "2229:9:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    ],
                                    "id": 4519,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2221:7:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 4518,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2221:7:24",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 4521,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2221:18:24",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<<",
                                "rightExpression": {
                                  "expression": {
                                    "id": 4522,
                                    "name": "FixedPoint96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4130,
                                    "src": "2243:12:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$4130_$",
                                      "typeString": "type(library FixedPoint96)"
                                    }
                                  },
                                  "id": 4523,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "RESOLUTION",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4126,
                                  "src": "2243:23:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "2221:45:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 4527,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 4525,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4497,
                                  "src": "2268:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 4526,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4495,
                                  "src": "2284:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "2268:29:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "id": 4528,
                                "name": "sqrtRatioBX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4497,
                                "src": "2299:13:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "expression": {
                                "id": 4516,
                                "name": "FullMath",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4308,
                                "src": "2205:8:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                  "typeString": "type(library FullMath)"
                                }
                              },
                              "id": 4517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mulDiv",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4263,
                              "src": "2205:15:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4529,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2205:108:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "id": 4530,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4495,
                            "src": "2316:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "2205:124:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4503,
                        "id": 4532,
                        "nodeType": "Return",
                        "src": "2198:131:24"
                      }
                    ]
                  },
                  "id": 4534,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmount0ForLiquidity",
                  "nameLocation": "1943:22:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4500,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4495,
                        "mutability": "mutable",
                        "name": "sqrtRatioAX96",
                        "nameLocation": "1979:13:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4534,
                        "src": "1971:21:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4494,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1971:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4497,
                        "mutability": "mutable",
                        "name": "sqrtRatioBX96",
                        "nameLocation": "2006:13:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4534,
                        "src": "1998:21:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4496,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1998:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4499,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "2033:9:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4534,
                        "src": "2025:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 4498,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2025:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1965:81:24"
                  },
                  "returnParameters": {
                    "id": 4503,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4502,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "2078:7:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4534,
                        "src": "2070:15:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4501,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2070:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2069:17:24"
                  },
                  "scope": 4640,
                  "src": "1934:400:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4567,
                    "nodeType": "Block",
                    "src": "2491:198:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 4547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4545,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4536,
                            "src": "2501:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 4546,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4538,
                            "src": "2517:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "2501:29:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4556,
                        "nodeType": "IfStatement",
                        "src": "2497:98:24",
                        "trueBody": {
                          "expression": {
                            "id": 4554,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 4548,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4536,
                                  "src": "2533:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 4549,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4538,
                                  "src": "2548:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 4550,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "2532:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 4551,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4538,
                                  "src": "2566:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 4552,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4536,
                                  "src": "2581:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 4553,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2565:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "src": "2532:63:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 4555,
                          "nodeType": "ExpressionStatement",
                          "src": "2532:63:24"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4559,
                              "name": "liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4540,
                              "src": "2625:9:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              "id": 4562,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4560,
                                "name": "sqrtRatioBX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4538,
                                "src": "2636:13:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "id": 4561,
                                "name": "sqrtRatioAX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4536,
                                "src": "2652:13:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "src": "2636:29:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "expression": {
                                "id": 4563,
                                "name": "FixedPoint96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4130,
                                "src": "2667:12:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$4130_$",
                                  "typeString": "type(library FixedPoint96)"
                                }
                              },
                              "id": 4564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "Q96",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4129,
                              "src": "2667:16:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 4557,
                              "name": "FullMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4308,
                              "src": "2609:8:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                "typeString": "type(library FullMath)"
                              }
                            },
                            "id": 4558,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mulDiv",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4263,
                            "src": "2609:15:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2609:75:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4544,
                        "id": 4566,
                        "nodeType": "Return",
                        "src": "2602:82:24"
                      }
                    ]
                  },
                  "id": 4568,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmount1ForLiquidity",
                  "nameLocation": "2347:22:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4541,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4536,
                        "mutability": "mutable",
                        "name": "sqrtRatioAX96",
                        "nameLocation": "2383:13:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4568,
                        "src": "2375:21:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4535,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2375:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4538,
                        "mutability": "mutable",
                        "name": "sqrtRatioBX96",
                        "nameLocation": "2410:13:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4568,
                        "src": "2402:21:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4537,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2402:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4540,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "2437:9:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4568,
                        "src": "2429:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 4539,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2429:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2369:81:24"
                  },
                  "returnParameters": {
                    "id": 4544,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4543,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "2482:7:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4568,
                        "src": "2474:15:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4542,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2474:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2473:17:24"
                  },
                  "scope": 4640,
                  "src": "2338:351:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4638,
                    "nodeType": "Block",
                    "src": "2889:539:24",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 4585,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4583,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4572,
                            "src": "2899:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 4584,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4574,
                            "src": "2915:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "2899:29:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4594,
                        "nodeType": "IfStatement",
                        "src": "2895:98:24",
                        "trueBody": {
                          "expression": {
                            "id": 4592,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 4586,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4572,
                                  "src": "2931:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 4587,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4574,
                                  "src": "2946:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 4588,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "2930:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 4589,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4574,
                                  "src": "2964:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 4590,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4572,
                                  "src": "2979:13:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 4591,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2963:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "src": "2930:63:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 4593,
                          "nodeType": "ExpressionStatement",
                          "src": "2930:63:24"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 4597,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4595,
                            "name": "sqrtRatioX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4570,
                            "src": "3004:12:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 4596,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4572,
                            "src": "3020:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "3004:29:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "id": 4609,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4607,
                              "name": "sqrtRatioX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4570,
                              "src": "3133:12:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 4608,
                              "name": "sqrtRatioBX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4574,
                              "src": "3148:13:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "src": "3133:28:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 4635,
                            "nodeType": "Block",
                            "src": "3336:88:24",
                            "statements": [
                              {
                                "expression": {
                                  "id": 4633,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 4627,
                                    "name": "amount1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4581,
                                    "src": "3344:7:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "arguments": [
                                      {
                                        "id": 4629,
                                        "name": "sqrtRatioAX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4572,
                                        "src": "3377:13:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 4630,
                                        "name": "sqrtRatioBX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4574,
                                        "src": "3392:13:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 4631,
                                        "name": "liquidity",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4576,
                                        "src": "3407:9:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      ],
                                      "id": 4628,
                                      "name": "getAmount1ForLiquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4568,
                                      "src": "3354:22:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$returns$_t_uint256_$",
                                        "typeString": "function (uint160,uint160,uint128) pure returns (uint256)"
                                      }
                                    },
                                    "id": 4632,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3354:63:24",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3344:73:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 4634,
                                "nodeType": "ExpressionStatement",
                                "src": "3344:73:24"
                              }
                            ]
                          },
                          "id": 4636,
                          "nodeType": "IfStatement",
                          "src": "3129:295:24",
                          "trueBody": {
                            "id": 4626,
                            "nodeType": "Block",
                            "src": "3163:167:24",
                            "statements": [
                              {
                                "expression": {
                                  "id": 4616,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 4610,
                                    "name": "amount0",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4579,
                                    "src": "3171:7:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "arguments": [
                                      {
                                        "id": 4612,
                                        "name": "sqrtRatioX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4570,
                                        "src": "3204:12:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 4613,
                                        "name": "sqrtRatioBX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4574,
                                        "src": "3218:13:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 4614,
                                        "name": "liquidity",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4576,
                                        "src": "3233:9:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      ],
                                      "id": 4611,
                                      "name": "getAmount0ForLiquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4534,
                                      "src": "3181:22:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$returns$_t_uint256_$",
                                        "typeString": "function (uint160,uint160,uint128) pure returns (uint256)"
                                      }
                                    },
                                    "id": 4615,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3181:62:24",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3171:72:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 4617,
                                "nodeType": "ExpressionStatement",
                                "src": "3171:72:24"
                              },
                              {
                                "expression": {
                                  "id": 4624,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 4618,
                                    "name": "amount1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4581,
                                    "src": "3251:7:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "arguments": [
                                      {
                                        "id": 4620,
                                        "name": "sqrtRatioAX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4572,
                                        "src": "3284:13:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 4621,
                                        "name": "sqrtRatioX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4570,
                                        "src": "3299:12:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 4622,
                                        "name": "liquidity",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4576,
                                        "src": "3313:9:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      ],
                                      "id": 4619,
                                      "name": "getAmount1ForLiquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4568,
                                      "src": "3261:22:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$returns$_t_uint256_$",
                                        "typeString": "function (uint160,uint160,uint128) pure returns (uint256)"
                                      }
                                    },
                                    "id": 4623,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3261:62:24",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3251:72:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 4625,
                                "nodeType": "ExpressionStatement",
                                "src": "3251:72:24"
                              }
                            ]
                          }
                        },
                        "id": 4637,
                        "nodeType": "IfStatement",
                        "src": "3000:424:24",
                        "trueBody": {
                          "id": 4606,
                          "nodeType": "Block",
                          "src": "3035:88:24",
                          "statements": [
                            {
                              "expression": {
                                "id": 4604,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 4598,
                                  "name": "amount0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4579,
                                  "src": "3043:7:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 4600,
                                      "name": "sqrtRatioAX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4572,
                                      "src": "3076:13:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 4601,
                                      "name": "sqrtRatioBX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4574,
                                      "src": "3091:13:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 4602,
                                      "name": "liquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4576,
                                      "src": "3106:9:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    ],
                                    "id": 4599,
                                    "name": "getAmount0ForLiquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4534,
                                    "src": "3053:22:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$returns$_t_uint256_$",
                                      "typeString": "function (uint160,uint160,uint128) pure returns (uint256)"
                                    }
                                  },
                                  "id": 4603,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3053:63:24",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3043:73:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4605,
                              "nodeType": "ExpressionStatement",
                              "src": "3043:73:24"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 4639,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmountsForLiquidity",
                  "nameLocation": "2702:22:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4577,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4570,
                        "mutability": "mutable",
                        "name": "sqrtRatioX96",
                        "nameLocation": "2738:12:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4639,
                        "src": "2730:20:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4569,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2730:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4572,
                        "mutability": "mutable",
                        "name": "sqrtRatioAX96",
                        "nameLocation": "2764:13:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4639,
                        "src": "2756:21:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4571,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2756:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4574,
                        "mutability": "mutable",
                        "name": "sqrtRatioBX96",
                        "nameLocation": "2791:13:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4639,
                        "src": "2783:21:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4573,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2783:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4576,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "2818:9:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4639,
                        "src": "2810:17:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 4575,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2810:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2724:107:24"
                  },
                  "returnParameters": {
                    "id": 4582,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4579,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "2863:7:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4639,
                        "src": "2855:15:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4578,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2855:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4581,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "2880:7:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4639,
                        "src": "2872:15:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4580,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2872:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2854:34:24"
                  },
                  "scope": 4640,
                  "src": "2693:735:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4641,
              "src": "152:3278:24",
              "usedErrors": []
            }
          ],
          "src": "45:3386:24"
        },
        "id": 24
      },
      "solidity/contracts/libraries/PoolAddress.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/libraries/PoolAddress.sol",
          "exportedSymbols": {
            "PoolAddress": [
              4650
            ]
          },
          "id": 4651,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4642,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:31:25"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "fullyImplemented": true,
              "id": 4650,
              "linearizedBaseContracts": [
                4650
              ],
              "name": "PoolAddress",
              "nameLocation": "86:11:25",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "PoolAddress.PoolKey",
                  "id": 4649,
                  "members": [
                    {
                      "constant": false,
                      "id": 4644,
                      "mutability": "mutable",
                      "name": "token0",
                      "nameLocation": "131:6:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 4649,
                      "src": "123:14:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4643,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "123:7:25",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4646,
                      "mutability": "mutable",
                      "name": "token1",
                      "nameLocation": "151:6:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 4649,
                      "src": "143:14:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4645,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "143:7:25",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4648,
                      "mutability": "mutable",
                      "name": "fee",
                      "nameLocation": "170:3:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 4649,
                      "src": "163:10:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint24",
                        "typeString": "uint24"
                      },
                      "typeName": {
                        "id": 4647,
                        "name": "uint24",
                        "nodeType": "ElementaryTypeName",
                        "src": "163:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "PoolKey",
                  "nameLocation": "109:7:25",
                  "nodeType": "StructDefinition",
                  "scope": 4650,
                  "src": "102:76:25",
                  "visibility": "public"
                }
              ],
              "scope": 4651,
              "src": "78:102:25",
              "usedErrors": []
            }
          ],
          "src": "45:136:25"
        },
        "id": 25
      },
      "solidity/contracts/libraries/TickMath.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/libraries/TickMath.sol",
          "exportedSymbols": {
            "TickMath": [
              5188
            ]
          },
          "id": 5189,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4652,
              "literals": [
                "solidity",
                ">=",
                "0.5",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:24:26"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4653,
                "nodeType": "StructuredDocumentation",
                "src": "91:243:26",
                "text": "@title Math library for computing sqrt prices from ticks and vice versa\n @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports\n         prices between 2**-128 and 2**128"
              },
              "fullyImplemented": true,
              "id": 5188,
              "linearizedBaseContracts": [
                5188
              ],
              "name": "TickMath",
              "nameLocation": "342:8:26",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "documentation": {
                    "id": 4654,
                    "nodeType": "StructuredDocumentation",
                    "src": "355:108:26",
                    "text": "@dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128"
                  },
                  "id": 4658,
                  "mutability": "constant",
                  "name": "MIN_TICK",
                  "nameLocation": "490:8:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 5188,
                  "src": "466:42:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 4655,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "466:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "value": {
                    "id": 4657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "-",
                    "prefix": true,
                    "src": "501:7:26",
                    "subExpression": {
                      "hexValue": "383837323732",
                      "id": 4656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "502:6:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_887272_by_1",
                        "typeString": "int_const 887272"
                      },
                      "value": "887272"
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_minus_887272_by_1",
                      "typeString": "int_const -887272"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 4659,
                    "nodeType": "StructuredDocumentation",
                    "src": "512:107:26",
                    "text": "@dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128"
                  },
                  "id": 4663,
                  "mutability": "constant",
                  "name": "MAX_TICK",
                  "nameLocation": "646:8:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 5188,
                  "src": "622:44:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 4660,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "622:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "value": {
                    "id": 4662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "-",
                    "prefix": true,
                    "src": "657:9:26",
                    "subExpression": {
                      "id": 4661,
                      "name": "MIN_TICK",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4658,
                      "src": "658:8:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int24",
                        "typeString": "int24"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 4664,
                    "nodeType": "StructuredDocumentation",
                    "src": "671:116:26",
                    "text": "@dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)"
                  },
                  "id": 4667,
                  "mutability": "constant",
                  "name": "MIN_SQRT_RATIO",
                  "nameLocation": "816:14:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 5188,
                  "src": "790:53:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 4665,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "790:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": {
                    "hexValue": "34323935313238373339",
                    "id": 4666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "833:10:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4295128739_by_1",
                      "typeString": "int_const 4295128739"
                    },
                    "value": "4295128739"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 4668,
                    "nodeType": "StructuredDocumentation",
                    "src": "847:116:26",
                    "text": "@dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)"
                  },
                  "id": 4671,
                  "mutability": "constant",
                  "name": "MAX_SQRT_RATIO",
                  "nameLocation": "992:14:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 5188,
                  "src": "966:92:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 4669,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "966:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "value": {
                    "hexValue": "31343631343436373033343835323130313033323837323733303532323033393838383232333738373233393730333432",
                    "id": 4670,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1009:49:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1461446703485210103287273052203988822378723970342_by_1",
                      "typeString": "int_const 1461...(41 digits omitted)...0342"
                    },
                    "value": "1461446703485210103287273052203988822378723970342"
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5047,
                    "nodeType": "Block",
                    "src": "1448:2388:26",
                    "statements": [
                      {
                        "assignments": [
                          4680
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4680,
                            "mutability": "mutable",
                            "name": "absTick",
                            "nameLocation": "1462:7:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5047,
                            "src": "1454:15:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4679,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1454:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4700,
                        "initialValue": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "id": 4683,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4681,
                              "name": "tick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4674,
                              "src": "1472:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 4682,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1479:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "1472:8:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 4696,
                                    "name": "tick",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4674,
                                    "src": "1523:4:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    }
                                  ],
                                  "id": 4695,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1516:6:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_int256_$",
                                    "typeString": "type(int256)"
                                  },
                                  "typeName": {
                                    "id": 4694,
                                    "name": "int256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1516:6:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 4697,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1516:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 4693,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1508:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 4692,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1508:7:26",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4698,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1508:21:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "1472:57:26",
                          "trueExpression": {
                            "arguments": [
                              {
                                "id": 4690,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "-",
                                "prefix": true,
                                "src": "1491:13:26",
                                "subExpression": {
                                  "arguments": [
                                    {
                                      "id": 4688,
                                      "name": "tick",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4674,
                                      "src": "1499:4:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    ],
                                    "id": 4687,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1492:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 4686,
                                      "name": "int256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1492:6:26",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 4689,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1492:12:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 4685,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1483:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 4684,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1483:7:26",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4691,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1483:22:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1454:75:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4710,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4702,
                                "name": "absTick",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4680,
                                "src": "1543:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 4707,
                                        "name": "MAX_TICK",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4663,
                                        "src": "1569:8:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      ],
                                      "id": 4706,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "1562:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_int256_$",
                                        "typeString": "type(int256)"
                                      },
                                      "typeName": {
                                        "id": 4705,
                                        "name": "int256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1562:6:26",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 4708,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1562:16:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 4704,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1554:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 4703,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1554:7:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 4709,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1554:25:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1543:36:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "54",
                              "id": 4711,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1581:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc",
                                "typeString": "literal_string \"T\""
                              },
                              "value": "T"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_846b7b6deb1cfa110d0ea7ec6162a7123b761785528db70cceed5143183b11fc",
                                "typeString": "literal_string \"T\""
                              }
                            ],
                            "id": 4701,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1535:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1535:50:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4713,
                        "nodeType": "ExpressionStatement",
                        "src": "1535:50:26"
                      },
                      {
                        "assignments": [
                          4715
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4715,
                            "mutability": "mutable",
                            "name": "ratio",
                            "nameLocation": "1600:5:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5047,
                            "src": "1592:13:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4714,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1592:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4724,
                        "initialValue": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4720,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4718,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4716,
                                "name": "absTick",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4680,
                                "src": "1608:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "hexValue": "307831",
                                "id": 4717,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1618:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "0x1"
                              },
                              "src": "1608:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 4719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1625:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "1608:18:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "hexValue": "3078313030303030303030303030303030303030303030303030303030303030303030",
                            "id": 4722,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1666:35:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                              "typeString": "int_const 3402...(31 digits omitted)...1456"
                            },
                            "value": "0x100000000000000000000000000000000"
                          },
                          "id": 4723,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "1608:93:26",
                          "trueExpression": {
                            "hexValue": "30786666666362393333626436666164333761613264313632643161353934303031",
                            "id": 4721,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1629:34:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_340265354078544963557816517032075149313_by_1",
                              "typeString": "int_const 3402...(31 digits omitted)...9313"
                            },
                            "value": "0xfffcb933bd6fad37aa2d162d1a594001"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint136",
                            "typeString": "uint136"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1592:109:26"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4727,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4725,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "1711:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307832",
                              "id": 4726,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1721:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "0x2"
                            },
                            "src": "1711:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4728,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1728:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1711:18:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4739,
                        "nodeType": "IfStatement",
                        "src": "1707:83:26",
                        "trueBody": {
                          "expression": {
                            "id": 4737,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4730,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "1731:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4736,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4733,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4731,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "1740:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786666663937323732333733643431333235396134363939303538306532313361",
                                      "id": 4732,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1748:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_340248342086729790484326174814286782778_by_1",
                                        "typeString": "int_const 3402...(31 digits omitted)...2778"
                                      },
                                      "value": "0xfff97272373d413259a46990580e213a"
                                    },
                                    "src": "1740:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4734,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1739:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4735,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1787:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "1739:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1731:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4738,
                          "nodeType": "ExpressionStatement",
                          "src": "1731:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4744,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4742,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4740,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "1800:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307834",
                              "id": 4741,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1810:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              },
                              "value": "0x4"
                            },
                            "src": "1800:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4743,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1817:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1800:18:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4754,
                        "nodeType": "IfStatement",
                        "src": "1796:83:26",
                        "trueBody": {
                          "expression": {
                            "id": 4752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4745,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "1820:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4751,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4748,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4746,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "1829:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786666663265353066356636353639333265663132333537636633633766646363",
                                      "id": 4747,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1837:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_340214320654664324051920982716015181260_by_1",
                                        "typeString": "int_const 3402...(31 digits omitted)...1260"
                                      },
                                      "value": "0xfff2e50f5f656932ef12357cf3c7fdcc"
                                    },
                                    "src": "1829:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4749,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1828:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4750,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1876:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "1828:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1820:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4753,
                          "nodeType": "ExpressionStatement",
                          "src": "1820:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4757,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4755,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "1889:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307838",
                              "id": 4756,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1899:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              },
                              "value": "0x8"
                            },
                            "src": "1889:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4758,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1906:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1889:18:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4769,
                        "nodeType": "IfStatement",
                        "src": "1885:83:26",
                        "trueBody": {
                          "expression": {
                            "id": 4767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4760,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "1909:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4766,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4763,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4761,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "1918:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786666653563616361376531306534653631633336323465616130393431636430",
                                      "id": 4762,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1926:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_340146287995602323631171512101879684304_by_1",
                                        "typeString": "int_const 3401...(31 digits omitted)...4304"
                                      },
                                      "value": "0xffe5caca7e10e4e61c3624eaa0941cd0"
                                    },
                                    "src": "1918:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4764,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1917:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4765,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1965:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "1917:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1909:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4768,
                          "nodeType": "ExpressionStatement",
                          "src": "1909:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4772,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4770,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "1978:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783130",
                              "id": 4771,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1988:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16_by_1",
                                "typeString": "int_const 16"
                              },
                              "value": "0x10"
                            },
                            "src": "1978:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4773,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1996:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1978:19:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4784,
                        "nodeType": "IfStatement",
                        "src": "1974:84:26",
                        "trueBody": {
                          "expression": {
                            "id": 4782,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4775,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "1999:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4781,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4778,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4776,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "2008:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786666636239383433643630663631353963396462353838333563393236363434",
                                      "id": 4777,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2016:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_340010263488231146823593991679159461444_by_1",
                                        "typeString": "int_const 3400...(31 digits omitted)...1444"
                                      },
                                      "value": "0xffcb9843d60f6159c9db58835c926644"
                                    },
                                    "src": "2008:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4779,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2007:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4780,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2055:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2007:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1999:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4783,
                          "nodeType": "ExpressionStatement",
                          "src": "1999:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4789,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4787,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4785,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "2068:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783230",
                              "id": 4786,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2078:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "0x20"
                            },
                            "src": "2068:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4788,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2086:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2068:19:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4799,
                        "nodeType": "IfStatement",
                        "src": "2064:84:26",
                        "trueBody": {
                          "expression": {
                            "id": 4797,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4790,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "2089:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4796,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4793,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4791,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "2098:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786666393733623431666139386330383134373265363839366466623235346330",
                                      "id": 4792,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2106:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_339738377640345403697157401104375502016_by_1",
                                        "typeString": "int_const 3397...(31 digits omitted)...2016"
                                      },
                                      "value": "0xff973b41fa98c081472e6896dfb254c0"
                                    },
                                    "src": "2098:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4794,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2097:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4795,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2145:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2097:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2089:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4798,
                          "nodeType": "ExpressionStatement",
                          "src": "2089:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4804,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4802,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4800,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "2158:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783430",
                              "id": 4801,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2168:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_64_by_1",
                                "typeString": "int_const 64"
                              },
                              "value": "0x40"
                            },
                            "src": "2158:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4803,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2176:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2158:19:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4814,
                        "nodeType": "IfStatement",
                        "src": "2154:84:26",
                        "trueBody": {
                          "expression": {
                            "id": 4812,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4805,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "2179:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4811,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4808,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4806,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "2188:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786666326561313634363663393661333834336563373862333236623532383631",
                                      "id": 4807,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2196:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_339195258003219555707034227454543997025_by_1",
                                        "typeString": "int_const 3391...(31 digits omitted)...7025"
                                      },
                                      "value": "0xff2ea16466c96a3843ec78b326b52861"
                                    },
                                    "src": "2188:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4809,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2187:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4810,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2235:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2187:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2179:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4813,
                          "nodeType": "ExpressionStatement",
                          "src": "2179:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4819,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4817,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4815,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "2248:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783830",
                              "id": 4816,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2258:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_128_by_1",
                                "typeString": "int_const 128"
                              },
                              "value": "0x80"
                            },
                            "src": "2248:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4818,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2266:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2248:19:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4829,
                        "nodeType": "IfStatement",
                        "src": "2244:84:26",
                        "trueBody": {
                          "expression": {
                            "id": 4827,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4820,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "2269:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4826,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4823,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4821,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "2278:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786665356465653034366139396132613831316334363166313936396333303533",
                                      "id": 4822,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2286:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_338111622100601834656805679988414885971_by_1",
                                        "typeString": "int_const 3381...(31 digits omitted)...5971"
                                      },
                                      "value": "0xfe5dee046a99a2a811c461f1969c3053"
                                    },
                                    "src": "2278:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4824,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2277:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4825,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2325:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2277:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2269:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4828,
                          "nodeType": "ExpressionStatement",
                          "src": "2269:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4832,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4830,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "2338:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "3078313030",
                              "id": 4831,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2348:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_256_by_1",
                                "typeString": "int_const 256"
                              },
                              "value": "0x100"
                            },
                            "src": "2338:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4833,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2357:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2338:20:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4844,
                        "nodeType": "IfStatement",
                        "src": "2334:85:26",
                        "trueBody": {
                          "expression": {
                            "id": 4842,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4835,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "2360:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4841,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4838,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4836,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "2369:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786663626538366337393030613838616564636666633833623437396161336134",
                                      "id": 4837,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2377:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_335954724994790223023589805789778977700_by_1",
                                        "typeString": "int_const 3359...(31 digits omitted)...7700"
                                      },
                                      "value": "0xfcbe86c7900a88aedcffc83b479aa3a4"
                                    },
                                    "src": "2369:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4839,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2368:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4840,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2416:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2368:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2360:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4843,
                          "nodeType": "ExpressionStatement",
                          "src": "2360:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4847,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4845,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "2429:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "3078323030",
                              "id": 4846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2439:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_512_by_1",
                                "typeString": "int_const 512"
                              },
                              "value": "0x200"
                            },
                            "src": "2429:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4848,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2448:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2429:20:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4859,
                        "nodeType": "IfStatement",
                        "src": "2425:85:26",
                        "trueBody": {
                          "expression": {
                            "id": 4857,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4850,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "2451:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4856,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4853,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4851,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "2460:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786639383761373235336163343133313736663262303734636637383135653534",
                                      "id": 4852,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2468:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_331682121138379247127172139078559817300_by_1",
                                        "typeString": "int_const 3316...(31 digits omitted)...7300"
                                      },
                                      "value": "0xf987a7253ac413176f2b074cf7815e54"
                                    },
                                    "src": "2460:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4854,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2459:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4855,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2507:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2459:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2451:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4858,
                          "nodeType": "ExpressionStatement",
                          "src": "2451:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4862,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4860,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "2520:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "3078343030",
                              "id": 4861,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2530:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1024_by_1",
                                "typeString": "int_const 1024"
                              },
                              "value": "0x400"
                            },
                            "src": "2520:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4863,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2539:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2520:20:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4874,
                        "nodeType": "IfStatement",
                        "src": "2516:85:26",
                        "trueBody": {
                          "expression": {
                            "id": 4872,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4865,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "2542:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4871,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4868,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4866,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "2551:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786633333932623038323262373030303539343063376133393865346237306633",
                                      "id": 4867,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2559:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_323299236684853023288211250268160618739_by_1",
                                        "typeString": "int_const 3232...(31 digits omitted)...8739"
                                      },
                                      "value": "0xf3392b0822b70005940c7a398e4b70f3"
                                    },
                                    "src": "2551:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4869,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2550:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4870,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2598:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2550:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2542:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4873,
                          "nodeType": "ExpressionStatement",
                          "src": "2542:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4879,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4877,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4875,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "2611:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "3078383030",
                              "id": 4876,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2621:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2048_by_1",
                                "typeString": "int_const 2048"
                              },
                              "value": "0x800"
                            },
                            "src": "2611:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4878,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2630:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2611:20:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4889,
                        "nodeType": "IfStatement",
                        "src": "2607:85:26",
                        "trueBody": {
                          "expression": {
                            "id": 4887,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4880,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "2633:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4886,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4883,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4881,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "2642:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786537313539343735613263323962373434336232396337666136653838396439",
                                      "id": 4882,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2650:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_307163716377032989948697243942600083929_by_1",
                                        "typeString": "int_const 3071...(31 digits omitted)...3929"
                                      },
                                      "value": "0xe7159475a2c29b7443b29c7fa6e889d9"
                                    },
                                    "src": "2642:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4884,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2641:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4885,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2689:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2641:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2633:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4888,
                          "nodeType": "ExpressionStatement",
                          "src": "2633:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4892,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4890,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "2702:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307831303030",
                              "id": 4891,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2712:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4096_by_1",
                                "typeString": "int_const 4096"
                              },
                              "value": "0x1000"
                            },
                            "src": "2702:16:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4893,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2722:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2702:21:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4904,
                        "nodeType": "IfStatement",
                        "src": "2698:86:26",
                        "trueBody": {
                          "expression": {
                            "id": 4902,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4895,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "2725:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4901,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4898,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4896,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "2734:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786430393766336264666432303232623838343561643866373932616135383235",
                                      "id": 4897,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2742:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_277268403626896220162999269216087595045_by_1",
                                        "typeString": "int_const 2772...(31 digits omitted)...5045"
                                      },
                                      "value": "0xd097f3bdfd2022b8845ad8f792aa5825"
                                    },
                                    "src": "2734:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4899,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2733:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4900,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2781:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2733:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2725:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4903,
                          "nodeType": "ExpressionStatement",
                          "src": "2725:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4909,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4907,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4905,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "2794:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307832303030",
                              "id": 4906,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2804:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8192_by_1",
                                "typeString": "int_const 8192"
                              },
                              "value": "0x2000"
                            },
                            "src": "2794:16:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4908,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2814:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2794:21:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4919,
                        "nodeType": "IfStatement",
                        "src": "2790:86:26",
                        "trueBody": {
                          "expression": {
                            "id": 4917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4910,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "2817:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4916,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4913,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4911,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "2826:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30786139663734363436326438373066646638613635646331663930653036316535",
                                      "id": 4912,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2834:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_225923453940442621947126027127485391333_by_1",
                                        "typeString": "int_const 2259...(31 digits omitted)...1333"
                                      },
                                      "value": "0xa9f746462d870fdf8a65dc1f90e061e5"
                                    },
                                    "src": "2826:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4914,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2825:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4915,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2873:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2825:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2817:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4918,
                          "nodeType": "ExpressionStatement",
                          "src": "2817:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4924,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4922,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4920,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "2886:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307834303030",
                              "id": 4921,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2896:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_16384_by_1",
                                "typeString": "int_const 16384"
                              },
                              "value": "0x4000"
                            },
                            "src": "2886:16:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4923,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2906:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2886:21:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4934,
                        "nodeType": "IfStatement",
                        "src": "2882:86:26",
                        "trueBody": {
                          "expression": {
                            "id": 4932,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4925,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "2909:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4931,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4928,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4926,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "2918:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30783730643836396131353664326131623839306262336466363262616633326637",
                                      "id": 4927,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2926:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_149997214084966997727330242082538205943_by_1",
                                        "typeString": "int_const 1499...(31 digits omitted)...5943"
                                      },
                                      "value": "0x70d869a156d2a1b890bb3df62baf32f7"
                                    },
                                    "src": "2918:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4929,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2917:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4930,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2965:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "2917:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2909:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4933,
                          "nodeType": "ExpressionStatement",
                          "src": "2909:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4939,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4937,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4935,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "2978:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "307838303030",
                              "id": 4936,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2988:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32768_by_1",
                                "typeString": "int_const 32768"
                              },
                              "value": "0x8000"
                            },
                            "src": "2978:16:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4938,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2998:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2978:21:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4949,
                        "nodeType": "IfStatement",
                        "src": "2974:86:26",
                        "trueBody": {
                          "expression": {
                            "id": 4947,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4940,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "3001:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4946,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4943,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4941,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "3010:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30783331626531333566393764303866643938313233313530353534326663666136",
                                      "id": 4942,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3018:34:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_66119101136024775622716233608466517926_by_1",
                                        "typeString": "int_const 6611...(30 digits omitted)...7926"
                                      },
                                      "value": "0x31be135f97d08fd981231505542fcfa6"
                                    },
                                    "src": "3010:42:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4944,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3009:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4945,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3057:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "3009:51:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3001:59:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4948,
                          "nodeType": "ExpressionStatement",
                          "src": "3001:59:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4954,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4952,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4950,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "3070:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783130303030",
                              "id": 4951,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3080:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_65536_by_1",
                                "typeString": "int_const 65536"
                              },
                              "value": "0x10000"
                            },
                            "src": "3070:17:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4953,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3091:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3070:22:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4964,
                        "nodeType": "IfStatement",
                        "src": "3066:86:26",
                        "trueBody": {
                          "expression": {
                            "id": 4962,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4955,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "3094:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4961,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4958,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4956,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "3103:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "307839616135303862356237613834653163363737646535346633653939626339",
                                      "id": 4957,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3111:33:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_12847376061809297530290974190478138313_by_1",
                                        "typeString": "int_const 1284...(30 digits omitted)...8313"
                                      },
                                      "value": "0x9aa508b5b7a84e1c677de54f3e99bc9"
                                    },
                                    "src": "3103:41:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4959,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3102:43:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4960,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3149:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "3102:50:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3094:58:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4963,
                          "nodeType": "ExpressionStatement",
                          "src": "3094:58:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4969,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4967,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4965,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "3162:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783230303030",
                              "id": 4966,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3172:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_131072_by_1",
                                "typeString": "int_const 131072"
                              },
                              "value": "0x20000"
                            },
                            "src": "3162:17:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4968,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3183:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3162:22:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4979,
                        "nodeType": "IfStatement",
                        "src": "3158:85:26",
                        "trueBody": {
                          "expression": {
                            "id": 4977,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4970,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "3186:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4976,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4973,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4971,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "3195:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "3078356436616638646564623831313936363939633332393232356565363034",
                                      "id": 4972,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3203:32:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_485053260817066172746253684029974020_by_1",
                                        "typeString": "int_const 4850...(28 digits omitted)...4020"
                                      },
                                      "value": "0x5d6af8dedb81196699c329225ee604"
                                    },
                                    "src": "3195:40:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4974,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3194:42:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4975,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3240:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "3194:49:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3186:57:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4978,
                          "nodeType": "ExpressionStatement",
                          "src": "3186:57:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4982,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4980,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "3253:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783430303030",
                              "id": 4981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3263:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_262144_by_1",
                                "typeString": "int_const 262144"
                              },
                              "value": "0x40000"
                            },
                            "src": "3253:17:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4983,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3274:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3253:22:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4994,
                        "nodeType": "IfStatement",
                        "src": "3249:83:26",
                        "trueBody": {
                          "expression": {
                            "id": 4992,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4985,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "3277:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4991,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4988,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4986,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "3286:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "307832323136653538346635666131656139323630343162656466653938",
                                      "id": 4987,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3294:30:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_691415978906521570653435304214168_by_1",
                                        "typeString": "int_const 6914...(25 digits omitted)...4168"
                                      },
                                      "value": "0x2216e584f5fa1ea926041bedfe98"
                                    },
                                    "src": "3286:38:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4989,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3285:40:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 4990,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3329:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "3285:47:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3277:55:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4993,
                          "nodeType": "ExpressionStatement",
                          "src": "3277:55:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4999,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4997,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4995,
                              "name": "absTick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4680,
                              "src": "3342:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30783830303030",
                              "id": 4996,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3352:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_524288_by_1",
                                "typeString": "int_const 524288"
                              },
                              "value": "0x80000"
                            },
                            "src": "3342:17:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4998,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3363:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3342:22:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5009,
                        "nodeType": "IfStatement",
                        "src": "3338:78:26",
                        "trueBody": {
                          "expression": {
                            "id": 5007,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 5000,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "3366:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5006,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5003,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5001,
                                      "name": "ratio",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4715,
                                      "src": "3375:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "hexValue": "30783438613137303339316637646334323434346538666132",
                                      "id": 5002,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "3383:25:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1404880482679654955896180642_by_1",
                                        "typeString": "int_const 1404880482679654955896180642"
                                      },
                                      "value": "0x48a170391f7dc42444e8fa2"
                                    },
                                    "src": "3375:33:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5004,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "3374:35:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 5005,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3413:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "3374:42:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3366:50:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5008,
                          "nodeType": "ExpressionStatement",
                          "src": "3366:50:26"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          },
                          "id": 5012,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5010,
                            "name": "tick",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4674,
                            "src": "3427:4:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 5011,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3434:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3427:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5023,
                        "nodeType": "IfStatement",
                        "src": "3423:47:26",
                        "trueBody": {
                          "expression": {
                            "id": 5021,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 5013,
                              "name": "ratio",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4715,
                              "src": "3437:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5020,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 5016,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "3450:7:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 5015,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3450:7:26",
                                        "typeDescriptions": {}
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      }
                                    ],
                                    "id": 5014,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "3445:4:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 5017,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3445:13:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                    "typeString": "type(uint256)"
                                  }
                                },
                                "id": 5018,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "max",
                                "nodeType": "MemberAccess",
                                "src": "3445:17:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "id": 5019,
                                "name": "ratio",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4715,
                                "src": "3465:5:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3445:25:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3437:33:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5022,
                          "nodeType": "ExpressionStatement",
                          "src": "3437:33:26"
                        }
                      },
                      {
                        "expression": {
                          "id": 5045,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5024,
                            "name": "sqrtPriceX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4677,
                            "src": "3759:12:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5043,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 5029,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 5027,
                                        "name": "ratio",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4715,
                                        "src": "3783:5:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">>",
                                      "rightExpression": {
                                        "hexValue": "3332",
                                        "id": 5028,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3792:2:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_32_by_1",
                                          "typeString": "int_const 32"
                                        },
                                        "value": "32"
                                      },
                                      "src": "3783:11:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 5030,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "3782:13:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "condition": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 5038,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 5036,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 5031,
                                            "name": "ratio",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4715,
                                            "src": "3799:5:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "%",
                                          "rightExpression": {
                                            "components": [
                                              {
                                                "commonType": {
                                                  "typeIdentifier": "t_rational_4294967296_by_1",
                                                  "typeString": "int_const 4294967296"
                                                },
                                                "id": 5034,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "hexValue": "31",
                                                  "id": 5032,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "3808:1:26",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_1_by_1",
                                                    "typeString": "int_const 1"
                                                  },
                                                  "value": "1"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<<",
                                                "rightExpression": {
                                                  "hexValue": "3332",
                                                  "id": 5033,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "3813:2:26",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_32_by_1",
                                                    "typeString": "int_const 32"
                                                  },
                                                  "value": "32"
                                                },
                                                "src": "3808:7:26",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_4294967296_by_1",
                                                  "typeString": "int_const 4294967296"
                                                }
                                              }
                                            ],
                                            "id": 5035,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "TupleExpression",
                                            "src": "3807:9:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_4294967296_by_1",
                                              "typeString": "int_const 4294967296"
                                            }
                                          },
                                          "src": "3799:17:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "hexValue": "30",
                                          "id": 5037,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "3820:1:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        },
                                        "src": "3799:22:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseExpression": {
                                        "hexValue": "31",
                                        "id": 5040,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3828:1:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "id": 5041,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "Conditional",
                                      "src": "3799:30:26",
                                      "trueExpression": {
                                        "hexValue": "30",
                                        "id": 5039,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3824:1:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    }
                                  ],
                                  "id": 5042,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "3798:32:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "3782:48:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5026,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3774:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 5025,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "3774:7:26",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5044,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3774:57:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "3759:72:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "id": 5046,
                        "nodeType": "ExpressionStatement",
                        "src": "3759:72:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4672,
                    "nodeType": "StructuredDocumentation",
                    "src": "1063:297:26",
                    "text": "@notice Calculates sqrt(1.0001^tick) * 2^96\n @dev Throws if |tick| > max tick\n @param tick The input tick for the above formula\n @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\n         at the given tick"
                  },
                  "id": 5048,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSqrtRatioAtTick",
                  "nameLocation": "1372:18:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4675,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4674,
                        "mutability": "mutable",
                        "name": "tick",
                        "nameLocation": "1397:4:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5048,
                        "src": "1391:10:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 4673,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1391:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1390:12:26"
                  },
                  "returnParameters": {
                    "id": 4678,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4677,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nameLocation": "1434:12:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5048,
                        "src": "1426:20:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 4676,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1426:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1425:22:26"
                  },
                  "scope": 5188,
                  "src": "1363:2473:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5186,
                    "nodeType": "Block",
                    "src": "4322:3502:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 5063,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 5059,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5057,
                                  "name": "sqrtPriceX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5051,
                                  "src": "4431:12:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "id": 5058,
                                  "name": "MIN_SQRT_RATIO",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4667,
                                  "src": "4447:14:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "4431:30:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 5062,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5060,
                                  "name": "sqrtPriceX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5051,
                                  "src": "4465:12:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 5061,
                                  "name": "MAX_SQRT_RATIO",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4671,
                                  "src": "4480:14:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "4465:29:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "4431:63:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "52",
                              "id": 5064,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4496:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ef22bddd350b943170a67d35191c27e310709a28c38b5762a152ff640108f5b2",
                                "typeString": "literal_string \"R\""
                              },
                              "value": "R"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ef22bddd350b943170a67d35191c27e310709a28c38b5762a152ff640108f5b2",
                                "typeString": "literal_string \"R\""
                              }
                            ],
                            "id": 5056,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "4423:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4423:77:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5066,
                        "nodeType": "ExpressionStatement",
                        "src": "4423:77:26"
                      },
                      {
                        "assignments": [
                          5068
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5068,
                            "mutability": "mutable",
                            "name": "ratio",
                            "nameLocation": "4514:5:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5186,
                            "src": "4506:13:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5067,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4506:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5075,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 5071,
                                "name": "sqrtPriceX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5051,
                                "src": "4530:12:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "id": 5070,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4522:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 5069,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "4522:7:26",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5072,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4522:21:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 5073,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4547:2:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "4522:27:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4506:43:26"
                      },
                      {
                        "assignments": [
                          5077
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5077,
                            "mutability": "mutable",
                            "name": "r",
                            "nameLocation": "4564:1:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5186,
                            "src": "4556:9:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5076,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4556:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5079,
                        "initialValue": {
                          "id": 5078,
                          "name": "ratio",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5068,
                          "src": "4568:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4556:17:26"
                      },
                      {
                        "assignments": [
                          5081
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5081,
                            "mutability": "mutable",
                            "name": "msb",
                            "nameLocation": "4587:3:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5186,
                            "src": "4579:11:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5080,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4579:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5083,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 5082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4593:1:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4579:15:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "4610:117:26",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4618:58:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4631:1:26",
                                    "type": "",
                                    "value": "7"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "4637:1:26"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4640:34:26",
                                        "type": "",
                                        "value": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4634:2:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4634:41:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "4627:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4627:49:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "4622:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4683:17:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "4693:3:26"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "4698:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "4690:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4690:10:26"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "4683:3:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4707:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "4716:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "4719:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "4712:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4712:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "4707:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4683:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4693:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4637:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4707:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4719:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5084,
                        "nodeType": "InlineAssembly",
                        "src": "4601:126:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "4741:101:26",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4749:42:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4762:1:26",
                                    "type": "",
                                    "value": "6"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "4768:1:26"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4771:18:26",
                                        "type": "",
                                        "value": "0xFFFFFFFFFFFFFFFF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4765:2:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4765:25:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "4758:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4758:33:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "4753:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4798:17:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "4808:3:26"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "4813:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "4805:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4805:10:26"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "4798:3:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4822:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "4831:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "4834:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "4827:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4827:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "4822:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4798:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4808:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4768:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4822:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4834:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5085,
                        "nodeType": "InlineAssembly",
                        "src": "4732:110:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "4856:93:26",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4864:34:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4877:1:26",
                                    "type": "",
                                    "value": "5"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "4883:1:26"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4886:10:26",
                                        "type": "",
                                        "value": "0xFFFFFFFF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4880:2:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4880:17:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "4873:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4873:25:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "4868:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4905:17:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "4915:3:26"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "4920:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "4912:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4912:10:26"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "4905:3:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4929:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "4938:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "4941:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "4934:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4934:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "4929:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4905:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4915:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4883:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4929:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4941:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5086,
                        "nodeType": "InlineAssembly",
                        "src": "4847:102:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "4963:89:26",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4971:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4984:1:26",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "4990:1:26"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4993:6:26",
                                        "type": "",
                                        "value": "0xFFFF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "4987:2:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4987:13:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "4980:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4980:21:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "4975:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5008:17:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "5018:3:26"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5023:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5015:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5015:10:26"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "5008:3:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5032:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5041:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5044:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5037:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5037:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5032:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5008:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5018:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4990:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5032:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5044:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5087,
                        "nodeType": "InlineAssembly",
                        "src": "4954:98:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5066:87:26",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5074:28:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5087:1:26",
                                    "type": "",
                                    "value": "3"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5093:1:26"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5096:4:26",
                                        "type": "",
                                        "value": "0xFF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5090:2:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5090:11:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5083:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5083:19:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5078:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5109:17:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "5119:3:26"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5124:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5116:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5116:10:26"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "5109:3:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5133:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5142:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5145:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5138:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5138:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5133:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5109:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5119:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5093:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5133:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5145:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5088,
                        "nodeType": "InlineAssembly",
                        "src": "5057:96:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5167:86:26",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5175:27:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5188:1:26",
                                    "type": "",
                                    "value": "2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5194:1:26"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5197:3:26",
                                        "type": "",
                                        "value": "0xF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5191:2:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5191:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5184:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5184:18:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5179:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5209:17:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "5219:3:26"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5224:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5216:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5216:10:26"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "5209:3:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5233:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5242:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5245:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5238:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5238:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5233:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5209:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5219:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5194:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5233:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5245:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5089,
                        "nodeType": "InlineAssembly",
                        "src": "5158:95:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5267:86:26",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5275:27:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5288:1:26",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5294:1:26"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5297:3:26",
                                        "type": "",
                                        "value": "0x3"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "5291:2:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5291:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5284:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5284:18:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5279:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5309:17:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "5319:3:26"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5324:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5316:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5316:10:26"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "5309:3:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5333:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5342:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5345:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5338:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5338:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5333:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5309:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5319:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5294:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5333:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5345:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5090,
                        "nodeType": "InlineAssembly",
                        "src": "5258:95:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5367:57:26",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5375:19:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5387:1:26"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5390:3:26",
                                    "type": "",
                                    "value": "0x1"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5384:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5384:10:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5379:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5401:17:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "msb",
                                    "nodeType": "YulIdentifier",
                                    "src": "5411:3:26"
                                  },
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5416:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5408:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5408:10:26"
                              },
                              "variableNames": [
                                {
                                  "name": "msb",
                                  "nodeType": "YulIdentifier",
                                  "src": "5401:3:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5401:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5081,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5411:3:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5387:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5091,
                        "nodeType": "InlineAssembly",
                        "src": "5358:66:26"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5094,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5092,
                            "name": "msb",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5081,
                            "src": "5434:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "hexValue": "313238",
                            "id": 5093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5441:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "128"
                          },
                          "src": "5434:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "expression": {
                            "id": 5111,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 5104,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5077,
                              "src": "5481:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5110,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5105,
                                "name": "ratio",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5068,
                                "src": "5485:5:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5108,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "313237",
                                      "id": 5106,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5495:3:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_127_by_1",
                                        "typeString": "int_const 127"
                                      },
                                      "value": "127"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 5107,
                                      "name": "msb",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5081,
                                      "src": "5501:3:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "5495:9:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5109,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5494:11:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5485:20:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5481:24:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5112,
                          "nodeType": "ExpressionStatement",
                          "src": "5481:24:26"
                        },
                        "id": 5113,
                        "nodeType": "IfStatement",
                        "src": "5430:75:26",
                        "trueBody": {
                          "expression": {
                            "id": 5102,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 5095,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5077,
                              "src": "5446:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5096,
                                "name": "ratio",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5068,
                                "src": "5450:5:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5099,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5097,
                                      "name": "msb",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5081,
                                      "src": "5460:3:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "313237",
                                      "id": 5098,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5466:3:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_127_by_1",
                                        "typeString": "int_const 127"
                                      },
                                      "value": "127"
                                    },
                                    "src": "5460:9:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 5100,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5459:11:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5450:20:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5446:24:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5103,
                          "nodeType": "ExpressionStatement",
                          "src": "5446:24:26"
                        }
                      },
                      {
                        "assignments": [
                          5115
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5115,
                            "mutability": "mutable",
                            "name": "log_2",
                            "nameLocation": "5519:5:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5186,
                            "src": "5512:12:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 5114,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5512:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5125,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 5124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 5121,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 5118,
                                      "name": "msb",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5081,
                                      "src": "5535:3:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 5117,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5528:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 5116,
                                      "name": "int256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5528:6:26",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 5119,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5528:11:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "313238",
                                  "id": 5120,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5542:3:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_128_by_1",
                                    "typeString": "int_const 128"
                                  },
                                  "value": "128"
                                },
                                "src": "5528:17:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "id": 5122,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "5527:19:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "hexValue": "3634",
                            "id": 5123,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5550:2:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_64_by_1",
                              "typeString": "int_const 64"
                            },
                            "value": "64"
                          },
                          "src": "5527:25:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5512:40:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5568:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5576:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5585:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5594:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5597:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "5590:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5590:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5581:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5581:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5576:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5607:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5620:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5625:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5616:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5616:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5611:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5634:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "5646:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5657:2:26",
                                        "type": "",
                                        "value": "63"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "5661:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "5653:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5653:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5643:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5643:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5634:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5671:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5680:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5683:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5676:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5676:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5671:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5634:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5646:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5576:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5594:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5597:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5625:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5671:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5683:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5126,
                        "nodeType": "InlineAssembly",
                        "src": "5559:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5705:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5713:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5722:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5731:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5734:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "5727:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5727:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5718:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5718:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5713:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5744:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5757:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5762:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5753:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5753:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5748:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5771:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "5783:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5794:2:26",
                                        "type": "",
                                        "value": "62"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "5798:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "5790:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5790:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5780:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5780:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5771:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5808:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5817:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5820:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5813:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5813:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5808:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5771:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5783:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5713:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5731:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5734:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5762:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5808:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5820:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5127,
                        "nodeType": "InlineAssembly",
                        "src": "5696:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5842:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5850:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5859:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5868:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "5871:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "5864:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5864:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5855:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5855:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5850:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5881:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5894:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5899:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5890:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5890:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "5885:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5908:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "5920:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5931:2:26",
                                        "type": "",
                                        "value": "61"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "5935:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "5927:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5927:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "5917:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5917:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5908:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5945:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "5954:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "5957:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5950:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5950:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5945:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5908:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5920:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5850:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5868:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5871:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5899:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5945:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5957:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5128,
                        "nodeType": "InlineAssembly",
                        "src": "5833:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "5979:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5987:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5996:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6005:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6008:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6001:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6001:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "5992:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5992:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5987:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6018:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6031:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6036:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6027:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6027:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6022:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6045:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6057:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6068:2:26",
                                        "type": "",
                                        "value": "60"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6072:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6064:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6064:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6054:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6054:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6045:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6082:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6091:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6094:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6087:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6087:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6082:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6045:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6057:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5987:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6005:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6008:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6036:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6082:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6094:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5129,
                        "nodeType": "InlineAssembly",
                        "src": "5970:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6116:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6124:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6133:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6142:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6145:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6138:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6138:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6129:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6129:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6124:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6155:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6168:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6173:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6164:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6164:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6159:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6182:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6194:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6205:2:26",
                                        "type": "",
                                        "value": "59"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6209:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6201:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6201:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6191:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6191:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6182:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6219:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6228:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6231:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6224:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6224:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6219:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6182:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6194:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6124:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6142:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6145:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6173:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6219:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6231:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5130,
                        "nodeType": "InlineAssembly",
                        "src": "6107:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6253:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6261:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6270:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6279:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6282:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6275:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6275:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6266:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6266:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6261:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6292:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6305:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6310:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6301:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6301:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6296:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6319:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6331:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6342:2:26",
                                        "type": "",
                                        "value": "58"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6346:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6338:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6338:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6328:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6328:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6319:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6356:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6365:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6368:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6361:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6361:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6356:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6319:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6331:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6261:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6279:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6282:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6310:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6356:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6368:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5131,
                        "nodeType": "InlineAssembly",
                        "src": "6244:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6390:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6398:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6407:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6416:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6419:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6412:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6412:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6403:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6403:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6398:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6429:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6442:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6447:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6438:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6438:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6433:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6456:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6468:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6479:2:26",
                                        "type": "",
                                        "value": "57"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6483:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6475:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6475:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6465:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6465:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6456:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6493:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6502:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6505:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6498:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6498:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6493:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6456:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6468:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6398:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6416:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6419:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6447:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6493:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6505:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5132,
                        "nodeType": "InlineAssembly",
                        "src": "6381:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6527:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6535:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6544:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6553:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6556:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6549:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6549:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6540:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6540:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6535:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6566:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6579:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6584:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6575:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6575:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6570:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6593:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6605:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6616:2:26",
                                        "type": "",
                                        "value": "56"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6620:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6612:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6612:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6602:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6602:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6593:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6630:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6639:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6642:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6635:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6635:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6630:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6593:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6605:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6535:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6553:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6556:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6584:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6630:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6642:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5133,
                        "nodeType": "InlineAssembly",
                        "src": "6518:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6664:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6672:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6681:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6690:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6693:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6686:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6686:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6677:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6677:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6672:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6703:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6716:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6721:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6712:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6712:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6707:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6730:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6742:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6753:2:26",
                                        "type": "",
                                        "value": "55"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6757:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6749:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6749:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6739:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6739:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6730:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6767:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6776:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6779:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6772:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6772:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6767:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6730:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6742:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6672:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6690:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6693:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6721:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6767:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6779:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5134,
                        "nodeType": "InlineAssembly",
                        "src": "6655:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6801:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6809:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6818:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6827:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6830:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6823:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6823:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6814:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6814:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6809:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6840:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6853:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6858:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6849:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6849:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6844:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6867:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "6879:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6890:2:26",
                                        "type": "",
                                        "value": "54"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "6894:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "6886:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6886:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "6876:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6876:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "6867:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6904:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "6913:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6916:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6909:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6909:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6904:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6867:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6879:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6809:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6827:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6830:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6858:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6904:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6916:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5135,
                        "nodeType": "InlineAssembly",
                        "src": "6792:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6938:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6946:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6955:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6964:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "6967:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "6960:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6960:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6951:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6951:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6946:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6977:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6990:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "6995:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6986:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6986:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "6981:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7004:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7016:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7027:2:26",
                                        "type": "",
                                        "value": "53"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "7031:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7023:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7023:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "7013:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7013:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7004:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7041:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "7050:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7053:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7046:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7046:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7041:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7004:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7016:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6946:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6964:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6967:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6995:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7041:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7053:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5136,
                        "nodeType": "InlineAssembly",
                        "src": "6929:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "7075:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7083:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7092:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7101:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7104:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "7097:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7097:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7088:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7088:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7083:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7114:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7127:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7132:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7123:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7123:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "7118:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7141:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7153:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7164:2:26",
                                        "type": "",
                                        "value": "52"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "7168:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7160:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7160:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "7150:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7150:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7141:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7178:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "7187:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7190:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7183:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7183:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7178:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7141:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7153:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7083:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7101:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7104:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7132:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7178:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7190:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5137,
                        "nodeType": "InlineAssembly",
                        "src": "7066:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "7212:123:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7220:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7229:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7238:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7241:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "7234:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7234:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7225:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7225:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7220:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7251:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7264:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7269:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7260:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7260:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "7255:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7278:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7290:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7301:2:26",
                                        "type": "",
                                        "value": "51"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "7305:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7297:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7297:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "7287:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7287:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7278:5:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7315:14:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "f",
                                    "nodeType": "YulIdentifier",
                                    "src": "7324:1:26"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7327:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7320:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7320:9:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7315:1:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7278:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7290:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7220:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7238:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7241:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7269:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7315:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7327:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5138,
                        "nodeType": "InlineAssembly",
                        "src": "7203:132:26"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "7349:102:26",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7357:24:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7366:3:26",
                                    "type": "",
                                    "value": "127"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7375:1:26"
                                      },
                                      {
                                        "name": "r",
                                        "nodeType": "YulIdentifier",
                                        "src": "7378:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mul",
                                      "nodeType": "YulIdentifier",
                                      "src": "7371:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7371:9:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7362:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7362:19:26"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "7357:1:26"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7388:20:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7401:3:26",
                                    "type": "",
                                    "value": "128"
                                  },
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "7406:1:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "7397:3:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7397:11:26"
                              },
                              "variables": [
                                {
                                  "name": "f",
                                  "nodeType": "YulTypedName",
                                  "src": "7392:1:26",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7415:30:26",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "log_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7427:5:26"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7438:2:26",
                                        "type": "",
                                        "value": "50"
                                      },
                                      {
                                        "name": "f",
                                        "nodeType": "YulIdentifier",
                                        "src": "7442:1:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7434:3:26"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7434:10:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "7424:2:26"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7424:21:26"
                              },
                              "variableNames": [
                                {
                                  "name": "log_2",
                                  "nodeType": "YulIdentifier",
                                  "src": "7415:5:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7415:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5115,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7427:5:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7357:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7375:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7378:1:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5077,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7406:1:26",
                            "valueSize": 1
                          }
                        ],
                        "id": 5139,
                        "nodeType": "InlineAssembly",
                        "src": "7340:111:26"
                      },
                      {
                        "assignments": [
                          5141
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5141,
                            "mutability": "mutable",
                            "name": "log_sqrt10001",
                            "nameLocation": "7464:13:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5186,
                            "src": "7457:20:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 5140,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7457:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5145,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 5144,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5142,
                            "name": "log_2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5115,
                            "src": "7480:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "hexValue": "323535373338393538393939363033383236333437313431",
                            "id": 5143,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7488:24:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_255738958999603826347141_by_1",
                              "typeString": "int_const 255738958999603826347141"
                            },
                            "value": "255738958999603826347141"
                          },
                          "src": "7480:32:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7457:55:26"
                      },
                      {
                        "assignments": [
                          5147
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5147,
                            "mutability": "mutable",
                            "name": "tickLow",
                            "nameLocation": "7543:7:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5186,
                            "src": "7537:13:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 5146,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "7537:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5157,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 5155,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 5152,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5150,
                                      "name": "log_sqrt10001",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5141,
                                      "src": "7560:13:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "33343032393932393536383039313332343138353936313430313030363630323437323130",
                                      "id": 5151,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7576:37:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3402992956809132418596140100660247210_by_1",
                                        "typeString": "int_const 3402...(29 digits omitted)...7210"
                                      },
                                      "value": "3402992956809132418596140100660247210"
                                    },
                                    "src": "7560:53:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "id": 5153,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "7559:55:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 5154,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7618:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "7559:62:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 5149,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7553:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int24_$",
                              "typeString": "type(int24)"
                            },
                            "typeName": {
                              "id": 5148,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "7553:5:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7553:69:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7537:85:26"
                      },
                      {
                        "assignments": [
                          5159
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5159,
                            "mutability": "mutable",
                            "name": "tickHi",
                            "nameLocation": "7634:6:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5186,
                            "src": "7628:12:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            },
                            "typeName": {
                              "id": 5158,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "7628:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5169,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 5167,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 5164,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5162,
                                      "name": "log_sqrt10001",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5141,
                                      "src": "7650:13:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "hexValue": "323931333339343634373731393839363232393037303237363231313533333938303838343935",
                                      "id": 5163,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7666:39:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_291339464771989622907027621153398088495_by_1",
                                        "typeString": "int_const 2913...(31 digits omitted)...8495"
                                      },
                                      "value": "291339464771989622907027621153398088495"
                                    },
                                    "src": "7650:55:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "id": 5165,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "7649:57:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "313238",
                                "id": 5166,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7710:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_128_by_1",
                                  "typeString": "int_const 128"
                                },
                                "value": "128"
                              },
                              "src": "7649:64:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 5161,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7643:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int24_$",
                              "typeString": "type(int24)"
                            },
                            "typeName": {
                              "id": 5160,
                              "name": "int24",
                              "nodeType": "ElementaryTypeName",
                              "src": "7643:5:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7643:71:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7628:86:26"
                      },
                      {
                        "expression": {
                          "id": 5184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5170,
                            "name": "tick",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5054,
                            "src": "7721:4:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              },
                              "id": 5173,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5171,
                                "name": "tickLow",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5147,
                                "src": "7728:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 5172,
                                "name": "tickHi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5159,
                                "src": "7739:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "src": "7728:17:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 5179,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 5176,
                                      "name": "tickHi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5159,
                                      "src": "7777:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int24",
                                        "typeString": "int24"
                                      }
                                    ],
                                    "id": 5175,
                                    "name": "getSqrtRatioAtTick",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5048,
                                    "src": "7758:18:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_int24_$returns$_t_uint160_$",
                                      "typeString": "function (int24) pure returns (uint160)"
                                    }
                                  },
                                  "id": 5177,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7758:26:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "id": 5178,
                                  "name": "sqrtPriceX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5051,
                                  "src": "7788:12:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "7758:42:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "id": 5181,
                                "name": "tickLow",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5147,
                                "src": "7812:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "id": 5182,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "7758:61:26",
                              "trueExpression": {
                                "id": 5180,
                                "name": "tickHi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5159,
                                "src": "7803:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "id": 5183,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "7728:91:26",
                            "trueExpression": {
                              "id": 5174,
                              "name": "tickLow",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5147,
                              "src": "7748:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int24",
                                "typeString": "int24"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "7721:98:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "id": 5185,
                        "nodeType": "ExpressionStatement",
                        "src": "7721:98:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5049,
                    "nodeType": "StructuredDocumentation",
                    "src": "3840:394:26",
                    "text": "@notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio\n @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may ever return.\n @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96\n @return tick The greatest tick for which the ratio is less than or equal to the input ratio"
                  },
                  "id": 5187,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTickAtSqrtRatio",
                  "nameLocation": "4246:18:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5052,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5051,
                        "mutability": "mutable",
                        "name": "sqrtPriceX96",
                        "nameLocation": "4273:12:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5187,
                        "src": "4265:20:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 5050,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "4265:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4264:22:26"
                  },
                  "returnParameters": {
                    "id": 5055,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5054,
                        "mutability": "mutable",
                        "name": "tick",
                        "nameLocation": "4316:4:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5187,
                        "src": "4310:10:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 5053,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "4310:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4309:12:26"
                  },
                  "scope": 5188,
                  "src": "4237:3587:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 5189,
              "src": "334:7492:26",
              "usedErrors": []
            }
          ],
          "src": "45:7782:26"
        },
        "id": 26
      },
      "solidity/contracts/peripherals/DustCollector.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/DustCollector.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "DustCollector": [
              5257
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IDustCollector": [
              12818
            ],
            "IERC20": [
              663
            ],
            "IGovernable": [
              12863
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 5258,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5190,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:31:27"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 5191,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5258,
              "sourceUnit": 664,
              "src": "66:56:27",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
              "id": 5192,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5258,
              "sourceUnit": 913,
              "src": "123:65:27",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Governable.sol",
              "file": "../../contracts/peripherals/Governable.sol",
              "id": 5193,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5258,
              "sourceUnit": 5355,
              "src": "189:52:27",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IDustCollector.sol",
              "file": "../../interfaces/peripherals/IDustCollector.sol",
              "id": 5194,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5258,
              "sourceUnit": 12819,
              "src": "242:57:27",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5195,
                    "name": "IDustCollector",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 12818,
                    "src": "336:14:27"
                  },
                  "id": 5196,
                  "nodeType": "InheritanceSpecifier",
                  "src": "336:14:27"
                },
                {
                  "baseName": {
                    "id": 5197,
                    "name": "Governable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5354,
                    "src": "352:10:27"
                  },
                  "id": 5198,
                  "nodeType": "InheritanceSpecifier",
                  "src": "352:10:27"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 5257,
              "linearizedBaseContracts": [
                5257,
                5354,
                12863,
                12818,
                12793
              ],
              "name": "DustCollector",
              "nameLocation": "319:13:27",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 5202,
                  "libraryName": {
                    "id": 5199,
                    "name": "SafeERC20",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 912,
                    "src": "373:9:27"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "367:27:27",
                  "typeName": {
                    "id": 5201,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 5200,
                      "name": "IERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 663,
                      "src": "387:6:27"
                    },
                    "referencedDeclaration": 663,
                    "src": "387:6:27",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$663",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "constant": true,
                  "id": 5205,
                  "mutability": "constant",
                  "name": "_ETH_ADDRESS",
                  "nameLocation": "424:12:27",
                  "nodeType": "VariableDeclaration",
                  "scope": 5257,
                  "src": "398:83:27",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5203,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "398:7:27",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": {
                    "hexValue": "307845656565654565656545654565654565456545656545454565656565456565656565656545456545",
                    "id": 5204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "439:42:27",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "value": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    12817
                  ],
                  "body": {
                    "id": 5255,
                    "nodeType": "Block",
                    "src": "599:235:27",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5217,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5211,
                            "src": "609:3:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 5220,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "624:1:27",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 5219,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "616:7:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 5218,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "616:7:27",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5221,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "616:10:27",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "609:17:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5226,
                        "nodeType": "IfStatement",
                        "src": "605:43:27",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5223,
                              "name": "ZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12792,
                              "src": "635:11:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 5224,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "635:13:27",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 5225,
                          "nodeType": "RevertStatement",
                          "src": "628:20:27"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5227,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5207,
                            "src": "658:6:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 5228,
                            "name": "_ETH_ADDRESS",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5205,
                            "src": "668:12:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "658:22:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 5247,
                          "nodeType": "Block",
                          "src": "733:56:27",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5243,
                                    "name": "_to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5211,
                                    "src": "769:3:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 5244,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5209,
                                    "src": "774:7:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 5240,
                                        "name": "_token",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5207,
                                        "src": "748:6:27",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 5239,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 663,
                                      "src": "741:6:27",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 5241,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "741:14:27",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$663",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 5242,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "safeTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 719,
                                  "src": "741:27:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$663_$",
                                    "typeString": "function (contract IERC20,address,uint256)"
                                  }
                                },
                                "id": 5245,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "741:41:27",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 5246,
                              "nodeType": "ExpressionStatement",
                              "src": "741:41:27"
                            }
                          ]
                        },
                        "id": 5248,
                        "nodeType": "IfStatement",
                        "src": "654:135:27",
                        "trueBody": {
                          "id": 5238,
                          "nodeType": "Block",
                          "src": "682:45:27",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5235,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5209,
                                    "src": "712:7:27",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 5232,
                                        "name": "_to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5211,
                                        "src": "698:3:27",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 5231,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "690:8:27",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_payable_$",
                                        "typeString": "type(address payable)"
                                      },
                                      "typeName": {
                                        "id": 5230,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "690:8:27",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 5233,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "690:12:27",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "id": 5234,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "src": "690:21:27",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 5236,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "690:30:27",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 5237,
                              "nodeType": "ExpressionStatement",
                              "src": "690:30:27"
                            }
                          ]
                        }
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5250,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5207,
                              "src": "808:6:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5251,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5209,
                              "src": "816:7:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5252,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5211,
                              "src": "825:3:27",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5249,
                            "name": "DustSent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12807,
                            "src": "799:8:27",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (address,uint256,address)"
                            }
                          },
                          "id": 5253,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "799:30:27",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5254,
                        "nodeType": "EmitStatement",
                        "src": "794:35:27"
                      }
                    ]
                  },
                  "functionSelector": "966abd00",
                  "id": 5256,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5215,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5214,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "584:14:27"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "584:14:27"
                    }
                  ],
                  "name": "sendDust",
                  "nameLocation": "495:8:27",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5213,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "575:8:27"
                  },
                  "parameters": {
                    "id": 5212,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5207,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "517:6:27",
                        "nodeType": "VariableDeclaration",
                        "scope": 5256,
                        "src": "509:14:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5206,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "509:7:27",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5209,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "537:7:27",
                        "nodeType": "VariableDeclaration",
                        "scope": 5256,
                        "src": "529:15:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5208,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "529:7:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5211,
                        "mutability": "mutable",
                        "name": "_to",
                        "nameLocation": "558:3:27",
                        "nodeType": "VariableDeclaration",
                        "scope": 5256,
                        "src": "550:11:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5210,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "550:7:27",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "503:62:27"
                  },
                  "returnParameters": {
                    "id": 5216,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "599:0:27"
                  },
                  "scope": 5257,
                  "src": "486:348:27",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5258,
              "src": "301:535:27",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "33:804:27"
        },
        "id": 27
      },
      "solidity/contracts/peripherals/Governable.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/Governable.sol",
          "exportedSymbols": {
            "Governable": [
              5354
            ],
            "IGovernable": [
              12863
            ]
          },
          "id": 5355,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5259,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:28"
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IGovernable.sol",
              "file": "../../interfaces/peripherals/IGovernable.sol",
              "id": 5260,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5355,
              "sourceUnit": 12864,
              "src": "65:54:28",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5261,
                    "name": "IGovernable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 12863,
                    "src": "153:11:28"
                  },
                  "id": 5262,
                  "nodeType": "InheritanceSpecifier",
                  "src": "153:11:28"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 5354,
              "linearizedBaseContracts": [
                5354,
                12863
              ],
              "name": "Governable",
              "nameLocation": "139:10:28",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    12846
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5263,
                    "nodeType": "StructuredDocumentation",
                    "src": "169:27:28",
                    "text": "@inheritdoc IGovernable"
                  },
                  "functionSelector": "5aa6e675",
                  "id": 5266,
                  "mutability": "mutable",
                  "name": "governance",
                  "nameLocation": "223:10:28",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5265,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "214:8:28"
                  },
                  "scope": 5354,
                  "src": "199:34:28",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5264,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "199:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    12852
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5267,
                    "nodeType": "StructuredDocumentation",
                    "src": "238:27:28",
                    "text": "@inheritdoc IGovernable"
                  },
                  "functionSelector": "f39c38a0",
                  "id": 5270,
                  "mutability": "mutable",
                  "name": "pendingGovernance",
                  "nameLocation": "292:17:28",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5269,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "283:8:28"
                  },
                  "scope": 5354,
                  "src": "268:41:28",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5268,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "268:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5289,
                    "nodeType": "Block",
                    "src": "347:104:28",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5275,
                            "name": "_governance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5272,
                            "src": "357:11:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 5278,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "380:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 5277,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "372:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 5276,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "372:7:28",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5279,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "372:10:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "357:25:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5284,
                        "nodeType": "IfStatement",
                        "src": "353:63:28",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5281,
                              "name": "NoGovernanceZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12840,
                              "src": "391:23:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 5282,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "391:25:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 5283,
                          "nodeType": "RevertStatement",
                          "src": "384:32:28"
                        }
                      },
                      {
                        "expression": {
                          "id": 5287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5285,
                            "name": "governance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5266,
                            "src": "422:10:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5286,
                            "name": "_governance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5272,
                            "src": "435:11:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "422:24:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5288,
                        "nodeType": "ExpressionStatement",
                        "src": "422:24:28"
                      }
                    ]
                  },
                  "id": 5290,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5273,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5272,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "334:11:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 5290,
                        "src": "326:19:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5271,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "326:7:28",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "325:21:28"
                  },
                  "returnParameters": {
                    "id": 5274,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "347:0:28"
                  },
                  "scope": 5354,
                  "src": "314:137:28",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    12858
                  ],
                  "body": {
                    "id": 5307,
                    "nodeType": "Block",
                    "src": "562:84:28",
                    "statements": [
                      {
                        "expression": {
                          "id": 5301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5299,
                            "name": "pendingGovernance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5270,
                            "src": "568:17:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5300,
                            "name": "_governance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5293,
                            "src": "588:11:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "568:31:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5302,
                        "nodeType": "ExpressionStatement",
                        "src": "568:31:28"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5304,
                              "name": "_governance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5293,
                              "src": "629:11:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5303,
                            "name": "GovernanceProposal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12831,
                            "src": "610:18:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 5305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "610:31:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5306,
                        "nodeType": "EmitStatement",
                        "src": "605:36:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5291,
                    "nodeType": "StructuredDocumentation",
                    "src": "455:27:28",
                    "text": "@inheritdoc IGovernable"
                  },
                  "functionSelector": "ab033ea9",
                  "id": 5308,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5297,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5296,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "547:14:28"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "547:14:28"
                    }
                  ],
                  "name": "setGovernance",
                  "nameLocation": "494:13:28",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5295,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "538:8:28"
                  },
                  "parameters": {
                    "id": 5294,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5293,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "516:11:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 5308,
                        "src": "508:19:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5292,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "508:7:28",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "507:21:28"
                  },
                  "returnParameters": {
                    "id": 5298,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "562:0:28"
                  },
                  "scope": 5354,
                  "src": "485:161:28",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    12862
                  ],
                  "body": {
                    "id": 5326,
                    "nodeType": "Block",
                    "src": "748:107:28",
                    "statements": [
                      {
                        "expression": {
                          "id": 5317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5315,
                            "name": "governance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5266,
                            "src": "754:10:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5316,
                            "name": "pendingGovernance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5270,
                            "src": "767:17:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "754:30:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5318,
                        "nodeType": "ExpressionStatement",
                        "src": "754:30:28"
                      },
                      {
                        "expression": {
                          "id": 5320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "790:24:28",
                          "subExpression": {
                            "id": 5319,
                            "name": "pendingGovernance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5270,
                            "src": "797:17:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5321,
                        "nodeType": "ExpressionStatement",
                        "src": "790:24:28"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5323,
                              "name": "governance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5266,
                              "src": "839:10:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5322,
                            "name": "GovernanceSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12826,
                            "src": "825:13:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 5324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "825:25:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5325,
                        "nodeType": "EmitStatement",
                        "src": "820:30:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5309,
                    "nodeType": "StructuredDocumentation",
                    "src": "650:27:28",
                    "text": "@inheritdoc IGovernable"
                  },
                  "functionSelector": "238efcbc",
                  "id": 5327,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5313,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5312,
                        "name": "onlyPendingGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5353,
                        "src": "726:21:28"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "726:21:28"
                    }
                  ],
                  "name": "acceptGovernance",
                  "nameLocation": "689:16:28",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5311,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "717:8:28"
                  },
                  "parameters": {
                    "id": 5310,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "705:2:28"
                  },
                  "returnParameters": {
                    "id": 5314,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "748:0:28"
                  },
                  "scope": 5354,
                  "src": "680:175:28",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5339,
                    "nodeType": "Block",
                    "src": "959:71:28",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 5330,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "969:3:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 5331,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "969:10:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 5332,
                            "name": "governance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5266,
                            "src": "983:10:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "969:24:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5337,
                        "nodeType": "IfStatement",
                        "src": "965:53:28",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5334,
                              "name": "OnlyGovernance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12834,
                              "src": "1002:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 5335,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1002:16:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 5336,
                          "nodeType": "RevertStatement",
                          "src": "995:23:28"
                        }
                      },
                      {
                        "id": 5338,
                        "nodeType": "PlaceholderStatement",
                        "src": "1024:1:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5328,
                    "nodeType": "StructuredDocumentation",
                    "src": "859:73:28",
                    "text": "@notice Functions with this modifier can only be called by governance"
                  },
                  "id": 5340,
                  "name": "onlyGovernance",
                  "nameLocation": "944:14:28",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 5329,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "959:0:28"
                  },
                  "src": "935:95:28",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5352,
                    "nodeType": "Block",
                    "src": "1148:85:28",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 5343,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "1158:3:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 5344,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1158:10:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 5345,
                            "name": "pendingGovernance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5270,
                            "src": "1172:17:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1158:31:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5350,
                        "nodeType": "IfStatement",
                        "src": "1154:67:28",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5347,
                              "name": "OnlyPendingGovernance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12837,
                              "src": "1198:21:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 5348,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1198:23:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 5349,
                          "nodeType": "RevertStatement",
                          "src": "1191:30:28"
                        }
                      },
                      {
                        "id": 5351,
                        "nodeType": "PlaceholderStatement",
                        "src": "1227:1:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5341,
                    "nodeType": "StructuredDocumentation",
                    "src": "1034:80:28",
                    "text": "@notice Functions with this modifier can only be called by pendingGovernance"
                  },
                  "id": 5353,
                  "name": "onlyPendingGovernance",
                  "nameLocation": "1126:21:28",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 5342,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1148:0:28"
                  },
                  "src": "1117:116:28",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 5355,
              "src": "121:1114:28",
              "usedErrors": [
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "32:1204:28"
        },
        "id": 28
      },
      "solidity/contracts/peripherals/Keep3rAccountance.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/Keep3rAccountance.sol",
          "exportedSymbols": {
            "EnumerableSet": [
              1918
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "Keep3rAccountance": [
              5507
            ]
          },
          "id": 5508,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5356,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:29"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
              "file": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
              "id": 5357,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5508,
              "sourceUnit": 1919,
              "src": "65:65:29",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rAccountance.sol",
              "file": "../../interfaces/peripherals/IKeep3rAccountance.sol",
              "id": 5358,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5508,
              "sourceUnit": 12998,
              "src": "131:61:29",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5359,
                    "name": "IKeep3rAccountance",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 12997,
                    "src": "233:18:29"
                  },
                  "id": 5360,
                  "nodeType": "InheritanceSpecifier",
                  "src": "233:18:29"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 5507,
              "linearizedBaseContracts": [
                5507,
                12997
              ],
              "name": "Keep3rAccountance",
              "nameLocation": "212:17:29",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 5364,
                  "libraryName": {
                    "id": 5361,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "262:13:29"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "256:49:29",
                  "typeName": {
                    "id": 5363,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 5362,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "280:24:29"
                    },
                    "referencedDeclaration": 1631,
                    "src": "280:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 5365,
                    "nodeType": "StructuredDocumentation",
                    "src": "309:39:29",
                    "text": "@notice List of all enabled keepers"
                  },
                  "id": 5368,
                  "mutability": "mutable",
                  "name": "_keepers",
                  "nameLocation": "385:8:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5507,
                  "src": "351:42:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                    "typeString": "struct EnumerableSet.AddressSet"
                  },
                  "typeName": {
                    "id": 5367,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 5366,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "351:24:29"
                    },
                    "referencedDeclaration": 1631,
                    "src": "351:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    12892
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5369,
                    "nodeType": "StructuredDocumentation",
                    "src": "398:34:29",
                    "text": "@inheritdoc IKeep3rAccountance"
                  },
                  "functionSelector": "1b44555e",
                  "id": 5374,
                  "mutability": "mutable",
                  "name": "workCompleted",
                  "nameLocation": "479:13:29",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5373,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "470:8:29"
                  },
                  "scope": 5507,
                  "src": "435:57:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 5372,
                    "keyType": {
                      "id": 5370,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "443:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "435:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 5371,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "454:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    12900
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5375,
                    "nodeType": "StructuredDocumentation",
                    "src": "497:34:29",
                    "text": "@inheritdoc IKeep3rAccountance"
                  },
                  "functionSelector": "e326ac43",
                  "id": 5380,
                  "mutability": "mutable",
                  "name": "firstSeen",
                  "nameLocation": "578:9:29",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5379,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "569:8:29"
                  },
                  "scope": 5507,
                  "src": "534:53:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 5378,
                    "keyType": {
                      "id": 5376,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "542:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "534:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 5377,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "553:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    12908
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5381,
                    "nodeType": "StructuredDocumentation",
                    "src": "592:34:29",
                    "text": "@inheritdoc IKeep3rAccountance"
                  },
                  "functionSelector": "b0103b1a",
                  "id": 5386,
                  "mutability": "mutable",
                  "name": "disputes",
                  "nameLocation": "670:8:29",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5385,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "661:8:29"
                  },
                  "scope": 5507,
                  "src": "629:49:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "typeName": {
                    "id": 5384,
                    "keyType": {
                      "id": 5382,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "637:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "629:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                      "typeString": "mapping(address => bool)"
                    },
                    "valueType": {
                      "id": 5383,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "648:4:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    12918
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5387,
                    "nodeType": "StructuredDocumentation",
                    "src": "683:83:29",
                    "text": "@inheritdoc IKeep3rAccountance\n @notice Mapping (job => bonding => amount)"
                  },
                  "functionSelector": "a39744b5",
                  "id": 5394,
                  "mutability": "mutable",
                  "name": "bonds",
                  "nameLocation": "833:5:29",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5393,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "824:8:29"
                  },
                  "scope": 5507,
                  "src": "769:69:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 5392,
                    "keyType": {
                      "id": 5388,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "777:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "769:47:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 5391,
                      "keyType": {
                        "id": 5389,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "796:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "788:27:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 5390,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "807:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    12928
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5395,
                    "nodeType": "StructuredDocumentation",
                    "src": "843:34:29",
                    "text": "@inheritdoc IKeep3rAccountance"
                  },
                  "functionSelector": "168f92e7",
                  "id": 5402,
                  "mutability": "mutable",
                  "name": "jobTokenCredits",
                  "nameLocation": "944:15:29",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5401,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "935:8:29"
                  },
                  "scope": 5507,
                  "src": "880:79:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 5400,
                    "keyType": {
                      "id": 5396,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "888:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "880:47:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 5399,
                      "keyType": {
                        "id": 5397,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "907:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "899:27:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 5398,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "918:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 5403,
                    "nodeType": "StructuredDocumentation",
                    "src": "964:61:29",
                    "text": "@notice The current liquidity credits available for a job"
                  },
                  "id": 5407,
                  "mutability": "mutable",
                  "name": "_jobLiquidityCredits",
                  "nameLocation": "1065:20:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5507,
                  "src": "1028:57:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 5406,
                    "keyType": {
                      "id": 5404,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1036:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1028:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 5405,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1047:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 5408,
                    "nodeType": "StructuredDocumentation",
                    "src": "1090:71:29",
                    "text": "@notice Map the address of a job to its correspondent periodCredits"
                  },
                  "id": 5412,
                  "mutability": "mutable",
                  "name": "_jobPeriodCredits",
                  "nameLocation": "1201:17:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5507,
                  "src": "1164:54:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 5411,
                    "keyType": {
                      "id": 5409,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1172:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1164:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 5410,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1183:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 5413,
                    "nodeType": "StructuredDocumentation",
                    "src": "1223:54:29",
                    "text": "@notice Enumerable array of Job Tokens for Credits"
                  },
                  "id": 5418,
                  "mutability": "mutable",
                  "name": "_jobTokens",
                  "nameLocation": "1334:10:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5507,
                  "src": "1280:64:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                    "typeString": "mapping(address => struct EnumerableSet.AddressSet)"
                  },
                  "typeName": {
                    "id": 5417,
                    "keyType": {
                      "id": 5414,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1288:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1280:44:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                      "typeString": "mapping(address => struct EnumerableSet.AddressSet)"
                    },
                    "valueType": {
                      "id": 5416,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 5415,
                        "name": "EnumerableSet.AddressSet",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1631,
                        "src": "1299:24:29"
                      },
                      "referencedDeclaration": 1631,
                      "src": "1299:24:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                        "typeString": "struct EnumerableSet.AddressSet"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 5419,
                    "nodeType": "StructuredDocumentation",
                    "src": "1349:67:29",
                    "text": "@notice List of liquidities that a job has (job => liquidities)"
                  },
                  "id": 5424,
                  "mutability": "mutable",
                  "name": "_jobLiquidities",
                  "nameLocation": "1473:15:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5507,
                  "src": "1419:69:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                    "typeString": "mapping(address => struct EnumerableSet.AddressSet)"
                  },
                  "typeName": {
                    "id": 5423,
                    "keyType": {
                      "id": 5420,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1427:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1419:44:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                      "typeString": "mapping(address => struct EnumerableSet.AddressSet)"
                    },
                    "valueType": {
                      "id": 5422,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 5421,
                        "name": "EnumerableSet.AddressSet",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1631,
                        "src": "1438:24:29"
                      },
                      "referencedDeclaration": 1631,
                      "src": "1438:24:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                        "typeString": "struct EnumerableSet.AddressSet"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 5425,
                    "nodeType": "StructuredDocumentation",
                    "src": "1493:37:29",
                    "text": "@notice Liquidity pool to observe"
                  },
                  "id": 5429,
                  "mutability": "mutable",
                  "name": "_liquidityPool",
                  "nameLocation": "1570:14:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5507,
                  "src": "1533:51:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                    "typeString": "mapping(address => address)"
                  },
                  "typeName": {
                    "id": 5428,
                    "keyType": {
                      "id": 5426,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1541:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1533:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                      "typeString": "mapping(address => address)"
                    },
                    "valueType": {
                      "id": 5427,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1552:7:29",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 5430,
                    "nodeType": "StructuredDocumentation",
                    "src": "1589:47:29",
                    "text": "@notice Tracks if a pool has KP3R as token0"
                  },
                  "id": 5434,
                  "mutability": "mutable",
                  "name": "_isKP3RToken0",
                  "nameLocation": "1673:13:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5507,
                  "src": "1639:47:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "typeName": {
                    "id": 5433,
                    "keyType": {
                      "id": 5431,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1647:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1639:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                      "typeString": "mapping(address => bool)"
                    },
                    "valueType": {
                      "id": 5432,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "1658:4:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    12938
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5435,
                    "nodeType": "StructuredDocumentation",
                    "src": "1691:34:29",
                    "text": "@inheritdoc IKeep3rAccountance"
                  },
                  "functionSelector": "15006b82",
                  "id": 5442,
                  "mutability": "mutable",
                  "name": "pendingBonds",
                  "nameLocation": "1792:12:29",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5441,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1783:8:29"
                  },
                  "scope": 5507,
                  "src": "1728:76:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 5440,
                    "keyType": {
                      "id": 5436,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1736:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1728:47:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 5439,
                      "keyType": {
                        "id": 5437,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1755:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "1747:27:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 5438,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1766:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    12948
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5443,
                    "nodeType": "StructuredDocumentation",
                    "src": "1809:34:29",
                    "text": "@inheritdoc IKeep3rAccountance"
                  },
                  "functionSelector": "cd22af1b",
                  "id": 5450,
                  "mutability": "mutable",
                  "name": "canActivateAfter",
                  "nameLocation": "1910:16:29",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5449,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1901:8:29"
                  },
                  "scope": 5507,
                  "src": "1846:80:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 5448,
                    "keyType": {
                      "id": 5444,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1854:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1846:47:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 5447,
                      "keyType": {
                        "id": 5445,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1873:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "1865:27:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 5446,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1884:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    12958
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5451,
                    "nodeType": "StructuredDocumentation",
                    "src": "1931:34:29",
                    "text": "@inheritdoc IKeep3rAccountance"
                  },
                  "functionSelector": "07b435c2",
                  "id": 5458,
                  "mutability": "mutable",
                  "name": "canWithdrawAfter",
                  "nameLocation": "2032:16:29",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5457,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2023:8:29"
                  },
                  "scope": 5507,
                  "src": "1968:80:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 5456,
                    "keyType": {
                      "id": 5452,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1976:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1968:47:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 5455,
                      "keyType": {
                        "id": 5453,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1995:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "1987:27:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 5454,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2006:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    12968
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5459,
                    "nodeType": "StructuredDocumentation",
                    "src": "2053:34:29",
                    "text": "@inheritdoc IKeep3rAccountance"
                  },
                  "functionSelector": "21040b01",
                  "id": 5466,
                  "mutability": "mutable",
                  "name": "pendingUnbonds",
                  "nameLocation": "2154:14:29",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5465,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2145:8:29"
                  },
                  "scope": 5507,
                  "src": "2090:78:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 5464,
                    "keyType": {
                      "id": 5460,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2098:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "2090:47:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 5463,
                      "keyType": {
                        "id": 5461,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2117:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "2109:27:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 5462,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2128:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    12976
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5467,
                    "nodeType": "StructuredDocumentation",
                    "src": "2173:34:29",
                    "text": "@inheritdoc IKeep3rAccountance"
                  },
                  "functionSelector": "8cb22b76",
                  "id": 5472,
                  "mutability": "mutable",
                  "name": "hasBonded",
                  "nameLocation": "2251:9:29",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5471,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2242:8:29"
                  },
                  "scope": 5507,
                  "src": "2210:50:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "typeName": {
                    "id": 5470,
                    "keyType": {
                      "id": 5468,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2218:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "2210:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                      "typeString": "mapping(address => bool)"
                    },
                    "valueType": {
                      "id": 5469,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "2229:4:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 5473,
                    "nodeType": "StructuredDocumentation",
                    "src": "2265:36:29",
                    "text": "@notice List of all enabled jobs"
                  },
                  "id": 5476,
                  "mutability": "mutable",
                  "name": "_jobs",
                  "nameLocation": "2338:5:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5507,
                  "src": "2304:39:29",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                    "typeString": "struct EnumerableSet.AddressSet"
                  },
                  "typeName": {
                    "id": 5475,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 5474,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "2304:24:29"
                    },
                    "referencedDeclaration": 1631,
                    "src": "2304:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    12983
                  ],
                  "body": {
                    "id": 5490,
                    "nodeType": "Block",
                    "src": "2457:33:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 5488,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5484,
                            "name": "_list",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5482,
                            "src": "2463:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 5485,
                                "name": "_jobs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5476,
                                "src": "2471:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 5486,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "values",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1784,
                              "src": "2471:12:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (address[] memory)"
                              }
                            },
                            "id": 5487,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2471:14:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "src": "2463:22:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 5489,
                        "nodeType": "ExpressionStatement",
                        "src": "2463:22:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5477,
                    "nodeType": "StructuredDocumentation",
                    "src": "2348:34:29",
                    "text": "@inheritdoc IKeep3rAccountance"
                  },
                  "functionSelector": "7c8fce23",
                  "id": 5491,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobs",
                  "nameLocation": "2394:4:29",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5479,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2415:8:29"
                  },
                  "parameters": {
                    "id": 5478,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2398:2:29"
                  },
                  "returnParameters": {
                    "id": 5483,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5482,
                        "mutability": "mutable",
                        "name": "_list",
                        "nameLocation": "2450:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 5491,
                        "src": "2433:22:29",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 5480,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2433:7:29",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 5481,
                          "nodeType": "ArrayTypeName",
                          "src": "2433:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2432:24:29"
                  },
                  "scope": 5507,
                  "src": "2385:105:29",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    12990
                  ],
                  "body": {
                    "id": 5505,
                    "nodeType": "Block",
                    "src": "2606:36:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 5503,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5499,
                            "name": "_list",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5497,
                            "src": "2612:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 5500,
                                "name": "_keepers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5368,
                                "src": "2620:8:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 5501,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "values",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1784,
                              "src": "2620:15:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (address[] memory)"
                              }
                            },
                            "id": 5502,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2620:17:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "src": "2612:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 5504,
                        "nodeType": "ExpressionStatement",
                        "src": "2612:25:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5492,
                    "nodeType": "StructuredDocumentation",
                    "src": "2494:34:29",
                    "text": "@inheritdoc IKeep3rAccountance"
                  },
                  "functionSelector": "951dc22c",
                  "id": 5506,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "keepers",
                  "nameLocation": "2540:7:29",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5494,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2564:8:29"
                  },
                  "parameters": {
                    "id": 5493,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2547:2:29"
                  },
                  "returnParameters": {
                    "id": 5498,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5497,
                        "mutability": "mutable",
                        "name": "_list",
                        "nameLocation": "2599:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 5506,
                        "src": "2582:22:29",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 5495,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2582:7:29",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 5496,
                          "nodeType": "ArrayTypeName",
                          "src": "2582:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2581:24:29"
                  },
                  "scope": 5507,
                  "src": "2531:111:29",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5508,
              "src": "194:2450:29",
              "usedErrors": [
                12993,
                12996
              ]
            }
          ],
          "src": "32:2613:29"
        },
        "id": 29
      },
      "solidity/contracts/peripherals/Keep3rDisputable.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/Keep3rDisputable.sol",
          "exportedSymbols": {
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rDisputable": [
              13033
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rDisputable": [
              5578
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ]
          },
          "id": 5579,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5509,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:30"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rParameters.sol",
              "file": "./Keep3rParameters.sol",
              "id": 5510,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5579,
              "sourceUnit": 5935,
              "src": "65:32:30",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rRoles.sol",
              "file": "./Keep3rRoles.sol",
              "id": 5511,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5579,
              "sourceUnit": 6102,
              "src": "98:27:30",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rDisputable.sol",
              "file": "../../interfaces/peripherals/IKeep3rDisputable.sol",
              "id": 5512,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5579,
              "sourceUnit": 13034,
              "src": "126:60:30",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5513,
                    "name": "IKeep3rDisputable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13033,
                    "src": "226:17:30"
                  },
                  "id": 5514,
                  "nodeType": "InheritanceSpecifier",
                  "src": "226:17:30"
                },
                {
                  "baseName": {
                    "id": 5515,
                    "name": "Keep3rAccountance",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5507,
                    "src": "245:17:30"
                  },
                  "id": 5516,
                  "nodeType": "InheritanceSpecifier",
                  "src": "245:17:30"
                },
                {
                  "baseName": {
                    "id": 5517,
                    "name": "Keep3rRoles",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 6101,
                    "src": "264:11:30"
                  },
                  "id": 5518,
                  "nodeType": "InheritanceSpecifier",
                  "src": "264:11:30"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 5578,
              "linearizedBaseContracts": [
                5578,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13033
              ],
              "name": "Keep3rDisputable",
              "nameLocation": "206:16:30",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    13026
                  ],
                  "body": {
                    "id": 5546,
                    "nodeType": "Block",
                    "src": "386:142:30",
                    "statements": [
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 5527,
                            "name": "disputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5386,
                            "src": "396:8:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 5529,
                          "indexExpression": {
                            "id": 5528,
                            "name": "_jobOrKeeper",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5521,
                            "src": "405:12:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "396:22:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5533,
                        "nodeType": "IfStatement",
                        "src": "392:52:30",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5530,
                              "name": "AlreadyDisputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13017,
                              "src": "427:15:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 5531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "427:17:30",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 5532,
                          "nodeType": "RevertStatement",
                          "src": "420:24:30"
                        }
                      },
                      {
                        "expression": {
                          "id": 5538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5534,
                              "name": "disputes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5386,
                              "src": "450:8:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 5536,
                            "indexExpression": {
                              "id": 5535,
                              "name": "_jobOrKeeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5521,
                              "src": "459:12:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "450:22:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 5537,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "475:4:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "450:29:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5539,
                        "nodeType": "ExpressionStatement",
                        "src": "450:29:30"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5541,
                              "name": "_jobOrKeeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5521,
                              "src": "498:12:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 5542,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "512:3:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 5543,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "512:10:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5540,
                            "name": "Dispute",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13007,
                            "src": "490:7:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 5544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "490:33:30",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5545,
                        "nodeType": "EmitStatement",
                        "src": "485:38:30"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5519,
                    "nodeType": "StructuredDocumentation",
                    "src": "280:33:30",
                    "text": "@inheritdoc IKeep3rDisputable"
                  },
                  "functionSelector": "f75f9f7b",
                  "id": 5547,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5525,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5524,
                        "name": "onlyDisputer",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6100,
                        "src": "373:12:30"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "373:12:30"
                    }
                  ],
                  "name": "dispute",
                  "nameLocation": "325:7:30",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5523,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "364:8:30"
                  },
                  "parameters": {
                    "id": 5522,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5521,
                        "mutability": "mutable",
                        "name": "_jobOrKeeper",
                        "nameLocation": "341:12:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 5547,
                        "src": "333:20:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5520,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "333:7:30",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "332:22:30"
                  },
                  "returnParameters": {
                    "id": 5526,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "386:0:30"
                  },
                  "scope": 5578,
                  "src": "316:212:30",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13032
                  ],
                  "body": {
                    "id": 5576,
                    "nodeType": "Block",
                    "src": "638:140:30",
                    "statements": [
                      {
                        "condition": {
                          "id": 5559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "648:23:30",
                          "subExpression": {
                            "baseExpression": {
                              "id": 5556,
                              "name": "disputes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5386,
                              "src": "649:8:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 5558,
                            "indexExpression": {
                              "id": 5557,
                              "name": "_jobOrKeeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5550,
                              "src": "658:12:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "649:22:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5563,
                        "nodeType": "IfStatement",
                        "src": "644:49:30",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5560,
                              "name": "NotDisputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13020,
                              "src": "680:11:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 5561,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "680:13:30",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 5562,
                          "nodeType": "RevertStatement",
                          "src": "673:20:30"
                        }
                      },
                      {
                        "expression": {
                          "id": 5568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5564,
                              "name": "disputes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5386,
                              "src": "699:8:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 5566,
                            "indexExpression": {
                              "id": 5565,
                              "name": "_jobOrKeeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5550,
                              "src": "708:12:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "699:22:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 5567,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "724:5:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "699:30:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5569,
                        "nodeType": "ExpressionStatement",
                        "src": "699:30:30"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5571,
                              "name": "_jobOrKeeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5550,
                              "src": "748:12:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 5572,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "762:3:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 5573,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "762:10:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5570,
                            "name": "Resolve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13014,
                            "src": "740:7:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 5574,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "740:33:30",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5575,
                        "nodeType": "EmitStatement",
                        "src": "735:38:30"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5548,
                    "nodeType": "StructuredDocumentation",
                    "src": "532:33:30",
                    "text": "@inheritdoc IKeep3rDisputable"
                  },
                  "functionSelector": "55ea6c47",
                  "id": 5577,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5554,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5553,
                        "name": "onlyDisputer",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6100,
                        "src": "625:12:30"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "625:12:30"
                    }
                  ],
                  "name": "resolve",
                  "nameLocation": "577:7:30",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5552,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "616:8:30"
                  },
                  "parameters": {
                    "id": 5551,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5550,
                        "mutability": "mutable",
                        "name": "_jobOrKeeper",
                        "nameLocation": "593:12:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 5577,
                        "src": "585:20:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5549,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "585:7:30",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "584:22:30"
                  },
                  "returnParameters": {
                    "id": 5555,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "638:0:30"
                  },
                  "scope": 5578,
                  "src": "568:210:30",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5579,
              "src": "188:592:30",
              "usedErrors": [
                12834,
                12837,
                12840,
                12993,
                12996,
                13017,
                13020,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:749:30"
        },
        "id": 30
      },
      "solidity/contracts/peripherals/Keep3rParameters.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/Keep3rParameters.sol",
          "exportedSymbols": {
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ]
          },
          "id": 5935,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5580,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:31"
            },
            {
              "absolutePath": "solidity/interfaces/IKeep3rHelper.sol",
              "file": "../../interfaces/IKeep3rHelper.sol",
              "id": 5581,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5935,
              "sourceUnit": 11526,
              "src": "65:44:31",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rParameters.sol",
              "file": "../../interfaces/peripherals/IKeep3rParameters.sol",
              "id": 5582,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5935,
              "sourceUnit": 13859,
              "src": "110:60:31",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rAccountance.sol",
              "file": "./Keep3rAccountance.sol",
              "id": 5583,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5935,
              "sourceUnit": 5508,
              "src": "171:33:31",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rRoles.sol",
              "file": "./Keep3rRoles.sol",
              "id": 5584,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 5935,
              "sourceUnit": 6102,
              "src": "205:27:31",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5585,
                    "name": "IKeep3rParameters",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13858,
                    "src": "272:17:31"
                  },
                  "id": 5586,
                  "nodeType": "InheritanceSpecifier",
                  "src": "272:17:31"
                },
                {
                  "baseName": {
                    "id": 5587,
                    "name": "Keep3rAccountance",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5507,
                    "src": "291:17:31"
                  },
                  "id": 5588,
                  "nodeType": "InheritanceSpecifier",
                  "src": "291:17:31"
                },
                {
                  "baseName": {
                    "id": 5589,
                    "name": "Keep3rRoles",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 6101,
                    "src": "310:11:31"
                  },
                  "id": 5590,
                  "nodeType": "InheritanceSpecifier",
                  "src": "310:11:31"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 5934,
              "linearizedBaseContracts": [
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793
              ],
              "name": "Keep3rParameters",
              "nameLocation": "252:16:31",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    13731
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5591,
                    "nodeType": "StructuredDocumentation",
                    "src": "326:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "1ef94b91",
                  "id": 5594,
                  "mutability": "mutable",
                  "name": "keep3rV1",
                  "nameLocation": "386:8:31",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5593,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "377:8:31"
                  },
                  "scope": 5934,
                  "src": "362:32:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5592,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "362:7:31",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13737
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5595,
                    "nodeType": "StructuredDocumentation",
                    "src": "399:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "c7ae40d0",
                  "id": 5598,
                  "mutability": "mutable",
                  "name": "keep3rV1Proxy",
                  "nameLocation": "459:13:31",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5597,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "450:8:31"
                  },
                  "scope": 5934,
                  "src": "435:37:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5596,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "435:7:31",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13725
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5599,
                    "nodeType": "StructuredDocumentation",
                    "src": "477:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "f11a1d1a",
                  "id": 5602,
                  "mutability": "mutable",
                  "name": "keep3rHelper",
                  "nameLocation": "537:12:31",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5601,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "528:8:31"
                  },
                  "scope": 5934,
                  "src": "513:36:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5600,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "513:7:31",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13743
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5603,
                    "nodeType": "StructuredDocumentation",
                    "src": "554:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "7b40c913",
                  "id": 5606,
                  "mutability": "mutable",
                  "name": "kp3rWethPool",
                  "nameLocation": "614:12:31",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5605,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "605:8:31"
                  },
                  "scope": 5934,
                  "src": "590:36:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5604,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "590:7:31",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13749
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5607,
                    "nodeType": "StructuredDocumentation",
                    "src": "631:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "5ebe23f0",
                  "id": 5611,
                  "mutability": "mutable",
                  "name": "bondTime",
                  "nameLocation": "691:8:31",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5609,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "682:8:31"
                  },
                  "scope": 5934,
                  "src": "667:41:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5608,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "667:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "33",
                    "id": 5610,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "702:6:31",
                    "subdenomination": "days",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_259200_by_1",
                      "typeString": "int_const 259200"
                    },
                    "value": "3"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13755
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5612,
                    "nodeType": "StructuredDocumentation",
                    "src": "713:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "a7d2e784",
                  "id": 5616,
                  "mutability": "mutable",
                  "name": "unbondTime",
                  "nameLocation": "773:10:31",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5614,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "764:8:31"
                  },
                  "scope": 5934,
                  "src": "749:44:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5613,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "749:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "3134",
                    "id": 5615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "786:7:31",
                    "subdenomination": "days",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1209600_by_1",
                      "typeString": "int_const 1209600"
                    },
                    "value": "14"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13761
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5617,
                    "nodeType": "StructuredDocumentation",
                    "src": "798:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "633fb68f",
                  "id": 5621,
                  "mutability": "mutable",
                  "name": "liquidityMinimum",
                  "nameLocation": "858:16:31",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5619,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "849:8:31"
                  },
                  "scope": 5934,
                  "src": "834:50:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5618,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "834:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "33",
                    "id": 5620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "877:7:31",
                    "subdenomination": "ether",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3000000000000000000_by_1",
                      "typeString": "int_const 3000000000000000000"
                    },
                    "value": "3"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13767
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5622,
                    "nodeType": "StructuredDocumentation",
                    "src": "889:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "768b5d90",
                  "id": 5626,
                  "mutability": "mutable",
                  "name": "rewardPeriodTime",
                  "nameLocation": "949:16:31",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5624,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "940:8:31"
                  },
                  "scope": 5934,
                  "src": "925:49:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5623,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "925:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "35",
                    "id": 5625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "968:6:31",
                    "subdenomination": "days",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_432000_by_1",
                      "typeString": "int_const 432000"
                    },
                    "value": "5"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13773
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5627,
                    "nodeType": "StructuredDocumentation",
                    "src": "979:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "fc253d2b",
                  "id": 5631,
                  "mutability": "mutable",
                  "name": "inflationPeriod",
                  "nameLocation": "1039:15:31",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5629,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1030:8:31"
                  },
                  "scope": 5934,
                  "src": "1015:49:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5628,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1015:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "3334",
                    "id": 5630,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1057:7:31",
                    "subdenomination": "days",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_2937600_by_1",
                      "typeString": "int_const 2937600"
                    },
                    "value": "34"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13779
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5632,
                    "nodeType": "StructuredDocumentation",
                    "src": "1069:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "ddca3f43",
                  "id": 5636,
                  "mutability": "mutable",
                  "name": "fee",
                  "nameLocation": "1129:3:31",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5634,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1120:8:31"
                  },
                  "scope": 5934,
                  "src": "1105:32:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5633,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1105:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "3330",
                    "id": 5635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1135:2:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_30_by_1",
                      "typeString": "int_const 30"
                    },
                    "value": "30"
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 5637,
                    "nodeType": "StructuredDocumentation",
                    "src": "1142:59:31",
                    "text": "@notice The base that will be used to calculate the fee"
                  },
                  "id": 5640,
                  "mutability": "constant",
                  "name": "_BASE",
                  "nameLocation": "1230:5:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 5934,
                  "src": "1204:40:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5638,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1204:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "31305f303030",
                    "id": 5639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1238:6:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_10000_by_1",
                      "typeString": "int_const 10000"
                    },
                    "value": "10_000"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 5641,
                    "nodeType": "StructuredDocumentation",
                    "src": "1249:37:31",
                    "text": "@notice The minimum reward period"
                  },
                  "id": 5644,
                  "mutability": "constant",
                  "name": "_MIN_REWARD_PERIOD_TIME",
                  "nameLocation": "1315:23:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 5934,
                  "src": "1289:58:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5642,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1289:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "31",
                    "id": 5643,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1341:6:31",
                    "subdenomination": "days",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_86400_by_1",
                      "typeString": "int_const 86400"
                    },
                    "value": "1"
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5688,
                    "nodeType": "Block",
                    "src": "1473:275:31",
                    "statements": [
                      {
                        "expression": {
                          "id": 5657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5655,
                            "name": "keep3rHelper",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5602,
                            "src": "1479:12:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5656,
                            "name": "_keep3rHelper",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5646,
                            "src": "1494:13:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1479:28:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5658,
                        "nodeType": "ExpressionStatement",
                        "src": "1479:28:31"
                      },
                      {
                        "expression": {
                          "id": 5661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5659,
                            "name": "keep3rV1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5594,
                            "src": "1513:8:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5660,
                            "name": "_keep3rV1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5648,
                            "src": "1524:9:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1513:20:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5662,
                        "nodeType": "ExpressionStatement",
                        "src": "1513:20:31"
                      },
                      {
                        "expression": {
                          "id": 5665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5663,
                            "name": "keep3rV1Proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5598,
                            "src": "1539:13:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5664,
                            "name": "_keep3rV1Proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5650,
                            "src": "1555:14:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1539:30:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5666,
                        "nodeType": "ExpressionStatement",
                        "src": "1539:30:31"
                      },
                      {
                        "expression": {
                          "id": 5669,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5667,
                            "name": "kp3rWethPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5606,
                            "src": "1575:12:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5668,
                            "name": "_kp3rWethPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5652,
                            "src": "1590:13:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1575:28:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5670,
                        "nodeType": "ExpressionStatement",
                        "src": "1575:28:31"
                      },
                      {
                        "expression": {
                          "id": 5675,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5671,
                              "name": "_liquidityPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5429,
                              "src": "1609:14:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 5673,
                            "indexExpression": {
                              "id": 5672,
                              "name": "kp3rWethPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5606,
                              "src": "1624:12:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1609:28:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5674,
                            "name": "kp3rWethPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5606,
                            "src": "1640:12:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1609:43:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5676,
                        "nodeType": "ExpressionStatement",
                        "src": "1609:43:31"
                      },
                      {
                        "expression": {
                          "id": 5686,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5677,
                              "name": "_isKP3RToken0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5434,
                              "src": "1658:13:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 5679,
                            "indexExpression": {
                              "id": 5678,
                              "name": "_kp3rWethPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5652,
                              "src": "1672:13:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1658:28:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5684,
                                "name": "kp3rWethPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5606,
                                "src": "1730:12:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5681,
                                    "name": "keep3rHelper",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5602,
                                    "src": "1703:12:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 5680,
                                  "name": "IKeep3rHelper",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11525,
                                  "src": "1689:13:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IKeep3rHelper_$11525_$",
                                    "typeString": "type(contract IKeep3rHelper)"
                                  }
                                },
                                "id": 5682,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1689:27:31",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IKeep3rHelper_$11525",
                                  "typeString": "contract IKeep3rHelper"
                                }
                              },
                              "id": 5683,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "isKP3RToken0",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11473,
                              "src": "1689:40:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address) view external returns (bool)"
                              }
                            },
                            "id": 5685,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1689:54:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1658:85:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5687,
                        "nodeType": "ExpressionStatement",
                        "src": "1658:85:31"
                      }
                    ]
                  },
                  "id": 5689,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5653,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5646,
                        "mutability": "mutable",
                        "name": "_keep3rHelper",
                        "nameLocation": "1377:13:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5689,
                        "src": "1369:21:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5645,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1369:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5648,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "1404:9:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5689,
                        "src": "1396:17:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5647,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1396:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5650,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "1427:14:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5689,
                        "src": "1419:22:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5649,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1419:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5652,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "1455:13:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5689,
                        "src": "1447:21:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5651,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1447:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1363:109:31"
                  },
                  "returnParameters": {
                    "id": 5654,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1473:0:31"
                  },
                  "scope": 5934,
                  "src": "1352:396:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    13803
                  ],
                  "body": {
                    "id": 5716,
                    "nodeType": "Block",
                    "src": "1869:142:31",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5698,
                            "name": "_keep3rHelper",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5692,
                            "src": "1879:13:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 5701,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1904:1:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 5700,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1896:7:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 5699,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1896:7:31",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1896:10:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1879:27:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5707,
                        "nodeType": "IfStatement",
                        "src": "1875:53:31",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5704,
                              "name": "ZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12792,
                              "src": "1915:11:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 5705,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1915:13:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 5706,
                          "nodeType": "RevertStatement",
                          "src": "1908:20:31"
                        }
                      },
                      {
                        "expression": {
                          "id": 5710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5708,
                            "name": "keep3rHelper",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5602,
                            "src": "1934:12:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5709,
                            "name": "_keep3rHelper",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5692,
                            "src": "1949:13:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1934:28:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5711,
                        "nodeType": "ExpressionStatement",
                        "src": "1934:28:31"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5713,
                              "name": "_keep3rHelper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5692,
                              "src": "1992:13:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5712,
                            "name": "Keep3rHelperChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13674,
                            "src": "1973:18:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 5714,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1973:33:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5715,
                        "nodeType": "EmitStatement",
                        "src": "1968:38:31"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5690,
                    "nodeType": "StructuredDocumentation",
                    "src": "1752:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "72da828a",
                  "id": 5717,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5696,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5695,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "1854:14:31"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1854:14:31"
                    }
                  ],
                  "name": "setKeep3rHelper",
                  "nameLocation": "1797:15:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5694,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1845:8:31"
                  },
                  "parameters": {
                    "id": 5693,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5692,
                        "mutability": "mutable",
                        "name": "_keep3rHelper",
                        "nameLocation": "1821:13:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5717,
                        "src": "1813:21:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5691,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1813:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1812:23:31"
                  },
                  "returnParameters": {
                    "id": 5697,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1869:0:31"
                  },
                  "scope": 5934,
                  "src": "1788:223:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13809
                  ],
                  "body": {
                    "id": 5744,
                    "nodeType": "Block",
                    "src": "2124:122:31",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5726,
                            "name": "_keep3rV1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5720,
                            "src": "2134:9:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 5729,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2155:1:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 5728,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2147:7:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 5727,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2147:7:31",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5730,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2147:10:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2134:23:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5735,
                        "nodeType": "IfStatement",
                        "src": "2130:49:31",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5732,
                              "name": "ZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12792,
                              "src": "2166:11:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 5733,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2166:13:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 5734,
                          "nodeType": "RevertStatement",
                          "src": "2159:20:31"
                        }
                      },
                      {
                        "expression": {
                          "id": 5738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5736,
                            "name": "keep3rV1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5594,
                            "src": "2185:8:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5737,
                            "name": "_keep3rV1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5720,
                            "src": "2196:9:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2185:20:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5739,
                        "nodeType": "ExpressionStatement",
                        "src": "2185:20:31"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5741,
                              "name": "_keep3rV1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5720,
                              "src": "2231:9:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5740,
                            "name": "Keep3rV1Change",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13679,
                            "src": "2216:14:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 5742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2216:25:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5743,
                        "nodeType": "EmitStatement",
                        "src": "2211:30:31"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5718,
                    "nodeType": "StructuredDocumentation",
                    "src": "2015:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "ec00cdfc",
                  "id": 5745,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5724,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5723,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "2109:14:31"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2109:14:31"
                    }
                  ],
                  "name": "setKeep3rV1",
                  "nameLocation": "2060:11:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5722,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2100:8:31"
                  },
                  "parameters": {
                    "id": 5721,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5720,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "2080:9:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5745,
                        "src": "2072:17:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5719,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2072:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2071:19:31"
                  },
                  "returnParameters": {
                    "id": 5725,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2124:0:31"
                  },
                  "scope": 5934,
                  "src": "2051:195:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13815
                  ],
                  "body": {
                    "id": 5772,
                    "nodeType": "Block",
                    "src": "2369:147:31",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5754,
                            "name": "_keep3rV1Proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5748,
                            "src": "2379:14:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 5757,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2405:1:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 5756,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2397:7:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 5755,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2397:7:31",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5758,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2397:10:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2379:28:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5763,
                        "nodeType": "IfStatement",
                        "src": "2375:54:31",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5760,
                              "name": "ZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12792,
                              "src": "2416:11:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 5761,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2416:13:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 5762,
                          "nodeType": "RevertStatement",
                          "src": "2409:20:31"
                        }
                      },
                      {
                        "expression": {
                          "id": 5766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5764,
                            "name": "keep3rV1Proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5598,
                            "src": "2435:13:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5765,
                            "name": "_keep3rV1Proxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5748,
                            "src": "2451:14:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2435:30:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5767,
                        "nodeType": "ExpressionStatement",
                        "src": "2435:30:31"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5769,
                              "name": "_keep3rV1Proxy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5748,
                              "src": "2496:14:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5768,
                            "name": "Keep3rV1ProxyChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13684,
                            "src": "2476:19:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 5770,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2476:35:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5771,
                        "nodeType": "EmitStatement",
                        "src": "2471:40:31"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5746,
                    "nodeType": "StructuredDocumentation",
                    "src": "2250:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "cb4be2bb",
                  "id": 5773,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5752,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5751,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "2354:14:31"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2354:14:31"
                    }
                  ],
                  "name": "setKeep3rV1Proxy",
                  "nameLocation": "2295:16:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5750,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2345:8:31"
                  },
                  "parameters": {
                    "id": 5749,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5748,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "2320:14:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5773,
                        "src": "2312:22:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5747,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2312:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2311:24:31"
                  },
                  "returnParameters": {
                    "id": 5753,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2369:0:31"
                  },
                  "scope": 5934,
                  "src": "2286:230:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13821
                  ],
                  "body": {
                    "id": 5817,
                    "nodeType": "Block",
                    "src": "2637:283:31",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5782,
                            "name": "_kp3rWethPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5776,
                            "src": "2647:13:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 5785,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2672:1:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 5784,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2664:7:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 5783,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2664:7:31",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5786,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2664:10:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2647:27:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5791,
                        "nodeType": "IfStatement",
                        "src": "2643:53:31",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5788,
                              "name": "ZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12792,
                              "src": "2683:11:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 5789,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2683:13:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 5790,
                          "nodeType": "RevertStatement",
                          "src": "2676:20:31"
                        }
                      },
                      {
                        "expression": {
                          "id": 5794,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5792,
                            "name": "kp3rWethPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5606,
                            "src": "2702:12:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5793,
                            "name": "_kp3rWethPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5776,
                            "src": "2717:13:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2702:28:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5795,
                        "nodeType": "ExpressionStatement",
                        "src": "2702:28:31"
                      },
                      {
                        "expression": {
                          "id": 5800,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5796,
                              "name": "_liquidityPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5429,
                              "src": "2736:14:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 5798,
                            "indexExpression": {
                              "id": 5797,
                              "name": "kp3rWethPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5606,
                              "src": "2751:12:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2736:28:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5799,
                            "name": "kp3rWethPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5606,
                            "src": "2767:12:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2736:43:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 5801,
                        "nodeType": "ExpressionStatement",
                        "src": "2736:43:31"
                      },
                      {
                        "expression": {
                          "id": 5811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5802,
                              "name": "_isKP3RToken0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5434,
                              "src": "2785:13:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 5804,
                            "indexExpression": {
                              "id": 5803,
                              "name": "_kp3rWethPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5776,
                              "src": "2799:13:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2785:28:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5809,
                                "name": "_kp3rWethPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5776,
                                "src": "2857:13:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5806,
                                    "name": "keep3rHelper",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5602,
                                    "src": "2830:12:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 5805,
                                  "name": "IKeep3rHelper",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11525,
                                  "src": "2816:13:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IKeep3rHelper_$11525_$",
                                    "typeString": "type(contract IKeep3rHelper)"
                                  }
                                },
                                "id": 5807,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2816:27:31",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IKeep3rHelper_$11525",
                                  "typeString": "contract IKeep3rHelper"
                                }
                              },
                              "id": 5808,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "isKP3RToken0",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11473,
                              "src": "2816:40:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address) view external returns (bool)"
                              }
                            },
                            "id": 5810,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2816:55:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "2785:86:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5812,
                        "nodeType": "ExpressionStatement",
                        "src": "2785:86:31"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5814,
                              "name": "_kp3rWethPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5776,
                              "src": "2901:13:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5813,
                            "name": "Kp3rWethPoolChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13689,
                            "src": "2882:18:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 5815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2882:33:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5816,
                        "nodeType": "EmitStatement",
                        "src": "2877:38:31"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5774,
                    "nodeType": "StructuredDocumentation",
                    "src": "2520:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "160e1e31",
                  "id": 5818,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5780,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5779,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "2622:14:31"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2622:14:31"
                    }
                  ],
                  "name": "setKp3rWethPool",
                  "nameLocation": "2565:15:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5778,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2613:8:31"
                  },
                  "parameters": {
                    "id": 5777,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5776,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "2589:13:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5818,
                        "src": "2581:21:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5775,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2581:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2580:23:31"
                  },
                  "returnParameters": {
                    "id": 5781,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2637:0:31"
                  },
                  "scope": 5934,
                  "src": "2556:364:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13827
                  ],
                  "body": {
                    "id": 5835,
                    "nodeType": "Block",
                    "src": "3033:67:31",
                    "statements": [
                      {
                        "expression": {
                          "id": 5829,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5827,
                            "name": "bondTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5611,
                            "src": "3039:8:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5828,
                            "name": "_bondTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5821,
                            "src": "3050:9:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3039:20:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5830,
                        "nodeType": "ExpressionStatement",
                        "src": "3039:20:31"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5832,
                              "name": "_bondTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5821,
                              "src": "3085:9:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5831,
                            "name": "BondTimeChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13694,
                            "src": "3070:14:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 5833,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3070:25:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5834,
                        "nodeType": "EmitStatement",
                        "src": "3065:30:31"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5819,
                    "nodeType": "StructuredDocumentation",
                    "src": "2924:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "b7e77340",
                  "id": 5836,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5825,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5824,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "3018:14:31"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3018:14:31"
                    }
                  ],
                  "name": "setBondTime",
                  "nameLocation": "2969:11:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5823,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3009:8:31"
                  },
                  "parameters": {
                    "id": 5822,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5821,
                        "mutability": "mutable",
                        "name": "_bondTime",
                        "nameLocation": "2989:9:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5836,
                        "src": "2981:17:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5820,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2981:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2980:19:31"
                  },
                  "returnParameters": {
                    "id": 5826,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3033:0:31"
                  },
                  "scope": 5934,
                  "src": "2960:140:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13833
                  ],
                  "body": {
                    "id": 5853,
                    "nodeType": "Block",
                    "src": "3217:75:31",
                    "statements": [
                      {
                        "expression": {
                          "id": 5847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5845,
                            "name": "unbondTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5616,
                            "src": "3223:10:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5846,
                            "name": "_unbondTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5839,
                            "src": "3236:11:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3223:24:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5848,
                        "nodeType": "ExpressionStatement",
                        "src": "3223:24:31"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5850,
                              "name": "_unbondTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5839,
                              "src": "3275:11:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5849,
                            "name": "UnbondTimeChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13704,
                            "src": "3258:16:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 5851,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3258:29:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5852,
                        "nodeType": "EmitStatement",
                        "src": "3253:34:31"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5837,
                    "nodeType": "StructuredDocumentation",
                    "src": "3104:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "8fe204dd",
                  "id": 5854,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5843,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5842,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "3202:14:31"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3202:14:31"
                    }
                  ],
                  "name": "setUnbondTime",
                  "nameLocation": "3149:13:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5841,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3193:8:31"
                  },
                  "parameters": {
                    "id": 5840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5839,
                        "mutability": "mutable",
                        "name": "_unbondTime",
                        "nameLocation": "3171:11:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5854,
                        "src": "3163:19:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5838,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3163:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3162:21:31"
                  },
                  "returnParameters": {
                    "id": 5844,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3217:0:31"
                  },
                  "scope": 5934,
                  "src": "3140:152:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13839
                  ],
                  "body": {
                    "id": 5871,
                    "nodeType": "Block",
                    "src": "3421:99:31",
                    "statements": [
                      {
                        "expression": {
                          "id": 5865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5863,
                            "name": "liquidityMinimum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5621,
                            "src": "3427:16:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5864,
                            "name": "_liquidityMinimum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5857,
                            "src": "3446:17:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3427:36:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5866,
                        "nodeType": "ExpressionStatement",
                        "src": "3427:36:31"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5868,
                              "name": "_liquidityMinimum",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5857,
                              "src": "3497:17:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5867,
                            "name": "LiquidityMinimumChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13699,
                            "src": "3474:22:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 5869,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3474:41:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5870,
                        "nodeType": "EmitStatement",
                        "src": "3469:46:31"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5855,
                    "nodeType": "StructuredDocumentation",
                    "src": "3296:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "ebbb6194",
                  "id": 5872,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5861,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5860,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "3406:14:31"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3406:14:31"
                    }
                  ],
                  "name": "setLiquidityMinimum",
                  "nameLocation": "3341:19:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5859,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3397:8:31"
                  },
                  "parameters": {
                    "id": 5858,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5857,
                        "mutability": "mutable",
                        "name": "_liquidityMinimum",
                        "nameLocation": "3369:17:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5872,
                        "src": "3361:25:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5856,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3361:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3360:27:31"
                  },
                  "returnParameters": {
                    "id": 5862,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3421:0:31"
                  },
                  "scope": 5934,
                  "src": "3332:188:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13845
                  ],
                  "body": {
                    "id": 5896,
                    "nodeType": "Block",
                    "src": "3755:178:31",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5883,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5881,
                            "name": "_rewardPeriodTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5875,
                            "src": "3765:17:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 5882,
                            "name": "_MIN_REWARD_PERIOD_TIME",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5644,
                            "src": "3785:23:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3765:43:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5887,
                        "nodeType": "IfStatement",
                        "src": "3761:73:31",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5884,
                              "name": "MinRewardPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13782,
                              "src": "3817:15:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 5885,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3817:17:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 5886,
                          "nodeType": "RevertStatement",
                          "src": "3810:24:31"
                        }
                      },
                      {
                        "expression": {
                          "id": 5890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5888,
                            "name": "rewardPeriodTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5626,
                            "src": "3840:16:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5889,
                            "name": "_rewardPeriodTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5875,
                            "src": "3859:17:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3840:36:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5891,
                        "nodeType": "ExpressionStatement",
                        "src": "3840:36:31"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5893,
                              "name": "_rewardPeriodTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5875,
                              "src": "3910:17:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5892,
                            "name": "RewardPeriodTimeChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13709,
                            "src": "3887:22:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 5894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3887:41:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5895,
                        "nodeType": "EmitStatement",
                        "src": "3882:46:31"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5873,
                    "nodeType": "StructuredDocumentation",
                    "src": "3524:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "cb54694d",
                  "id": 5897,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5879,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5878,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "3740:14:31"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3740:14:31"
                    }
                  ],
                  "name": "setRewardPeriodTime",
                  "nameLocation": "3675:19:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5877,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3731:8:31"
                  },
                  "parameters": {
                    "id": 5876,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5875,
                        "mutability": "mutable",
                        "name": "_rewardPeriodTime",
                        "nameLocation": "3703:17:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5897,
                        "src": "3695:25:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5874,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3695:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3694:27:31"
                  },
                  "returnParameters": {
                    "id": 5880,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3755:0:31"
                  },
                  "scope": 5934,
                  "src": "3666:267:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13851
                  ],
                  "body": {
                    "id": 5914,
                    "nodeType": "Block",
                    "src": "4060:95:31",
                    "statements": [
                      {
                        "expression": {
                          "id": 5908,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5906,
                            "name": "inflationPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5631,
                            "src": "4066:15:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5907,
                            "name": "_inflationPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5900,
                            "src": "4084:16:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4066:34:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5909,
                        "nodeType": "ExpressionStatement",
                        "src": "4066:34:31"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5911,
                              "name": "_inflationPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5900,
                              "src": "4133:16:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5910,
                            "name": "InflationPeriodChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13714,
                            "src": "4111:21:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 5912,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4111:39:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5913,
                        "nodeType": "EmitStatement",
                        "src": "4106:44:31"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5898,
                    "nodeType": "StructuredDocumentation",
                    "src": "3937:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "b2392233",
                  "id": 5915,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5904,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5903,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "4045:14:31"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "4045:14:31"
                    }
                  ],
                  "name": "setInflationPeriod",
                  "nameLocation": "3982:18:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5902,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4036:8:31"
                  },
                  "parameters": {
                    "id": 5901,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5900,
                        "mutability": "mutable",
                        "name": "_inflationPeriod",
                        "nameLocation": "4009:16:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5915,
                        "src": "4001:24:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5899,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4001:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4000:26:31"
                  },
                  "returnParameters": {
                    "id": 5905,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4060:0:31"
                  },
                  "scope": 5934,
                  "src": "3973:182:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13857
                  ],
                  "body": {
                    "id": 5932,
                    "nodeType": "Block",
                    "src": "4258:47:31",
                    "statements": [
                      {
                        "expression": {
                          "id": 5926,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5924,
                            "name": "fee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5636,
                            "src": "4264:3:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5925,
                            "name": "_fee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5918,
                            "src": "4270:4:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4264:10:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5927,
                        "nodeType": "ExpressionStatement",
                        "src": "4264:10:31"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5929,
                              "name": "_fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5918,
                              "src": "4295:4:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5928,
                            "name": "FeeChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13719,
                            "src": "4285:9:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 5930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4285:15:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5931,
                        "nodeType": "EmitStatement",
                        "src": "4280:20:31"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5916,
                    "nodeType": "StructuredDocumentation",
                    "src": "4159:33:31",
                    "text": "@inheritdoc IKeep3rParameters"
                  },
                  "functionSelector": "69fe0e2d",
                  "id": 5933,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5922,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5921,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "4243:14:31"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "4243:14:31"
                    }
                  ],
                  "name": "setFee",
                  "nameLocation": "4204:6:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5920,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4234:8:31"
                  },
                  "parameters": {
                    "id": 5919,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5918,
                        "mutability": "mutable",
                        "name": "_fee",
                        "nameLocation": "4219:4:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 5933,
                        "src": "4211:12:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5917,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4211:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4210:14:31"
                  },
                  "returnParameters": {
                    "id": 5923,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4258:0:31"
                  },
                  "scope": 5934,
                  "src": "4195:110:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 5935,
              "src": "234:4073:31",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:4276:31"
        },
        "id": 31
      },
      "solidity/contracts/peripherals/Keep3rRoles.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/Keep3rRoles.sol",
          "exportedSymbols": {
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rRoles": [
              13940
            ],
            "Keep3rRoles": [
              6101
            ]
          },
          "id": 6102,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 5936,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:32"
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rRoles.sol",
              "file": "../../interfaces/peripherals/IKeep3rRoles.sol",
              "id": 5937,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6102,
              "sourceUnit": 13941,
              "src": "65:55:32",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
              "file": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
              "id": 5938,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6102,
              "sourceUnit": 1919,
              "src": "121:65:32",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Governable.sol",
              "file": "./Governable.sol",
              "id": 5939,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6102,
              "sourceUnit": 5355,
              "src": "187:26:32",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 5940,
                    "name": "IKeep3rRoles",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13940,
                    "src": "239:12:32"
                  },
                  "id": 5941,
                  "nodeType": "InheritanceSpecifier",
                  "src": "239:12:32"
                },
                {
                  "baseName": {
                    "id": 5942,
                    "name": "Governable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5354,
                    "src": "253:10:32"
                  },
                  "id": 5943,
                  "nodeType": "InheritanceSpecifier",
                  "src": "253:10:32"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 6101,
              "linearizedBaseContracts": [
                6101,
                5354,
                12863,
                13940
              ],
              "name": "Keep3rRoles",
              "nameLocation": "224:11:32",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    13889
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5944,
                    "nodeType": "StructuredDocumentation",
                    "src": "268:28:32",
                    "text": "@inheritdoc IKeep3rRoles"
                  },
                  "functionSelector": "b87fcbff",
                  "id": 5949,
                  "mutability": "mutable",
                  "name": "slashers",
                  "nameLocation": "340:8:32",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5948,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "331:8:32"
                  },
                  "scope": 6101,
                  "src": "299:49:32",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "typeName": {
                    "id": 5947,
                    "keyType": {
                      "id": 5945,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "307:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "299:24:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                      "typeString": "mapping(address => bool)"
                    },
                    "valueType": {
                      "id": 5946,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "318:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13897
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 5950,
                    "nodeType": "StructuredDocumentation",
                    "src": "353:28:32",
                    "text": "@inheritdoc IKeep3rRoles"
                  },
                  "functionSelector": "274a8db4",
                  "id": 5955,
                  "mutability": "mutable",
                  "name": "disputers",
                  "nameLocation": "425:9:32",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5954,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "416:8:32"
                  },
                  "scope": 6101,
                  "src": "384:50:32",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "typeName": {
                    "id": 5953,
                    "keyType": {
                      "id": 5951,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "392:7:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "384:24:32",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                      "typeString": "mapping(address => bool)"
                    },
                    "valueType": {
                      "id": 5952,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "403:4:32",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5963,
                    "nodeType": "Block",
                    "src": "496:2:32",
                    "statements": []
                  },
                  "id": 5964,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 5960,
                          "name": "_governance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5957,
                          "src": "483:11:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 5961,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 5959,
                        "name": "Governable",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5354,
                        "src": "472:10:32"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "472:23:32"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5958,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5957,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "459:11:32",
                        "nodeType": "VariableDeclaration",
                        "scope": 5964,
                        "src": "451:19:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5956,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "451:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "450:21:32"
                  },
                  "returnParameters": {
                    "id": 5962,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "496:0:32"
                  },
                  "scope": 6101,
                  "src": "439:59:32",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13921
                  ],
                  "body": {
                    "id": 5990,
                    "nodeType": "Block",
                    "src": "604:123:32",
                    "statements": [
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 5973,
                            "name": "slashers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5949,
                            "src": "614:8:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 5975,
                          "indexExpression": {
                            "id": 5974,
                            "name": "_slasher",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5967,
                            "src": "623:8:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "614:18:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5979,
                        "nodeType": "IfStatement",
                        "src": "610:48:32",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5976,
                              "name": "SlasherExistent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13900,
                              "src": "641:15:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 5977,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "641:17:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 5978,
                          "nodeType": "RevertStatement",
                          "src": "634:24:32"
                        }
                      },
                      {
                        "expression": {
                          "id": 5984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5980,
                              "name": "slashers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5949,
                              "src": "664:8:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 5982,
                            "indexExpression": {
                              "id": 5981,
                              "name": "_slasher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5967,
                              "src": "673:8:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "664:18:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 5983,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "685:4:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "664:25:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5985,
                        "nodeType": "ExpressionStatement",
                        "src": "664:25:32"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5987,
                              "name": "_slasher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5967,
                              "src": "713:8:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5986,
                            "name": "SlasherAdded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13866,
                            "src": "700:12:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 5988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "700:22:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5989,
                        "nodeType": "EmitStatement",
                        "src": "695:27:32"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5965,
                    "nodeType": "StructuredDocumentation",
                    "src": "502:28:32",
                    "text": "@inheritdoc IKeep3rRoles"
                  },
                  "functionSelector": "68a9f19c",
                  "id": 5991,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5971,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5970,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "589:14:32"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "589:14:32"
                    }
                  ],
                  "name": "addSlasher",
                  "nameLocation": "542:10:32",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5969,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "580:8:32"
                  },
                  "parameters": {
                    "id": 5968,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5967,
                        "mutability": "mutable",
                        "name": "_slasher",
                        "nameLocation": "561:8:32",
                        "nodeType": "VariableDeclaration",
                        "scope": 5991,
                        "src": "553:16:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5966,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "553:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "552:18:32"
                  },
                  "returnParameters": {
                    "id": 5972,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "604:0:32"
                  },
                  "scope": 6101,
                  "src": "533:194:32",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13927
                  ],
                  "body": {
                    "id": 6017,
                    "nodeType": "Block",
                    "src": "836:128:32",
                    "statements": [
                      {
                        "condition": {
                          "id": 6003,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "846:19:32",
                          "subExpression": {
                            "baseExpression": {
                              "id": 6000,
                              "name": "slashers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5949,
                              "src": "847:8:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6002,
                            "indexExpression": {
                              "id": 6001,
                              "name": "_slasher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5994,
                              "src": "856:8:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "847:18:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6007,
                        "nodeType": "IfStatement",
                        "src": "842:51:32",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6004,
                              "name": "SlasherUnexistent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13903,
                              "src": "874:17:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6005,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "874:19:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6006,
                          "nodeType": "RevertStatement",
                          "src": "867:26:32"
                        }
                      },
                      {
                        "expression": {
                          "id": 6011,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "899:25:32",
                          "subExpression": {
                            "baseExpression": {
                              "id": 6008,
                              "name": "slashers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5949,
                              "src": "906:8:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6010,
                            "indexExpression": {
                              "id": 6009,
                              "name": "_slasher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5994,
                              "src": "915:8:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "906:18:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6012,
                        "nodeType": "ExpressionStatement",
                        "src": "899:25:32"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 6014,
                              "name": "_slasher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5994,
                              "src": "950:8:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 6013,
                            "name": "SlasherRemoved",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13871,
                            "src": "935:14:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 6015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "935:24:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6016,
                        "nodeType": "EmitStatement",
                        "src": "930:29:32"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5992,
                    "nodeType": "StructuredDocumentation",
                    "src": "731:28:32",
                    "text": "@inheritdoc IKeep3rRoles"
                  },
                  "functionSelector": "aac6aa9c",
                  "id": 6018,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 5998,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 5997,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "821:14:32"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "821:14:32"
                    }
                  ],
                  "name": "removeSlasher",
                  "nameLocation": "771:13:32",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 5996,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "812:8:32"
                  },
                  "parameters": {
                    "id": 5995,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5994,
                        "mutability": "mutable",
                        "name": "_slasher",
                        "nameLocation": "793:8:32",
                        "nodeType": "VariableDeclaration",
                        "scope": 6018,
                        "src": "785:16:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5993,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "785:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "784:18:32"
                  },
                  "returnParameters": {
                    "id": 5999,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "836:0:32"
                  },
                  "scope": 6101,
                  "src": "762:202:32",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13933
                  ],
                  "body": {
                    "id": 6044,
                    "nodeType": "Block",
                    "src": "1072:130:32",
                    "statements": [
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 6027,
                            "name": "disputers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5955,
                            "src": "1082:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 6029,
                          "indexExpression": {
                            "id": 6028,
                            "name": "_disputer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6021,
                            "src": "1092:9:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1082:20:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6033,
                        "nodeType": "IfStatement",
                        "src": "1078:51:32",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6030,
                              "name": "DisputerExistent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13906,
                              "src": "1111:16:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6031,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1111:18:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6032,
                          "nodeType": "RevertStatement",
                          "src": "1104:25:32"
                        }
                      },
                      {
                        "expression": {
                          "id": 6038,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 6034,
                              "name": "disputers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5955,
                              "src": "1135:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6036,
                            "indexExpression": {
                              "id": 6035,
                              "name": "_disputer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6021,
                              "src": "1145:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1135:20:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 6037,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1158:4:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "1135:27:32",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6039,
                        "nodeType": "ExpressionStatement",
                        "src": "1135:27:32"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 6041,
                              "name": "_disputer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6021,
                              "src": "1187:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 6040,
                            "name": "DisputerAdded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13876,
                            "src": "1173:13:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 6042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1173:24:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6043,
                        "nodeType": "EmitStatement",
                        "src": "1168:29:32"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6019,
                    "nodeType": "StructuredDocumentation",
                    "src": "968:28:32",
                    "text": "@inheritdoc IKeep3rRoles"
                  },
                  "functionSelector": "9d5c33d8",
                  "id": 6045,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 6025,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 6024,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "1057:14:32"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1057:14:32"
                    }
                  ],
                  "name": "addDisputer",
                  "nameLocation": "1008:11:32",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6023,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1048:8:32"
                  },
                  "parameters": {
                    "id": 6022,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6021,
                        "mutability": "mutable",
                        "name": "_disputer",
                        "nameLocation": "1028:9:32",
                        "nodeType": "VariableDeclaration",
                        "scope": 6045,
                        "src": "1020:17:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6020,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1020:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1019:19:32"
                  },
                  "returnParameters": {
                    "id": 6026,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1072:0:32"
                  },
                  "scope": 6101,
                  "src": "999:203:32",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13939
                  ],
                  "body": {
                    "id": 6071,
                    "nodeType": "Block",
                    "src": "1313:135:32",
                    "statements": [
                      {
                        "condition": {
                          "id": 6057,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "1323:21:32",
                          "subExpression": {
                            "baseExpression": {
                              "id": 6054,
                              "name": "disputers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5955,
                              "src": "1324:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6056,
                            "indexExpression": {
                              "id": 6055,
                              "name": "_disputer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6048,
                              "src": "1334:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1324:20:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6061,
                        "nodeType": "IfStatement",
                        "src": "1319:54:32",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6058,
                              "name": "DisputerUnexistent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13909,
                              "src": "1353:18:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6059,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1353:20:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6060,
                          "nodeType": "RevertStatement",
                          "src": "1346:27:32"
                        }
                      },
                      {
                        "expression": {
                          "id": 6065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "1379:27:32",
                          "subExpression": {
                            "baseExpression": {
                              "id": 6062,
                              "name": "disputers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5955,
                              "src": "1386:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6064,
                            "indexExpression": {
                              "id": 6063,
                              "name": "_disputer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6048,
                              "src": "1396:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1386:20:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6066,
                        "nodeType": "ExpressionStatement",
                        "src": "1379:27:32"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 6068,
                              "name": "_disputer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6048,
                              "src": "1433:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 6067,
                            "name": "DisputerRemoved",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13881,
                            "src": "1417:15:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 6069,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1417:26:32",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6070,
                        "nodeType": "EmitStatement",
                        "src": "1412:31:32"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6046,
                    "nodeType": "StructuredDocumentation",
                    "src": "1206:28:32",
                    "text": "@inheritdoc IKeep3rRoles"
                  },
                  "functionSelector": "f0f346b9",
                  "id": 6072,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 6052,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 6051,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "1298:14:32"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1298:14:32"
                    }
                  ],
                  "name": "removeDisputer",
                  "nameLocation": "1246:14:32",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6050,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1289:8:32"
                  },
                  "parameters": {
                    "id": 6049,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6048,
                        "mutability": "mutable",
                        "name": "_disputer",
                        "nameLocation": "1269:9:32",
                        "nodeType": "VariableDeclaration",
                        "scope": 6072,
                        "src": "1261:17:32",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6047,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1261:7:32",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1260:19:32"
                  },
                  "returnParameters": {
                    "id": 6053,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1313:0:32"
                  },
                  "scope": 6101,
                  "src": "1237:211:32",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 6085,
                    "nodeType": "Block",
                    "src": "1569:65:32",
                    "statements": [
                      {
                        "condition": {
                          "id": 6079,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "1579:21:32",
                          "subExpression": {
                            "baseExpression": {
                              "id": 6075,
                              "name": "slashers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5949,
                              "src": "1580:8:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6078,
                            "indexExpression": {
                              "expression": {
                                "id": 6076,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1589:3:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6077,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1589:10:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1580:20:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6083,
                        "nodeType": "IfStatement",
                        "src": "1575:47:32",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6080,
                              "name": "OnlySlasher",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13912,
                              "src": "1609:11:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6081,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1609:13:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6082,
                          "nodeType": "RevertStatement",
                          "src": "1602:20:32"
                        }
                      },
                      {
                        "id": 6084,
                        "nodeType": "PlaceholderStatement",
                        "src": "1628:1:32"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6073,
                    "nodeType": "StructuredDocumentation",
                    "src": "1452:93:32",
                    "text": "@notice Functions with this modifier can only be called by either a slasher or governance"
                  },
                  "id": 6086,
                  "name": "onlySlasher",
                  "nameLocation": "1557:11:32",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 6074,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1569:0:32"
                  },
                  "src": "1548:86:32",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6099,
                    "nodeType": "Block",
                    "src": "1757:67:32",
                    "statements": [
                      {
                        "condition": {
                          "id": 6093,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "1767:22:32",
                          "subExpression": {
                            "baseExpression": {
                              "id": 6089,
                              "name": "disputers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5955,
                              "src": "1768:9:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6092,
                            "indexExpression": {
                              "expression": {
                                "id": 6090,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1778:3:32",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6091,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1778:10:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1768:21:32",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6097,
                        "nodeType": "IfStatement",
                        "src": "1763:49:32",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6094,
                              "name": "OnlyDisputer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13915,
                              "src": "1798:12:32",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6095,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1798:14:32",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6096,
                          "nodeType": "RevertStatement",
                          "src": "1791:21:32"
                        }
                      },
                      {
                        "id": 6098,
                        "nodeType": "PlaceholderStatement",
                        "src": "1818:1:32"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6087,
                    "nodeType": "StructuredDocumentation",
                    "src": "1638:94:32",
                    "text": "@notice Functions with this modifier can only be called by either a disputer or governance"
                  },
                  "id": 6100,
                  "name": "onlyDisputer",
                  "nameLocation": "1744:12:32",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 6088,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1757:0:32"
                  },
                  "src": "1735:89:32",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 6102,
              "src": "215:1611:32",
              "usedErrors": [
                12834,
                12837,
                12840,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:1795:32"
        },
        "id": 32
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rDisputable": [
              13033
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IPairManager": [
              11703
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rDisputable": [
              5578
            ],
            "Keep3rJobDisputable": [
              6259
            ],
            "Keep3rJobFundableCredits": [
              6508
            ],
            "Keep3rJobFundableLiquidity": [
              7939
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 6260,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6103,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:33"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol",
              "file": "./Keep3rJobFundableCredits.sol",
              "id": 6104,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6260,
              "sourceUnit": 6509,
              "src": "65:40:33",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol",
              "file": "./Keep3rJobFundableLiquidity.sol",
              "id": 6105,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6260,
              "sourceUnit": 7940,
              "src": "106:42:33",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rDisputable.sol",
              "file": "../Keep3rDisputable.sol",
              "id": 6106,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6260,
              "sourceUnit": 5579,
              "src": "149:33:33",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 6107,
                    "name": "IKeep3rJobDisputable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13559,
                    "src": "225:20:33"
                  },
                  "id": 6108,
                  "nodeType": "InheritanceSpecifier",
                  "src": "225:20:33"
                },
                {
                  "baseName": {
                    "id": 6109,
                    "name": "Keep3rDisputable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5578,
                    "src": "247:16:33"
                  },
                  "id": 6110,
                  "nodeType": "InheritanceSpecifier",
                  "src": "247:16:33"
                },
                {
                  "baseName": {
                    "id": 6111,
                    "name": "Keep3rJobFundableCredits",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 6508,
                    "src": "265:24:33"
                  },
                  "id": 6112,
                  "nodeType": "InheritanceSpecifier",
                  "src": "265:24:33"
                },
                {
                  "baseName": {
                    "id": 6113,
                    "name": "Keep3rJobFundableLiquidity",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 7939,
                    "src": "291:26:33"
                  },
                  "id": 6114,
                  "nodeType": "InheritanceSpecifier",
                  "src": "291:26:33"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 6259,
              "linearizedBaseContracts": [
                6259,
                7939,
                6508,
                5934,
                5578,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                39,
                13033,
                13559,
                13305,
                13100
              ],
              "name": "Keep3rJobDisputable",
              "nameLocation": "202:19:33",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 6118,
                  "libraryName": {
                    "id": 6115,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "328:13:33"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "322:49:33",
                  "typeName": {
                    "id": 6117,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6116,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "346:24:33"
                    },
                    "referencedDeclaration": 1631,
                    "src": "346:24:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "id": 6122,
                  "libraryName": {
                    "id": 6119,
                    "name": "SafeERC20",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 912,
                    "src": "380:9:33"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "374:27:33",
                  "typeName": {
                    "id": 6121,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6120,
                      "name": "IERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 663,
                      "src": "394:6:33"
                    },
                    "referencedDeclaration": 663,
                    "src": "394:6:33",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$663",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "baseFunctions": [
                    13548
                  ],
                  "body": {
                    "id": 6209,
                    "nodeType": "Block",
                    "src": "564:468:33",
                    "statements": [
                      {
                        "condition": {
                          "id": 6138,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "574:15:33",
                          "subExpression": {
                            "baseExpression": {
                              "id": 6135,
                              "name": "disputes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5386,
                              "src": "575:8:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6137,
                            "indexExpression": {
                              "id": 6136,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6125,
                              "src": "584:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "575:14:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6142,
                        "nodeType": "IfStatement",
                        "src": "570:41:33",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6139,
                              "name": "NotDisputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13020,
                              "src": "598:11:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6140,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "598:13:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6141,
                          "nodeType": "RevertStatement",
                          "src": "591:20:33"
                        }
                      },
                      {
                        "condition": {
                          "id": 6149,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "621:34:33",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 6147,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6127,
                                "src": "648:6:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 6143,
                                  "name": "_jobTokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5418,
                                  "src": "622:10:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 6145,
                                "indexExpression": {
                                  "id": 6144,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6125,
                                  "src": "633:4:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "622:16:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 6146,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1712,
                              "src": "622:25:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 6148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "622:33:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6153,
                        "nodeType": "IfStatement",
                        "src": "617:67:33",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6150,
                              "name": "JobTokenUnexistent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13535,
                              "src": "664:18:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6151,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "664:20:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6152,
                          "nodeType": "RevertStatement",
                          "src": "657:27:33"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6160,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 6154,
                                "name": "jobTokenCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5402,
                                "src": "694:15:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 6156,
                              "indexExpression": {
                                "id": 6155,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6125,
                                "src": "710:4:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "694:21:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6158,
                            "indexExpression": {
                              "id": 6157,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6127,
                              "src": "716:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "694:29:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 6159,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6129,
                            "src": "726:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "694:39:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6164,
                        "nodeType": "IfStatement",
                        "src": "690:74:33",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6161,
                              "name": "JobTokenInsufficient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13538,
                              "src": "742:20:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6162,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "742:22:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6163,
                          "nodeType": "RevertStatement",
                          "src": "735:29:33"
                        }
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 6172,
                              "nodeType": "Block",
                              "src": "820:2:33",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 6173,
                            "nodeType": "TryCatchClause",
                            "src": "820:2:33"
                          },
                          {
                            "block": {
                              "id": 6174,
                              "nodeType": "Block",
                              "src": "829:2:33",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 6175,
                            "nodeType": "TryCatchClause",
                            "src": "823:8:33"
                          }
                        ],
                        "externalCall": {
                          "arguments": [
                            {
                              "id": 6169,
                              "name": "governance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5266,
                              "src": "799:10:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6170,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6129,
                              "src": "811:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6166,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6127,
                                  "src": "782:6:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6165,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "775:6:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 6167,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "775:14:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 6168,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 612,
                            "src": "775:23:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 6171,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "775:44:33",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6176,
                        "nodeType": "TryStatement",
                        "src": "771:60:33"
                      },
                      {
                        "expression": {
                          "id": 6183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 6177,
                                "name": "jobTokenCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5402,
                                "src": "836:15:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 6180,
                              "indexExpression": {
                                "id": 6178,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6125,
                                "src": "852:4:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "836:21:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6181,
                            "indexExpression": {
                              "id": 6179,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6127,
                              "src": "858:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "836:29:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 6182,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6129,
                            "src": "869:7:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "836:40:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6184,
                        "nodeType": "ExpressionStatement",
                        "src": "836:40:33"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 6185,
                                "name": "jobTokenCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5402,
                                "src": "886:15:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 6187,
                              "indexExpression": {
                                "id": 6186,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6125,
                                "src": "902:4:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "886:21:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6189,
                            "indexExpression": {
                              "id": 6188,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6127,
                              "src": "908:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "886:29:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 6190,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "919:1:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "886:34:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6200,
                        "nodeType": "IfStatement",
                        "src": "882:86:33",
                        "trueBody": {
                          "id": 6199,
                          "nodeType": "Block",
                          "src": "922:46:33",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 6196,
                                    "name": "_token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6127,
                                    "src": "954:6:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 6192,
                                      "name": "_jobTokens",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5418,
                                      "src": "930:10:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 6194,
                                    "indexExpression": {
                                      "id": 6193,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6125,
                                      "src": "941:4:33",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "930:16:33",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 6195,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "remove",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1685,
                                  "src": "930:23:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                                  }
                                },
                                "id": 6197,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "930:31:33",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6198,
                              "nodeType": "ExpressionStatement",
                              "src": "930:31:33"
                            }
                          ]
                        }
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 6202,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6125,
                              "src": "993:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6203,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6127,
                              "src": "999:6:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 6204,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1007:3:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6205,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1007:10:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6206,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6129,
                              "src": "1019:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6201,
                            "name": "JobSlashToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13521,
                            "src": "979:13:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 6207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "979:48:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6208,
                        "nodeType": "EmitStatement",
                        "src": "974:53:33"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6123,
                    "nodeType": "StructuredDocumentation",
                    "src": "405:36:33",
                    "text": "@inheritdoc IKeep3rJobDisputable"
                  },
                  "functionSelector": "f25e311b",
                  "id": 6210,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 6133,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 6132,
                        "name": "onlySlasher",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6086,
                        "src": "552:11:33"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "552:11:33"
                    }
                  ],
                  "name": "slashTokenFromJob",
                  "nameLocation": "453:17:33",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6131,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "543:8:33"
                  },
                  "parameters": {
                    "id": 6130,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6125,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "484:4:33",
                        "nodeType": "VariableDeclaration",
                        "scope": 6210,
                        "src": "476:12:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6124,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "476:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6127,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "502:6:33",
                        "nodeType": "VariableDeclaration",
                        "scope": 6210,
                        "src": "494:14:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6126,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "494:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6129,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "522:7:33",
                        "nodeType": "VariableDeclaration",
                        "scope": 6210,
                        "src": "514:15:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6128,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "514:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "470:63:33"
                  },
                  "returnParameters": {
                    "id": 6134,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "564:0:33"
                  },
                  "scope": 6259,
                  "src": "444:588:33",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13558
                  ],
                  "body": {
                    "id": 6257,
                    "nodeType": "Block",
                    "src": "1203:245:33",
                    "statements": [
                      {
                        "condition": {
                          "id": 6226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "1213:15:33",
                          "subExpression": {
                            "baseExpression": {
                              "id": 6223,
                              "name": "disputes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5386,
                              "src": "1214:8:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6225,
                            "indexExpression": {
                              "id": 6224,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6213,
                              "src": "1223:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1214:14:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6230,
                        "nodeType": "IfStatement",
                        "src": "1209:41:33",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6227,
                              "name": "NotDisputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13020,
                              "src": "1237:11:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6228,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1237:13:33",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6229,
                          "nodeType": "RevertStatement",
                          "src": "1230:20:33"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6232,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6213,
                              "src": "1281:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6233,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6215,
                              "src": "1287:10:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6234,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6217,
                              "src": "1299:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6231,
                            "name": "_unbondLiquidityFromJob",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7802,
                            "src": "1257:23:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 6235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1257:50:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6236,
                        "nodeType": "ExpressionStatement",
                        "src": "1257:50:33"
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 6244,
                              "nodeType": "Block",
                              "src": "1366:2:33",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 6245,
                            "nodeType": "TryCatchClause",
                            "src": "1366:2:33"
                          },
                          {
                            "block": {
                              "id": 6246,
                              "nodeType": "Block",
                              "src": "1375:2:33",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 6247,
                            "nodeType": "TryCatchClause",
                            "src": "1369:8:33"
                          }
                        ],
                        "externalCall": {
                          "arguments": [
                            {
                              "id": 6241,
                              "name": "governance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5266,
                              "src": "1345:10:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6242,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6217,
                              "src": "1357:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6238,
                                  "name": "_liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6215,
                                  "src": "1324:10:33",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6237,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "1317:6:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 6239,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1317:18:33",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 6240,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 612,
                            "src": "1317:27:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 6243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1317:48:33",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6248,
                        "nodeType": "TryStatement",
                        "src": "1313:64:33"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 6250,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6213,
                              "src": "1405:4:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6251,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6215,
                              "src": "1411:10:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 6252,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1423:3:33",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6253,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1423:10:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6254,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6217,
                              "src": "1435:7:33",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6249,
                            "name": "JobSlashLiquidity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13532,
                            "src": "1387:17:33",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 6255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1387:56:33",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6256,
                        "nodeType": "EmitStatement",
                        "src": "1382:61:33"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6211,
                    "nodeType": "StructuredDocumentation",
                    "src": "1036:36:33",
                    "text": "@inheritdoc IKeep3rJobDisputable"
                  },
                  "functionSelector": "6e2a9ca6",
                  "id": 6258,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 6221,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 6220,
                        "name": "onlySlasher",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6086,
                        "src": "1191:11:33"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1191:11:33"
                    }
                  ],
                  "name": "slashLiquidityFromJob",
                  "nameLocation": "1084:21:33",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6219,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1182:8:33"
                  },
                  "parameters": {
                    "id": 6218,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6213,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1119:4:33",
                        "nodeType": "VariableDeclaration",
                        "scope": 6258,
                        "src": "1111:12:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6212,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1111:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6215,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "1137:10:33",
                        "nodeType": "VariableDeclaration",
                        "scope": 6258,
                        "src": "1129:18:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6214,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1129:7:33",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6217,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1161:7:33",
                        "nodeType": "VariableDeclaration",
                        "scope": 6258,
                        "src": "1153:15:33",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6216,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1153:7:33",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1105:67:33"
                  },
                  "returnParameters": {
                    "id": 6222,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1203:0:33"
                  },
                  "scope": 6259,
                  "src": "1075:373:33",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 6260,
              "src": "184:1266:33",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13017,
                13020,
                13061,
                13064,
                13067,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13422,
                13425,
                13535,
                13538,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:1419:33"
        },
        "id": 33
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rJobFundableCredits": [
              6508
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 6509,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6261,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:34"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol",
              "file": "./Keep3rJobOwnership.sol",
              "id": 6262,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6509,
              "sourceUnit": 8407,
              "src": "65:34:34",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rAccountance.sol",
              "file": "../Keep3rAccountance.sol",
              "id": 6263,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6509,
              "sourceUnit": 5508,
              "src": "100:34:34",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rParameters.sol",
              "file": "../Keep3rParameters.sol",
              "id": 6264,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6509,
              "sourceUnit": 5935,
              "src": "135:33:34",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rJobs.sol",
              "file": "../../../interfaces/peripherals/IKeep3rJobs.sol",
              "id": 6265,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6509,
              "sourceUnit": 13571,
              "src": "169:57:34",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
              "file": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
              "id": 6266,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6509,
              "sourceUnit": 40,
              "src": "228:62:34",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 6267,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6509,
              "sourceUnit": 664,
              "src": "291:56:34",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
              "id": 6268,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6509,
              "sourceUnit": 913,
              "src": "348:65:34",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
              "file": "@openzeppelin/contracts/utils/math/Math.sol",
              "id": 6269,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6509,
              "sourceUnit": 1320,
              "src": "414:53:34",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 6270,
                    "name": "IKeep3rJobFundableCredits",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13100,
                    "src": "515:25:34"
                  },
                  "id": 6271,
                  "nodeType": "InheritanceSpecifier",
                  "src": "515:25:34"
                },
                {
                  "baseName": {
                    "id": 6272,
                    "name": "ReentrancyGuard",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 39,
                    "src": "542:15:34"
                  },
                  "id": 6273,
                  "nodeType": "InheritanceSpecifier",
                  "src": "542:15:34"
                },
                {
                  "baseName": {
                    "id": 6274,
                    "name": "Keep3rJobOwnership",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 8406,
                    "src": "559:18:34"
                  },
                  "id": 6275,
                  "nodeType": "InheritanceSpecifier",
                  "src": "559:18:34"
                },
                {
                  "baseName": {
                    "id": 6276,
                    "name": "Keep3rParameters",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5934,
                    "src": "579:16:34"
                  },
                  "id": 6277,
                  "nodeType": "InheritanceSpecifier",
                  "src": "579:16:34"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 6508,
              "linearizedBaseContracts": [
                6508,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                39,
                13100
              ],
              "name": "Keep3rJobFundableCredits",
              "nameLocation": "487:24:34",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 6281,
                  "libraryName": {
                    "id": 6278,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "606:13:34"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "600:49:34",
                  "typeName": {
                    "id": 6280,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6279,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "624:24:34"
                    },
                    "referencedDeclaration": 1631,
                    "src": "624:24:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "id": 6285,
                  "libraryName": {
                    "id": 6282,
                    "name": "SafeERC20",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 912,
                    "src": "658:9:34"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "652:27:34",
                  "typeName": {
                    "id": 6284,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6283,
                      "name": "IERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 663,
                      "src": "672:6:34"
                    },
                    "referencedDeclaration": 663,
                    "src": "672:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$663",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 6286,
                    "nodeType": "StructuredDocumentation",
                    "src": "683:40:34",
                    "text": "@notice Cooldown between withdrawals"
                  },
                  "id": 6289,
                  "mutability": "constant",
                  "name": "_WITHDRAW_TOKENS_COOLDOWN",
                  "nameLocation": "752:25:34",
                  "nodeType": "VariableDeclaration",
                  "scope": 6508,
                  "src": "726:63:34",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6287,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "726:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "31",
                    "id": 6288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "780:9:34",
                    "subdenomination": "minutes",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_60_by_1",
                      "typeString": "int_const 60"
                    },
                    "value": "1"
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    13077
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 6290,
                    "nodeType": "StructuredDocumentation",
                    "src": "794:41:34",
                    "text": "@inheritdoc IKeep3rJobFundableCredits"
                  },
                  "functionSelector": "b440027f",
                  "id": 6297,
                  "mutability": "mutable",
                  "name": "jobTokenCreditsAddedAt",
                  "nameLocation": "902:22:34",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 6296,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "893:8:34"
                  },
                  "scope": 6508,
                  "src": "838:86:34",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 6295,
                    "keyType": {
                      "id": 6291,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "846:7:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "838:47:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 6294,
                      "keyType": {
                        "id": 6292,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "865:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "857:27:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 6293,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "876:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13087
                  ],
                  "body": {
                    "id": 6416,
                    "nodeType": "Block",
                    "src": "1097:710:34",
                    "statements": [
                      {
                        "condition": {
                          "id": 6314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "1107:21:34",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 6312,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6300,
                                "src": "1123:4:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 6310,
                                "name": "_jobs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5476,
                                "src": "1108:5:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 6311,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1712,
                              "src": "1108:14:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 6313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1108:20:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6318,
                        "nodeType": "IfStatement",
                        "src": "1103:50:34",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6315,
                              "name": "JobUnavailable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12993,
                              "src": "1137:14:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1137:16:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6317,
                          "nodeType": "RevertStatement",
                          "src": "1130:23:34"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6319,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6302,
                            "src": "1219:6:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 6320,
                            "name": "keep3rV1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5594,
                            "src": "1229:8:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1219:18:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6325,
                        "nodeType": "IfStatement",
                        "src": "1215:47:34",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6322,
                              "name": "TokenUnallowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13061,
                              "src": "1246:14:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6323,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1246:16:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6324,
                          "nodeType": "RevertStatement",
                          "src": "1239:23:34"
                        }
                      },
                      {
                        "assignments": [
                          6327
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6327,
                            "mutability": "mutable",
                            "name": "_before",
                            "nameLocation": "1276:7:34",
                            "nodeType": "VariableDeclaration",
                            "scope": 6416,
                            "src": "1268:15:34",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6326,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1268:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6337,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 6334,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "1319:4:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Keep3rJobFundableCredits_$6508",
                                    "typeString": "contract Keep3rJobFundableCredits"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Keep3rJobFundableCredits_$6508",
                                    "typeString": "contract Keep3rJobFundableCredits"
                                  }
                                ],
                                "id": 6333,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1311:7:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6332,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1311:7:34",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 6335,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1311:13:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6329,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6302,
                                  "src": "1293:6:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6328,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "1286:6:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 6330,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1286:14:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 6331,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 602,
                            "src": "1286:24:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 6336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1286:39:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1268:57:34"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 6342,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1363:3:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6343,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1363:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 6346,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "1383:4:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Keep3rJobFundableCredits_$6508",
                                    "typeString": "contract Keep3rJobFundableCredits"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Keep3rJobFundableCredits_$6508",
                                    "typeString": "contract Keep3rJobFundableCredits"
                                  }
                                ],
                                "id": 6345,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1375:7:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6344,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1375:7:34",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 6347,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1375:13:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6348,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6304,
                              "src": "1390:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6339,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6302,
                                  "src": "1338:6:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6338,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "1331:6:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 6340,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1331:14:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 6341,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 745,
                            "src": "1331:31:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$663_$",
                              "typeString": "function (contract IERC20,address,address,uint256)"
                            }
                          },
                          "id": 6349,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1331:67:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6350,
                        "nodeType": "ExpressionStatement",
                        "src": "1331:67:34"
                      },
                      {
                        "assignments": [
                          6352
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6352,
                            "mutability": "mutable",
                            "name": "_received",
                            "nameLocation": "1412:9:34",
                            "nodeType": "VariableDeclaration",
                            "scope": 6416,
                            "src": "1404:17:34",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6351,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1404:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6364,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 6359,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "1457:4:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Keep3rJobFundableCredits_$6508",
                                      "typeString": "contract Keep3rJobFundableCredits"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_Keep3rJobFundableCredits_$6508",
                                      "typeString": "contract Keep3rJobFundableCredits"
                                    }
                                  ],
                                  "id": 6358,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1449:7:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 6357,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1449:7:34",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 6360,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1449:13:34",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 6354,
                                    "name": "_token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6302,
                                    "src": "1431:6:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 6353,
                                  "name": "IERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 663,
                                  "src": "1424:6:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                    "typeString": "type(contract IERC20)"
                                  }
                                },
                                "id": 6355,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1424:14:34",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$663",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 6356,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 602,
                              "src": "1424:24:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 6361,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1424:39:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 6362,
                            "name": "_before",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6327,
                            "src": "1466:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1424:49:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1404:69:34"
                      },
                      {
                        "assignments": [
                          6366
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6366,
                            "mutability": "mutable",
                            "name": "_tokenFee",
                            "nameLocation": "1487:9:34",
                            "nodeType": "VariableDeclaration",
                            "scope": 6416,
                            "src": "1479:17:34",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6365,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1479:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6373,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6372,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6369,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6367,
                                  "name": "_received",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6352,
                                  "src": "1500:9:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 6368,
                                  "name": "fee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5636,
                                  "src": "1512:3:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1500:15:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 6370,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1499:17:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "id": 6371,
                            "name": "_BASE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5640,
                            "src": "1519:5:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1499:25:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1479:45:34"
                      },
                      {
                        "expression": {
                          "id": 6382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 6374,
                                "name": "jobTokenCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5402,
                                "src": "1530:15:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 6377,
                              "indexExpression": {
                                "id": 6375,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6300,
                                "src": "1546:4:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1530:21:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6378,
                            "indexExpression": {
                              "id": 6376,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6302,
                              "src": "1552:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1530:29:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6381,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 6379,
                              "name": "_received",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6352,
                              "src": "1563:9:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 6380,
                              "name": "_tokenFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6366,
                              "src": "1575:9:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1563:21:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1530:54:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6383,
                        "nodeType": "ExpressionStatement",
                        "src": "1530:54:34"
                      },
                      {
                        "expression": {
                          "id": 6391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 6384,
                                "name": "jobTokenCreditsAddedAt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6297,
                                "src": "1590:22:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 6387,
                              "indexExpression": {
                                "id": 6385,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6300,
                                "src": "1613:4:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1590:28:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6388,
                            "indexExpression": {
                              "id": 6386,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6302,
                              "src": "1619:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1590:36:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 6389,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "1629:5:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 6390,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "1629:15:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1590:54:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6392,
                        "nodeType": "ExpressionStatement",
                        "src": "1590:54:34"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6397,
                              "name": "governance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5266,
                              "src": "1678:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6398,
                              "name": "_tokenFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6366,
                              "src": "1690:9:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6394,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6302,
                                  "src": "1657:6:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6393,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "1650:6:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 6395,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1650:14:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 6396,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 719,
                            "src": "1650:27:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$663_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 6399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1650:50:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6400,
                        "nodeType": "ExpressionStatement",
                        "src": "1650:50:34"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6405,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6302,
                              "src": "1727:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "baseExpression": {
                                "id": 6401,
                                "name": "_jobTokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5418,
                                "src": "1706:10:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                  "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                }
                              },
                              "id": 6403,
                              "indexExpression": {
                                "id": 6402,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6300,
                                "src": "1717:4:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1706:16:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 6404,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "1706:20:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 6406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1706:28:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6407,
                        "nodeType": "ExpressionStatement",
                        "src": "1706:28:34"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 6409,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6300,
                              "src": "1766:4:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6410,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6302,
                              "src": "1772:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 6411,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1780:3:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6412,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1780:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6413,
                              "name": "_received",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6352,
                              "src": "1792:9:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6408,
                            "name": "TokenCreditAddition",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13047,
                            "src": "1746:19:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 6414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1746:56:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6415,
                        "nodeType": "EmitStatement",
                        "src": "1741:61:34"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6298,
                    "nodeType": "StructuredDocumentation",
                    "src": "929:41:34",
                    "text": "@inheritdoc IKeep3rJobFundableCredits"
                  },
                  "functionSelector": "575288bf",
                  "id": 6417,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 6308,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 6307,
                        "name": "nonReentrant",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 38,
                        "src": "1084:12:34"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1084:12:34"
                    }
                  ],
                  "name": "addTokenCreditsToJob",
                  "nameLocation": "982:20:34",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6306,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1075:8:34"
                  },
                  "parameters": {
                    "id": 6305,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6300,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1016:4:34",
                        "nodeType": "VariableDeclaration",
                        "scope": 6417,
                        "src": "1008:12:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6299,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1008:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6302,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "1034:6:34",
                        "nodeType": "VariableDeclaration",
                        "scope": 6417,
                        "src": "1026:14:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6301,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1026:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6304,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1054:7:34",
                        "nodeType": "VariableDeclaration",
                        "scope": 6417,
                        "src": "1046:15:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6303,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1046:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1002:63:34"
                  },
                  "returnParameters": {
                    "id": 6309,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1097:0:34"
                  },
                  "scope": 6508,
                  "src": "973:834:34",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13099
                  ],
                  "body": {
                    "id": 6506,
                    "nodeType": "Block",
                    "src": "2028:522:34",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 6435,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "2038:5:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 6436,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "2038:15:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6443,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 6437,
                                  "name": "jobTokenCreditsAddedAt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6297,
                                  "src": "2057:22:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                    "typeString": "mapping(address => mapping(address => uint256))"
                                  }
                                },
                                "id": 6439,
                                "indexExpression": {
                                  "id": 6438,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6420,
                                  "src": "2080:4:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2057:28:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 6441,
                              "indexExpression": {
                                "id": 6440,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6422,
                                "src": "2086:6:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2057:36:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 6442,
                              "name": "_WITHDRAW_TOKENS_COOLDOWN",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6289,
                              "src": "2096:25:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2057:64:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2038:83:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6448,
                        "nodeType": "IfStatement",
                        "src": "2034:119:34",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6445,
                              "name": "JobTokenCreditsLocked",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13064,
                              "src": "2130:21:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6446,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2130:23:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6447,
                          "nodeType": "RevertStatement",
                          "src": "2123:30:34"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 6449,
                                "name": "jobTokenCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5402,
                                "src": "2163:15:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 6451,
                              "indexExpression": {
                                "id": 6450,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6420,
                                "src": "2179:4:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2163:21:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6453,
                            "indexExpression": {
                              "id": 6452,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6422,
                              "src": "2185:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2163:29:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 6454,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6424,
                            "src": "2195:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2163:39:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6459,
                        "nodeType": "IfStatement",
                        "src": "2159:81:34",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6456,
                              "name": "InsufficientJobTokenCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13067,
                              "src": "2211:27:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6457,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2211:29:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6458,
                          "nodeType": "RevertStatement",
                          "src": "2204:36:34"
                        }
                      },
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 6460,
                            "name": "disputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5386,
                            "src": "2250:8:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 6462,
                          "indexExpression": {
                            "id": 6461,
                            "name": "_job",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6420,
                            "src": "2259:4:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2250:14:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6466,
                        "nodeType": "IfStatement",
                        "src": "2246:40:34",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6463,
                              "name": "JobDisputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12996,
                              "src": "2273:11:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 6464,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2273:13:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6465,
                          "nodeType": "RevertStatement",
                          "src": "2266:20:34"
                        }
                      },
                      {
                        "expression": {
                          "id": 6473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 6467,
                                "name": "jobTokenCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5402,
                                "src": "2293:15:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 6470,
                              "indexExpression": {
                                "id": 6468,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6420,
                                "src": "2309:4:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2293:21:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6471,
                            "indexExpression": {
                              "id": 6469,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6422,
                              "src": "2315:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2293:29:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 6472,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6424,
                            "src": "2326:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2293:40:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6474,
                        "nodeType": "ExpressionStatement",
                        "src": "2293:40:34"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6479,
                              "name": "_receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6426,
                              "src": "2367:9:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6480,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6424,
                              "src": "2378:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 6476,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6422,
                                  "src": "2346:6:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6475,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "2339:6:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 6477,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2339:14:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 6478,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 719,
                            "src": "2339:27:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$663_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 6481,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2339:47:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6482,
                        "nodeType": "ExpressionStatement",
                        "src": "2339:47:34"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 6483,
                                "name": "jobTokenCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5402,
                                "src": "2397:15:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 6485,
                              "indexExpression": {
                                "id": 6484,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6420,
                                "src": "2413:4:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2397:21:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6487,
                            "indexExpression": {
                              "id": 6486,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6422,
                              "src": "2419:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2397:29:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 6488,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2430:1:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2397:34:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6498,
                        "nodeType": "IfStatement",
                        "src": "2393:86:34",
                        "trueBody": {
                          "id": 6497,
                          "nodeType": "Block",
                          "src": "2433:46:34",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 6494,
                                    "name": "_token",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6422,
                                    "src": "2465:6:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 6490,
                                      "name": "_jobTokens",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5418,
                                      "src": "2441:10:34",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 6492,
                                    "indexExpression": {
                                      "id": 6491,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6420,
                                      "src": "2452:4:34",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2441:16:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 6493,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "remove",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1685,
                                  "src": "2441:23:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                                  }
                                },
                                "id": 6495,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2441:31:34",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6496,
                              "nodeType": "ExpressionStatement",
                              "src": "2441:31:34"
                            }
                          ]
                        }
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 6500,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6420,
                              "src": "2512:4:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6501,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6422,
                              "src": "2518:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6502,
                              "name": "_receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6426,
                              "src": "2526:9:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 6503,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6424,
                              "src": "2537:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6499,
                            "name": "TokenCreditWithdrawal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13058,
                            "src": "2490:21:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 6504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2490:55:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6505,
                        "nodeType": "EmitStatement",
                        "src": "2485:60:34"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6418,
                    "nodeType": "StructuredDocumentation",
                    "src": "1811:41:34",
                    "text": "@inheritdoc IKeep3rJobFundableCredits"
                  },
                  "functionSelector": "d55995fe",
                  "id": 6507,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 6430,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 6429,
                        "name": "nonReentrant",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 38,
                        "src": "1996:12:34"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1996:12:34"
                    },
                    {
                      "arguments": [
                        {
                          "id": 6432,
                          "name": "_job",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6420,
                          "src": "2022:4:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 6433,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 6431,
                        "name": "onlyJobOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 8389,
                        "src": "2009:12:34"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2009:18:34"
                    }
                  ],
                  "name": "withdrawTokenCreditsFromJob",
                  "nameLocation": "1864:27:34",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6428,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1987:8:34"
                  },
                  "parameters": {
                    "id": 6427,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6420,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1905:4:34",
                        "nodeType": "VariableDeclaration",
                        "scope": 6507,
                        "src": "1897:12:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6419,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1897:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6422,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "1923:6:34",
                        "nodeType": "VariableDeclaration",
                        "scope": 6507,
                        "src": "1915:14:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6421,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1915:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6424,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1943:7:34",
                        "nodeType": "VariableDeclaration",
                        "scope": 6507,
                        "src": "1935:15:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6423,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1935:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6426,
                        "mutability": "mutable",
                        "name": "_receiver",
                        "nameLocation": "1964:9:34",
                        "nodeType": "VariableDeclaration",
                        "scope": 6507,
                        "src": "1956:17:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6425,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1956:7:34",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1891:86:34"
                  },
                  "returnParameters": {
                    "id": 6434,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2028:0:34"
                  },
                  "scope": 6508,
                  "src": "1855:695:34",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 6509,
              "src": "469:2083:34",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13061,
                13064,
                13067,
                13422,
                13425,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:2521:34"
        },
        "id": 34
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IPairManager": [
              11703
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rJobFundableLiquidity": [
              7939
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 7940,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6510,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:35"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol",
              "file": "./Keep3rJobOwnership.sol",
              "id": 6511,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 7940,
              "sourceUnit": 8407,
              "src": "65:34:35",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rAccountance.sol",
              "file": "../Keep3rAccountance.sol",
              "id": 6512,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 7940,
              "sourceUnit": 5508,
              "src": "100:34:35",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rParameters.sol",
              "file": "../Keep3rParameters.sol",
              "id": 6513,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 7940,
              "sourceUnit": 5935,
              "src": "135:33:35",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/IPairManager.sol",
              "file": "../../../interfaces/IPairManager.sol",
              "id": 6514,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 7940,
              "sourceUnit": 11704,
              "src": "169:46:35",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rJobs.sol",
              "file": "../../../interfaces/peripherals/IKeep3rJobs.sol",
              "id": 6515,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 7940,
              "sourceUnit": 13571,
              "src": "216:57:35",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/FullMath.sol",
              "file": "../../libraries/FullMath.sol",
              "id": 6516,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 7940,
              "sourceUnit": 4309,
              "src": "275:38:35",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
              "file": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
              "id": 6517,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 7940,
              "sourceUnit": 40,
              "src": "315:62:35",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 6518,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 7940,
              "sourceUnit": 664,
              "src": "378:56:35",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
              "id": 6519,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 7940,
              "sourceUnit": 913,
              "src": "435:65:35",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
              "file": "@openzeppelin/contracts/utils/math/Math.sol",
              "id": 6520,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 7940,
              "sourceUnit": 1320,
              "src": "501:53:35",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 6521,
                    "name": "IKeep3rJobFundableLiquidity",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13305,
                    "src": "604:27:35"
                  },
                  "id": 6522,
                  "nodeType": "InheritanceSpecifier",
                  "src": "604:27:35"
                },
                {
                  "baseName": {
                    "id": 6523,
                    "name": "ReentrancyGuard",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 39,
                    "src": "633:15:35"
                  },
                  "id": 6524,
                  "nodeType": "InheritanceSpecifier",
                  "src": "633:15:35"
                },
                {
                  "baseName": {
                    "id": 6525,
                    "name": "Keep3rJobOwnership",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 8406,
                    "src": "650:18:35"
                  },
                  "id": 6526,
                  "nodeType": "InheritanceSpecifier",
                  "src": "650:18:35"
                },
                {
                  "baseName": {
                    "id": 6527,
                    "name": "Keep3rParameters",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5934,
                    "src": "670:16:35"
                  },
                  "id": 6528,
                  "nodeType": "InheritanceSpecifier",
                  "src": "670:16:35"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 7939,
              "linearizedBaseContracts": [
                7939,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                39,
                13305
              ],
              "name": "Keep3rJobFundableLiquidity",
              "nameLocation": "574:26:35",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 6532,
                  "libraryName": {
                    "id": 6529,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "697:13:35"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "691:49:35",
                  "typeName": {
                    "id": 6531,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6530,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "715:24:35"
                    },
                    "referencedDeclaration": 1631,
                    "src": "715:24:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "id": 6536,
                  "libraryName": {
                    "id": 6533,
                    "name": "SafeERC20",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 912,
                    "src": "749:9:35"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "743:27:35",
                  "typeName": {
                    "id": 6535,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6534,
                      "name": "IERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 663,
                      "src": "763:6:35"
                    },
                    "referencedDeclaration": 663,
                    "src": "763:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$663",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 6537,
                    "nodeType": "StructuredDocumentation",
                    "src": "774:63:35",
                    "text": "@notice List of liquidities that are accepted in the system"
                  },
                  "id": 6540,
                  "mutability": "mutable",
                  "name": "_approvedLiquidities",
                  "nameLocation": "874:20:35",
                  "nodeType": "VariableDeclaration",
                  "scope": 7939,
                  "src": "840:54:35",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                    "typeString": "struct EnumerableSet.AddressSet"
                  },
                  "typeName": {
                    "id": 6539,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 6538,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "840:24:35"
                    },
                    "referencedDeclaration": 1631,
                    "src": "840:24:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    13195
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 6541,
                    "nodeType": "StructuredDocumentation",
                    "src": "899:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "694798e6",
                  "id": 6548,
                  "mutability": "mutable",
                  "name": "liquidityAmount",
                  "nameLocation": "1009:15:35",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 6547,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1000:8:35"
                  },
                  "scope": 7939,
                  "src": "945:79:35",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 6546,
                    "keyType": {
                      "id": 6542,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "953:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "945:47:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 6545,
                      "keyType": {
                        "id": 6543,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "972:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "964:27:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 6544,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "983:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13203
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 6549,
                    "nodeType": "StructuredDocumentation",
                    "src": "1029:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "a676f9ff",
                  "id": 6554,
                  "mutability": "mutable",
                  "name": "rewardedAt",
                  "nameLocation": "1119:10:35",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 6553,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1110:8:35"
                  },
                  "scope": 7939,
                  "src": "1075:54:35",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 6552,
                    "keyType": {
                      "id": 6550,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1083:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1075:27:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 6551,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1094:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13211
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 6555,
                    "nodeType": "StructuredDocumentation",
                    "src": "1134:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "f136a09d",
                  "id": 6560,
                  "mutability": "mutable",
                  "name": "workedAt",
                  "nameLocation": "1224:8:35",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 6559,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1215:8:35"
                  },
                  "scope": 7939,
                  "src": "1180:52:35",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 6558,
                    "keyType": {
                      "id": 6556,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1188:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1180:27:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 6557,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1199:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "documentation": {
                    "id": 6561,
                    "nodeType": "StructuredDocumentation",
                    "src": "1237:55:35",
                    "text": "@notice Tracks an address and returns its TickCache"
                  },
                  "id": 6566,
                  "mutability": "mutable",
                  "name": "_tick",
                  "nameLocation": "1334:5:35",
                  "nodeType": "VariableDeclaration",
                  "scope": 7939,
                  "src": "1295:44:35",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                    "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)"
                  },
                  "typeName": {
                    "id": 6565,
                    "keyType": {
                      "id": 6562,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1303:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1295:29:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                      "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache)"
                    },
                    "valueType": {
                      "id": 6564,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 6563,
                        "name": "TickCache",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 13178,
                        "src": "1314:9:35"
                      },
                      "referencedDeclaration": 13178,
                      "src": "1314:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TickCache_$13178_storage_ptr",
                        "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    13185
                  ],
                  "body": {
                    "id": 6580,
                    "nodeType": "Block",
                    "src": "1489:48:35",
                    "statements": [
                      {
                        "expression": {
                          "id": 6578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6574,
                            "name": "_list",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6572,
                            "src": "1495:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 6575,
                                "name": "_approvedLiquidities",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6540,
                                "src": "1503:20:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 6576,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "values",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1784,
                              "src": "1503:27:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (address[] memory)"
                              }
                            },
                            "id": 6577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1503:29:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "src": "1495:37:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 6579,
                        "nodeType": "ExpressionStatement",
                        "src": "1495:37:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6567,
                    "nodeType": "StructuredDocumentation",
                    "src": "1356:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "0c620bce",
                  "id": 6581,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approvedLiquidities",
                  "nameLocation": "1411:19:35",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6569,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1447:8:35"
                  },
                  "parameters": {
                    "id": 6568,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1430:2:35"
                  },
                  "returnParameters": {
                    "id": 6573,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6572,
                        "mutability": "mutable",
                        "name": "_list",
                        "nameLocation": "1482:5:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 6581,
                        "src": "1465:22:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 6570,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1465:7:35",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 6571,
                          "nodeType": "ArrayTypeName",
                          "src": "1465:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1464:24:35"
                  },
                  "scope": 7939,
                  "src": "1402:135:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13227
                  ],
                  "body": {
                    "id": 6662,
                    "nodeType": "Block",
                    "src": "1681:597:35",
                    "statements": [
                      {
                        "body": {
                          "id": 6660,
                          "nodeType": "Block",
                          "src": "1744:530:35",
                          "statements": [
                            {
                              "assignments": [
                                6604
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6604,
                                  "mutability": "mutable",
                                  "name": "_liquidity",
                                  "nameLocation": "1760:10:35",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6660,
                                  "src": "1752:18:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 6603,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1752:7:35",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6611,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 6609,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6591,
                                    "src": "1798:1:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 6605,
                                      "name": "_jobLiquidities",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5424,
                                      "src": "1773:15:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 6607,
                                    "indexExpression": {
                                      "id": 6606,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6584,
                                      "src": "1789:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1773:21:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 6608,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "at",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1754,
                                  "src": "1773:24:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"
                                  }
                                },
                                "id": 6610,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1773:27:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1752:48:35"
                            },
                            {
                              "condition": {
                                "arguments": [
                                  {
                                    "id": 6614,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6604,
                                    "src": "1842:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "id": 6612,
                                    "name": "_approvedLiquidities",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6540,
                                    "src": "1812:20:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 6613,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "contains",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1712,
                                  "src": "1812:29:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                                  }
                                },
                                "id": 6615,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1812:41:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6659,
                              "nodeType": "IfStatement",
                              "src": "1808:460:35",
                              "trueBody": {
                                "id": 6658,
                                "nodeType": "Block",
                                "src": "1855:413:35",
                                "statements": [
                                  {
                                    "assignments": [
                                      6618
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 6618,
                                        "mutability": "mutable",
                                        "name": "_tickCache",
                                        "nameLocation": "1882:10:35",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 6658,
                                        "src": "1865:27:35",
                                        "stateVariable": false,
                                        "storageLocation": "memory",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                          "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                                        },
                                        "typeName": {
                                          "id": 6617,
                                          "nodeType": "UserDefinedTypeName",
                                          "pathNode": {
                                            "id": 6616,
                                            "name": "TickCache",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 13178,
                                            "src": "1865:9:35"
                                          },
                                          "referencedDeclaration": 13178,
                                          "src": "1865:9:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TickCache_$13178_storage_ptr",
                                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 6622,
                                    "initialValue": {
                                      "arguments": [
                                        {
                                          "id": 6620,
                                          "name": "_liquidity",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6604,
                                          "src": "1912:10:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 6619,
                                        "name": "observeLiquidity",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7053,
                                        "src": "1895:16:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_TickCache_$13178_memory_ptr_$",
                                          "typeString": "function (address) view returns (struct IKeep3rJobFundableLiquidity.TickCache memory)"
                                        }
                                      },
                                      "id": 6621,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1895:28:35",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                        "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                      }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "1865:58:35"
                                  },
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6626,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 6623,
                                          "name": "_tickCache",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6618,
                                          "src": "1937:10:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                          }
                                        },
                                        "id": 6624,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "period",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 13177,
                                        "src": "1937:17:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "!=",
                                      "rightExpression": {
                                        "hexValue": "30",
                                        "id": 6625,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1958:1:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "1937:22:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 6657,
                                    "nodeType": "IfStatement",
                                    "src": "1933:327:35",
                                    "trueBody": {
                                      "id": 6656,
                                      "nodeType": "Block",
                                      "src": "1961:299:35",
                                      "statements": [
                                        {
                                          "assignments": [
                                            6628
                                          ],
                                          "declarations": [
                                            {
                                              "constant": false,
                                              "id": 6628,
                                              "mutability": "mutable",
                                              "name": "_tickDifference",
                                              "nameLocation": "1979:15:35",
                                              "nodeType": "VariableDeclaration",
                                              "scope": 6656,
                                              "src": "1973:21:35",
                                              "stateVariable": false,
                                              "storageLocation": "default",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int56",
                                                "typeString": "int56"
                                              },
                                              "typeName": {
                                                "id": 6627,
                                                "name": "int56",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1973:5:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_int56",
                                                  "typeString": "int56"
                                                }
                                              },
                                              "visibility": "internal"
                                            }
                                          ],
                                          "id": 6638,
                                          "initialValue": {
                                            "condition": {
                                              "baseExpression": {
                                                "id": 6629,
                                                "name": "_isKP3RToken0",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5434,
                                                "src": "1997:13:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                                  "typeString": "mapping(address => bool)"
                                                }
                                              },
                                              "id": 6631,
                                              "indexExpression": {
                                                "id": 6630,
                                                "name": "_liquidity",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6604,
                                                "src": "2011:10:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "1997:25:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                              }
                                            },
                                            "falseExpression": {
                                              "id": 6636,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "UnaryOperation",
                                              "operator": "-",
                                              "prefix": true,
                                              "src": "2049:22:35",
                                              "subExpression": {
                                                "expression": {
                                                  "id": 6634,
                                                  "name": "_tickCache",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 6618,
                                                  "src": "2050:10:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                                    "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                                  }
                                                },
                                                "id": 6635,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "difference",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 13175,
                                                "src": "2050:21:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_int56",
                                                  "typeString": "int56"
                                                }
                                              },
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int56",
                                                "typeString": "int56"
                                              }
                                            },
                                            "id": 6637,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "Conditional",
                                            "src": "1997:74:35",
                                            "trueExpression": {
                                              "expression": {
                                                "id": 6632,
                                                "name": "_tickCache",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6618,
                                                "src": "2025:10:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                                  "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                                }
                                              },
                                              "id": 6633,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "difference",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 13175,
                                              "src": "2025:21:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int56",
                                                "typeString": "int56"
                                              }
                                            },
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int56",
                                              "typeString": "int56"
                                            }
                                          },
                                          "nodeType": "VariableDeclarationStatement",
                                          "src": "1973:98:35"
                                        },
                                        {
                                          "expression": {
                                            "id": 6654,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftHandSide": {
                                              "id": 6639,
                                              "name": "_periodCredits",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6588,
                                              "src": "2083:14:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "Assignment",
                                            "operator": "+=",
                                            "rightHandSide": {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "baseExpression": {
                                                        "baseExpression": {
                                                          "id": 6645,
                                                          "name": "liquidityAmount",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 6548,
                                                          "src": "2168:15:35",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                            "typeString": "mapping(address => mapping(address => uint256))"
                                                          }
                                                        },
                                                        "id": 6647,
                                                        "indexExpression": {
                                                          "id": 6646,
                                                          "name": "_job",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 6584,
                                                          "src": "2184:4:35",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                          }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "2168:21:35",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                          "typeString": "mapping(address => uint256)"
                                                        }
                                                      },
                                                      "id": 6649,
                                                      "indexExpression": {
                                                        "id": 6648,
                                                        "name": "_liquidity",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 6604,
                                                        "src": "2190:10:35",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        }
                                                      },
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "nodeType": "IndexAccess",
                                                      "src": "2168:33:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    {
                                                      "id": 6650,
                                                      "name": "_tickDifference",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 6628,
                                                      "src": "2203:15:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_int56",
                                                        "typeString": "int56"
                                                      }
                                                    },
                                                    {
                                                      "id": 6651,
                                                      "name": "rewardPeriodTime",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 5626,
                                                      "src": "2220:16:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      {
                                                        "typeIdentifier": "t_int56",
                                                        "typeString": "int56"
                                                      },
                                                      {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    ],
                                                    "expression": {
                                                      "arguments": [
                                                        {
                                                          "id": 6642,
                                                          "name": "keep3rHelper",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 5602,
                                                          "src": "2139:12:35",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                          }
                                                        }
                                                      ],
                                                      "expression": {
                                                        "argumentTypes": [
                                                          {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                          }
                                                        ],
                                                        "id": 6641,
                                                        "name": "IKeep3rHelper",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 11525,
                                                        "src": "2125:13:35",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_type$_t_contract$_IKeep3rHelper_$11525_$",
                                                          "typeString": "type(contract IKeep3rHelper)"
                                                        }
                                                      },
                                                      "id": 6643,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "kind": "typeConversion",
                                                      "lValueRequested": false,
                                                      "names": [],
                                                      "nodeType": "FunctionCall",
                                                      "src": "2125:27:35",
                                                      "tryCall": false,
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IKeep3rHelper_$11525",
                                                        "typeString": "contract IKeep3rHelper"
                                                      }
                                                    },
                                                    "id": 6644,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "getKP3RsAtTick",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 11512,
                                                    "src": "2125:42:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_external_pure$_t_uint256_$_t_int56_$_t_uint256_$returns$_t_uint256_$",
                                                      "typeString": "function (uint256,int56,uint256) pure external returns (uint256)"
                                                    }
                                                  },
                                                  "id": 6652,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "2125:112:35",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                ],
                                                "id": 6640,
                                                "name": "_getReward",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7863,
                                                "src": "2101:10:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                                  "typeString": "function (uint256) view returns (uint256)"
                                                }
                                              },
                                              "id": 6653,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "2101:148:35",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "2083:166:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 6655,
                                          "nodeType": "ExpressionStatement",
                                          "src": "2083:166:35"
                                        }
                                      ]
                                    }
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6593,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6591,
                            "src": "1703:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "baseExpression": {
                                  "id": 6594,
                                  "name": "_jobLiquidities",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5424,
                                  "src": "1707:15:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 6596,
                                "indexExpression": {
                                  "id": 6595,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6584,
                                  "src": "1723:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1707:21:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 6597,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1727,
                              "src": "1707:28:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
                              }
                            },
                            "id": 6598,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1707:30:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1703:34:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6661,
                        "initializationExpression": {
                          "assignments": [
                            6591
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 6591,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "1700:1:35",
                              "nodeType": "VariableDeclaration",
                              "scope": 6661,
                              "src": "1692:9:35",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 6590,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1692:7:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 6592,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "1692:9:35"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 6601,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "1739:3:35",
                            "subExpression": {
                              "id": 6600,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6591,
                              "src": "1739:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6602,
                          "nodeType": "ExpressionStatement",
                          "src": "1739:3:35"
                        },
                        "nodeType": "ForStatement",
                        "src": "1687:587:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6582,
                    "nodeType": "StructuredDocumentation",
                    "src": "1541:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "6cf262bc",
                  "id": 6663,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobPeriodCredits",
                  "nameLocation": "1596:16:35",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6586,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1639:8:35"
                  },
                  "parameters": {
                    "id": 6585,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6584,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1621:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 6663,
                        "src": "1613:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6583,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1613:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1612:14:35"
                  },
                  "returnParameters": {
                    "id": 6589,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6588,
                        "mutability": "mutable",
                        "name": "_periodCredits",
                        "nameLocation": "1665:14:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 6663,
                        "src": "1657:22:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6587,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1657:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1656:24:35"
                  },
                  "scope": 7939,
                  "src": "1587:691:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13219
                  ],
                  "body": {
                    "id": 6714,
                    "nodeType": "Block",
                    "src": "2428:728:35",
                    "statements": [
                      {
                        "assignments": [
                          6673
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6673,
                            "mutability": "mutable",
                            "name": "_periodCredits",
                            "nameLocation": "2442:14:35",
                            "nodeType": "VariableDeclaration",
                            "scope": 6714,
                            "src": "2434:22:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6672,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2434:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6677,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6675,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6666,
                              "src": "2476:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 6674,
                            "name": "jobPeriodCredits",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6663,
                            "src": "2459:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 6676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2459:22:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2434:47:35"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6686,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6683,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 6678,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "2550:5:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 6679,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "2550:15:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "baseExpression": {
                                    "id": 6680,
                                    "name": "rewardedAt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6554,
                                    "src": "2568:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 6682,
                                  "indexExpression": {
                                    "id": 6681,
                                    "name": "_job",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6666,
                                    "src": "2579:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2568:16:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2550:34:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 6684,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "2549:36:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 6685,
                            "name": "rewardPeriodTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5626,
                            "src": "2588:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2549:55:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6712,
                          "nodeType": "Block",
                          "src": "3019:133:35",
                          "statements": [
                            {
                              "expression": {
                                "id": 6710,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 6708,
                                  "name": "_liquidityCredits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6670,
                                  "src": "3111:17:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 6709,
                                  "name": "_periodCredits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6673,
                                  "src": "3131:14:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3111:34:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6711,
                              "nodeType": "ExpressionStatement",
                              "src": "3111:34:35"
                            }
                          ]
                        },
                        "id": 6713,
                        "nodeType": "IfStatement",
                        "src": "2545:607:35",
                        "trueBody": {
                          "id": 6707,
                          "nodeType": "Block",
                          "src": "2606:407:35",
                          "statements": [
                            {
                              "expression": {
                                "id": 6705,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 6687,
                                  "name": "_liquidityCredits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6670,
                                  "src": "2692:17:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6690,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 6688,
                                      "name": "_periodCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6673,
                                      "src": "2712:14:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 6689,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2729:1:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "2712:18:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseExpression": {
                                    "baseExpression": {
                                      "id": 6701,
                                      "name": "_jobLiquidityCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5407,
                                      "src": "2906:20:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 6703,
                                    "indexExpression": {
                                      "id": 6702,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6666,
                                      "src": "2927:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2906:26:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6704,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "Conditional",
                                  "src": "2712:220:35",
                                  "trueExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6700,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 6695,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "baseExpression": {
                                              "id": 6691,
                                              "name": "_jobLiquidityCredits",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5407,
                                              "src": "2742:20:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                              }
                                            },
                                            "id": 6693,
                                            "indexExpression": {
                                              "id": 6692,
                                              "name": "_job",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6666,
                                              "src": "2763:4:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "2742:26:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "id": 6694,
                                            "name": "_periodCredits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6673,
                                            "src": "2771:14:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "2742:43:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 6696,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "2741:45:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "/",
                                    "rightExpression": {
                                      "baseExpression": {
                                        "id": 6697,
                                        "name": "_jobPeriodCredits",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5412,
                                        "src": "2789:17:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 6699,
                                      "indexExpression": {
                                        "id": 6698,
                                        "name": "_job",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6666,
                                        "src": "2807:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "2789:23:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2741:71:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2692:240:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6706,
                              "nodeType": "ExpressionStatement",
                              "src": "2692:240:35"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6664,
                    "nodeType": "StructuredDocumentation",
                    "src": "2282:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "8bb6dfa8",
                  "id": 6715,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobLiquidityCredits",
                  "nameLocation": "2337:19:35",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6668,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2383:8:35"
                  },
                  "parameters": {
                    "id": 6667,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6666,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "2365:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 6715,
                        "src": "2357:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6665,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2357:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2356:14:35"
                  },
                  "returnParameters": {
                    "id": 6671,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6670,
                        "mutability": "mutable",
                        "name": "_liquidityCredits",
                        "nameLocation": "2409:17:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 6715,
                        "src": "2401:25:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6669,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2401:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2400:27:35"
                  },
                  "scope": 7939,
                  "src": "2328:828:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13235
                  ],
                  "body": {
                    "id": 6794,
                    "nodeType": "Block",
                    "src": "3295:759:35",
                    "statements": [
                      {
                        "assignments": [
                          6725
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6725,
                            "mutability": "mutable",
                            "name": "_periodCredits",
                            "nameLocation": "3309:14:35",
                            "nodeType": "VariableDeclaration",
                            "scope": 6794,
                            "src": "3301:22:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6724,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3301:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6729,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6727,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6718,
                              "src": "3343:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 6726,
                            "name": "jobPeriodCredits",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6663,
                            "src": "3326:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 6728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3326:22:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3301:47:35"
                      },
                      {
                        "assignments": [
                          6731
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6731,
                            "mutability": "mutable",
                            "name": "_cooldown",
                            "nameLocation": "3362:9:35",
                            "nodeType": "VariableDeclaration",
                            "scope": 6794,
                            "src": "3354:17:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6730,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3354:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6734,
                        "initialValue": {
                          "expression": {
                            "id": 6732,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "3374:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 6733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "3374:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3354:35:35"
                      },
                      {
                        "condition": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6744,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 6735,
                                  "name": "rewardedAt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6554,
                                  "src": "3401:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 6737,
                                "indexExpression": {
                                  "id": 6736,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6718,
                                  "src": "3412:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3401:16:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6742,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 6739,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "3428:5:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 6740,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "3428:15:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 6741,
                                      "name": "rewardPeriodTime",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5626,
                                      "src": "3446:16:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "3428:34:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6738,
                                  "name": "_period",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7847,
                                  "src": "3420:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256) view returns (uint256)"
                                  }
                                },
                                "id": 6743,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3420:43:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3401:62:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 6745,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3400:64:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6781,
                          "nodeType": "Block",
                          "src": "3858:114:35",
                          "statements": [
                            {
                              "expression": {
                                "id": 6779,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 6774,
                                  "name": "_cooldown",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6731,
                                  "src": "3928:9:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 6776,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "3949:5:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 6777,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "3949:15:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 6775,
                                    "name": "_period",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7847,
                                    "src": "3941:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256) view returns (uint256)"
                                    }
                                  },
                                  "id": 6778,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3941:24:35",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3928:37:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6780,
                              "nodeType": "ExpressionStatement",
                              "src": "3928:37:35"
                            }
                          ]
                        },
                        "id": 6782,
                        "nodeType": "IfStatement",
                        "src": "3396:576:35",
                        "trueBody": {
                          "id": 6773,
                          "nodeType": "Block",
                          "src": "3466:386:35",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6754,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6751,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 6746,
                                          "name": "block",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -4,
                                          "src": "3527:5:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_block",
                                            "typeString": "block"
                                          }
                                        },
                                        "id": 6747,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "timestamp",
                                        "nodeType": "MemberAccess",
                                        "src": "3527:15:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "baseExpression": {
                                          "id": 6748,
                                          "name": "rewardedAt",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6554,
                                          "src": "3545:10:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                            "typeString": "mapping(address => uint256)"
                                          }
                                        },
                                        "id": 6750,
                                        "indexExpression": {
                                          "id": 6749,
                                          "name": "_job",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6718,
                                          "src": "3556:4:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3545:16:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3527:34:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 6752,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "3526:36:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "id": 6753,
                                  "name": "rewardPeriodTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5626,
                                  "src": "3566:16:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3526:56:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 6771,
                                "nodeType": "Block",
                                "src": "3736:110:35",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 6769,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 6765,
                                        "name": "_cooldown",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6731,
                                        "src": "3808:9:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "-=",
                                      "rightHandSide": {
                                        "baseExpression": {
                                          "id": 6766,
                                          "name": "rewardedAt",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6554,
                                          "src": "3821:10:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                            "typeString": "mapping(address => uint256)"
                                          }
                                        },
                                        "id": 6768,
                                        "indexExpression": {
                                          "id": 6767,
                                          "name": "_job",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6718,
                                          "src": "3832:4:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3821:16:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3808:29:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6770,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3808:29:35"
                                  }
                                ]
                              },
                              "id": 6772,
                              "nodeType": "IfStatement",
                              "src": "3522:324:35",
                              "trueBody": {
                                "id": 6764,
                                "nodeType": "Block",
                                "src": "3584:146:35",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 6762,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 6755,
                                        "name": "_cooldown",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6731,
                                        "src": "3671:9:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "-=",
                                      "rightHandSide": {
                                        "components": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 6760,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "baseExpression": {
                                                "id": 6756,
                                                "name": "rewardedAt",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6554,
                                                "src": "3685:10:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                  "typeString": "mapping(address => uint256)"
                                                }
                                              },
                                              "id": 6758,
                                              "indexExpression": {
                                                "id": 6757,
                                                "name": "_job",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6718,
                                                "src": "3696:4:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "3685:16:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                              "id": 6759,
                                              "name": "rewardPeriodTime",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5626,
                                              "src": "3704:16:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "3685:35:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "id": 6761,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "3684:37:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3671:50:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6763,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3671:50:35"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 6792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 6783,
                            "name": "_credits",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6722,
                            "src": "3977:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6791,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 6785,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6718,
                                  "src": "4008:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6784,
                                "name": "jobLiquidityCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6715,
                                "src": "3988:19:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 6786,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3988:25:35",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "id": 6788,
                                  "name": "_cooldown",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6731,
                                  "src": "4023:9:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 6789,
                                  "name": "_periodCredits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6725,
                                  "src": "4034:14:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 6787,
                                "name": "_phase",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7831,
                                "src": "4016:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) view returns (uint256)"
                                }
                              },
                              "id": 6790,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4016:33:35",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3988:61:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3977:72:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6793,
                        "nodeType": "ExpressionStatement",
                        "src": "3977:72:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6716,
                    "nodeType": "StructuredDocumentation",
                    "src": "3160:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "034d4c61",
                  "id": 6795,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalJobCredits",
                  "nameLocation": "3215:15:35",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6720,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3259:8:35"
                  },
                  "parameters": {
                    "id": 6719,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6718,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "3239:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 6795,
                        "src": "3231:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6717,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3231:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3230:14:35"
                  },
                  "returnParameters": {
                    "id": 6723,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6722,
                        "mutability": "mutable",
                        "name": "_credits",
                        "nameLocation": "3285:8:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 6795,
                        "src": "3277:16:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6721,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3277:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3276:18:35"
                  },
                  "scope": 7939,
                  "src": "3206:848:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13245
                  ],
                  "body": {
                    "id": 6848,
                    "nodeType": "Block",
                    "src": "4221:397:35",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 6808,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6798,
                              "src": "4261:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 6806,
                              "name": "_approvedLiquidities",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6540,
                              "src": "4231:20:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 6807,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contains",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1712,
                            "src": "4231:29:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                            }
                          },
                          "id": 6809,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4231:41:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6847,
                        "nodeType": "IfStatement",
                        "src": "4227:387:35",
                        "trueBody": {
                          "id": 6846,
                          "nodeType": "Block",
                          "src": "4274:340:35",
                          "statements": [
                            {
                              "assignments": [
                                6812
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6812,
                                  "mutability": "mutable",
                                  "name": "_tickCache",
                                  "nameLocation": "4299:10:35",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6846,
                                  "src": "4282:27:35",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                    "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                                  },
                                  "typeName": {
                                    "id": 6811,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                      "id": 6810,
                                      "name": "TickCache",
                                      "nodeType": "IdentifierPath",
                                      "referencedDeclaration": 13178,
                                      "src": "4282:9:35"
                                    },
                                    "referencedDeclaration": 13178,
                                    "src": "4282:9:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TickCache_$13178_storage_ptr",
                                      "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6816,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 6814,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6798,
                                    "src": "4329:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 6813,
                                  "name": "observeLiquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7053,
                                  "src": "4312:16:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_TickCache_$13178_memory_ptr_$",
                                    "typeString": "function (address) view returns (struct IKeep3rJobFundableLiquidity.TickCache memory)"
                                  }
                                },
                                "id": 6815,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4312:28:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                  "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "4282:58:35"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6820,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 6817,
                                    "name": "_tickCache",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6812,
                                    "src": "4352:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                      "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                    }
                                  },
                                  "id": 6818,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "period",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 13177,
                                  "src": "4352:17:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 6819,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4373:1:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "4352:22:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 6845,
                              "nodeType": "IfStatement",
                              "src": "4348:260:35",
                              "trueBody": {
                                "id": 6844,
                                "nodeType": "Block",
                                "src": "4376:232:35",
                                "statements": [
                                  {
                                    "assignments": [
                                      6822
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 6822,
                                        "mutability": "mutable",
                                        "name": "_tickDifference",
                                        "nameLocation": "4392:15:35",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 6844,
                                        "src": "4386:21:35",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        },
                                        "typeName": {
                                          "id": 6821,
                                          "name": "int56",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "4386:5:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int56",
                                            "typeString": "int56"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 6832,
                                    "initialValue": {
                                      "condition": {
                                        "baseExpression": {
                                          "id": 6823,
                                          "name": "_isKP3RToken0",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5434,
                                          "src": "4410:13:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                            "typeString": "mapping(address => bool)"
                                          }
                                        },
                                        "id": 6825,
                                        "indexExpression": {
                                          "id": 6824,
                                          "name": "_liquidity",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6798,
                                          "src": "4424:10:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4410:25:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseExpression": {
                                        "id": 6830,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "-",
                                        "prefix": true,
                                        "src": "4462:22:35",
                                        "subExpression": {
                                          "expression": {
                                            "id": 6828,
                                            "name": "_tickCache",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6812,
                                            "src": "4463:10:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                              "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                            }
                                          },
                                          "id": 6829,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "difference",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 13175,
                                          "src": "4463:21:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int56",
                                            "typeString": "int56"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        }
                                      },
                                      "id": 6831,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "Conditional",
                                      "src": "4410:74:35",
                                      "trueExpression": {
                                        "expression": {
                                          "id": 6826,
                                          "name": "_tickCache",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6812,
                                          "src": "4438:10:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                          }
                                        },
                                        "id": 6827,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "difference",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 13175,
                                        "src": "4438:21:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4386:98:35"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "id": 6838,
                                              "name": "_amount",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6800,
                                              "src": "4555:7:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            {
                                              "id": 6839,
                                              "name": "_tickDifference",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6822,
                                              "src": "4564:15:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int56",
                                                "typeString": "int56"
                                              }
                                            },
                                            {
                                              "id": 6840,
                                              "name": "rewardPeriodTime",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5626,
                                              "src": "4581:16:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              {
                                                "typeIdentifier": "t_int56",
                                                "typeString": "int56"
                                              },
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "expression": {
                                              "arguments": [
                                                {
                                                  "id": 6835,
                                                  "name": "keep3rHelper",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 5602,
                                                  "src": "4526:12:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                ],
                                                "id": 6834,
                                                "name": "IKeep3rHelper",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11525,
                                                "src": "4512:13:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_contract$_IKeep3rHelper_$11525_$",
                                                  "typeString": "type(contract IKeep3rHelper)"
                                                }
                                              },
                                              "id": 6836,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "4512:27:35",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IKeep3rHelper_$11525",
                                                "typeString": "contract IKeep3rHelper"
                                              }
                                            },
                                            "id": 6837,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "getKP3RsAtTick",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 11512,
                                            "src": "4512:42:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_pure$_t_uint256_$_t_int56_$_t_uint256_$returns$_t_uint256_$",
                                              "typeString": "function (uint256,int56,uint256) pure external returns (uint256)"
                                            }
                                          },
                                          "id": 6841,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "4512:86:35",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 6833,
                                        "name": "_getReward",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7863,
                                        "src": "4501:10:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256) view returns (uint256)"
                                        }
                                      },
                                      "id": 6842,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4501:98:35",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "functionReturnParameters": 6805,
                                    "id": 6843,
                                    "nodeType": "Return",
                                    "src": "4494:105:35"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6796,
                    "nodeType": "StructuredDocumentation",
                    "src": "4058:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "0d6a1f87",
                  "id": 6849,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteLiquidity",
                  "nameLocation": "4113:14:35",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6802,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4179:8:35"
                  },
                  "parameters": {
                    "id": 6801,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6798,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "4136:10:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 6849,
                        "src": "4128:18:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6797,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4128:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6800,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "4156:7:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 6849,
                        "src": "4148:15:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6799,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4148:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4127:37:35"
                  },
                  "returnParameters": {
                    "id": 6805,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6804,
                        "mutability": "mutable",
                        "name": "_periodCredits",
                        "nameLocation": "4205:14:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 6849,
                        "src": "4197:22:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6803,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4197:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4196:24:35"
                  },
                  "scope": 7939,
                  "src": "4104:514:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13254
                  ],
                  "body": {
                    "id": 7052,
                    "nodeType": "Block",
                    "src": "4781:1519:35",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6867,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 6859,
                                "name": "_tick",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6566,
                                "src": "4791:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                  "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                                }
                              },
                              "id": 6861,
                              "indexExpression": {
                                "id": 6860,
                                "name": "_liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6852,
                                "src": "4797:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4791:17:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                              }
                            },
                            "id": 6862,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "period",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13177,
                            "src": "4791:24:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 6864,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "4827:5:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 6865,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "4827:15:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 6863,
                              "name": "_period",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7847,
                              "src": "4819:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 6866,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4819:24:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4791:52:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 7050,
                          "nodeType": "Block",
                          "src": "4954:1342:35",
                          "statements": [
                            {
                              "assignments": [
                                6876
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6876,
                                  "mutability": "mutable",
                                  "name": "success",
                                  "nameLocation": "4967:7:35",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7050,
                                  "src": "4962:12:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 6875,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4962:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6877,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "4962:12:35"
                            },
                            {
                              "assignments": [
                                6879
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6879,
                                  "mutability": "mutable",
                                  "name": "lastPeriod",
                                  "nameLocation": "4990:10:35",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7050,
                                  "src": "4982:18:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6878,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4982:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6886,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6884,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 6881,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "5011:5:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 6882,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "src": "5011:15:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 6883,
                                      "name": "rewardPeriodTime",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5626,
                                      "src": "5029:16:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "5011:34:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6880,
                                  "name": "_period",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7847,
                                  "src": "5003:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256) view returns (uint256)"
                                  }
                                },
                                "id": 6885,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5003:43:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "4982:64:35"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6892,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 6887,
                                      "name": "_tick",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6566,
                                      "src": "5059:5:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                        "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                                      }
                                    },
                                    "id": 6889,
                                    "indexExpression": {
                                      "id": 6888,
                                      "name": "_liquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6852,
                                      "src": "5065:10:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5059:17:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                      "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                                    }
                                  },
                                  "id": 6890,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "period",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 13177,
                                  "src": "5059:24:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 6891,
                                  "name": "lastPeriod",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6879,
                                  "src": "5087:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5059:38:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6957,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 6952,
                                        "name": "_tick",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6566,
                                        "src": "5577:5:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                          "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                                        }
                                      },
                                      "id": 6954,
                                      "indexExpression": {
                                        "id": 6953,
                                        "name": "_liquidity",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6852,
                                        "src": "5583:10:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "5577:17:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                        "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                                      }
                                    },
                                    "id": 6955,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "period",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 13177,
                                    "src": "5577:24:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "id": 6956,
                                    "name": "lastPeriod",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6879,
                                    "src": "5604:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5577:37:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "id": 7031,
                                "nodeType": "IfStatement",
                                "src": "5573:585:35",
                                "trueBody": {
                                  "id": 7030,
                                  "nodeType": "Block",
                                  "src": "5616:542:35",
                                  "statements": [
                                    {
                                      "assignments": [
                                        6962
                                      ],
                                      "declarations": [
                                        {
                                          "constant": false,
                                          "id": 6962,
                                          "mutability": "mutable",
                                          "name": "_secondsAgo",
                                          "nameLocation": "5705:11:35",
                                          "nodeType": "VariableDeclaration",
                                          "scope": 7030,
                                          "src": "5689:27:35",
                                          "stateVariable": false,
                                          "storageLocation": "memory",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                            "typeString": "uint32[]"
                                          },
                                          "typeName": {
                                            "baseType": {
                                              "id": 6960,
                                              "name": "uint32",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "5689:6:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint32",
                                                "typeString": "uint32"
                                              }
                                            },
                                            "id": 6961,
                                            "nodeType": "ArrayTypeName",
                                            "src": "5689:8:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                              "typeString": "uint32[]"
                                            }
                                          },
                                          "visibility": "internal"
                                        }
                                      ],
                                      "id": 6968,
                                      "initialValue": {
                                        "arguments": [
                                          {
                                            "hexValue": "32",
                                            "id": 6966,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5732:1:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_2_by_1",
                                              "typeString": "int_const 2"
                                            },
                                            "value": "2"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_2_by_1",
                                              "typeString": "int_const 2"
                                            }
                                          ],
                                          "id": 6965,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "NewExpression",
                                          "src": "5719:12:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_ptr_$",
                                            "typeString": "function (uint256) pure returns (uint32[] memory)"
                                          },
                                          "typeName": {
                                            "baseType": {
                                              "id": 6963,
                                              "name": "uint32",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "5723:6:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint32",
                                                "typeString": "uint32"
                                              }
                                            },
                                            "id": 6964,
                                            "nodeType": "ArrayTypeName",
                                            "src": "5723:8:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                              "typeString": "uint32[]"
                                            }
                                          }
                                        },
                                        "id": 6967,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5719:15:35",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                          "typeString": "uint32[] memory"
                                        }
                                      },
                                      "nodeType": "VariableDeclarationStatement",
                                      "src": "5689:45:35"
                                    },
                                    {
                                      "expression": {
                                        "id": 6982,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "baseExpression": {
                                            "id": 6969,
                                            "name": "_secondsAgo",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6962,
                                            "src": "5745:11:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                              "typeString": "uint32[] memory"
                                            }
                                          },
                                          "id": 6971,
                                          "indexExpression": {
                                            "hexValue": "30",
                                            "id": 6970,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5757:1:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "IndexAccess",
                                          "src": "5745:14:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "arguments": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 6980,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "expression": {
                                                  "id": 6974,
                                                  "name": "block",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": -4,
                                                  "src": "5769:5:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_block",
                                                    "typeString": "block"
                                                  }
                                                },
                                                "id": 6975,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "timestamp",
                                                "nodeType": "MemberAccess",
                                                "src": "5769:15:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "-",
                                              "rightExpression": {
                                                "arguments": [
                                                  {
                                                    "expression": {
                                                      "id": 6977,
                                                      "name": "block",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": -4,
                                                      "src": "5795:5:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_block",
                                                        "typeString": "block"
                                                      }
                                                    },
                                                    "id": 6978,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "timestamp",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5795:15:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  ],
                                                  "id": 6976,
                                                  "name": "_period",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 7847,
                                                  "src": "5787:7:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                                    "typeString": "function (uint256) view returns (uint256)"
                                                  }
                                                },
                                                "id": 6979,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5787:24:35",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "src": "5769:42:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "id": 6973,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "5762:6:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_uint32_$",
                                              "typeString": "type(uint32)"
                                            },
                                            "typeName": {
                                              "id": 6972,
                                              "name": "uint32",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "5762:6:35",
                                              "typeDescriptions": {}
                                            }
                                          },
                                          "id": 6981,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "5762:50:35",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        },
                                        "src": "5745:67:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      },
                                      "id": 6983,
                                      "nodeType": "ExpressionStatement",
                                      "src": "5745:67:35"
                                    },
                                    {
                                      "expression": {
                                        "id": 6999,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "baseExpression": {
                                            "id": 6984,
                                            "name": "_secondsAgo",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6962,
                                            "src": "5822:11:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                              "typeString": "uint32[] memory"
                                            }
                                          },
                                          "id": 6986,
                                          "indexExpression": {
                                            "hexValue": "31",
                                            "id": 6985,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "5834:1:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "IndexAccess",
                                          "src": "5822:14:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "arguments": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 6997,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 6995,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "expression": {
                                                    "id": 6989,
                                                    "name": "block",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -4,
                                                    "src": "5846:5:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_magic_block",
                                                      "typeString": "block"
                                                    }
                                                  },
                                                  "id": 6990,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberName": "timestamp",
                                                  "nodeType": "MemberAccess",
                                                  "src": "5846:15:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "-",
                                                "rightExpression": {
                                                  "arguments": [
                                                    {
                                                      "expression": {
                                                        "id": 6992,
                                                        "name": "block",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -4,
                                                        "src": "5872:5:35",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_magic_block",
                                                          "typeString": "block"
                                                        }
                                                      },
                                                      "id": 6993,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "memberName": "timestamp",
                                                      "nodeType": "MemberAccess",
                                                      "src": "5872:15:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    ],
                                                    "id": 6991,
                                                    "name": "_period",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 7847,
                                                    "src": "5864:7:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                                      "typeString": "function (uint256) view returns (uint256)"
                                                    }
                                                  },
                                                  "id": 6994,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "5864:24:35",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "src": "5846:42:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "+",
                                              "rightExpression": {
                                                "id": 6996,
                                                "name": "rewardPeriodTime",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5626,
                                                "src": "5891:16:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "src": "5846:61:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "id": 6988,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "5839:6:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_uint32_$",
                                              "typeString": "type(uint32)"
                                            },
                                            "typeName": {
                                              "id": 6987,
                                              "name": "uint32",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "5839:6:35",
                                              "typeDescriptions": {}
                                            }
                                          },
                                          "id": 6998,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "5839:69:35",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        },
                                        "src": "5822:86:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      },
                                      "id": 7000,
                                      "nodeType": "ExpressionStatement",
                                      "src": "5822:86:35"
                                    },
                                    {
                                      "assignments": [
                                        7002
                                      ],
                                      "declarations": [
                                        {
                                          "constant": false,
                                          "id": 7002,
                                          "mutability": "mutable",
                                          "name": "_tickCumulative2",
                                          "nameLocation": "5925:16:35",
                                          "nodeType": "VariableDeclaration",
                                          "scope": 7030,
                                          "src": "5919:22:35",
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int56",
                                            "typeString": "int56"
                                          },
                                          "typeName": {
                                            "id": 7001,
                                            "name": "int56",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "5919:5:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int56",
                                              "typeString": "int56"
                                            }
                                          },
                                          "visibility": "internal"
                                        }
                                      ],
                                      "id": 7003,
                                      "nodeType": "VariableDeclarationStatement",
                                      "src": "5919:22:35"
                                    },
                                    {
                                      "expression": {
                                        "id": 7019,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "components": [
                                            {
                                              "expression": {
                                                "id": 7004,
                                                "name": "_tickCache",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6857,
                                                "src": "5952:10:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                                  "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                                }
                                              },
                                              "id": 7006,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "memberName": "current",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 13173,
                                              "src": "5952:18:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int56",
                                                "typeString": "int56"
                                              }
                                            },
                                            {
                                              "id": 7007,
                                              "name": "_tickCumulative2",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7002,
                                              "src": "5972:16:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int56",
                                                "typeString": "int56"
                                              }
                                            },
                                            {
                                              "id": 7008,
                                              "name": "success",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6876,
                                              "src": "5990:7:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                              }
                                            }
                                          ],
                                          "id": 7009,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "TupleExpression",
                                          "src": "5951:47:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_int56_$_t_int56_$_t_bool_$",
                                            "typeString": "tuple(int56,int56,bool)"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "arguments": [
                                            {
                                              "baseExpression": {
                                                "id": 7014,
                                                "name": "_liquidityPool",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5429,
                                                "src": "6037:14:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                  "typeString": "mapping(address => address)"
                                                }
                                              },
                                              "id": 7016,
                                              "indexExpression": {
                                                "id": 7015,
                                                "name": "_liquidity",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6852,
                                                "src": "6052:10:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "6037:26:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            {
                                              "id": 7017,
                                              "name": "_secondsAgo",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6962,
                                              "src": "6065:11:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                                "typeString": "uint32[] memory"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              },
                                              {
                                                "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                                "typeString": "uint32[] memory"
                                              }
                                            ],
                                            "expression": {
                                              "arguments": [
                                                {
                                                  "id": 7011,
                                                  "name": "keep3rHelper",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 5602,
                                                  "src": "6015:12:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                ],
                                                "id": 7010,
                                                "name": "IKeep3rHelper",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11525,
                                                "src": "6001:13:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_contract$_IKeep3rHelper_$11525_$",
                                                  "typeString": "type(contract IKeep3rHelper)"
                                                }
                                              },
                                              "id": 7012,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "6001:27:35",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IKeep3rHelper_$11525",
                                                "typeString": "contract IKeep3rHelper"
                                              }
                                            },
                                            "id": 7013,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "observe",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 11488,
                                            "src": "6001:35:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_view$_t_address_$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_int56_$_t_int56_$_t_bool_$",
                                              "typeString": "function (address,uint32[] memory) view external returns (int56,int56,bool)"
                                            }
                                          },
                                          "id": 7018,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "6001:76:35",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_int56_$_t_int56_$_t_bool_$",
                                            "typeString": "tuple(int56,int56,bool)"
                                          }
                                        },
                                        "src": "5951:126:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$__$",
                                          "typeString": "tuple()"
                                        }
                                      },
                                      "id": 7020,
                                      "nodeType": "ExpressionStatement",
                                      "src": "5951:126:35"
                                    },
                                    {
                                      "expression": {
                                        "id": 7028,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "expression": {
                                            "id": 7021,
                                            "name": "_tickCache",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6857,
                                            "src": "6088:10:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                              "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                            }
                                          },
                                          "id": 7023,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "memberName": "difference",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 13175,
                                          "src": "6088:21:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int56",
                                            "typeString": "int56"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "commonType": {
                                            "typeIdentifier": "t_int56",
                                            "typeString": "int56"
                                          },
                                          "id": 7027,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "expression": {
                                              "id": 7024,
                                              "name": "_tickCache",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6857,
                                              "src": "6112:10:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                                "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                              }
                                            },
                                            "id": 7025,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "current",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13173,
                                            "src": "6112:18:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int56",
                                              "typeString": "int56"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "id": 7026,
                                            "name": "_tickCumulative2",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7002,
                                            "src": "6133:16:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int56",
                                              "typeString": "int56"
                                            }
                                          },
                                          "src": "6112:37:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int56",
                                            "typeString": "int56"
                                          }
                                        },
                                        "src": "6088:61:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        }
                                      },
                                      "id": 7029,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6088:61:35"
                                    }
                                  ]
                                }
                              },
                              "id": 7032,
                              "nodeType": "IfStatement",
                              "src": "5055:1103:35",
                              "trueBody": {
                                "id": 6951,
                                "nodeType": "Block",
                                "src": "5099:468:35",
                                "statements": [
                                  {
                                    "assignments": [
                                      6897
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 6897,
                                        "mutability": "mutable",
                                        "name": "_secondsAgo",
                                        "nameLocation": "5206:11:35",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 6951,
                                        "src": "5190:27:35",
                                        "stateVariable": false,
                                        "storageLocation": "memory",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                          "typeString": "uint32[]"
                                        },
                                        "typeName": {
                                          "baseType": {
                                            "id": 6895,
                                            "name": "uint32",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "5190:6:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          },
                                          "id": 6896,
                                          "nodeType": "ArrayTypeName",
                                          "src": "5190:8:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                            "typeString": "uint32[]"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 6903,
                                    "initialValue": {
                                      "arguments": [
                                        {
                                          "hexValue": "31",
                                          "id": 6901,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "5233:1:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          }
                                        ],
                                        "id": 6900,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "NewExpression",
                                        "src": "5220:12:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint32_$dyn_memory_ptr_$",
                                          "typeString": "function (uint256) pure returns (uint32[] memory)"
                                        },
                                        "typeName": {
                                          "baseType": {
                                            "id": 6898,
                                            "name": "uint32",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "5224:6:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          },
                                          "id": 6899,
                                          "nodeType": "ArrayTypeName",
                                          "src": "5224:8:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                                            "typeString": "uint32[]"
                                          }
                                        }
                                      },
                                      "id": 6902,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5220:15:35",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                        "typeString": "uint32[] memory"
                                      }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5190:45:35"
                                  },
                                  {
                                    "assignments": [
                                      6905
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 6905,
                                        "mutability": "mutable",
                                        "name": "previousTick",
                                        "nameLocation": "5251:12:35",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 6951,
                                        "src": "5245:18:35",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        },
                                        "typeName": {
                                          "id": 6904,
                                          "name": "int56",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "5245:5:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int56",
                                            "typeString": "int56"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 6910,
                                    "initialValue": {
                                      "expression": {
                                        "baseExpression": {
                                          "id": 6906,
                                          "name": "_tick",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6566,
                                          "src": "5266:5:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                            "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                                          }
                                        },
                                        "id": 6908,
                                        "indexExpression": {
                                          "id": 6907,
                                          "name": "_liquidity",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6852,
                                          "src": "5272:10:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "5266:17:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                          "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                                        }
                                      },
                                      "id": 6909,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "current",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 13173,
                                      "src": "5266:25:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "5245:46:35"
                                  },
                                  {
                                    "expression": {
                                      "id": 6924,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 6911,
                                          "name": "_secondsAgo",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6897,
                                          "src": "5302:11:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                            "typeString": "uint32[] memory"
                                          }
                                        },
                                        "id": 6913,
                                        "indexExpression": {
                                          "hexValue": "30",
                                          "id": 6912,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "5314:1:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "5302:14:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 6922,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "expression": {
                                                "id": 6916,
                                                "name": "block",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -4,
                                                "src": "5326:5:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_magic_block",
                                                  "typeString": "block"
                                                }
                                              },
                                              "id": 6917,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "timestamp",
                                              "nodeType": "MemberAccess",
                                              "src": "5326:15:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                              "arguments": [
                                                {
                                                  "expression": {
                                                    "id": 6919,
                                                    "name": "block",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -4,
                                                    "src": "5352:5:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_magic_block",
                                                      "typeString": "block"
                                                    }
                                                  },
                                                  "id": 6920,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberName": "timestamp",
                                                  "nodeType": "MemberAccess",
                                                  "src": "5352:15:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                ],
                                                "id": 6918,
                                                "name": "_period",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7847,
                                                "src": "5344:7:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                                  "typeString": "function (uint256) view returns (uint256)"
                                                }
                                              },
                                              "id": 6921,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "5344:24:35",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "5326:42:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 6915,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "5319:6:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint32_$",
                                            "typeString": "type(uint32)"
                                          },
                                          "typeName": {
                                            "id": 6914,
                                            "name": "uint32",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "5319:6:35",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 6923,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5319:50:35",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      },
                                      "src": "5302:67:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      }
                                    },
                                    "id": 6925,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5302:67:35"
                                  },
                                  {
                                    "expression": {
                                      "id": 6940,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "components": [
                                          {
                                            "expression": {
                                              "id": 6926,
                                              "name": "_tickCache",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6857,
                                              "src": "5381:10:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                                "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                              }
                                            },
                                            "id": 6928,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "current",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 13173,
                                            "src": "5381:18:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int56",
                                              "typeString": "int56"
                                            }
                                          },
                                          null,
                                          {
                                            "id": 6929,
                                            "name": "success",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6876,
                                            "src": "5403:7:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          }
                                        ],
                                        "id": 6930,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "TupleExpression",
                                        "src": "5380:31:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_int56_$__$_t_bool_$",
                                          "typeString": "tuple(int56,,bool)"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "baseExpression": {
                                              "id": 6935,
                                              "name": "_liquidityPool",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5429,
                                              "src": "5450:14:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                                "typeString": "mapping(address => address)"
                                              }
                                            },
                                            "id": 6937,
                                            "indexExpression": {
                                              "id": 6936,
                                              "name": "_liquidity",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6852,
                                              "src": "5465:10:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "5450:26:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "id": 6938,
                                            "name": "_secondsAgo",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6897,
                                            "src": "5478:11:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                              "typeString": "uint32[] memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                              "typeString": "uint32[] memory"
                                            }
                                          ],
                                          "expression": {
                                            "arguments": [
                                              {
                                                "id": 6932,
                                                "name": "keep3rHelper",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5602,
                                                "src": "5428:12:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "id": 6931,
                                              "name": "IKeep3rHelper",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 11525,
                                              "src": "5414:13:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_IKeep3rHelper_$11525_$",
                                                "typeString": "type(contract IKeep3rHelper)"
                                              }
                                            },
                                            "id": 6933,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "5414:27:35",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_IKeep3rHelper_$11525",
                                              "typeString": "contract IKeep3rHelper"
                                            }
                                          },
                                          "id": 6934,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "observe",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 11488,
                                          "src": "5414:35:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_view$_t_address_$_t_array$_t_uint32_$dyn_memory_ptr_$returns$_t_int56_$_t_int56_$_t_bool_$",
                                            "typeString": "function (address,uint32[] memory) view external returns (int56,int56,bool)"
                                          }
                                        },
                                        "id": 6939,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5414:76:35",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_int56_$_t_int56_$_t_bool_$",
                                          "typeString": "tuple(int56,int56,bool)"
                                        }
                                      },
                                      "src": "5380:110:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 6941,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5380:110:35"
                                  },
                                  {
                                    "expression": {
                                      "id": 6949,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "expression": {
                                          "id": 6942,
                                          "name": "_tickCache",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6857,
                                          "src": "5501:10:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                          }
                                        },
                                        "id": 6944,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "difference",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 13175,
                                        "src": "5501:21:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "commonType": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        },
                                        "id": 6948,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "id": 6945,
                                            "name": "_tickCache",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6857,
                                            "src": "5525:10:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                              "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                            }
                                          },
                                          "id": 6946,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "current",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 13173,
                                          "src": "5525:18:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int56",
                                            "typeString": "int56"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "id": 6947,
                                          "name": "previousTick",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6905,
                                          "src": "5546:12:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int56",
                                            "typeString": "int56"
                                          }
                                        },
                                        "src": "5525:33:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        }
                                      },
                                      "src": "5501:57:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      }
                                    },
                                    "id": 6950,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5501:57:35"
                                  }
                                ]
                              }
                            },
                            {
                              "condition": {
                                "id": 7033,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6876,
                                "src": "6169:7:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 7048,
                                "nodeType": "Block",
                                "src": "6247:43:35",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 7046,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "delete",
                                      "prefix": true,
                                      "src": "6257:24:35",
                                      "subExpression": {
                                        "expression": {
                                          "id": 7044,
                                          "name": "_tickCache",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6857,
                                          "src": "6264:10:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                          }
                                        },
                                        "id": 7045,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "period",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 13177,
                                        "src": "6264:17:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 7047,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6257:24:35"
                                  }
                                ]
                              },
                              "id": 7049,
                              "nodeType": "IfStatement",
                              "src": "6165:125:35",
                              "trueBody": {
                                "id": 7043,
                                "nodeType": "Block",
                                "src": "6178:63:35",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 7041,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "expression": {
                                          "id": 7034,
                                          "name": "_tickCache",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6857,
                                          "src": "6188:10:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                          }
                                        },
                                        "id": 7036,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "period",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 13177,
                                        "src": "6188:17:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "expression": {
                                              "id": 7038,
                                              "name": "block",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -4,
                                              "src": "6216:5:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_block",
                                                "typeString": "block"
                                              }
                                            },
                                            "id": 7039,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "src": "6216:15:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 7037,
                                          "name": "_period",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7847,
                                          "src": "6208:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (uint256) view returns (uint256)"
                                          }
                                        },
                                        "id": 7040,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6208:24:35",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "6188:44:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7042,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6188:44:35"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "id": 7051,
                        "nodeType": "IfStatement",
                        "src": "4787:1509:35",
                        "trueBody": {
                          "id": 6874,
                          "nodeType": "Block",
                          "src": "4845:103:35",
                          "statements": [
                            {
                              "expression": {
                                "id": 6872,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 6868,
                                  "name": "_tickCache",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6857,
                                  "src": "4911:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                    "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 6869,
                                    "name": "_tick",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6566,
                                    "src": "4924:5:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                      "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                                    }
                                  },
                                  "id": 6871,
                                  "indexExpression": {
                                    "id": 6870,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6852,
                                    "src": "4930:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "4924:17:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                    "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                                  }
                                },
                                "src": "4911:30:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                  "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                }
                              },
                              "id": 6873,
                              "nodeType": "ExpressionStatement",
                              "src": "4911:30:35"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6850,
                    "nodeType": "StructuredDocumentation",
                    "src": "4622:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "165e62e7",
                  "id": 7053,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "observeLiquidity",
                  "nameLocation": "4677:16:35",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6854,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4734:8:35"
                  },
                  "parameters": {
                    "id": 6853,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6852,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "4702:10:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7053,
                        "src": "4694:18:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6851,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4694:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4693:20:35"
                  },
                  "returnParameters": {
                    "id": 6858,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6857,
                        "mutability": "mutable",
                        "name": "_tickCache",
                        "nameLocation": "4769:10:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7053,
                        "src": "4752:27:35",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                          "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                        },
                        "typeName": {
                          "id": 6856,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 6855,
                            "name": "TickCache",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 13178,
                            "src": "4752:9:35"
                          },
                          "referencedDeclaration": 13178,
                          "src": "4752:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TickCache_$13178_storage_ptr",
                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4751:29:35"
                  },
                  "scope": 7939,
                  "src": "4668:1632:35",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13262
                  ],
                  "body": {
                    "id": 7093,
                    "nodeType": "Block",
                    "src": "6464:222:35",
                    "statements": [
                      {
                        "condition": {
                          "id": 7068,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "6474:21:35",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 7066,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7056,
                                "src": "6490:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 7064,
                                "name": "_jobs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5476,
                                "src": "6475:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 7065,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1712,
                              "src": "6475:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 7067,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6475:20:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7072,
                        "nodeType": "IfStatement",
                        "src": "6470:50:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7069,
                              "name": "JobUnavailable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12993,
                              "src": "6504:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7070,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6504:16:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7071,
                          "nodeType": "RevertStatement",
                          "src": "6497:23:35"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7074,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7056,
                              "src": "6548:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 7073,
                            "name": "_settleJobAccountance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7938,
                            "src": "6526:21:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 7075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6526:27:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7076,
                        "nodeType": "ExpressionStatement",
                        "src": "6526:27:35"
                      },
                      {
                        "expression": {
                          "id": 7081,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 7077,
                              "name": "_jobLiquidityCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "6559:20:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7079,
                            "indexExpression": {
                              "id": 7078,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7056,
                              "src": "6580:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6559:26:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 7080,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7058,
                            "src": "6589:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6559:37:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7082,
                        "nodeType": "ExpressionStatement",
                        "src": "6559:37:35"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 7084,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7056,
                              "src": "6630:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 7085,
                                "name": "rewardedAt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6554,
                                "src": "6636:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 7087,
                              "indexExpression": {
                                "id": 7086,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7056,
                                "src": "6647:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6636:16:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 7088,
                                "name": "_jobLiquidityCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5407,
                                "src": "6654:20:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 7090,
                              "indexExpression": {
                                "id": 7089,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7056,
                                "src": "6675:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6654:26:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7083,
                            "name": "LiquidityCreditsForced",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13153,
                            "src": "6607:22:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 7091,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6607:74:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7092,
                        "nodeType": "EmitStatement",
                        "src": "6602:79:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7054,
                    "nodeType": "StructuredDocumentation",
                    "src": "6318:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "fe75bc46",
                  "id": 7094,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 7062,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 7061,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "6449:14:35"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "6449:14:35"
                    }
                  ],
                  "name": "forceLiquidityCreditsToJob",
                  "nameLocation": "6373:26:35",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7060,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "6440:8:35"
                  },
                  "parameters": {
                    "id": 7059,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7056,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "6408:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7094,
                        "src": "6400:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7055,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6400:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7058,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "6422:7:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7094,
                        "src": "6414:15:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7057,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6414:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6399:31:35"
                  },
                  "returnParameters": {
                    "id": 7063,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6464:0:35"
                  },
                  "scope": 7939,
                  "src": "6364:322:35",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13268
                  ],
                  "body": {
                    "id": 7147,
                    "nodeType": "Block",
                    "src": "6823:346:35",
                    "statements": [
                      {
                        "condition": {
                          "id": 7107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "6833:37:35",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 7105,
                                "name": "_liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7097,
                                "src": "6859:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 7103,
                                "name": "_approvedLiquidities",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6540,
                                "src": "6834:20:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 7104,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1658,
                              "src": "6834:24:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                              }
                            },
                            "id": 7106,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6834:36:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7111,
                        "nodeType": "IfStatement",
                        "src": "6829:73:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7108,
                              "name": "LiquidityPairApproved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13156,
                              "src": "6879:21:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7109,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6879:23:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7110,
                          "nodeType": "RevertStatement",
                          "src": "6872:30:35"
                        }
                      },
                      {
                        "expression": {
                          "id": 7120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 7112,
                              "name": "_liquidityPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5429,
                              "src": "6908:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 7114,
                            "indexExpression": {
                              "id": 7113,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7097,
                              "src": "6923:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6908:26:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 7116,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7097,
                                    "src": "6950:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 7115,
                                  "name": "IPairManager",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11703,
                                  "src": "6937:12:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IPairManager_$11703_$",
                                    "typeString": "type(contract IPairManager)"
                                  }
                                },
                                "id": 7117,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6937:24:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IPairManager_$11703",
                                  "typeString": "contract IPairManager"
                                }
                              },
                              "id": 7118,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "pool",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11690,
                              "src": "6937:29:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 7119,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6937:31:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "6908:60:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 7121,
                        "nodeType": "ExpressionStatement",
                        "src": "6908:60:35"
                      },
                      {
                        "expression": {
                          "id": 7133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 7122,
                              "name": "_isKP3RToken0",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5434,
                              "src": "6974:13:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 7124,
                            "indexExpression": {
                              "id": 7123,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7097,
                              "src": "6988:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6974:25:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "id": 7129,
                                  "name": "_liquidityPool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5429,
                                  "src": "7043:14:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                    "typeString": "mapping(address => address)"
                                  }
                                },
                                "id": 7131,
                                "indexExpression": {
                                  "id": 7130,
                                  "name": "_liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7097,
                                  "src": "7058:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7043:26:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 7126,
                                    "name": "keep3rHelper",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5602,
                                    "src": "7016:12:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 7125,
                                  "name": "IKeep3rHelper",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11525,
                                  "src": "7002:13:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IKeep3rHelper_$11525_$",
                                    "typeString": "type(contract IKeep3rHelper)"
                                  }
                                },
                                "id": 7127,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7002:27:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IKeep3rHelper_$11525",
                                  "typeString": "contract IKeep3rHelper"
                                }
                              },
                              "id": 7128,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "isKP3RToken0",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11473,
                              "src": "7002:40:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address) view external returns (bool)"
                              }
                            },
                            "id": 7132,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7002:68:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "6974:96:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7134,
                        "nodeType": "ExpressionStatement",
                        "src": "6974:96:35"
                      },
                      {
                        "expression": {
                          "id": 7141,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 7135,
                              "name": "_tick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6566,
                              "src": "7076:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                              }
                            },
                            "id": 7137,
                            "indexExpression": {
                              "id": 7136,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7097,
                              "src": "7082:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "7076:17:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                              "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7139,
                                "name": "_liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7097,
                                "src": "7113:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7138,
                              "name": "observeLiquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7053,
                              "src": "7096:16:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_TickCache_$13178_memory_ptr_$",
                                "typeString": "function (address) view returns (struct IKeep3rJobFundableLiquidity.TickCache memory)"
                              }
                            },
                            "id": 7140,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7096:28:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                              "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                            }
                          },
                          "src": "7076:48:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                          }
                        },
                        "id": 7142,
                        "nodeType": "ExpressionStatement",
                        "src": "7076:48:35"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 7144,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7097,
                              "src": "7153:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 7143,
                            "name": "LiquidityApproval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13106,
                            "src": "7135:17:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 7145,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7135:29:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7146,
                        "nodeType": "EmitStatement",
                        "src": "7130:34:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7095,
                    "nodeType": "StructuredDocumentation",
                    "src": "6690:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "b600702a",
                  "id": 7148,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 7101,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 7100,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "6808:14:35"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "6808:14:35"
                    }
                  ],
                  "name": "approveLiquidity",
                  "nameLocation": "6745:16:35",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7099,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "6799:8:35"
                  },
                  "parameters": {
                    "id": 7098,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7097,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "6770:10:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7148,
                        "src": "6762:18:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7096,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6762:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6761:20:35"
                  },
                  "returnParameters": {
                    "id": 7102,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6823:0:35"
                  },
                  "scope": 7939,
                  "src": "6736:433:35",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13274
                  ],
                  "body": {
                    "id": 7170,
                    "nodeType": "Block",
                    "src": "7297:131:35",
                    "statements": [
                      {
                        "condition": {
                          "id": 7161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "7307:40:35",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 7159,
                                "name": "_liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7151,
                                "src": "7336:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 7157,
                                "name": "_approvedLiquidities",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6540,
                                "src": "7308:20:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 7158,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "remove",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1685,
                              "src": "7308:27:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                              }
                            },
                            "id": 7160,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7308:39:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7165,
                        "nodeType": "IfStatement",
                        "src": "7303:78:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7162,
                              "name": "LiquidityPairUnexistent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13159,
                              "src": "7356:23:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7163,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7356:25:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7164,
                          "nodeType": "RevertStatement",
                          "src": "7349:32:35"
                        }
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 7167,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7151,
                              "src": "7412:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 7166,
                            "name": "LiquidityRevocation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13111,
                            "src": "7392:19:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 7168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7392:31:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7169,
                        "nodeType": "EmitStatement",
                        "src": "7387:36:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7149,
                    "nodeType": "StructuredDocumentation",
                    "src": "7173:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "64bb43ee",
                  "id": 7171,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 7155,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 7154,
                        "name": "onlyGovernance",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5340,
                        "src": "7282:14:35"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "7282:14:35"
                    }
                  ],
                  "name": "revokeLiquidity",
                  "nameLocation": "7228:15:35",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7153,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "7273:8:35"
                  },
                  "parameters": {
                    "id": 7152,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7151,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "7252:10:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7171,
                        "src": "7244:18:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7150,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7244:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7243:20:35"
                  },
                  "returnParameters": {
                    "id": 7156,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7297:0:35"
                  },
                  "scope": 7939,
                  "src": "7219:209:35",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13284
                  ],
                  "body": {
                    "id": 7282,
                    "nodeType": "Block",
                    "src": "7603:748:35",
                    "statements": [
                      {
                        "condition": {
                          "id": 7188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "7613:42:35",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 7186,
                                "name": "_liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7176,
                                "src": "7644:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 7184,
                                "name": "_approvedLiquidities",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6540,
                                "src": "7614:20:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 7185,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1712,
                              "src": "7614:29:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 7187,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7614:41:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7192,
                        "nodeType": "IfStatement",
                        "src": "7609:80:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7189,
                              "name": "LiquidityPairUnapproved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13162,
                              "src": "7664:23:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7190,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7664:25:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7191,
                          "nodeType": "RevertStatement",
                          "src": "7657:32:35"
                        }
                      },
                      {
                        "condition": {
                          "id": 7197,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "7699:21:35",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 7195,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7174,
                                "src": "7715:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 7193,
                                "name": "_jobs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5476,
                                "src": "7700:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 7194,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1712,
                              "src": "7700:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 7196,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7700:20:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7201,
                        "nodeType": "IfStatement",
                        "src": "7695:50:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7198,
                              "name": "JobUnavailable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12993,
                              "src": "7729:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7199,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7729:16:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7200,
                          "nodeType": "RevertStatement",
                          "src": "7722:23:35"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7206,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7176,
                              "src": "7778:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "baseExpression": {
                                "id": 7202,
                                "name": "_jobLiquidities",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5424,
                                "src": "7752:15:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                  "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                }
                              },
                              "id": 7204,
                              "indexExpression": {
                                "id": 7203,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7174,
                                "src": "7768:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7752:21:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 7205,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "7752:25:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 7207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7752:37:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7208,
                        "nodeType": "ExpressionStatement",
                        "src": "7752:37:35"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7210,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7174,
                              "src": "7818:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 7209,
                            "name": "_settleJobAccountance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7938,
                            "src": "7796:21:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 7211,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7796:27:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7212,
                        "nodeType": "ExpressionStatement",
                        "src": "7796:27:35"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7224,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7220,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 7214,
                                      "name": "liquidityAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6548,
                                      "src": "7850:15:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 7216,
                                    "indexExpression": {
                                      "id": 7215,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7174,
                                      "src": "7866:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7850:21:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 7218,
                                  "indexExpression": {
                                    "id": 7217,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7176,
                                    "src": "7872:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "7850:33:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 7219,
                                  "name": "_amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7178,
                                  "src": "7886:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "7850:43:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 7221,
                                "name": "_liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7176,
                                "src": "7895:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7213,
                              "name": "_quoteLiquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7909,
                              "src": "7834:15:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (uint256,address) view returns (uint256)"
                              }
                            },
                            "id": 7222,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7834:72:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 7223,
                            "name": "liquidityMinimum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5621,
                            "src": "7909:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7834:91:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7228,
                        "nodeType": "IfStatement",
                        "src": "7830:129:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7225,
                              "name": "JobLiquidityLessThanMin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13171,
                              "src": "7934:23:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7226,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7934:25:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7227,
                          "nodeType": "RevertStatement",
                          "src": "7927:32:35"
                        }
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 7230,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7174,
                              "src": "7994:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 7231,
                                "name": "rewardedAt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6554,
                                "src": "8000:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 7233,
                              "indexExpression": {
                                "id": 7232,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7174,
                                "src": "8011:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8000:16:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 7234,
                                "name": "_jobLiquidityCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5407,
                                "src": "8018:20:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 7236,
                              "indexExpression": {
                                "id": 7235,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7174,
                                "src": "8039:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8018:26:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 7237,
                                "name": "_jobPeriodCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5412,
                                "src": "8046:17:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 7239,
                              "indexExpression": {
                                "id": 7238,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7174,
                                "src": "8064:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8046:23:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7229,
                            "name": "LiquidityCreditsReward",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13144,
                            "src": "7971:22:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256,uint256)"
                            }
                          },
                          "id": 7240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7971:99:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7241,
                        "nodeType": "EmitStatement",
                        "src": "7966:104:35"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 7246,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "8113:3:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7247,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "8113:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 7250,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "8133:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Keep3rJobFundableLiquidity_$7939",
                                    "typeString": "contract Keep3rJobFundableLiquidity"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Keep3rJobFundableLiquidity_$7939",
                                    "typeString": "contract Keep3rJobFundableLiquidity"
                                  }
                                ],
                                "id": 7249,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8125:7:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 7248,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8125:7:35",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 7251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8125:13:35",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7252,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7178,
                              "src": "8140:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7243,
                                  "name": "_liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7176,
                                  "src": "8084:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7242,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "8077:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 7244,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8077:18:35",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 7245,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 745,
                            "src": "8077:35:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$663_$",
                              "typeString": "function (contract IERC20,address,address,uint256)"
                            }
                          },
                          "id": 7253,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8077:71:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7254,
                        "nodeType": "ExpressionStatement",
                        "src": "8077:71:35"
                      },
                      {
                        "expression": {
                          "id": 7261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 7255,
                                "name": "liquidityAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6548,
                                "src": "8154:15:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7258,
                              "indexExpression": {
                                "id": 7256,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7174,
                                "src": "8170:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8154:21:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7259,
                            "indexExpression": {
                              "id": 7257,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7176,
                              "src": "8176:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "8154:33:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 7260,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7178,
                            "src": "8191:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8154:44:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7262,
                        "nodeType": "ExpressionStatement",
                        "src": "8154:44:35"
                      },
                      {
                        "expression": {
                          "id": 7272,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 7263,
                              "name": "_jobPeriodCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5412,
                              "src": "8204:17:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7265,
                            "indexExpression": {
                              "id": 7264,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7174,
                              "src": "8222:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "8204:23:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 7268,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7178,
                                    "src": "8258:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 7269,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7176,
                                    "src": "8267:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 7267,
                                  "name": "_quoteLiquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7909,
                                  "src": "8242:15:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,address) view returns (uint256)"
                                  }
                                },
                                "id": 7270,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8242:36:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7266,
                              "name": "_getReward",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7863,
                              "src": "8231:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 7271,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8231:48:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8204:75:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7273,
                        "nodeType": "ExpressionStatement",
                        "src": "8204:75:35"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 7275,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7174,
                              "src": "8308:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7276,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7176,
                              "src": "8314:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 7277,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "8326:3:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7278,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "8326:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7279,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7178,
                              "src": "8338:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7274,
                            "name": "LiquidityAddition",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13122,
                            "src": "8290:17:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 7280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8290:56:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7281,
                        "nodeType": "EmitStatement",
                        "src": "8285:61:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7172,
                    "nodeType": "StructuredDocumentation",
                    "src": "7432:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "52a4de29",
                  "id": 7283,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 7182,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 7181,
                        "name": "nonReentrant",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 38,
                        "src": "7590:12:35"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "7590:12:35"
                    }
                  ],
                  "name": "addLiquidityToJob",
                  "nameLocation": "7487:17:35",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7180,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "7581:8:35"
                  },
                  "parameters": {
                    "id": 7179,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7174,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "7518:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7283,
                        "src": "7510:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7173,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7510:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7176,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "7536:10:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7283,
                        "src": "7528:18:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7175,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7528:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7178,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "7560:7:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7283,
                        "src": "7552:15:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7177,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7552:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7504:67:35"
                  },
                  "returnParameters": {
                    "id": 7183,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7603:0:35"
                  },
                  "scope": 7939,
                  "src": "7478:873:35",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13294
                  ],
                  "body": {
                    "id": 7350,
                    "nodeType": "Block",
                    "src": "8537:437:35",
                    "statements": [
                      {
                        "expression": {
                          "id": 7306,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 7297,
                                "name": "canWithdrawAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5458,
                                "src": "8543:16:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7300,
                              "indexExpression": {
                                "id": 7298,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7286,
                                "src": "8560:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8543:22:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7301,
                            "indexExpression": {
                              "id": 7299,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7288,
                              "src": "8566:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "8543:34:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7305,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 7302,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "8580:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 7303,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "8580:15:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 7304,
                              "name": "unbondTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5616,
                              "src": "8598:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "8580:28:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8543:65:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7307,
                        "nodeType": "ExpressionStatement",
                        "src": "8543:65:35"
                      },
                      {
                        "expression": {
                          "id": 7314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 7308,
                                "name": "pendingUnbonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5466,
                                "src": "8614:14:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7311,
                              "indexExpression": {
                                "id": 7309,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7286,
                                "src": "8629:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8614:20:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7312,
                            "indexExpression": {
                              "id": 7310,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7288,
                              "src": "8635:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "8614:32:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 7313,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7290,
                            "src": "8650:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8614:43:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7315,
                        "nodeType": "ExpressionStatement",
                        "src": "8614:43:35"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7317,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7286,
                              "src": "8687:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7318,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7288,
                              "src": "8693:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7319,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7290,
                              "src": "8705:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7316,
                            "name": "_unbondLiquidityFromJob",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7802,
                            "src": "8663:23:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 7320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8663:50:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7321,
                        "nodeType": "ExpressionStatement",
                        "src": "8663:50:35"
                      },
                      {
                        "assignments": [
                          7323
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7323,
                            "mutability": "mutable",
                            "name": "_remainingLiquidity",
                            "nameLocation": "8728:19:35",
                            "nodeType": "VariableDeclaration",
                            "scope": 7350,
                            "src": "8720:27:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7322,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8720:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7329,
                        "initialValue": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 7324,
                              "name": "liquidityAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6548,
                              "src": "8750:15:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 7326,
                            "indexExpression": {
                              "id": 7325,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7286,
                              "src": "8766:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8750:21:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 7328,
                          "indexExpression": {
                            "id": 7327,
                            "name": "_liquidity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7288,
                            "src": "8772:10:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8750:33:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8720:63:35"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 7339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 7330,
                              "name": "_remainingLiquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7323,
                              "src": "8793:19:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 7331,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8815:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "8793:23:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7338,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 7334,
                                  "name": "_remainingLiquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7323,
                                  "src": "8836:19:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 7335,
                                  "name": "_liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7288,
                                  "src": "8857:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7333,
                                "name": "_quoteLiquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7909,
                                "src": "8820:15:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,address) view returns (uint256)"
                                }
                              },
                              "id": 7336,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8820:48:35",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 7337,
                              "name": "liquidityMinimum",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5621,
                              "src": "8871:16:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "8820:67:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "8793:94:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7343,
                        "nodeType": "IfStatement",
                        "src": "8789:132:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7340,
                              "name": "JobLiquidityLessThanMin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13171,
                              "src": "8896:23:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7341,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8896:25:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7342,
                          "nodeType": "RevertStatement",
                          "src": "8889:32:35"
                        }
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 7345,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7286,
                              "src": "8943:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7346,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7288,
                              "src": "8949:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7347,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7290,
                              "src": "8961:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7344,
                            "name": "Unbonding",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12884,
                            "src": "8933:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 7348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8933:36:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7349,
                        "nodeType": "EmitStatement",
                        "src": "8928:41:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7284,
                    "nodeType": "StructuredDocumentation",
                    "src": "8355:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "1101eb41",
                  "id": 7351,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 7294,
                          "name": "_job",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7286,
                          "src": "8531:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 7295,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 7293,
                        "name": "onlyJobOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 8389,
                        "src": "8518:12:35"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "8518:18:35"
                    }
                  ],
                  "name": "unbondLiquidityFromJob",
                  "nameLocation": "8410:22:35",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7292,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8509:8:35"
                  },
                  "parameters": {
                    "id": 7291,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7286,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "8446:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7351,
                        "src": "8438:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7285,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8438:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7288,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "8464:10:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7351,
                        "src": "8456:18:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7287,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8456:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7290,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "8488:7:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7351,
                        "src": "8480:15:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7289,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8480:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8432:67:35"
                  },
                  "returnParameters": {
                    "id": 7296,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8537:0:35"
                  },
                  "scope": 7939,
                  "src": "8401:573:35",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13304
                  ],
                  "body": {
                    "id": 7442,
                    "nodeType": "Block",
                    "src": "9164:541:35",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 7370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7365,
                            "name": "_receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7358,
                            "src": "9174:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 7368,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9195:1:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 7367,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9187:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 7366,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "9187:7:35",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 7369,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9187:10:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9174:23:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7374,
                        "nodeType": "IfStatement",
                        "src": "9170:49:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7371,
                              "name": "ZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12792,
                              "src": "9206:11:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7372,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9206:13:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7373,
                          "nodeType": "RevertStatement",
                          "src": "9199:20:35"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 7375,
                                "name": "pendingUnbonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5466,
                                "src": "9229:14:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7377,
                              "indexExpression": {
                                "id": 7376,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7354,
                                "src": "9244:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9229:20:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7379,
                            "indexExpression": {
                              "id": 7378,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7356,
                              "src": "9250:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9229:32:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 7380,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9265:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9229:37:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7385,
                        "nodeType": "IfStatement",
                        "src": "9225:69:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7382,
                              "name": "UnbondsUnexistent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13794,
                              "src": "9275:17:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7383,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9275:19:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7384,
                          "nodeType": "RevertStatement",
                          "src": "9268:26:35"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7393,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 7386,
                                "name": "canWithdrawAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5458,
                                "src": "9304:16:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7388,
                              "indexExpression": {
                                "id": 7387,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7354,
                                "src": "9321:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9304:22:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7390,
                            "indexExpression": {
                              "id": 7389,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7356,
                              "src": "9327:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9304:34:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "expression": {
                              "id": 7391,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "9342:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 7392,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "9342:15:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9304:53:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7397,
                        "nodeType": "IfStatement",
                        "src": "9300:81:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7394,
                              "name": "UnbondsLocked",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13797,
                              "src": "9366:13:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7395,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9366:15:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7396,
                          "nodeType": "RevertStatement",
                          "src": "9359:22:35"
                        }
                      },
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 7398,
                            "name": "disputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5386,
                            "src": "9391:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 7400,
                          "indexExpression": {
                            "id": 7399,
                            "name": "_job",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7354,
                            "src": "9400:4:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9391:14:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7404,
                        "nodeType": "IfStatement",
                        "src": "9387:37:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7401,
                              "name": "Disputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13785,
                              "src": "9414:8:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7402,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9414:10:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7403,
                          "nodeType": "RevertStatement",
                          "src": "9407:17:35"
                        }
                      },
                      {
                        "assignments": [
                          7406
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7406,
                            "mutability": "mutable",
                            "name": "_amount",
                            "nameLocation": "9439:7:35",
                            "nodeType": "VariableDeclaration",
                            "scope": 7442,
                            "src": "9431:15:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7405,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9431:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7412,
                        "initialValue": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 7407,
                              "name": "pendingUnbonds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5466,
                              "src": "9449:14:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 7409,
                            "indexExpression": {
                              "id": 7408,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7354,
                              "src": "9464:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9449:20:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 7411,
                          "indexExpression": {
                            "id": 7410,
                            "name": "_liquidity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7356,
                            "src": "9470:10:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9449:32:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9431:50:35"
                      },
                      {
                        "expression": {
                          "id": 7418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "9488:39:35",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 7413,
                                "name": "pendingUnbonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5466,
                                "src": "9495:14:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7415,
                              "indexExpression": {
                                "id": 7414,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7354,
                                "src": "9510:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9495:20:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7417,
                            "indexExpression": {
                              "id": 7416,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7356,
                              "src": "9516:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9495:32:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7419,
                        "nodeType": "ExpressionStatement",
                        "src": "9488:39:35"
                      },
                      {
                        "expression": {
                          "id": 7425,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "9533:41:35",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 7420,
                                "name": "canWithdrawAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5458,
                                "src": "9540:16:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7422,
                              "indexExpression": {
                                "id": 7421,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7354,
                                "src": "9557:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9540:22:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7424,
                            "indexExpression": {
                              "id": 7423,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7356,
                              "src": "9563:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9540:34:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7426,
                        "nodeType": "ExpressionStatement",
                        "src": "9533:41:35"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7431,
                              "name": "_receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7358,
                              "src": "9613:9:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7432,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7406,
                              "src": "9624:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7428,
                                  "name": "_liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7356,
                                  "src": "9588:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7427,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "9581:6:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 7429,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9581:18:35",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 7430,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 719,
                            "src": "9581:31:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$663_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 7433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9581:51:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7434,
                        "nodeType": "ExpressionStatement",
                        "src": "9581:51:35"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 7436,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7354,
                              "src": "9663:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7437,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7356,
                              "src": "9669:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7438,
                              "name": "_receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7358,
                              "src": "9681:9:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7439,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7406,
                              "src": "9692:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7435,
                            "name": "LiquidityWithdrawal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13133,
                            "src": "9643:19:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 7440,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9643:57:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7441,
                        "nodeType": "EmitStatement",
                        "src": "9638:62:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7352,
                    "nodeType": "StructuredDocumentation",
                    "src": "8978:43:35",
                    "text": "@inheritdoc IKeep3rJobFundableLiquidity"
                  },
                  "functionSelector": "a2145809",
                  "id": 7443,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 7362,
                          "name": "_job",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7354,
                          "src": "9158:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 7363,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 7361,
                        "name": "onlyJobOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 8389,
                        "src": "9145:12:35"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "9145:18:35"
                    }
                  ],
                  "name": "withdrawLiquidityFromJob",
                  "nameLocation": "9033:24:35",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7360,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "9136:8:35"
                  },
                  "parameters": {
                    "id": 7359,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7354,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "9071:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7443,
                        "src": "9063:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7353,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9063:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7356,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "9089:10:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7443,
                        "src": "9081:18:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7355,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9081:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7358,
                        "mutability": "mutable",
                        "name": "_receiver",
                        "nameLocation": "9113:9:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7443,
                        "src": "9105:17:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7357,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9105:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9057:69:35"
                  },
                  "returnParameters": {
                    "id": 7364,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9164:0:35"
                  },
                  "scope": 7939,
                  "src": "9024:681:35",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 7566,
                    "nodeType": "Block",
                    "src": "9912:1220:35",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7458,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 7451,
                              "name": "rewardedAt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6554,
                              "src": "9922:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7453,
                            "indexExpression": {
                              "id": 7452,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7446,
                              "src": "9933:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9922:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 7455,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "9949:5:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 7456,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "9949:15:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7454,
                              "name": "_period",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7847,
                              "src": "9941:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 7457,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9941:24:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9922:43:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7565,
                        "nodeType": "IfStatement",
                        "src": "9918:1210:35",
                        "trueBody": {
                          "id": 7564,
                          "nodeType": "Block",
                          "src": "9967:1161:35",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7468,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "baseExpression": {
                                    "id": 7459,
                                    "name": "rewardedAt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6554,
                                    "src": "10050:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 7461,
                                  "indexExpression": {
                                    "id": 7460,
                                    "name": "_job",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7446,
                                    "src": "10061:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10050:16:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7466,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 7463,
                                          "name": "block",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -4,
                                          "src": "10078:5:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_block",
                                            "typeString": "block"
                                          }
                                        },
                                        "id": 7464,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "timestamp",
                                        "nodeType": "MemberAccess",
                                        "src": "10078:15:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "id": 7465,
                                        "name": "rewardPeriodTime",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5626,
                                        "src": "10096:16:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "10078:34:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 7462,
                                    "name": "_period",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7847,
                                    "src": "10070:7:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256) view returns (uint256)"
                                    }
                                  },
                                  "id": 7467,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "10070:43:35",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10050:63:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7503,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7500,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "expression": {
                                            "id": 7495,
                                            "name": "block",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -4,
                                            "src": "10397:5:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_block",
                                              "typeString": "block"
                                            }
                                          },
                                          "id": 7496,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "timestamp",
                                          "nodeType": "MemberAccess",
                                          "src": "10397:15:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "baseExpression": {
                                            "id": 7497,
                                            "name": "rewardedAt",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6554,
                                            "src": "10415:10:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                              "typeString": "mapping(address => uint256)"
                                            }
                                          },
                                          "id": 7499,
                                          "indexExpression": {
                                            "id": 7498,
                                            "name": "_job",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7446,
                                            "src": "10426:4:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "10415:16:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "10397:34:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 7501,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "10396:36:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">=",
                                  "rightExpression": {
                                    "id": 7502,
                                    "name": "rewardPeriodTime",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5626,
                                    "src": "10436:16:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10396:56:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseBody": {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7534,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "baseExpression": {
                                        "id": 7527,
                                        "name": "workedAt",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6560,
                                        "src": "10719:8:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 7529,
                                      "indexExpression": {
                                        "id": 7528,
                                        "name": "_job",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7446,
                                        "src": "10728:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "10719:14:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "expression": {
                                            "id": 7531,
                                            "name": "block",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -4,
                                            "src": "10744:5:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_block",
                                              "typeString": "block"
                                            }
                                          },
                                          "id": 7532,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "timestamp",
                                          "nodeType": "MemberAccess",
                                          "src": "10744:15:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 7530,
                                        "name": "_period",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7847,
                                        "src": "10736:7:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256) view returns (uint256)"
                                        }
                                      },
                                      "id": 7533,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "10736:24:35",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "10719:41:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 7561,
                                  "nodeType": "IfStatement",
                                  "src": "10715:407:35",
                                  "trueBody": {
                                    "id": 7560,
                                    "nodeType": "Block",
                                    "src": "10762:360:35",
                                    "statements": [
                                      {
                                        "assignments": [
                                          7536
                                        ],
                                        "declarations": [
                                          {
                                            "constant": false,
                                            "id": 7536,
                                            "mutability": "mutable",
                                            "name": "previousPeriodCredits",
                                            "nameLocation": "10861:21:35",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 7560,
                                            "src": "10853:29:35",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "typeName": {
                                              "id": 7535,
                                              "name": "uint256",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "10853:7:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "visibility": "internal"
                                          }
                                        ],
                                        "id": 7540,
                                        "initialValue": {
                                          "baseExpression": {
                                            "id": 7537,
                                            "name": "_jobPeriodCredits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5412,
                                            "src": "10885:17:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                              "typeString": "mapping(address => uint256)"
                                            }
                                          },
                                          "id": 7539,
                                          "indexExpression": {
                                            "id": 7538,
                                            "name": "_job",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7446,
                                            "src": "10903:4:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "10885:23:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "10853:55:35"
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "id": 7542,
                                              "name": "_job",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7446,
                                              "src": "10935:4:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            ],
                                            "id": 7541,
                                            "name": "_updateJobPeriod",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7612,
                                            "src": "10918:16:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                                              "typeString": "function (address)"
                                            }
                                          },
                                          "id": 7543,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "10918:22:35",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                          }
                                        },
                                        "id": 7544,
                                        "nodeType": "ExpressionStatement",
                                        "src": "10918:22:35"
                                      },
                                      {
                                        "expression": {
                                          "id": 7558,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "baseExpression": {
                                              "id": 7545,
                                              "name": "_jobLiquidityCredits",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5407,
                                              "src": "10950:20:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                              }
                                            },
                                            "id": 7547,
                                            "indexExpression": {
                                              "id": 7546,
                                              "name": "_job",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7446,
                                              "src": "10971:4:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "10950:26:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 7557,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "components": [
                                                {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 7554,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "baseExpression": {
                                                      "id": 7548,
                                                      "name": "_jobLiquidityCredits",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 5407,
                                                      "src": "10980:20:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                      }
                                                    },
                                                    "id": 7550,
                                                    "indexExpression": {
                                                      "id": 7549,
                                                      "name": "_job",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 7446,
                                                      "src": "11001:4:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                      }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "10980:26:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "baseExpression": {
                                                      "id": 7551,
                                                      "name": "_jobPeriodCredits",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 5412,
                                                      "src": "11009:17:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                        "typeString": "mapping(address => uint256)"
                                                      }
                                                    },
                                                    "id": 7553,
                                                    "indexExpression": {
                                                      "id": 7552,
                                                      "name": "_job",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 7446,
                                                      "src": "11027:4:35",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                      }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "11009:23:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "10980:52:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 7555,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "10979:54:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "/",
                                            "rightExpression": {
                                              "id": 7556,
                                              "name": "previousPeriodCredits",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7536,
                                              "src": "11036:21:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "10979:78:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "10950:107:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 7559,
                                        "nodeType": "ExpressionStatement",
                                        "src": "10950:107:35"
                                      }
                                    ]
                                  }
                                },
                                "id": 7562,
                                "nodeType": "IfStatement",
                                "src": "10392:730:35",
                                "trueBody": {
                                  "id": 7526,
                                  "nodeType": "Block",
                                  "src": "10454:255:35",
                                  "statements": [
                                    {
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 7505,
                                            "name": "_job",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7446,
                                            "src": "10561:4:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 7504,
                                          "name": "_updateJobPeriod",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7612,
                                          "src": "10544:16:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                                            "typeString": "function (address)"
                                          }
                                        },
                                        "id": 7506,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10544:22:35",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$__$",
                                          "typeString": "tuple()"
                                        }
                                      },
                                      "id": 7507,
                                      "nodeType": "ExpressionStatement",
                                      "src": "10544:22:35"
                                    },
                                    {
                                      "expression": {
                                        "id": 7514,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "baseExpression": {
                                            "id": 7508,
                                            "name": "_jobLiquidityCredits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5407,
                                            "src": "10576:20:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                              "typeString": "mapping(address => uint256)"
                                            }
                                          },
                                          "id": 7510,
                                          "indexExpression": {
                                            "id": 7509,
                                            "name": "_job",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7446,
                                            "src": "10597:4:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "IndexAccess",
                                          "src": "10576:26:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "baseExpression": {
                                            "id": 7511,
                                            "name": "_jobPeriodCredits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5412,
                                            "src": "10605:17:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                              "typeString": "mapping(address => uint256)"
                                            }
                                          },
                                          "id": 7513,
                                          "indexExpression": {
                                            "id": 7512,
                                            "name": "_job",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7446,
                                            "src": "10623:4:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "10605:23:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "10576:52:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 7515,
                                      "nodeType": "ExpressionStatement",
                                      "src": "10576:52:35"
                                    },
                                    {
                                      "expression": {
                                        "id": 7520,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "baseExpression": {
                                            "id": 7516,
                                            "name": "rewardedAt",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6554,
                                            "src": "10638:10:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                              "typeString": "mapping(address => uint256)"
                                            }
                                          },
                                          "id": 7518,
                                          "indexExpression": {
                                            "id": 7517,
                                            "name": "_job",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7446,
                                            "src": "10649:4:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "IndexAccess",
                                          "src": "10638:16:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "id": 7519,
                                          "name": "rewardPeriodTime",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5626,
                                          "src": "10658:16:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "10638:36:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 7521,
                                      "nodeType": "ExpressionStatement",
                                      "src": "10638:36:35"
                                    },
                                    {
                                      "expression": {
                                        "id": 7524,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "id": 7522,
                                          "name": "_rewarded",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7449,
                                          "src": "10684:9:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "hexValue": "74727565",
                                          "id": 7523,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "bool",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "10696:4:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          },
                                          "value": "true"
                                        },
                                        "src": "10684:16:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "id": 7525,
                                      "nodeType": "ExpressionStatement",
                                      "src": "10684:16:35"
                                    }
                                  ]
                                }
                              },
                              "id": 7563,
                              "nodeType": "IfStatement",
                              "src": "10046:1076:35",
                              "trueBody": {
                                "id": 7494,
                                "nodeType": "Block",
                                "src": "10115:271:35",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 7470,
                                          "name": "_job",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7446,
                                          "src": "10231:4:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 7469,
                                        "name": "_updateJobPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7612,
                                        "src": "10214:16:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                                          "typeString": "function (address)"
                                        }
                                      },
                                      "id": 7471,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "10214:22:35",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 7472,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10214:22:35"
                                  },
                                  {
                                    "expression": {
                                      "id": 7479,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 7473,
                                          "name": "_jobLiquidityCredits",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5407,
                                          "src": "10246:20:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                            "typeString": "mapping(address => uint256)"
                                          }
                                        },
                                        "id": 7475,
                                        "indexExpression": {
                                          "id": 7474,
                                          "name": "_job",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7446,
                                          "src": "10267:4:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "10246:26:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "baseExpression": {
                                          "id": 7476,
                                          "name": "_jobPeriodCredits",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5412,
                                          "src": "10275:17:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                            "typeString": "mapping(address => uint256)"
                                          }
                                        },
                                        "id": 7478,
                                        "indexExpression": {
                                          "id": 7477,
                                          "name": "_job",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7446,
                                          "src": "10293:4:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "10275:23:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "10246:52:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7480,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10246:52:35"
                                  },
                                  {
                                    "expression": {
                                      "id": 7488,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 7481,
                                          "name": "rewardedAt",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6554,
                                          "src": "10308:10:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                            "typeString": "mapping(address => uint256)"
                                          }
                                        },
                                        "id": 7483,
                                        "indexExpression": {
                                          "id": 7482,
                                          "name": "_job",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7446,
                                          "src": "10319:4:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "10308:16:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "expression": {
                                              "id": 7485,
                                              "name": "block",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -4,
                                              "src": "10335:5:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_block",
                                                "typeString": "block"
                                              }
                                            },
                                            "id": 7486,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "src": "10335:15:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 7484,
                                          "name": "_period",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7847,
                                          "src": "10327:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (uint256) view returns (uint256)"
                                          }
                                        },
                                        "id": 7487,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10327:24:35",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "10308:43:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7489,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10308:43:35"
                                  },
                                  {
                                    "expression": {
                                      "id": 7492,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 7490,
                                        "name": "_rewarded",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7449,
                                        "src": "10361:9:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "hexValue": "74727565",
                                        "id": 7491,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10373:4:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "true"
                                      },
                                      "src": "10361:16:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 7493,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10361:16:35"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7444,
                    "nodeType": "StructuredDocumentation",
                    "src": "9734:92:35",
                    "text": "@notice Updates or rewards job liquidity credits depending on time since last job reward"
                  },
                  "id": 7567,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateJobCreditsIfNeeded",
                  "nameLocation": "9838:25:35",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7447,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7446,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "9872:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7567,
                        "src": "9864:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7445,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9864:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9863:14:35"
                  },
                  "returnParameters": {
                    "id": 7450,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7449,
                        "mutability": "mutable",
                        "name": "_rewarded",
                        "nameLocation": "9901:9:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7567,
                        "src": "9896:14:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7448,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "9896:4:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9895:16:35"
                  },
                  "scope": 7939,
                  "src": "9829:1303:35",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7596,
                    "nodeType": "Block",
                    "src": "11246:350:35",
                    "statements": [
                      {
                        "documentation": "@notice Only way to += jobLiquidityCredits is when keeper rewarding (cannot pay work)",
                        "expression": {
                          "id": 7587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 7573,
                              "name": "_jobLiquidityCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "11454:20:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7575,
                            "indexExpression": {
                              "id": 7574,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7570,
                              "src": "11475:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11454:26:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7582,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 7577,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "11491:5:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 7578,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "11491:15:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "baseExpression": {
                                    "id": 7579,
                                    "name": "rewardedAt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6554,
                                    "src": "11509:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 7581,
                                  "indexExpression": {
                                    "id": 7580,
                                    "name": "_job",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7570,
                                    "src": "11520:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "11509:16:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "11491:34:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "baseExpression": {
                                  "id": 7583,
                                  "name": "_jobPeriodCredits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5412,
                                  "src": "11527:17:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 7585,
                                "indexExpression": {
                                  "id": 7584,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7570,
                                  "src": "11545:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "11527:23:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7576,
                              "name": "_phase",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7831,
                              "src": "11484:6:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) view returns (uint256)"
                              }
                            },
                            "id": 7586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11484:67:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11454:97:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7588,
                        "nodeType": "ExpressionStatement",
                        "src": "11454:97:35"
                      },
                      {
                        "expression": {
                          "id": 7594,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 7589,
                              "name": "rewardedAt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6554,
                              "src": "11557:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7591,
                            "indexExpression": {
                              "id": 7590,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7570,
                              "src": "11568:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11557:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 7592,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "11576:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 7593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "11576:15:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11557:34:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7595,
                        "nodeType": "ExpressionStatement",
                        "src": "11557:34:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7568,
                    "nodeType": "StructuredDocumentation",
                    "src": "11136:57:35",
                    "text": "@notice Only called if _jobLiquidityCredits < payment"
                  },
                  "id": 7597,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_rewardJobCredits",
                  "nameLocation": "11205:17:35",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7571,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7570,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "11231:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7597,
                        "src": "11223:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7569,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11223:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11222:14:35"
                  },
                  "returnParameters": {
                    "id": 7572,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11246:0:35"
                  },
                  "scope": 7939,
                  "src": "11196:400:35",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7611,
                    "nodeType": "Block",
                    "src": "11705:69:35",
                    "statements": [
                      {
                        "expression": {
                          "id": 7609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 7603,
                              "name": "_jobPeriodCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5412,
                              "src": "11711:17:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7605,
                            "indexExpression": {
                              "id": 7604,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7600,
                              "src": "11729:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11711:23:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 7607,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7600,
                                "src": "11764:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7606,
                              "name": "_calculateJobPeriodCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7702,
                              "src": "11737:26:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) returns (uint256)"
                              }
                            },
                            "id": 7608,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11737:32:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11711:58:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7610,
                        "nodeType": "ExpressionStatement",
                        "src": "11711:58:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7598,
                    "nodeType": "StructuredDocumentation",
                    "src": "11600:53:35",
                    "text": "@notice Updates accountance for _jobPeriodCredits"
                  },
                  "id": 7612,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateJobPeriod",
                  "nameLocation": "11665:16:35",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7601,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7600,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "11690:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7612,
                        "src": "11682:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7599,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11682:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11681:14:35"
                  },
                  "returnParameters": {
                    "id": 7602,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11705:0:35"
                  },
                  "scope": 7939,
                  "src": "11656:118:35",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7701,
                    "nodeType": "Block",
                    "src": "12035:661:35",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 7620,
                                "name": "_tick",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6566,
                                "src": "12045:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                  "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                                }
                              },
                              "id": 7622,
                              "indexExpression": {
                                "id": 7621,
                                "name": "kp3rWethPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5606,
                                "src": "12051:12:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12045:19:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                              }
                            },
                            "id": 7623,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "period",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13177,
                            "src": "12045:26:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 7625,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "12083:5:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 7626,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "12083:15:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 7624,
                              "name": "_period",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7847,
                              "src": "12075:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 7627,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12075:24:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12045:54:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7638,
                        "nodeType": "IfStatement",
                        "src": "12041:170:35",
                        "trueBody": {
                          "id": 7637,
                          "nodeType": "Block",
                          "src": "12101:110:35",
                          "statements": [
                            {
                              "expression": {
                                "id": 7635,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 7629,
                                    "name": "_tick",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6566,
                                    "src": "12152:5:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                      "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                                    }
                                  },
                                  "id": 7631,
                                  "indexExpression": {
                                    "id": 7630,
                                    "name": "kp3rWethPool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5606,
                                    "src": "12158:12:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "12152:19:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                    "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 7633,
                                      "name": "kp3rWethPool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5606,
                                      "src": "12191:12:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 7632,
                                    "name": "observeLiquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7053,
                                    "src": "12174:16:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_TickCache_$13178_memory_ptr_$",
                                      "typeString": "function (address) view returns (struct IKeep3rJobFundableLiquidity.TickCache memory)"
                                    }
                                  },
                                  "id": 7634,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12174:30:35",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                    "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                  }
                                },
                                "src": "12152:52:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                  "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                                }
                              },
                              "id": 7636,
                              "nodeType": "ExpressionStatement",
                              "src": "12152:52:35"
                            }
                          ]
                        }
                      },
                      {
                        "body": {
                          "id": 7699,
                          "nodeType": "Block",
                          "src": "12274:418:35",
                          "statements": [
                            {
                              "assignments": [
                                7653
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7653,
                                  "mutability": "mutable",
                                  "name": "_liquidity",
                                  "nameLocation": "12290:10:35",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7699,
                                  "src": "12282:18:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 7652,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "12282:7:35",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7660,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 7658,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7640,
                                    "src": "12328:1:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 7654,
                                      "name": "_jobLiquidities",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5424,
                                      "src": "12303:15:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 7656,
                                    "indexExpression": {
                                      "id": 7655,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7615,
                                      "src": "12319:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "12303:21:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 7657,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "at",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1754,
                                  "src": "12303:24:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"
                                  }
                                },
                                "id": 7659,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12303:27:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "12282:48:35"
                            },
                            {
                              "condition": {
                                "arguments": [
                                  {
                                    "id": 7663,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7653,
                                    "src": "12372:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "id": 7661,
                                    "name": "_approvedLiquidities",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6540,
                                    "src": "12342:20:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 7662,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "contains",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1712,
                                  "src": "12342:29:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                                  }
                                },
                                "id": 7664,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12342:41:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 7698,
                              "nodeType": "IfStatement",
                              "src": "12338:348:35",
                              "trueBody": {
                                "id": 7697,
                                "nodeType": "Block",
                                "src": "12385:301:35",
                                "statements": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7673,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "baseExpression": {
                                            "id": 7665,
                                            "name": "_tick",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6566,
                                            "src": "12399:5:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                              "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                                            }
                                          },
                                          "id": 7667,
                                          "indexExpression": {
                                            "id": 7666,
                                            "name": "_liquidity",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7653,
                                            "src": "12405:10:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "12399:17:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                                          }
                                        },
                                        "id": 7668,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "period",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 13177,
                                        "src": "12399:24:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "!=",
                                      "rightExpression": {
                                        "arguments": [
                                          {
                                            "expression": {
                                              "id": 7670,
                                              "name": "block",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -4,
                                              "src": "12435:5:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_block",
                                                "typeString": "block"
                                              }
                                            },
                                            "id": 7671,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "src": "12435:15:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 7669,
                                          "name": "_period",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7847,
                                          "src": "12427:7:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (uint256) view returns (uint256)"
                                          }
                                        },
                                        "id": 7672,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12427:24:35",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12399:52:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 7683,
                                    "nodeType": "IfStatement",
                                    "src": "12395:181:35",
                                    "trueBody": {
                                      "id": 7682,
                                      "nodeType": "Block",
                                      "src": "12453:123:35",
                                      "statements": [
                                        {
                                          "expression": {
                                            "id": 7680,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftHandSide": {
                                              "baseExpression": {
                                                "id": 7674,
                                                "name": "_tick",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6566,
                                                "src": "12517:5:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                                  "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                                                }
                                              },
                                              "id": 7676,
                                              "indexExpression": {
                                                "id": 7675,
                                                "name": "_liquidity",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7653,
                                                "src": "12523:10:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "nodeType": "IndexAccess",
                                              "src": "12517:17:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                                "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                                              }
                                            },
                                            "nodeType": "Assignment",
                                            "operator": "=",
                                            "rightHandSide": {
                                              "arguments": [
                                                {
                                                  "id": 7678,
                                                  "name": "_liquidity",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 7653,
                                                  "src": "12554:10:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                ],
                                                "id": 7677,
                                                "name": "observeLiquidity",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7053,
                                                "src": "12537:16:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_TickCache_$13178_memory_ptr_$",
                                                  "typeString": "function (address) view returns (struct IKeep3rJobFundableLiquidity.TickCache memory)"
                                                }
                                              },
                                              "id": 7679,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "12537:28:35",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                                                "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                                              }
                                            },
                                            "src": "12517:48:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                              "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                                            }
                                          },
                                          "id": 7681,
                                          "nodeType": "ExpressionStatement",
                                          "src": "12517:48:35"
                                        }
                                      ]
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 7695,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 7684,
                                        "name": "_periodCredits",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7618,
                                        "src": "12585:14:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "baseExpression": {
                                                  "baseExpression": {
                                                    "id": 7687,
                                                    "name": "liquidityAmount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6548,
                                                    "src": "12630:15:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                      "typeString": "mapping(address => mapping(address => uint256))"
                                                    }
                                                  },
                                                  "id": 7689,
                                                  "indexExpression": {
                                                    "id": 7688,
                                                    "name": "_job",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 7615,
                                                    "src": "12646:4:35",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "IndexAccess",
                                                  "src": "12630:21:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                  }
                                                },
                                                "id": 7691,
                                                "indexExpression": {
                                                  "id": 7690,
                                                  "name": "_liquidity",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 7653,
                                                  "src": "12652:10:35",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "12630:33:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              {
                                                "id": 7692,
                                                "name": "_liquidity",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7653,
                                                "src": "12665:10:35",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "id": 7686,
                                              "name": "_quoteLiquidity",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7909,
                                              "src": "12614:15:35",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (uint256,address) view returns (uint256)"
                                              }
                                            },
                                            "id": 7693,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "12614:62:35",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 7685,
                                          "name": "_getReward",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7863,
                                          "src": "12603:10:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (uint256) view returns (uint256)"
                                          }
                                        },
                                        "id": 7694,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "12603:74:35",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12585:92:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7696,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12585:92:35"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7642,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7640,
                            "src": "12233:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "baseExpression": {
                                  "id": 7643,
                                  "name": "_jobLiquidities",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5424,
                                  "src": "12237:15:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 7645,
                                "indexExpression": {
                                  "id": 7644,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7615,
                                  "src": "12253:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "12237:21:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 7646,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1727,
                              "src": "12237:28:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
                              }
                            },
                            "id": 7647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12237:30:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12233:34:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7700,
                        "initializationExpression": {
                          "assignments": [
                            7640
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 7640,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "12230:1:35",
                              "nodeType": "VariableDeclaration",
                              "scope": 7700,
                              "src": "12222:9:35",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 7639,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "12222:7:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 7641,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "12222:9:35"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 7650,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "12269:3:35",
                            "subExpression": {
                              "id": 7649,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7640,
                              "src": "12269:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7651,
                          "nodeType": "ExpressionStatement",
                          "src": "12269:3:35"
                        },
                        "nodeType": "ForStatement",
                        "src": "12217:475:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7613,
                    "nodeType": "StructuredDocumentation",
                    "src": "11778:162:35",
                    "text": "@notice Quotes the outdated job liquidities and calculates _periodCredits\n @dev This function is also responsible for keeping the KP3R/WETH quote updated"
                  },
                  "id": 7702,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_calculateJobPeriodCredits",
                  "nameLocation": "11952:26:35",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7616,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7615,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "11987:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7702,
                        "src": "11979:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7614,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11979:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11978:14:35"
                  },
                  "returnParameters": {
                    "id": 7619,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7618,
                        "mutability": "mutable",
                        "name": "_periodCredits",
                        "nameLocation": "12019:14:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7702,
                        "src": "12011:22:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7617,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12011:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12010:24:35"
                  },
                  "scope": 7939,
                  "src": "11943:753:35",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7801,
                    "nodeType": "Block",
                    "src": "12916:906:35",
                    "statements": [
                      {
                        "condition": {
                          "id": 7720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "12926:43:35",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 7718,
                                "name": "_liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7707,
                                "src": "12958:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 7714,
                                  "name": "_jobLiquidities",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5424,
                                  "src": "12927:15:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 7716,
                                "indexExpression": {
                                  "id": 7715,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7705,
                                  "src": "12943:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "12927:21:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 7717,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1712,
                              "src": "12927:30:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 7719,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12927:42:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7724,
                        "nodeType": "IfStatement",
                        "src": "12922:80:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7721,
                              "name": "JobLiquidityUnexistent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13165,
                              "src": "12978:22:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7722,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12978:24:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7723,
                          "nodeType": "RevertStatement",
                          "src": "12971:31:35"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 7725,
                                "name": "liquidityAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6548,
                                "src": "13012:15:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7727,
                              "indexExpression": {
                                "id": 7726,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7705,
                                "src": "13028:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13012:21:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7729,
                            "indexExpression": {
                              "id": 7728,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7707,
                              "src": "13034:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "13012:33:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 7730,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7709,
                            "src": "13048:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13012:43:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7735,
                        "nodeType": "IfStatement",
                        "src": "13008:82:35",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7732,
                              "name": "JobLiquidityInsufficient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13168,
                              "src": "13064:24:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7733,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13064:26:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7734,
                          "nodeType": "RevertStatement",
                          "src": "13057:33:35"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7737,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7705,
                              "src": "13162:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 7736,
                            "name": "_updateJobPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7612,
                            "src": "13145:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 7738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13145:22:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7739,
                        "nodeType": "ExpressionStatement",
                        "src": "13145:22:35"
                      },
                      {
                        "assignments": [
                          7741
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7741,
                            "mutability": "mutable",
                            "name": "_periodCreditsToRemove",
                            "nameLocation": "13181:22:35",
                            "nodeType": "VariableDeclaration",
                            "scope": 7801,
                            "src": "13173:30:35",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7740,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "13173:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7748,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 7744,
                                  "name": "_amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7709,
                                  "src": "13233:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 7745,
                                  "name": "_liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7707,
                                  "src": "13242:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7743,
                                "name": "_quoteLiquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7909,
                                "src": "13217:15:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,address) view returns (uint256)"
                                }
                              },
                              "id": 7746,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13217:36:35",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7742,
                            "name": "_getReward",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7863,
                            "src": "13206:10:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256) view returns (uint256)"
                            }
                          },
                          "id": 7747,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13206:48:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13173:81:35"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 7749,
                              "name": "_jobPeriodCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5412,
                              "src": "13337:17:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7751,
                            "indexExpression": {
                              "id": 7750,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7705,
                              "src": "13355:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "13337:23:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 7752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13363:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "13337:27:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7776,
                        "nodeType": "IfStatement",
                        "src": "13333:330:35",
                        "trueBody": {
                          "id": 7775,
                          "nodeType": "Block",
                          "src": "13366:297:35",
                          "statements": [
                            {
                              "expression": {
                                "id": 7767,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 7754,
                                    "name": "_jobLiquidityCredits",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5407,
                                    "src": "13490:20:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 7756,
                                  "indexExpression": {
                                    "id": 7755,
                                    "name": "_job",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7705,
                                    "src": "13511:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "13490:26:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7766,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7761,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "baseExpression": {
                                            "id": 7757,
                                            "name": "_jobLiquidityCredits",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5407,
                                            "src": "13521:20:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                              "typeString": "mapping(address => uint256)"
                                            }
                                          },
                                          "id": 7759,
                                          "indexExpression": {
                                            "id": 7758,
                                            "name": "_job",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7705,
                                            "src": "13542:4:35",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "13521:26:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "id": 7760,
                                          "name": "_periodCreditsToRemove",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7741,
                                          "src": "13550:22:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "13521:51:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 7762,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "13520:53:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "baseExpression": {
                                      "id": 7763,
                                      "name": "_jobPeriodCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5412,
                                      "src": "13576:17:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 7765,
                                    "indexExpression": {
                                      "id": 7764,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7705,
                                      "src": "13594:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "13576:23:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "13520:79:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "13490:109:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7768,
                              "nodeType": "ExpressionStatement",
                              "src": "13490:109:35"
                            },
                            {
                              "expression": {
                                "id": 7773,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 7769,
                                    "name": "_jobPeriodCredits",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5412,
                                    "src": "13607:17:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 7771,
                                  "indexExpression": {
                                    "id": 7770,
                                    "name": "_job",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7705,
                                    "src": "13625:4:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "13607:23:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "id": 7772,
                                  "name": "_periodCreditsToRemove",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7741,
                                  "src": "13634:22:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "13607:49:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7774,
                              "nodeType": "ExpressionStatement",
                              "src": "13607:49:35"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 7783,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 7777,
                                "name": "liquidityAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6548,
                                "src": "13669:15:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7780,
                              "indexExpression": {
                                "id": 7778,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7705,
                                "src": "13685:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13669:21:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7781,
                            "indexExpression": {
                              "id": 7779,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7707,
                              "src": "13691:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "13669:33:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 7782,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7709,
                            "src": "13706:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13669:44:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7784,
                        "nodeType": "ExpressionStatement",
                        "src": "13669:44:35"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7791,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 7785,
                                "name": "liquidityAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6548,
                                "src": "13723:15:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7787,
                              "indexExpression": {
                                "id": 7786,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7705,
                                "src": "13739:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13723:21:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7789,
                            "indexExpression": {
                              "id": 7788,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7707,
                              "src": "13745:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "13723:33:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 7790,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13760:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "13723:38:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7800,
                        "nodeType": "IfStatement",
                        "src": "13719:99:35",
                        "trueBody": {
                          "id": 7799,
                          "nodeType": "Block",
                          "src": "13763:55:35",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 7796,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7707,
                                    "src": "13800:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 7792,
                                      "name": "_jobLiquidities",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5424,
                                      "src": "13771:15:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 7794,
                                    "indexExpression": {
                                      "id": 7793,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7705,
                                      "src": "13787:4:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "13771:21:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 7795,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "remove",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1685,
                                  "src": "13771:28:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                                  }
                                },
                                "id": 7797,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13771:40:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 7798,
                              "nodeType": "ExpressionStatement",
                              "src": "13771:40:35"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7703,
                    "nodeType": "StructuredDocumentation",
                    "src": "12700:91:35",
                    "text": "@notice Updates job accountance calculating the impact of the unbonded liquidity amount"
                  },
                  "id": 7802,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 7712,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 7711,
                        "name": "nonReentrant",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 38,
                        "src": "12903:12:35"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "12903:12:35"
                    }
                  ],
                  "name": "_unbondLiquidityFromJob",
                  "nameLocation": "12803:23:35",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7710,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7705,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "12840:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7802,
                        "src": "12832:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7704,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12832:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7707,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "12858:10:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7802,
                        "src": "12850:18:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7706,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12850:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7709,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "12882:7:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7802,
                        "src": "12874:15:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7708,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12874:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12826:67:35"
                  },
                  "returnParameters": {
                    "id": 7713,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12916:0:35"
                  },
                  "scope": 7939,
                  "src": "12794:1028:35",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7830,
                    "nodeType": "Block",
                    "src": "14051:145:35",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7812,
                            "name": "_timePassed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7805,
                            "src": "14061:11:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 7813,
                            "name": "rewardPeriodTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5626,
                            "src": "14075:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14061:30:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "expression": {
                            "id": 7827,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 7825,
                              "name": "_result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7810,
                              "src": "14170:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "id": 7826,
                              "name": "_multiplier",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7807,
                              "src": "14180:11:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "14170:21:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7828,
                          "nodeType": "ExpressionStatement",
                          "src": "14170:21:35"
                        },
                        "id": 7829,
                        "nodeType": "IfStatement",
                        "src": "14057:134:35",
                        "trueBody": {
                          "id": 7824,
                          "nodeType": "Block",
                          "src": "14093:71:35",
                          "statements": [
                            {
                              "expression": {
                                "id": 7822,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 7815,
                                  "name": "_result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7810,
                                  "src": "14101:7:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7821,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7818,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7816,
                                          "name": "_timePassed",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7805,
                                          "src": "14112:11:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "id": 7817,
                                          "name": "_multiplier",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7807,
                                          "src": "14126:11:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "14112:25:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 7819,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "14111:27:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "id": 7820,
                                    "name": "rewardPeriodTime",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5626,
                                    "src": "14141:16:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "14111:46:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "14101:56:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7823,
                              "nodeType": "ExpressionStatement",
                              "src": "14101:56:35"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7803,
                    "nodeType": "StructuredDocumentation",
                    "src": "13826:124:35",
                    "text": "@notice Returns a fraction of the multiplier or the whole multiplier if equal or more than a rewardPeriodTime has passed"
                  },
                  "id": 7831,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_phase",
                  "nameLocation": "13962:6:35",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7808,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7805,
                        "mutability": "mutable",
                        "name": "_timePassed",
                        "nameLocation": "13977:11:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7831,
                        "src": "13969:19:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7804,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13969:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7807,
                        "mutability": "mutable",
                        "name": "_multiplier",
                        "nameLocation": "13998:11:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7831,
                        "src": "13990:19:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7806,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13990:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13968:42:35"
                  },
                  "returnParameters": {
                    "id": 7811,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7810,
                        "mutability": "mutable",
                        "name": "_result",
                        "nameLocation": "14042:7:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7831,
                        "src": "14034:15:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7809,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14034:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14033:17:35"
                  },
                  "scope": 7939,
                  "src": "13953:243:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7846,
                    "nodeType": "Block",
                    "src": "14358:62:35",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7844,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7839,
                            "name": "_timestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7834,
                            "src": "14371:10:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7842,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 7840,
                                  "name": "_timestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7834,
                                  "src": "14385:10:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "%",
                                "rightExpression": {
                                  "id": 7841,
                                  "name": "rewardPeriodTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5626,
                                  "src": "14398:16:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "14385:29:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 7843,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "14384:31:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14371:44:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7838,
                        "id": 7845,
                        "nodeType": "Return",
                        "src": "14364:51:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7832,
                    "nodeType": "StructuredDocumentation",
                    "src": "14200:69:35",
                    "text": "@notice Returns the start of the period of the provided timestamp"
                  },
                  "id": 7847,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_period",
                  "nameLocation": "14281:7:35",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7835,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7834,
                        "mutability": "mutable",
                        "name": "_timestamp",
                        "nameLocation": "14297:10:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7847,
                        "src": "14289:18:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7833,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14289:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14288:20:35"
                  },
                  "returnParameters": {
                    "id": 7838,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7837,
                        "mutability": "mutable",
                        "name": "_periodTimestamp",
                        "nameLocation": "14340:16:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7847,
                        "src": "14332:24:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7836,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14332:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14331:26:35"
                  },
                  "scope": 7939,
                  "src": "14272:148:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7862,
                    "nodeType": "Block",
                    "src": "14581:81:35",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7857,
                              "name": "_baseAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7850,
                              "src": "14610:11:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 7858,
                              "name": "rewardPeriodTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5626,
                              "src": "14623:16:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 7859,
                              "name": "inflationPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5631,
                              "src": "14641:15:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 7855,
                              "name": "FullMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4308,
                              "src": "14594:8:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                "typeString": "type(library FullMath)"
                              }
                            },
                            "id": 7856,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mulDiv",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4263,
                            "src": "14594:15:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7860,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14594:63:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7854,
                        "id": 7861,
                        "nodeType": "Return",
                        "src": "14587:70:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7848,
                    "nodeType": "StructuredDocumentation",
                    "src": "14424:72:35",
                    "text": "@notice Calculates relation between rewardPeriod and inflationPeriod"
                  },
                  "id": 7863,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getReward",
                  "nameLocation": "14508:10:35",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7851,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7850,
                        "mutability": "mutable",
                        "name": "_baseAmount",
                        "nameLocation": "14527:11:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7863,
                        "src": "14519:19:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7849,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14519:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14518:21:35"
                  },
                  "returnParameters": {
                    "id": 7854,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7853,
                        "mutability": "mutable",
                        "name": "_credits",
                        "nameLocation": "14571:8:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7863,
                        "src": "14563:16:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7852,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14563:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14562:18:35"
                  },
                  "scope": 7939,
                  "src": "14499:163:35",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7908,
                    "nodeType": "Block",
                    "src": "14849:275:35",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7878,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 7873,
                                "name": "_tick",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6566,
                                "src": "14859:5:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                  "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                                }
                              },
                              "id": 7875,
                              "indexExpression": {
                                "id": 7874,
                                "name": "_liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7868,
                                "src": "14865:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "14859:17:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                              }
                            },
                            "id": 7876,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "period",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13177,
                            "src": "14859:24:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 7877,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14887:1:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "14859:29:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7907,
                        "nodeType": "IfStatement",
                        "src": "14855:265:35",
                        "trueBody": {
                          "id": 7906,
                          "nodeType": "Block",
                          "src": "14890:230:35",
                          "statements": [
                            {
                              "assignments": [
                                7880
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 7880,
                                  "mutability": "mutable",
                                  "name": "_tickDifference",
                                  "nameLocation": "14904:15:35",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 7906,
                                  "src": "14898:21:35",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  },
                                  "typeName": {
                                    "id": 7879,
                                    "name": "int56",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14898:5:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int56",
                                      "typeString": "int56"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 7894,
                              "initialValue": {
                                "condition": {
                                  "baseExpression": {
                                    "id": 7881,
                                    "name": "_isKP3RToken0",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5434,
                                    "src": "14922:13:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                      "typeString": "mapping(address => bool)"
                                    }
                                  },
                                  "id": 7883,
                                  "indexExpression": {
                                    "id": 7882,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7868,
                                    "src": "14936:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "14922:25:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "id": 7892,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "-",
                                  "prefix": true,
                                  "src": "14981:29:35",
                                  "subExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 7888,
                                        "name": "_tick",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6566,
                                        "src": "14982:5:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                          "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                                        }
                                      },
                                      "id": 7890,
                                      "indexExpression": {
                                        "id": 7889,
                                        "name": "_liquidity",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7868,
                                        "src": "14988:10:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "14982:17:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                        "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                                      }
                                    },
                                    "id": 7891,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "difference",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 13175,
                                    "src": "14982:28:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int56",
                                      "typeString": "int56"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  }
                                },
                                "id": 7893,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "14922:88:35",
                                "trueExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 7884,
                                      "name": "_tick",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6566,
                                      "src": "14950:5:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                        "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                                      }
                                    },
                                    "id": 7886,
                                    "indexExpression": {
                                      "id": 7885,
                                      "name": "_liquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7868,
                                      "src": "14956:10:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "14950:17:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                                      "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                                    }
                                  },
                                  "id": 7887,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "difference",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 13175,
                                  "src": "14950:28:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "14898:112:35"
                            },
                            {
                              "expression": {
                                "id": 7904,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 7895,
                                  "name": "_quote",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7871,
                                  "src": "15018:6:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 7900,
                                      "name": "_amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7866,
                                      "src": "15070:7:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "id": 7901,
                                      "name": "_tickDifference",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7880,
                                      "src": "15079:15:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      }
                                    },
                                    {
                                      "id": 7902,
                                      "name": "rewardPeriodTime",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5626,
                                      "src": "15096:16:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_int56",
                                        "typeString": "int56"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 7897,
                                          "name": "keep3rHelper",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5602,
                                          "src": "15041:12:35",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 7896,
                                        "name": "IKeep3rHelper",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11525,
                                        "src": "15027:13:35",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_IKeep3rHelper_$11525_$",
                                          "typeString": "type(contract IKeep3rHelper)"
                                        }
                                      },
                                      "id": 7898,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15027:27:35",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IKeep3rHelper_$11525",
                                        "typeString": "contract IKeep3rHelper"
                                      }
                                    },
                                    "id": 7899,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "getKP3RsAtTick",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 11512,
                                    "src": "15027:42:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_pure$_t_uint256_$_t_int56_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,int56,uint256) pure external returns (uint256)"
                                    }
                                  },
                                  "id": 7903,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15027:86:35",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15018:95:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 7905,
                              "nodeType": "ExpressionStatement",
                              "src": "15018:95:35"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7864,
                    "nodeType": "StructuredDocumentation",
                    "src": "14666:71:35",
                    "text": "@notice Returns underlying KP3R amount for a given liquidity amount"
                  },
                  "id": 7909,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_quoteLiquidity",
                  "nameLocation": "14749:15:35",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7869,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7866,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "14773:7:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7909,
                        "src": "14765:15:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7865,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14765:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7868,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "14790:10:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7909,
                        "src": "14782:18:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7867,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14782:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14764:37:35"
                  },
                  "returnParameters": {
                    "id": 7872,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7871,
                        "mutability": "mutable",
                        "name": "_quote",
                        "nameLocation": "14841:6:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7909,
                        "src": "14833:14:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7870,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14833:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14832:16:35"
                  },
                  "scope": 7939,
                  "src": "14740:384:35",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7937,
                    "nodeType": "Block",
                    "src": "15335:167:35",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7916,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7912,
                              "src": "15367:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 7915,
                            "name": "_updateJobCreditsIfNeeded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7567,
                            "src": "15341:25:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) returns (bool)"
                            }
                          },
                          "id": 7917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15341:31:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7918,
                        "nodeType": "ExpressionStatement",
                        "src": "15341:31:35"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7920,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7912,
                              "src": "15396:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 7919,
                            "name": "_rewardJobCredits",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7597,
                            "src": "15378:17:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 7921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15378:23:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7922,
                        "nodeType": "ExpressionStatement",
                        "src": "15378:23:35"
                      },
                      {
                        "expression": {
                          "id": 7935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 7923,
                              "name": "_jobLiquidityCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "15407:20:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7925,
                            "indexExpression": {
                              "id": 7924,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7912,
                              "src": "15428:4:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "15407:26:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "baseExpression": {
                                  "id": 7928,
                                  "name": "_jobLiquidityCredits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5407,
                                  "src": "15445:20:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 7930,
                                "indexExpression": {
                                  "id": 7929,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7912,
                                  "src": "15466:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "15445:26:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "baseExpression": {
                                  "id": 7931,
                                  "name": "_jobPeriodCredits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5412,
                                  "src": "15473:17:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 7933,
                                "indexExpression": {
                                  "id": 7932,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7912,
                                  "src": "15491:4:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "15473:23:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 7926,
                                "name": "Math",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1319,
                                "src": "15436:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Math_$1319_$",
                                  "typeString": "type(library Math)"
                                }
                              },
                              "id": 7927,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "min",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1270,
                              "src": "15436:8:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 7934,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15436:61:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15407:90:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7936,
                        "nodeType": "ExpressionStatement",
                        "src": "15407:90:35"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7910,
                    "nodeType": "StructuredDocumentation",
                    "src": "15128:142:35",
                    "text": "@notice Updates job credits to current quotes and rewards job's pending minted credits\n @dev Ensures a maximum of 1 period of credits"
                  },
                  "id": 7938,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_settleJobAccountance",
                  "nameLocation": "15282:21:35",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7913,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7912,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "15312:4:35",
                        "nodeType": "VariableDeclaration",
                        "scope": 7938,
                        "src": "15304:12:35",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7911,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15304:7:35",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15303:14:35"
                  },
                  "returnParameters": {
                    "id": 7914,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15335:0:35"
                  },
                  "scope": 7939,
                  "src": "15273:229:35",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 7940,
              "src": "556:14948:35",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13422,
                13425,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:15473:35"
        },
        "id": 35
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol",
          "exportedSymbols": {
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rJobManager": [
              8000
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ]
          },
          "id": 8001,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 7941,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:36"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol",
              "file": "./Keep3rJobOwnership.sol",
              "id": 7942,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8001,
              "sourceUnit": 8407,
              "src": "65:34:36",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rRoles.sol",
              "file": "../Keep3rRoles.sol",
              "id": 7943,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8001,
              "sourceUnit": 6102,
              "src": "100:28:36",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rParameters.sol",
              "file": "../Keep3rParameters.sol",
              "id": 7944,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8001,
              "sourceUnit": 5935,
              "src": "129:33:36",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rJobs.sol",
              "file": "../../../interfaces/peripherals/IKeep3rJobs.sol",
              "id": 7945,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8001,
              "sourceUnit": 13571,
              "src": "163:57:36",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 7946,
                    "name": "IKeep3rJobManager",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13326,
                    "src": "260:17:36"
                  },
                  "id": 7947,
                  "nodeType": "InheritanceSpecifier",
                  "src": "260:17:36"
                },
                {
                  "baseName": {
                    "id": 7948,
                    "name": "Keep3rJobOwnership",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 8406,
                    "src": "279:18:36"
                  },
                  "id": 7949,
                  "nodeType": "InheritanceSpecifier",
                  "src": "279:18:36"
                },
                {
                  "baseName": {
                    "id": 7950,
                    "name": "Keep3rRoles",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 6101,
                    "src": "299:11:36"
                  },
                  "id": 7951,
                  "nodeType": "InheritanceSpecifier",
                  "src": "299:11:36"
                },
                {
                  "baseName": {
                    "id": 7952,
                    "name": "Keep3rParameters",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5934,
                    "src": "312:16:36"
                  },
                  "id": 7953,
                  "nodeType": "InheritanceSpecifier",
                  "src": "312:16:36"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 8000,
              "linearizedBaseContracts": [
                8000,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                13326
              ],
              "name": "Keep3rJobManager",
              "nameLocation": "240:16:36",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 7957,
                  "libraryName": {
                    "id": 7954,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "339:13:36"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "333:49:36",
                  "typeName": {
                    "id": 7956,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 7955,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "357:24:36"
                    },
                    "referencedDeclaration": 1631,
                    "src": "357:24:36",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "baseFunctions": [
                    13325
                  ],
                  "body": {
                    "id": 7998,
                    "nodeType": "Block",
                    "src": "470:205:36",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 7966,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7960,
                              "src": "495:4:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 7964,
                              "name": "_jobs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "480:5:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 7965,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contains",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1712,
                            "src": "480:14:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                            }
                          },
                          "id": 7967,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "480:20:36",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7971,
                        "nodeType": "IfStatement",
                        "src": "476:50:36",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7968,
                              "name": "JobAlreadyAdded",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13316,
                              "src": "509:15:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "509:17:36",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7970,
                          "nodeType": "RevertStatement",
                          "src": "502:24:36"
                        }
                      },
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 7972,
                            "name": "hasBonded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5472,
                            "src": "536:9:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 7974,
                          "indexExpression": {
                            "id": 7973,
                            "name": "_job",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7960,
                            "src": "546:4:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "536:15:36",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7978,
                        "nodeType": "IfStatement",
                        "src": "532:44:36",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 7975,
                              "name": "AlreadyAKeeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13319,
                              "src": "560:14:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 7976,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "560:16:36",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 7977,
                          "nodeType": "RevertStatement",
                          "src": "553:23:36"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 7982,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7960,
                              "src": "592:4:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 7979,
                              "name": "_jobs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "582:5:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 7981,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "582:9:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 7983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "582:15:36",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7984,
                        "nodeType": "ExpressionStatement",
                        "src": "582:15:36"
                      },
                      {
                        "expression": {
                          "id": 7990,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 7985,
                              "name": "jobOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8303,
                              "src": "603:8:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 7987,
                            "indexExpression": {
                              "id": 7986,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7960,
                              "src": "612:4:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "603:14:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 7988,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "620:3:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7989,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "620:10:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "603:27:36",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 7991,
                        "nodeType": "ExpressionStatement",
                        "src": "603:27:36"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 7993,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "653:3:36",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7994,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "653:10:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 7995,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7960,
                              "src": "665:4:36",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 7992,
                            "name": "JobAddition",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13313,
                            "src": "641:11:36",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 7996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "641:29:36",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7997,
                        "nodeType": "EmitStatement",
                        "src": "636:34:36"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7958,
                    "nodeType": "StructuredDocumentation",
                    "src": "386:33:36",
                    "text": "@inheritdoc IKeep3rJobManager"
                  },
                  "functionSelector": "c5198abc",
                  "id": 7999,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addJob",
                  "nameLocation": "431:6:36",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7962,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "461:8:36"
                  },
                  "parameters": {
                    "id": 7961,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7960,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "446:4:36",
                        "nodeType": "VariableDeclaration",
                        "scope": 7999,
                        "src": "438:12:36",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7959,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "438:7:36",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "437:14:36"
                  },
                  "returnParameters": {
                    "id": 7963,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "470:0:36"
                  },
                  "scope": 8000,
                  "src": "422:253:36",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8001,
              "src": "222:455:36",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13316,
                13319,
                13422,
                13425,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:646:36"
        },
        "id": 36
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IPairManager": [
              11703
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rJobFundableCredits": [
              6508
            ],
            "Keep3rJobFundableLiquidity": [
              7939
            ],
            "Keep3rJobMigration": [
              8292
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 8293,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8002,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:37"
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rJobs.sol",
              "file": "../../../interfaces/peripherals/IKeep3rJobs.sol",
              "id": 8003,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8293,
              "sourceUnit": 13571,
              "src": "65:57:37",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol",
              "file": "./Keep3rJobFundableCredits.sol",
              "id": 8004,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8293,
              "sourceUnit": 6509,
              "src": "123:40:37",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol",
              "file": "./Keep3rJobFundableLiquidity.sol",
              "id": 8005,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8293,
              "sourceUnit": 7940,
              "src": "164:42:37",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8006,
                    "name": "IKeep3rJobMigration",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13505,
                    "src": "248:19:37"
                  },
                  "id": 8007,
                  "nodeType": "InheritanceSpecifier",
                  "src": "248:19:37"
                },
                {
                  "baseName": {
                    "id": 8008,
                    "name": "Keep3rJobFundableCredits",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 6508,
                    "src": "269:24:37"
                  },
                  "id": 8009,
                  "nodeType": "InheritanceSpecifier",
                  "src": "269:24:37"
                },
                {
                  "baseName": {
                    "id": 8010,
                    "name": "Keep3rJobFundableLiquidity",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 7939,
                    "src": "295:26:37"
                  },
                  "id": 8011,
                  "nodeType": "InheritanceSpecifier",
                  "src": "295:26:37"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 8292,
              "linearizedBaseContracts": [
                8292,
                7939,
                6508,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                39,
                13305,
                13100,
                13505
              ],
              "name": "Keep3rJobMigration",
              "nameLocation": "226:18:37",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 8015,
                  "libraryName": {
                    "id": 8012,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "332:13:37"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "326:49:37",
                  "typeName": {
                    "id": 8014,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8013,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "350:24:37"
                    },
                    "referencedDeclaration": 1631,
                    "src": "350:24:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "constant": true,
                  "id": 8018,
                  "mutability": "constant",
                  "name": "_MIGRATION_COOLDOWN",
                  "nameLocation": "405:19:37",
                  "nodeType": "VariableDeclaration",
                  "scope": 8292,
                  "src": "379:57:37",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8016,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "379:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "31",
                    "id": 8017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "427:9:37",
                    "subdenomination": "minutes",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_60_by_1",
                      "typeString": "int_const 60"
                    },
                    "value": "1"
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    13488
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 8019,
                    "nodeType": "StructuredDocumentation",
                    "src": "441:35:37",
                    "text": "@inheritdoc IKeep3rJobMigration"
                  },
                  "functionSelector": "ec8ca643",
                  "id": 8024,
                  "mutability": "mutable",
                  "name": "pendingJobMigrations",
                  "nameLocation": "523:20:37",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 8023,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "514:8:37"
                  },
                  "scope": 8292,
                  "src": "479:64:37",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                    "typeString": "mapping(address => address)"
                  },
                  "typeName": {
                    "id": 8022,
                    "keyType": {
                      "id": 8020,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "487:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "479:27:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                      "typeString": "mapping(address => address)"
                    },
                    "valueType": {
                      "id": 8021,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "498:7:37",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "id": 8030,
                  "mutability": "mutable",
                  "name": "_migrationCreatedAt",
                  "nameLocation": "604:19:37",
                  "nodeType": "VariableDeclaration",
                  "scope": 8292,
                  "src": "547:76:37",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 8029,
                    "keyType": {
                      "id": 8025,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "555:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "547:47:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 8028,
                      "keyType": {
                        "id": 8026,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "574:7:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "566:27:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 8027,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "585:7:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    13496
                  ],
                  "body": {
                    "id": 8069,
                    "nodeType": "Block",
                    "src": "761:224:37",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 8044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8042,
                            "name": "_fromJob",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8033,
                            "src": "771:8:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 8043,
                            "name": "_toJob",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8035,
                            "src": "783:6:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "771:18:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8048,
                        "nodeType": "IfStatement",
                        "src": "767:55:37",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8045,
                              "name": "JobMigrationImpossible",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13474,
                              "src": "798:22:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8046,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "798:24:37",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8047,
                          "nodeType": "RevertStatement",
                          "src": "791:31:37"
                        }
                      },
                      {
                        "expression": {
                          "id": 8053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 8049,
                              "name": "pendingJobMigrations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8024,
                              "src": "829:20:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 8051,
                            "indexExpression": {
                              "id": 8050,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8033,
                              "src": "850:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "829:30:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 8052,
                            "name": "_toJob",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8035,
                            "src": "862:6:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "829:39:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 8054,
                        "nodeType": "ExpressionStatement",
                        "src": "829:39:37"
                      },
                      {
                        "expression": {
                          "id": 8062,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 8055,
                                "name": "_migrationCreatedAt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8030,
                                "src": "874:19:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 8058,
                              "indexExpression": {
                                "id": 8056,
                                "name": "_fromJob",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8033,
                                "src": "894:8:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "874:29:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8059,
                            "indexExpression": {
                              "id": 8057,
                              "name": "_toJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8035,
                              "src": "904:6:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "874:37:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 8060,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "914:5:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 8061,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "914:15:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "874:55:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8063,
                        "nodeType": "ExpressionStatement",
                        "src": "874:55:37"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 8065,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8033,
                              "src": "963:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8066,
                              "name": "_toJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8035,
                              "src": "973:6:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8064,
                            "name": "JobMigrationRequested",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13464,
                            "src": "941:21:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 8067,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "941:39:37",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8068,
                        "nodeType": "EmitStatement",
                        "src": "936:44:37"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8031,
                    "nodeType": "StructuredDocumentation",
                    "src": "628:35:37",
                    "text": "@inheritdoc IKeep3rJobMigration"
                  },
                  "functionSelector": "90a4684e",
                  "id": 8070,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 8039,
                          "name": "_fromJob",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8033,
                          "src": "751:8:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 8040,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8038,
                        "name": "onlyJobOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 8389,
                        "src": "738:12:37"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "738:22:37"
                    }
                  ],
                  "name": "migrateJob",
                  "nameLocation": "675:10:37",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8037,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "729:8:37"
                  },
                  "parameters": {
                    "id": 8036,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8033,
                        "mutability": "mutable",
                        "name": "_fromJob",
                        "nameLocation": "694:8:37",
                        "nodeType": "VariableDeclaration",
                        "scope": 8070,
                        "src": "686:16:37",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8032,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "686:7:37",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8035,
                        "mutability": "mutable",
                        "name": "_toJob",
                        "nameLocation": "712:6:37",
                        "nodeType": "VariableDeclaration",
                        "scope": 8070,
                        "src": "704:14:37",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8034,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "704:7:37",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "685:34:37"
                  },
                  "returnParameters": {
                    "id": 8041,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "761:0:37"
                  },
                  "scope": 8292,
                  "src": "666:319:37",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13504
                  ],
                  "body": {
                    "id": 8290,
                    "nodeType": "Block",
                    "src": "1128:1755:37",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 8088,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 8082,
                              "name": "disputes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5386,
                              "src": "1138:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 8084,
                            "indexExpression": {
                              "id": 8083,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "1147:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1138:18:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 8085,
                              "name": "disputes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5386,
                              "src": "1160:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 8087,
                            "indexExpression": {
                              "id": 8086,
                              "name": "_toJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8075,
                              "src": "1169:6:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1160:16:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1138:38:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8092,
                        "nodeType": "IfStatement",
                        "src": "1134:64:37",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8089,
                              "name": "JobDisputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12996,
                              "src": "1185:11:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8090,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1185:13:37",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8091,
                          "nodeType": "RevertStatement",
                          "src": "1178:20:37"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 8097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 8093,
                              "name": "pendingJobMigrations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8024,
                              "src": "1208:20:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 8095,
                            "indexExpression": {
                              "id": 8094,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "1229:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1208:30:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8096,
                            "name": "_toJob",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8075,
                            "src": "1242:6:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1208:40:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8101,
                        "nodeType": "IfStatement",
                        "src": "1204:78:37",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8098,
                              "name": "JobMigrationUnavailable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13477,
                              "src": "1257:23:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8099,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1257:25:37",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8100,
                          "nodeType": "RevertStatement",
                          "src": "1250:32:37"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8111,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 8102,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "1292:5:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 8103,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "1292:15:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8110,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 8104,
                                  "name": "_migrationCreatedAt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8030,
                                  "src": "1310:19:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                    "typeString": "mapping(address => mapping(address => uint256))"
                                  }
                                },
                                "id": 8106,
                                "indexExpression": {
                                  "id": 8105,
                                  "name": "_fromJob",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8073,
                                  "src": "1330:8:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1310:29:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 8108,
                              "indexExpression": {
                                "id": 8107,
                                "name": "_toJob",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8075,
                                "src": "1340:6:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1310:37:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 8109,
                              "name": "_MIGRATION_COOLDOWN",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8018,
                              "src": "1350:19:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1310:59:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1292:77:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8115,
                        "nodeType": "IfStatement",
                        "src": "1288:110:37",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8112,
                              "name": "JobMigrationLocked",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13480,
                              "src": "1378:18:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8113,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1378:20:37",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8114,
                          "nodeType": "RevertStatement",
                          "src": "1371:27:37"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8117,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "1473:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8116,
                            "name": "_settleJobAccountance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7938,
                            "src": "1451:21:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 8118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1451:31:37",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8119,
                        "nodeType": "ExpressionStatement",
                        "src": "1451:31:37"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8121,
                              "name": "_toJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8075,
                              "src": "1510:6:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8120,
                            "name": "_settleJobAccountance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7938,
                            "src": "1488:21:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 8122,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1488:29:37",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8123,
                        "nodeType": "ExpressionStatement",
                        "src": "1488:29:37"
                      },
                      {
                        "body": {
                          "id": 8173,
                          "nodeType": "Block",
                          "src": "1588:317:37",
                          "statements": [
                            {
                              "assignments": [
                                8132
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8132,
                                  "mutability": "mutable",
                                  "name": "_tokenToMigrate",
                                  "nameLocation": "1604:15:37",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8173,
                                  "src": "1596:23:37",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 8131,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1596:7:37",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8139,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 8137,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1646:1:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8133,
                                      "name": "_jobTokens",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5418,
                                      "src": "1622:10:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 8135,
                                    "indexExpression": {
                                      "id": 8134,
                                      "name": "_fromJob",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8073,
                                      "src": "1633:8:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1622:20:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 8136,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "at",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1754,
                                  "src": "1622:23:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"
                                  }
                                },
                                "id": 8138,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1622:26:37",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1596:52:37"
                            },
                            {
                              "expression": {
                                "id": 8150,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 8140,
                                      "name": "jobTokenCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5402,
                                      "src": "1656:15:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 8143,
                                    "indexExpression": {
                                      "id": 8141,
                                      "name": "_toJob",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8075,
                                      "src": "1672:6:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1656:23:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 8144,
                                  "indexExpression": {
                                    "id": 8142,
                                    "name": "_tokenToMigrate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8132,
                                    "src": "1680:15:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "1656:40:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 8145,
                                      "name": "jobTokenCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5402,
                                      "src": "1700:15:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 8147,
                                    "indexExpression": {
                                      "id": 8146,
                                      "name": "_fromJob",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8073,
                                      "src": "1716:8:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1700:25:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 8149,
                                  "indexExpression": {
                                    "id": 8148,
                                    "name": "_tokenToMigrate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8132,
                                    "src": "1726:15:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1700:42:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1656:86:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8151,
                              "nodeType": "ExpressionStatement",
                              "src": "1656:86:37"
                            },
                            {
                              "expression": {
                                "id": 8157,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "1750:49:37",
                                "subExpression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 8152,
                                      "name": "jobTokenCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5402,
                                      "src": "1757:15:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 8154,
                                    "indexExpression": {
                                      "id": 8153,
                                      "name": "_fromJob",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8073,
                                      "src": "1773:8:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1757:25:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 8156,
                                  "indexExpression": {
                                    "id": 8155,
                                    "name": "_tokenToMigrate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8132,
                                    "src": "1783:15:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "1757:42:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8158,
                              "nodeType": "ExpressionStatement",
                              "src": "1750:49:37"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8163,
                                    "name": "_tokenToMigrate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8132,
                                    "src": "1835:15:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8159,
                                      "name": "_jobTokens",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5418,
                                      "src": "1807:10:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 8161,
                                    "indexExpression": {
                                      "id": 8160,
                                      "name": "_fromJob",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8073,
                                      "src": "1818:8:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1807:20:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 8162,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "remove",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1685,
                                  "src": "1807:27:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                                  }
                                },
                                "id": 8164,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1807:44:37",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8165,
                              "nodeType": "ExpressionStatement",
                              "src": "1807:44:37"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8170,
                                    "name": "_tokenToMigrate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8132,
                                    "src": "1882:15:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8166,
                                      "name": "_jobTokens",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5418,
                                      "src": "1859:10:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 8168,
                                    "indexExpression": {
                                      "id": 8167,
                                      "name": "_toJob",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8075,
                                      "src": "1870:6:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1859:18:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 8169,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1658,
                                  "src": "1859:22:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                                  }
                                },
                                "id": 8171,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1859:39:37",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8172,
                              "nodeType": "ExpressionStatement",
                              "src": "1859:39:37"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "baseExpression": {
                                  "id": 8124,
                                  "name": "_jobTokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5418,
                                  "src": "1553:10:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 8126,
                                "indexExpression": {
                                  "id": 8125,
                                  "name": "_fromJob",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8073,
                                  "src": "1564:8:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1553:20:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 8127,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1727,
                              "src": "1553:27:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
                              }
                            },
                            "id": 8128,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1553:29:37",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 8129,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1585:1:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1553:33:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8174,
                        "nodeType": "WhileStatement",
                        "src": "1546:359:37"
                      },
                      {
                        "body": {
                          "id": 8224,
                          "nodeType": "Block",
                          "src": "1985:304:37",
                          "statements": [
                            {
                              "assignments": [
                                8183
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 8183,
                                  "mutability": "mutable",
                                  "name": "_liquidity",
                                  "nameLocation": "2001:10:37",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 8224,
                                  "src": "1993:18:37",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 8182,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1993:7:37",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 8190,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 8188,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2043:1:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8184,
                                      "name": "_jobLiquidities",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5424,
                                      "src": "2014:15:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 8186,
                                    "indexExpression": {
                                      "id": 8185,
                                      "name": "_fromJob",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8073,
                                      "src": "2030:8:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2014:25:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 8187,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "at",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1754,
                                  "src": "2014:28:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"
                                  }
                                },
                                "id": 8189,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2014:31:37",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1993:52:37"
                            },
                            {
                              "expression": {
                                "id": 8201,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 8191,
                                      "name": "liquidityAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6548,
                                      "src": "2054:15:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 8194,
                                    "indexExpression": {
                                      "id": 8192,
                                      "name": "_toJob",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8075,
                                      "src": "2070:6:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2054:23:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 8195,
                                  "indexExpression": {
                                    "id": 8193,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8183,
                                    "src": "2078:10:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2054:35:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 8196,
                                      "name": "liquidityAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6548,
                                      "src": "2093:15:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 8198,
                                    "indexExpression": {
                                      "id": 8197,
                                      "name": "_fromJob",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8073,
                                      "src": "2109:8:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2093:25:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 8200,
                                  "indexExpression": {
                                    "id": 8199,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8183,
                                    "src": "2119:10:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2093:37:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2054:76:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8202,
                              "nodeType": "ExpressionStatement",
                              "src": "2054:76:37"
                            },
                            {
                              "expression": {
                                "id": 8208,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "2138:44:37",
                                "subExpression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 8203,
                                      "name": "liquidityAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6548,
                                      "src": "2145:15:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 8205,
                                    "indexExpression": {
                                      "id": 8204,
                                      "name": "_fromJob",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8073,
                                      "src": "2161:8:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2145:25:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 8207,
                                  "indexExpression": {
                                    "id": 8206,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8183,
                                    "src": "2171:10:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2145:37:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8209,
                              "nodeType": "ExpressionStatement",
                              "src": "2138:44:37"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8214,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8183,
                                    "src": "2219:10:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8210,
                                      "name": "_jobLiquidities",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5424,
                                      "src": "2191:15:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 8212,
                                    "indexExpression": {
                                      "id": 8211,
                                      "name": "_toJob",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8075,
                                      "src": "2207:6:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2191:23:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 8213,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1658,
                                  "src": "2191:27:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                                  }
                                },
                                "id": 8215,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2191:39:37",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8216,
                              "nodeType": "ExpressionStatement",
                              "src": "2191:39:37"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8221,
                                    "name": "_liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8183,
                                    "src": "2271:10:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 8217,
                                      "name": "_jobLiquidities",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5424,
                                      "src": "2238:15:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 8219,
                                    "indexExpression": {
                                      "id": 8218,
                                      "name": "_fromJob",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8073,
                                      "src": "2254:8:37",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2238:25:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 8220,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "remove",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1685,
                                  "src": "2238:32:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                                  }
                                },
                                "id": 8222,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2238:44:37",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 8223,
                              "nodeType": "ExpressionStatement",
                              "src": "2238:44:37"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8181,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "baseExpression": {
                                  "id": 8175,
                                  "name": "_jobLiquidities",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5424,
                                  "src": "1945:15:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 8177,
                                "indexExpression": {
                                  "id": 8176,
                                  "name": "_fromJob",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8073,
                                  "src": "1961:8:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1945:25:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 8178,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1727,
                              "src": "1945:32:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
                              }
                            },
                            "id": 8179,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1945:34:37",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 8180,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1982:1:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1945:38:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8225,
                        "nodeType": "WhileStatement",
                        "src": "1938:351:37"
                      },
                      {
                        "expression": {
                          "id": 8232,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 8226,
                              "name": "_jobPeriodCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5412,
                              "src": "2323:17:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8228,
                            "indexExpression": {
                              "id": 8227,
                              "name": "_toJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8075,
                              "src": "2341:6:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2323:25:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 8229,
                              "name": "_jobPeriodCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5412,
                              "src": "2352:17:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8231,
                            "indexExpression": {
                              "id": 8230,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "2370:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2352:27:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2323:56:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8233,
                        "nodeType": "ExpressionStatement",
                        "src": "2323:56:37"
                      },
                      {
                        "expression": {
                          "id": 8237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "2385:34:37",
                          "subExpression": {
                            "baseExpression": {
                              "id": 8234,
                              "name": "_jobPeriodCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5412,
                              "src": "2392:17:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8236,
                            "indexExpression": {
                              "id": 8235,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "2410:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2392:27:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8238,
                        "nodeType": "ExpressionStatement",
                        "src": "2385:34:37"
                      },
                      {
                        "expression": {
                          "id": 8245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 8239,
                              "name": "_jobLiquidityCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "2426:20:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8241,
                            "indexExpression": {
                              "id": 8240,
                              "name": "_toJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8075,
                              "src": "2447:6:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2426:28:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 8242,
                              "name": "_jobLiquidityCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "2458:20:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8244,
                            "indexExpression": {
                              "id": 8243,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "2479:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2458:30:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2426:62:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8246,
                        "nodeType": "ExpressionStatement",
                        "src": "2426:62:37"
                      },
                      {
                        "expression": {
                          "id": 8250,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "2494:37:37",
                          "subExpression": {
                            "baseExpression": {
                              "id": 8247,
                              "name": "_jobLiquidityCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "2501:20:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8249,
                            "indexExpression": {
                              "id": 8248,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "2522:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2501:30:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8251,
                        "nodeType": "ExpressionStatement",
                        "src": "2494:37:37"
                      },
                      {
                        "expression": {
                          "id": 8255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "2576:27:37",
                          "subExpression": {
                            "baseExpression": {
                              "id": 8252,
                              "name": "rewardedAt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6554,
                              "src": "2583:10:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8254,
                            "indexExpression": {
                              "id": 8253,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "2594:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2583:20:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8256,
                        "nodeType": "ExpressionStatement",
                        "src": "2576:27:37"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8260,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "2622:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 8257,
                              "name": "_jobs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "2609:5:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 8259,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "remove",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1685,
                            "src": "2609:12:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 8261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2609:22:37",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8262,
                        "nodeType": "ExpressionStatement",
                        "src": "2609:22:37"
                      },
                      {
                        "expression": {
                          "id": 8266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "2670:25:37",
                          "subExpression": {
                            "baseExpression": {
                              "id": 8263,
                              "name": "jobOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8303,
                              "src": "2677:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 8265,
                            "indexExpression": {
                              "id": 8264,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "2686:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2677:18:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8267,
                        "nodeType": "ExpressionStatement",
                        "src": "2670:25:37"
                      },
                      {
                        "expression": {
                          "id": 8271,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "2701:32:37",
                          "subExpression": {
                            "baseExpression": {
                              "id": 8268,
                              "name": "jobPendingOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8309,
                              "src": "2708:15:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 8270,
                            "indexExpression": {
                              "id": 8269,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "2724:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2708:25:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8272,
                        "nodeType": "ExpressionStatement",
                        "src": "2701:32:37"
                      },
                      {
                        "expression": {
                          "id": 8278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "2739:44:37",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 8273,
                                "name": "_migrationCreatedAt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8030,
                                "src": "2746:19:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 8275,
                              "indexExpression": {
                                "id": 8274,
                                "name": "_fromJob",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8073,
                                "src": "2766:8:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2746:29:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8277,
                            "indexExpression": {
                              "id": 8276,
                              "name": "_toJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8075,
                              "src": "2776:6:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2746:37:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8279,
                        "nodeType": "ExpressionStatement",
                        "src": "2739:44:37"
                      },
                      {
                        "expression": {
                          "id": 8283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "2789:37:37",
                          "subExpression": {
                            "baseExpression": {
                              "id": 8280,
                              "name": "pendingJobMigrations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8024,
                              "src": "2796:20:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 8282,
                            "indexExpression": {
                              "id": 8281,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "2817:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2796:30:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8284,
                        "nodeType": "ExpressionStatement",
                        "src": "2789:37:37"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 8286,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8073,
                              "src": "2861:8:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8287,
                              "name": "_toJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8075,
                              "src": "2871:6:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8285,
                            "name": "JobMigrationSuccessful",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13471,
                            "src": "2838:22:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 8288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2838:40:37",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8289,
                        "nodeType": "EmitStatement",
                        "src": "2833:45:37"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8071,
                    "nodeType": "StructuredDocumentation",
                    "src": "989:35:37",
                    "text": "@inheritdoc IKeep3rJobMigration"
                  },
                  "functionSelector": "af320e81",
                  "id": 8291,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 8079,
                          "name": "_toJob",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8075,
                          "src": "1120:6:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 8080,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8078,
                        "name": "onlyJobOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 8389,
                        "src": "1107:12:37"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1107:20:37"
                    }
                  ],
                  "name": "acceptJobMigration",
                  "nameLocation": "1036:18:37",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8077,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1098:8:37"
                  },
                  "parameters": {
                    "id": 8076,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8073,
                        "mutability": "mutable",
                        "name": "_fromJob",
                        "nameLocation": "1063:8:37",
                        "nodeType": "VariableDeclaration",
                        "scope": 8291,
                        "src": "1055:16:37",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8072,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1055:7:37",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8075,
                        "mutability": "mutable",
                        "name": "_toJob",
                        "nameLocation": "1081:6:37",
                        "nodeType": "VariableDeclaration",
                        "scope": 8291,
                        "src": "1073:14:37",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8074,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1073:7:37",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1054:34:37"
                  },
                  "returnParameters": {
                    "id": 8081,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1128:0:37"
                  },
                  "scope": 8292,
                  "src": "1027:1856:37",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 8293,
              "src": "208:2677:37",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13061,
                13064,
                13067,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13422,
                13425,
                13474,
                13477,
                13480,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:2854:37"
        },
        "id": 37
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol",
          "exportedSymbols": {
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "Keep3rJobOwnership": [
              8406
            ]
          },
          "id": 8407,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8294,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:38"
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rJobs.sol",
              "file": "../../../interfaces/peripherals/IKeep3rJobs.sol",
              "id": 8295,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8407,
              "sourceUnit": 13571,
              "src": "65:57:38",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8296,
                    "name": "IKeep3rJobOwnership",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13456,
                    "src": "164:19:38"
                  },
                  "id": 8297,
                  "nodeType": "InheritanceSpecifier",
                  "src": "164:19:38"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 8406,
              "linearizedBaseContracts": [
                8406,
                13456
              ],
              "name": "Keep3rJobOwnership",
              "nameLocation": "142:18:38",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    13433
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 8298,
                    "nodeType": "StructuredDocumentation",
                    "src": "188:35:38",
                    "text": "@inheritdoc IKeep3rJobOwnership"
                  },
                  "functionSelector": "878c723e",
                  "id": 8303,
                  "mutability": "mutable",
                  "name": "jobOwner",
                  "nameLocation": "270:8:38",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 8302,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "261:8:38"
                  },
                  "scope": 8406,
                  "src": "226:52:38",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                    "typeString": "mapping(address => address)"
                  },
                  "typeName": {
                    "id": 8301,
                    "keyType": {
                      "id": 8299,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "234:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "226:27:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                      "typeString": "mapping(address => address)"
                    },
                    "valueType": {
                      "id": 8300,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "245:7:38",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13441
                  ],
                  "constant": false,
                  "documentation": {
                    "id": 8304,
                    "nodeType": "StructuredDocumentation",
                    "src": "283:35:38",
                    "text": "@inheritdoc IKeep3rJobOwnership"
                  },
                  "functionSelector": "98e90a0f",
                  "id": 8309,
                  "mutability": "mutable",
                  "name": "jobPendingOwner",
                  "nameLocation": "365:15:38",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 8308,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "356:8:38"
                  },
                  "scope": 8406,
                  "src": "321:59:38",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                    "typeString": "mapping(address => address)"
                  },
                  "typeName": {
                    "id": 8307,
                    "keyType": {
                      "id": 8305,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "329:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "321:27:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                      "typeString": "mapping(address => address)"
                    },
                    "valueType": {
                      "id": 8306,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "340:7:38",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13449
                  ],
                  "body": {
                    "id": 8335,
                    "nodeType": "Block",
                    "src": "521:106:38",
                    "statements": [
                      {
                        "expression": {
                          "id": 8325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 8321,
                              "name": "jobPendingOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8309,
                              "src": "527:15:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 8323,
                            "indexExpression": {
                              "id": 8322,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8312,
                              "src": "543:4:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "527:21:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 8324,
                            "name": "_newOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8314,
                            "src": "551:9:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "527:33:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 8326,
                        "nodeType": "ExpressionStatement",
                        "src": "527:33:38"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 8328,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8312,
                              "src": "590:4:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 8329,
                                "name": "jobOwner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8303,
                                "src": "596:8:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                  "typeString": "mapping(address => address)"
                                }
                              },
                              "id": 8331,
                              "indexExpression": {
                                "id": 8330,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8312,
                                "src": "605:4:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "596:14:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8332,
                              "name": "_newOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8314,
                              "src": "612:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8327,
                            "name": "JobOwnershipChange",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13410,
                            "src": "571:18:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address,address)"
                            }
                          },
                          "id": 8333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "571:51:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8334,
                        "nodeType": "EmitStatement",
                        "src": "566:56:38"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8310,
                    "nodeType": "StructuredDocumentation",
                    "src": "385:35:38",
                    "text": "@inheritdoc IKeep3rJobOwnership"
                  },
                  "functionSelector": "594a3a93",
                  "id": 8336,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 8318,
                          "name": "_job",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8312,
                          "src": "515:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 8319,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8317,
                        "name": "onlyJobOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 8389,
                        "src": "502:12:38"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "502:18:38"
                    }
                  ],
                  "name": "changeJobOwnership",
                  "nameLocation": "432:18:38",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8316,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "493:8:38"
                  },
                  "parameters": {
                    "id": 8315,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8312,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "459:4:38",
                        "nodeType": "VariableDeclaration",
                        "scope": 8336,
                        "src": "451:12:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8311,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "451:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8314,
                        "mutability": "mutable",
                        "name": "_newOwner",
                        "nameLocation": "473:9:38",
                        "nodeType": "VariableDeclaration",
                        "scope": 8336,
                        "src": "465:17:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8313,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "465:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "450:33:38"
                  },
                  "returnParameters": {
                    "id": 8320,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "521:0:38"
                  },
                  "scope": 8406,
                  "src": "423:204:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13455
                  ],
                  "body": {
                    "id": 8372,
                    "nodeType": "Block",
                    "src": "755:193:38",
                    "statements": [
                      {
                        "assignments": [
                          8347
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8347,
                            "mutability": "mutable",
                            "name": "_previousOwner",
                            "nameLocation": "769:14:38",
                            "nodeType": "VariableDeclaration",
                            "scope": 8372,
                            "src": "761:22:38",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 8346,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "761:7:38",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8351,
                        "initialValue": {
                          "baseExpression": {
                            "id": 8348,
                            "name": "jobOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8303,
                            "src": "786:8:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 8350,
                          "indexExpression": {
                            "id": 8349,
                            "name": "_job",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8339,
                            "src": "795:4:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "786:14:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "761:39:38"
                      },
                      {
                        "expression": {
                          "id": 8358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 8352,
                              "name": "jobOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8303,
                              "src": "807:8:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 8354,
                            "indexExpression": {
                              "id": 8353,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8339,
                              "src": "816:4:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "807:14:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 8355,
                              "name": "jobPendingOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8309,
                              "src": "824:15:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 8357,
                            "indexExpression": {
                              "id": 8356,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8339,
                              "src": "840:4:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "824:21:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "807:38:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 8359,
                        "nodeType": "ExpressionStatement",
                        "src": "807:38:38"
                      },
                      {
                        "expression": {
                          "id": 8363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "851:28:38",
                          "subExpression": {
                            "baseExpression": {
                              "id": 8360,
                              "name": "jobPendingOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8309,
                              "src": "858:15:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 8362,
                            "indexExpression": {
                              "id": 8361,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8339,
                              "src": "874:4:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "858:21:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8364,
                        "nodeType": "ExpressionStatement",
                        "src": "851:28:38"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 8366,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "910:3:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8367,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "910:10:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8368,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8339,
                              "src": "922:4:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8369,
                              "name": "_previousOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8347,
                              "src": "928:14:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8365,
                            "name": "JobOwnershipAssent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13419,
                            "src": "891:18:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address,address)"
                            }
                          },
                          "id": 8370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "891:52:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8371,
                        "nodeType": "EmitStatement",
                        "src": "886:57:38"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8337,
                    "nodeType": "StructuredDocumentation",
                    "src": "631:35:38",
                    "text": "@inheritdoc IKeep3rJobOwnership"
                  },
                  "functionSelector": "59a2255e",
                  "id": 8373,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 8343,
                          "name": "_job",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8339,
                          "src": "749:4:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 8344,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8342,
                        "name": "onlyPendingJobOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 8405,
                        "src": "729:19:38"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "729:25:38"
                    }
                  ],
                  "name": "acceptJobOwnership",
                  "nameLocation": "678:18:38",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8341,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "720:8:38"
                  },
                  "parameters": {
                    "id": 8340,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8339,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "705:4:38",
                        "nodeType": "VariableDeclaration",
                        "scope": 8373,
                        "src": "697:12:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8338,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "697:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "696:14:38"
                  },
                  "returnParameters": {
                    "id": 8345,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "755:0:38"
                  },
                  "scope": 8406,
                  "src": "669:279:38",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 8388,
                    "nodeType": "Block",
                    "src": "988:73:38",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 8382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 8377,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "998:3:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 8378,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "998:10:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 8379,
                              "name": "jobOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8303,
                              "src": "1012:8:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 8381,
                            "indexExpression": {
                              "id": 8380,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8375,
                              "src": "1021:4:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1012:14:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "998:28:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8386,
                        "nodeType": "IfStatement",
                        "src": "994:55:38",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8383,
                              "name": "OnlyJobOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13422,
                              "src": "1035:12:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8384,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1035:14:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8385,
                          "nodeType": "RevertStatement",
                          "src": "1028:21:38"
                        }
                      },
                      {
                        "id": 8387,
                        "nodeType": "PlaceholderStatement",
                        "src": "1055:1:38"
                      }
                    ]
                  },
                  "id": 8389,
                  "name": "onlyJobOwner",
                  "nameLocation": "961:12:38",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 8376,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8375,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "982:4:38",
                        "nodeType": "VariableDeclaration",
                        "scope": 8389,
                        "src": "974:12:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8374,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "974:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "973:14:38"
                  },
                  "src": "952:109:38",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8404,
                    "nodeType": "Block",
                    "src": "1108:87:38",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 8398,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 8393,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "1118:3:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 8394,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1118:10:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 8395,
                              "name": "jobPendingOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8309,
                              "src": "1132:15:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 8397,
                            "indexExpression": {
                              "id": 8396,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8391,
                              "src": "1148:4:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1132:21:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1118:35:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8402,
                        "nodeType": "IfStatement",
                        "src": "1114:69:38",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8399,
                              "name": "OnlyPendingJobOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13425,
                              "src": "1162:19:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8400,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1162:21:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8401,
                          "nodeType": "RevertStatement",
                          "src": "1155:28:38"
                        }
                      },
                      {
                        "id": 8403,
                        "nodeType": "PlaceholderStatement",
                        "src": "1189:1:38"
                      }
                    ]
                  },
                  "id": 8405,
                  "name": "onlyPendingJobOwner",
                  "nameLocation": "1074:19:38",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 8392,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8391,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1102:4:38",
                        "nodeType": "VariableDeclaration",
                        "scope": 8405,
                        "src": "1094:12:38",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8390,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1094:7:38",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1093:14:38"
                  },
                  "src": "1065:130:38",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 8407,
              "src": "124:1073:38",
              "usedErrors": [
                13422,
                13425
              ]
            }
          ],
          "src": "32:1166:38"
        },
        "id": 38
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IPairManager": [
              11703
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rJobFundableCredits": [
              6508
            ],
            "Keep3rJobFundableLiquidity": [
              7939
            ],
            "Keep3rJobMigration": [
              8292
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rJobWorkable": [
              8908
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 8909,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8408,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:39"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol",
              "file": "./Keep3rJobMigration.sol",
              "id": 8409,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8909,
              "sourceUnit": 8293,
              "src": "65:34:39",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/IKeep3rHelper.sol",
              "file": "../../../interfaces/IKeep3rHelper.sol",
              "id": 8410,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8909,
              "sourceUnit": 11526,
              "src": "100:47:39",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rJobs.sol",
              "file": "../../../interfaces/peripherals/IKeep3rJobs.sol",
              "id": 8411,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8909,
              "sourceUnit": 13571,
              "src": "148:57:39",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 8412,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8909,
              "sourceUnit": 664,
              "src": "207:56:39",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
              "id": 8413,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8909,
              "sourceUnit": 913,
              "src": "264:65:39",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8414,
                    "name": "IKeep3rJobWorkable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13400,
                    "src": "370:18:39"
                  },
                  "id": 8415,
                  "nodeType": "InheritanceSpecifier",
                  "src": "370:18:39"
                },
                {
                  "baseName": {
                    "id": 8416,
                    "name": "Keep3rJobMigration",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 8292,
                    "src": "390:18:39"
                  },
                  "id": 8417,
                  "nodeType": "InheritanceSpecifier",
                  "src": "390:18:39"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 8908,
              "linearizedBaseContracts": [
                8908,
                8292,
                7939,
                6508,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                39,
                13305,
                13100,
                13505,
                13400
              ],
              "name": "Keep3rJobWorkable",
              "nameLocation": "349:17:39",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 8421,
                  "libraryName": {
                    "id": 8418,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "419:13:39"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "413:49:39",
                  "typeName": {
                    "id": 8420,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8419,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "437:24:39"
                    },
                    "referencedDeclaration": 1631,
                    "src": "437:24:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "id": 8425,
                  "libraryName": {
                    "id": 8422,
                    "name": "SafeERC20",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 912,
                    "src": "471:9:39"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "465:27:39",
                  "typeName": {
                    "id": 8424,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8423,
                      "name": "IERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 663,
                      "src": "485:6:39"
                    },
                    "referencedDeclaration": 663,
                    "src": "485:6:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$663",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 8427,
                  "mutability": "mutable",
                  "name": "_initialGas",
                  "nameLocation": "513:11:39",
                  "nodeType": "VariableDeclaration",
                  "scope": 8908,
                  "src": "496:28:39",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8426,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "496:7:39",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    13359
                  ],
                  "body": {
                    "id": 8453,
                    "nodeType": "Block",
                    "src": "644:143:39",
                    "statements": [
                      {
                        "expression": {
                          "id": 8439,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8436,
                            "name": "_initialGas",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8427,
                            "src": "650:11:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8437,
                              "name": "_getGasLeft",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8907,
                              "src": "664:11:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 8438,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "664:13:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "650:27:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8440,
                        "nodeType": "ExpressionStatement",
                        "src": "650:27:39"
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 8443,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8430,
                              "src": "705:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 8441,
                              "name": "_keepers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5368,
                              "src": "687:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 8442,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contains",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1712,
                            "src": "687:17:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                            }
                          },
                          "id": 8444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "687:26:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8452,
                        "nodeType": "IfStatement",
                        "src": "683:100:39",
                        "trueBody": {
                          "id": 8451,
                          "nodeType": "Block",
                          "src": "715:68:39",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 8446,
                                    "name": "_initialGas",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8427,
                                    "src": "745:11:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8445,
                                  "name": "KeeperValidation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13332,
                                  "src": "728:16:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 8447,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "728:29:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8448,
                              "nodeType": "EmitStatement",
                              "src": "723:34:39"
                            },
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 8449,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "772:4:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 8435,
                              "id": 8450,
                              "nodeType": "Return",
                              "src": "765:11:39"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8428,
                    "nodeType": "StructuredDocumentation",
                    "src": "529:34:39",
                    "text": "@inheritdoc IKeep3rJobWorkable"
                  },
                  "functionSelector": "6ba42aaa",
                  "id": 8454,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isKeeper",
                  "nameLocation": "575:8:39",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8432,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "610:8:39"
                  },
                  "parameters": {
                    "id": 8431,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8430,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "592:7:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8454,
                        "src": "584:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8429,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "584:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "583:17:39"
                  },
                  "returnParameters": {
                    "id": 8435,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8434,
                        "mutability": "mutable",
                        "name": "_isKeeper",
                        "nameLocation": "633:9:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8454,
                        "src": "628:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 8433,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "628:4:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "627:16:39"
                  },
                  "scope": 8908,
                  "src": "566:221:39",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13375
                  ],
                  "body": {
                    "id": 8511,
                    "nodeType": "Block",
                    "src": "1004:295:39",
                    "statements": [
                      {
                        "expression": {
                          "id": 8474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8471,
                            "name": "_initialGas",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8427,
                            "src": "1010:11:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8472,
                              "name": "_getGasLeft",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8907,
                              "src": "1024:11:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 8473,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1024:13:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1010:27:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8475,
                        "nodeType": "ExpressionStatement",
                        "src": "1010:27:39"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 8502,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 8493,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 8487,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 8478,
                                    "name": "_keeper",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8457,
                                    "src": "1072:7:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "id": 8476,
                                    "name": "_keepers",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5368,
                                    "src": "1054:8:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 8477,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "contains",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1712,
                                  "src": "1054:17:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                                  }
                                },
                                "id": 8479,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1054:26:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 8486,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "baseExpression": {
                                    "baseExpression": {
                                      "id": 8480,
                                      "name": "bonds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5394,
                                      "src": "1090:5:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 8482,
                                    "indexExpression": {
                                      "id": 8481,
                                      "name": "_keeper",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8457,
                                      "src": "1096:7:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1090:14:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 8484,
                                  "indexExpression": {
                                    "id": 8483,
                                    "name": "_bond",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8459,
                                    "src": "1105:5:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1090:21:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "id": 8485,
                                  "name": "_minBond",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8461,
                                  "src": "1115:8:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1090:33:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1054:69:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8492,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 8488,
                                  "name": "workCompleted",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5374,
                                  "src": "1133:13:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 8490,
                                "indexExpression": {
                                  "id": 8489,
                                  "name": "_keeper",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8457,
                                  "src": "1147:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1133:22:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 8491,
                                "name": "_earned",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8463,
                                "src": "1159:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1133:33:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "1054:112:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8501,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8499,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 8494,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "1176:5:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 8495,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "1176:15:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "baseExpression": {
                                  "id": 8496,
                                  "name": "firstSeen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5380,
                                  "src": "1194:9:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 8498,
                                "indexExpression": {
                                  "id": 8497,
                                  "name": "_keeper",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8457,
                                  "src": "1204:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1194:18:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1176:36:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "id": 8500,
                              "name": "_age",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8465,
                              "src": "1216:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1176:44:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1054:166:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8510,
                        "nodeType": "IfStatement",
                        "src": "1043:252:39",
                        "trueBody": {
                          "id": 8509,
                          "nodeType": "Block",
                          "src": "1227:68:39",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 8504,
                                    "name": "_initialGas",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8427,
                                    "src": "1257:11:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8503,
                                  "name": "KeeperValidation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13332,
                                  "src": "1240:16:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 8505,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1240:29:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8506,
                              "nodeType": "EmitStatement",
                              "src": "1235:34:39"
                            },
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 8507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1284:4:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 8470,
                              "id": 8508,
                              "nodeType": "Return",
                              "src": "1277:11:39"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8455,
                    "nodeType": "StructuredDocumentation",
                    "src": "791:34:39",
                    "text": "@inheritdoc IKeep3rJobWorkable"
                  },
                  "functionSelector": "f9d46cf2",
                  "id": 8512,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isBondedKeeper",
                  "nameLocation": "837:14:39",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8467,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "964:8:39"
                  },
                  "parameters": {
                    "id": 8466,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8457,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "865:7:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8512,
                        "src": "857:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8456,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "857:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8459,
                        "mutability": "mutable",
                        "name": "_bond",
                        "nameLocation": "886:5:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8512,
                        "src": "878:13:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8458,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "878:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8461,
                        "mutability": "mutable",
                        "name": "_minBond",
                        "nameLocation": "905:8:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8512,
                        "src": "897:16:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8460,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "897:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8463,
                        "mutability": "mutable",
                        "name": "_earned",
                        "nameLocation": "927:7:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8512,
                        "src": "919:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8462,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "919:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8465,
                        "mutability": "mutable",
                        "name": "_age",
                        "nameLocation": "948:4:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8512,
                        "src": "940:12:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8464,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "940:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "851:105:39"
                  },
                  "returnParameters": {
                    "id": 8470,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8469,
                        "mutability": "mutable",
                        "name": "_isBondedKeeper",
                        "nameLocation": "987:15:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8512,
                        "src": "982:20:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 8468,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "982:4:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "981:22:39"
                  },
                  "scope": 8908,
                  "src": "828:471:39",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13381
                  ],
                  "body": {
                    "id": 8641,
                    "nodeType": "Block",
                    "src": "1399:983:39",
                    "statements": [
                      {
                        "assignments": [
                          8520
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8520,
                            "mutability": "mutable",
                            "name": "_job",
                            "nameLocation": "1413:4:39",
                            "nodeType": "VariableDeclaration",
                            "scope": 8641,
                            "src": "1405:12:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 8519,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1405:7:39",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8523,
                        "initialValue": {
                          "expression": {
                            "id": 8521,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "1420:3:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 8522,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "1420:10:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1405:25:39"
                      },
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 8524,
                            "name": "disputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5386,
                            "src": "1440:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 8526,
                          "indexExpression": {
                            "id": 8525,
                            "name": "_job",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8520,
                            "src": "1449:4:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1440:14:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8530,
                        "nodeType": "IfStatement",
                        "src": "1436:40:39",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8527,
                              "name": "JobDisputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12996,
                              "src": "1463:11:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1463:13:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8529,
                          "nodeType": "RevertStatement",
                          "src": "1456:20:39"
                        }
                      },
                      {
                        "condition": {
                          "id": 8535,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "1486:21:39",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 8533,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8520,
                                "src": "1502:4:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 8531,
                                "name": "_jobs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5476,
                                "src": "1487:5:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 8532,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1712,
                              "src": "1487:14:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 8534,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1487:20:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8539,
                        "nodeType": "IfStatement",
                        "src": "1482:49:39",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8536,
                              "name": "JobUnapproved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13348,
                              "src": "1516:13:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8537,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1516:15:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8538,
                          "nodeType": "RevertStatement",
                          "src": "1509:22:39"
                        }
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 8541,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8520,
                              "src": "1568:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8540,
                            "name": "_updateJobCreditsIfNeeded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7567,
                            "src": "1542:25:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) returns (bool)"
                            }
                          },
                          "id": 8542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1542:31:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8557,
                        "nodeType": "IfStatement",
                        "src": "1538:156:39",
                        "trueBody": {
                          "id": 8556,
                          "nodeType": "Block",
                          "src": "1575:119:39",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 8544,
                                    "name": "_job",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8520,
                                    "src": "1611:4:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 8545,
                                      "name": "rewardedAt",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6554,
                                      "src": "1617:10:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 8547,
                                    "indexExpression": {
                                      "id": 8546,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8520,
                                      "src": "1628:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1617:16:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 8548,
                                      "name": "_jobLiquidityCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5407,
                                      "src": "1635:20:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 8550,
                                    "indexExpression": {
                                      "id": 8549,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8520,
                                      "src": "1656:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1635:26:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 8551,
                                      "name": "_jobPeriodCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5412,
                                      "src": "1663:17:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 8553,
                                    "indexExpression": {
                                      "id": 8552,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8520,
                                      "src": "1681:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1663:23:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8543,
                                  "name": "LiquidityCreditsReward",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13144,
                                  "src": "1588:22:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256,uint256,uint256)"
                                  }
                                },
                                "id": 8554,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1588:99:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8555,
                              "nodeType": "EmitStatement",
                              "src": "1583:104:39"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          8559,
                          8561,
                          8563
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8559,
                            "mutability": "mutable",
                            "name": "_boost",
                            "nameLocation": "1709:6:39",
                            "nodeType": "VariableDeclaration",
                            "scope": 8641,
                            "src": "1701:14:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8558,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1701:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 8561,
                            "mutability": "mutable",
                            "name": "_oneEthQuote",
                            "nameLocation": "1725:12:39",
                            "nodeType": "VariableDeclaration",
                            "scope": 8641,
                            "src": "1717:20:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8560,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1717:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 8563,
                            "mutability": "mutable",
                            "name": "_extraGas",
                            "nameLocation": "1747:9:39",
                            "nodeType": "VariableDeclaration",
                            "scope": 8641,
                            "src": "1739:17:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8562,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1739:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8574,
                        "initialValue": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 8568,
                                  "name": "bonds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5394,
                                  "src": "1805:5:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                    "typeString": "mapping(address => mapping(address => uint256))"
                                  }
                                },
                                "id": 8570,
                                "indexExpression": {
                                  "id": 8569,
                                  "name": "_keeper",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8515,
                                  "src": "1811:7:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1805:14:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 8572,
                              "indexExpression": {
                                "id": 8571,
                                "name": "keep3rV1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5594,
                                "src": "1820:8:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1805:24:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8565,
                                  "name": "keep3rHelper",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5602,
                                  "src": "1774:12:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 8564,
                                "name": "IKeep3rHelper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11525,
                                "src": "1760:13:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IKeep3rHelper_$11525_$",
                                  "typeString": "type(contract IKeep3rHelper)"
                                }
                              },
                              "id": 8566,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1760:27:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IKeep3rHelper_$11525",
                                "typeString": "contract IKeep3rHelper"
                              }
                            },
                            "id": 8567,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getPaymentParams",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11500,
                            "src": "1760:44:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                              "typeString": "function (uint256) view external returns (uint256,uint256,uint256)"
                            }
                          },
                          "id": 8573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1760:70:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1700:130:39"
                      },
                      {
                        "assignments": [
                          8576
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8576,
                            "mutability": "mutable",
                            "name": "_gasLeft",
                            "nameLocation": "1845:8:39",
                            "nodeType": "VariableDeclaration",
                            "scope": 8641,
                            "src": "1837:16:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8575,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1837:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8579,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 8577,
                            "name": "_getGasLeft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8907,
                            "src": "1856:11:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 8578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1856:13:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1837:32:39"
                      },
                      {
                        "assignments": [
                          8581
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8581,
                            "mutability": "mutable",
                            "name": "_payment",
                            "nameLocation": "1883:8:39",
                            "nodeType": "VariableDeclaration",
                            "scope": 8641,
                            "src": "1875:16:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8580,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1875:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8588,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 8583,
                              "name": "_gasLeft",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8576,
                              "src": "1912:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 8584,
                              "name": "_extraGas",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8563,
                              "src": "1922:9:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 8585,
                              "name": "_oneEthQuote",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8561,
                              "src": "1933:12:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 8586,
                              "name": "_boost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8559,
                              "src": "1947:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8582,
                            "name": "_calculatePayment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8890,
                            "src": "1894:17:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256,uint256) view returns (uint256)"
                            }
                          },
                          "id": 8587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1894:60:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1875:79:39"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8589,
                            "name": "_payment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8581,
                            "src": "1965:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 8590,
                              "name": "_jobLiquidityCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "1976:20:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8592,
                            "indexExpression": {
                              "id": 8591,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8520,
                              "src": "1997:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1976:26:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1965:37:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8626,
                        "nodeType": "IfStatement",
                        "src": "1961:305:39",
                        "trueBody": {
                          "id": 8625,
                          "nodeType": "Block",
                          "src": "2004:262:39",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8595,
                                    "name": "_job",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8520,
                                    "src": "2030:4:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 8594,
                                  "name": "_rewardJobCredits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7597,
                                  "src": "2012:17:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                                    "typeString": "function (address)"
                                  }
                                },
                                "id": 8596,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2012:23:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8597,
                              "nodeType": "ExpressionStatement",
                              "src": "2012:23:39"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 8599,
                                    "name": "_job",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8520,
                                    "src": "2071:4:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 8600,
                                      "name": "rewardedAt",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6554,
                                      "src": "2077:10:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 8602,
                                    "indexExpression": {
                                      "id": 8601,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8520,
                                      "src": "2088:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2077:16:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 8603,
                                      "name": "_jobLiquidityCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5407,
                                      "src": "2095:20:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 8605,
                                    "indexExpression": {
                                      "id": 8604,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8520,
                                      "src": "2116:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2095:26:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 8606,
                                      "name": "_jobPeriodCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5412,
                                      "src": "2123:17:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 8608,
                                    "indexExpression": {
                                      "id": 8607,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8520,
                                      "src": "2141:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2123:23:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8598,
                                  "name": "LiquidityCreditsReward",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13144,
                                  "src": "2048:22:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256,uint256,uint256)"
                                  }
                                },
                                "id": 8609,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2048:99:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8610,
                              "nodeType": "EmitStatement",
                              "src": "2043:104:39"
                            },
                            {
                              "expression": {
                                "id": 8614,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 8611,
                                  "name": "_gasLeft",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8576,
                                  "src": "2156:8:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 8612,
                                    "name": "_getGasLeft",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8907,
                                    "src": "2167:11:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                      "typeString": "function () view returns (uint256)"
                                    }
                                  },
                                  "id": 8613,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2167:13:39",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2156:24:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8615,
                              "nodeType": "ExpressionStatement",
                              "src": "2156:24:39"
                            },
                            {
                              "expression": {
                                "id": 8623,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 8616,
                                  "name": "_payment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8581,
                                  "src": "2188:8:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 8618,
                                      "name": "_gasLeft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8576,
                                      "src": "2217:8:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "id": 8619,
                                      "name": "_extraGas",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8563,
                                      "src": "2227:9:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "id": 8620,
                                      "name": "_oneEthQuote",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8561,
                                      "src": "2238:12:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "id": 8621,
                                      "name": "_boost",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8559,
                                      "src": "2252:6:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 8617,
                                    "name": "_calculatePayment",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8890,
                                    "src": "2199:17:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256,uint256,uint256) view returns (uint256)"
                                    }
                                  },
                                  "id": 8622,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2199:60:39",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2188:71:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 8624,
                              "nodeType": "ExpressionStatement",
                              "src": "2188:71:39"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8628,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8520,
                              "src": "2287:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8629,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8515,
                              "src": "2293:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8630,
                              "name": "_payment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8581,
                              "src": "2302:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8627,
                            "name": "_bondedPayment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8852,
                            "src": "2272:14:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 8631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2272:39:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8632,
                        "nodeType": "ExpressionStatement",
                        "src": "2272:39:39"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 8634,
                              "name": "keep3rV1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5594,
                              "src": "2333:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8635,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8520,
                              "src": "2343:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8636,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8515,
                              "src": "2349:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8637,
                              "name": "_payment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8581,
                              "src": "2358:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 8638,
                              "name": "_gasLeft",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8576,
                              "src": "2368:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8633,
                            "name": "KeeperWork",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13345,
                            "src": "2322:10:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256,uint256)"
                            }
                          },
                          "id": 8639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2322:55:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8640,
                        "nodeType": "EmitStatement",
                        "src": "2317:60:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8513,
                    "nodeType": "StructuredDocumentation",
                    "src": "1303:34:39",
                    "text": "@inheritdoc IKeep3rJobWorkable"
                  },
                  "functionSelector": "5feeb794",
                  "id": 8642,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "worked",
                  "nameLocation": "1349:6:39",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8517,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1390:8:39"
                  },
                  "parameters": {
                    "id": 8516,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8515,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1364:7:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8642,
                        "src": "1356:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8514,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1356:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1355:17:39"
                  },
                  "returnParameters": {
                    "id": 8518,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1399:0:39"
                  },
                  "scope": 8908,
                  "src": "1340:1042:39",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13389
                  ],
                  "body": {
                    "id": 8729,
                    "nodeType": "Block",
                    "src": "2497:616:39",
                    "statements": [
                      {
                        "assignments": [
                          8652
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8652,
                            "mutability": "mutable",
                            "name": "_job",
                            "nameLocation": "2511:4:39",
                            "nodeType": "VariableDeclaration",
                            "scope": 8729,
                            "src": "2503:12:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 8651,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2503:7:39",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8655,
                        "initialValue": {
                          "expression": {
                            "id": 8653,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "2518:3:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 8654,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "2518:10:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2503:25:39"
                      },
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 8656,
                            "name": "disputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5386,
                            "src": "2539:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 8658,
                          "indexExpression": {
                            "id": 8657,
                            "name": "_job",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8652,
                            "src": "2548:4:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2539:14:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8662,
                        "nodeType": "IfStatement",
                        "src": "2535:40:39",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8659,
                              "name": "JobDisputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12996,
                              "src": "2562:11:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8660,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2562:13:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8661,
                          "nodeType": "RevertStatement",
                          "src": "2555:20:39"
                        }
                      },
                      {
                        "condition": {
                          "id": 8667,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "2585:21:39",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 8665,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8652,
                                "src": "2601:4:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 8663,
                                "name": "_jobs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5476,
                                "src": "2586:5:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 8664,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1712,
                              "src": "2586:14:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 8666,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2586:20:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8671,
                        "nodeType": "IfStatement",
                        "src": "2581:49:39",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8668,
                              "name": "JobUnapproved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13348,
                              "src": "2615:13:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8669,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2615:15:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8670,
                          "nodeType": "RevertStatement",
                          "src": "2608:22:39"
                        }
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 8673,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8652,
                              "src": "2667:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 8672,
                            "name": "_updateJobCreditsIfNeeded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7567,
                            "src": "2641:25:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) returns (bool)"
                            }
                          },
                          "id": 8674,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2641:31:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8689,
                        "nodeType": "IfStatement",
                        "src": "2637:156:39",
                        "trueBody": {
                          "id": 8688,
                          "nodeType": "Block",
                          "src": "2674:119:39",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 8676,
                                    "name": "_job",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8652,
                                    "src": "2710:4:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 8677,
                                      "name": "rewardedAt",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6554,
                                      "src": "2716:10:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 8679,
                                    "indexExpression": {
                                      "id": 8678,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8652,
                                      "src": "2727:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2716:16:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 8680,
                                      "name": "_jobLiquidityCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5407,
                                      "src": "2734:20:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 8682,
                                    "indexExpression": {
                                      "id": 8681,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8652,
                                      "src": "2755:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2734:26:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 8683,
                                      "name": "_jobPeriodCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5412,
                                      "src": "2762:17:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 8685,
                                    "indexExpression": {
                                      "id": 8684,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8652,
                                      "src": "2780:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2762:23:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8675,
                                  "name": "LiquidityCreditsReward",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13144,
                                  "src": "2687:22:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256,uint256,uint256)"
                                  }
                                },
                                "id": 8686,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2687:99:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8687,
                              "nodeType": "EmitStatement",
                              "src": "2682:104:39"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8690,
                            "name": "_payment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8647,
                            "src": "2803:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 8691,
                              "name": "_jobLiquidityCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "2814:20:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8693,
                            "indexExpression": {
                              "id": 8692,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8652,
                              "src": "2835:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2814:26:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2803:37:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8713,
                        "nodeType": "IfStatement",
                        "src": "2799:193:39",
                        "trueBody": {
                          "id": 8712,
                          "nodeType": "Block",
                          "src": "2842:150:39",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8696,
                                    "name": "_job",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8652,
                                    "src": "2868:4:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 8695,
                                  "name": "_rewardJobCredits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7597,
                                  "src": "2850:17:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                                    "typeString": "function (address)"
                                  }
                                },
                                "id": 8697,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2850:23:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8698,
                              "nodeType": "ExpressionStatement",
                              "src": "2850:23:39"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 8700,
                                    "name": "_job",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8652,
                                    "src": "2909:4:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 8701,
                                      "name": "rewardedAt",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6554,
                                      "src": "2915:10:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 8703,
                                    "indexExpression": {
                                      "id": 8702,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8652,
                                      "src": "2926:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2915:16:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 8704,
                                      "name": "_jobLiquidityCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5407,
                                      "src": "2933:20:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 8706,
                                    "indexExpression": {
                                      "id": 8705,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8652,
                                      "src": "2954:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2933:26:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 8707,
                                      "name": "_jobPeriodCredits",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5412,
                                      "src": "2961:17:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 8709,
                                    "indexExpression": {
                                      "id": 8708,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8652,
                                      "src": "2979:4:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "2961:23:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8699,
                                  "name": "LiquidityCreditsReward",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13144,
                                  "src": "2886:22:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256,uint256,uint256)"
                                  }
                                },
                                "id": 8710,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2886:99:39",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 8711,
                              "nodeType": "EmitStatement",
                              "src": "2881:104:39"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8715,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8652,
                              "src": "3013:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8716,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8645,
                              "src": "3019:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8717,
                              "name": "_payment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8647,
                              "src": "3028:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8714,
                            "name": "_bondedPayment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8852,
                            "src": "2998:14:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 8718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2998:39:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8719,
                        "nodeType": "ExpressionStatement",
                        "src": "2998:39:39"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 8721,
                              "name": "keep3rV1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5594,
                              "src": "3059:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8722,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8652,
                              "src": "3069:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8723,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8645,
                              "src": "3075:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8724,
                              "name": "_payment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8647,
                              "src": "3084:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 8725,
                                "name": "_getGasLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8907,
                                "src": "3094:11:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 8726,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3094:13:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8720,
                            "name": "KeeperWork",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13345,
                            "src": "3048:10:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256,uint256)"
                            }
                          },
                          "id": 8727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3048:60:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8728,
                        "nodeType": "EmitStatement",
                        "src": "3043:65:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8643,
                    "nodeType": "StructuredDocumentation",
                    "src": "2386:34:39",
                    "text": "@inheritdoc IKeep3rJobWorkable"
                  },
                  "functionSelector": "11466d72",
                  "id": 8730,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bondedPayment",
                  "nameLocation": "2432:13:39",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8649,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2488:8:39"
                  },
                  "parameters": {
                    "id": 8648,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8645,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "2454:7:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8730,
                        "src": "2446:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8644,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2446:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8647,
                        "mutability": "mutable",
                        "name": "_payment",
                        "nameLocation": "2471:8:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8730,
                        "src": "2463:16:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8646,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2463:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2445:35:39"
                  },
                  "returnParameters": {
                    "id": 8650,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2497:0:39"
                  },
                  "scope": 8908,
                  "src": "2423:690:39",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13399
                  ],
                  "body": {
                    "id": 8805,
                    "nodeType": "Block",
                    "src": "3266:426:39",
                    "statements": [
                      {
                        "assignments": [
                          8742
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8742,
                            "mutability": "mutable",
                            "name": "_job",
                            "nameLocation": "3280:4:39",
                            "nodeType": "VariableDeclaration",
                            "scope": 8805,
                            "src": "3272:12:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 8741,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3272:7:39",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8745,
                        "initialValue": {
                          "expression": {
                            "id": 8743,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "3287:3:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 8744,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "3287:10:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3272:25:39"
                      },
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 8746,
                            "name": "disputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5386,
                            "src": "3308:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 8748,
                          "indexExpression": {
                            "id": 8747,
                            "name": "_job",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8742,
                            "src": "3317:4:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3308:14:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8752,
                        "nodeType": "IfStatement",
                        "src": "3304:40:39",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8749,
                              "name": "JobDisputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12996,
                              "src": "3331:11:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8750,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3331:13:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8751,
                          "nodeType": "RevertStatement",
                          "src": "3324:20:39"
                        }
                      },
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 8753,
                            "name": "disputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5386,
                            "src": "3354:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 8755,
                          "indexExpression": {
                            "id": 8754,
                            "name": "_keeper",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8735,
                            "src": "3363:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3354:17:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8759,
                        "nodeType": "IfStatement",
                        "src": "3350:40:39",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8756,
                              "name": "Disputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13785,
                              "src": "3380:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8757,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3380:10:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8758,
                          "nodeType": "RevertStatement",
                          "src": "3373:17:39"
                        }
                      },
                      {
                        "condition": {
                          "id": 8764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "3400:21:39",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 8762,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8742,
                                "src": "3416:4:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 8760,
                                "name": "_jobs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5476,
                                "src": "3401:5:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 8761,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1712,
                              "src": "3401:14:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 8763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3401:20:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8768,
                        "nodeType": "IfStatement",
                        "src": "3396:49:39",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8765,
                              "name": "JobUnapproved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13348,
                              "src": "3430:13:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8766,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3430:15:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8767,
                          "nodeType": "RevertStatement",
                          "src": "3423:22:39"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 8769,
                                "name": "jobTokenCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5402,
                                "src": "3455:15:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 8771,
                              "indexExpression": {
                                "id": 8770,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8742,
                                "src": "3471:4:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3455:21:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8773,
                            "indexExpression": {
                              "id": 8772,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8733,
                              "src": "3477:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3455:29:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 8774,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8737,
                            "src": "3487:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3455:39:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8779,
                        "nodeType": "IfStatement",
                        "src": "3451:71:39",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8776,
                              "name": "InsufficientFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13351,
                              "src": "3503:17:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8777,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3503:19:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8778,
                          "nodeType": "RevertStatement",
                          "src": "3496:26:39"
                        }
                      },
                      {
                        "expression": {
                          "id": 8786,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 8780,
                                "name": "jobTokenCredits",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5402,
                                "src": "3528:15:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 8783,
                              "indexExpression": {
                                "id": 8781,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8742,
                                "src": "3544:4:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3528:21:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8784,
                            "indexExpression": {
                              "id": 8782,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8733,
                              "src": "3550:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3528:29:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 8785,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8737,
                            "src": "3561:7:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3528:40:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8787,
                        "nodeType": "ExpressionStatement",
                        "src": "3528:40:39"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8792,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8735,
                              "src": "3602:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8793,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8737,
                              "src": "3611:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8789,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8733,
                                  "src": "3581:6:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 8788,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "3574:6:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 8790,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3574:14:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 8791,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 719,
                            "src": "3574:27:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$663_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 8794,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3574:45:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8795,
                        "nodeType": "ExpressionStatement",
                        "src": "3574:45:39"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 8797,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8733,
                              "src": "3641:6:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8798,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8742,
                              "src": "3649:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8799,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8735,
                              "src": "3655:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8800,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8737,
                              "src": "3664:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 8801,
                                "name": "_getGasLeft",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8907,
                                "src": "3673:11:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 8802,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3673:13:39",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8796,
                            "name": "KeeperWork",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13345,
                            "src": "3630:10:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256,uint256)"
                            }
                          },
                          "id": 8803,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3630:57:39",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8804,
                        "nodeType": "EmitStatement",
                        "src": "3625:62:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8731,
                    "nodeType": "StructuredDocumentation",
                    "src": "3117:34:39",
                    "text": "@inheritdoc IKeep3rJobWorkable"
                  },
                  "functionSelector": "dd2080d6",
                  "id": 8806,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "directTokenPayment",
                  "nameLocation": "3163:18:39",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8739,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3257:8:39"
                  },
                  "parameters": {
                    "id": 8738,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8733,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "3195:6:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8806,
                        "src": "3187:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8732,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3187:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8735,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3215:7:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8806,
                        "src": "3207:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8734,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3207:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8737,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "3236:7:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8806,
                        "src": "3228:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8736,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3228:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3181:66:39"
                  },
                  "returnParameters": {
                    "id": 8740,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3266:0:39"
                  },
                  "scope": 8908,
                  "src": "3154:538:39",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 8851,
                    "nodeType": "Block",
                    "src": "3794:245:39",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8819,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8815,
                            "name": "_payment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8812,
                            "src": "3804:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 8816,
                              "name": "_jobLiquidityCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "3815:20:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8818,
                            "indexExpression": {
                              "id": 8817,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8808,
                              "src": "3836:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3815:26:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3804:37:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8823,
                        "nodeType": "IfStatement",
                        "src": "3800:69:39",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8820,
                              "name": "InsufficientFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13351,
                              "src": "3850:17:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8821,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3850:19:39",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8822,
                          "nodeType": "RevertStatement",
                          "src": "3843:26:39"
                        }
                      },
                      {
                        "expression": {
                          "id": 8829,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 8824,
                              "name": "workedAt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6560,
                              "src": "3876:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8826,
                            "indexExpression": {
                              "id": 8825,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8808,
                              "src": "3885:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3876:14:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 8827,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "3893:5:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 8828,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "3893:15:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3876:32:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8830,
                        "nodeType": "ExpressionStatement",
                        "src": "3876:32:39"
                      },
                      {
                        "expression": {
                          "id": 8835,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 8831,
                              "name": "_jobLiquidityCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "3914:20:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8833,
                            "indexExpression": {
                              "id": 8832,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8808,
                              "src": "3935:4:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3914:26:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 8834,
                            "name": "_payment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8812,
                            "src": "3944:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3914:38:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8836,
                        "nodeType": "ExpressionStatement",
                        "src": "3914:38:39"
                      },
                      {
                        "expression": {
                          "id": 8843,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 8837,
                                "name": "bonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5394,
                                "src": "3958:5:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 8840,
                              "indexExpression": {
                                "id": 8838,
                                "name": "_keeper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8810,
                                "src": "3964:7:39",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3958:14:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8841,
                            "indexExpression": {
                              "id": 8839,
                              "name": "keep3rV1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5594,
                              "src": "3973:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3958:24:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 8842,
                            "name": "_payment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8812,
                            "src": "3986:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3958:36:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8844,
                        "nodeType": "ExpressionStatement",
                        "src": "3958:36:39"
                      },
                      {
                        "expression": {
                          "id": 8849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 8845,
                              "name": "workCompleted",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5374,
                              "src": "4000:13:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 8847,
                            "indexExpression": {
                              "id": 8846,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8810,
                              "src": "4014:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4000:22:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 8848,
                            "name": "_payment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8812,
                            "src": "4026:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4000:34:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8850,
                        "nodeType": "ExpressionStatement",
                        "src": "4000:34:39"
                      }
                    ]
                  },
                  "id": 8852,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_bondedPayment",
                  "nameLocation": "3705:14:39",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8813,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8808,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "3733:4:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8852,
                        "src": "3725:12:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8807,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3725:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8810,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3751:7:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8852,
                        "src": "3743:15:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8809,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3743:7:39",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8812,
                        "mutability": "mutable",
                        "name": "_payment",
                        "nameLocation": "3772:8:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8852,
                        "src": "3764:16:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8811,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3764:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3719:65:39"
                  },
                  "returnParameters": {
                    "id": 8814,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3794:0:39"
                  },
                  "scope": 8908,
                  "src": "3696:343:39",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8889,
                    "nodeType": "Block",
                    "src": "4614:147:39",
                    "statements": [
                      {
                        "assignments": [
                          8867
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 8867,
                            "mutability": "mutable",
                            "name": "_accountedGas",
                            "nameLocation": "4628:13:39",
                            "nodeType": "VariableDeclaration",
                            "scope": 8889,
                            "src": "4620:21:39",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 8866,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4620:7:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 8873,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8872,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8870,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 8868,
                              "name": "_initialGas",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8427,
                              "src": "4644:11:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 8869,
                              "name": "_gasLeft",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8855,
                              "src": "4658:8:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4644:22:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 8871,
                            "name": "_extraGas",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8857,
                            "src": "4669:9:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4644:34:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4620:58:39"
                      },
                      {
                        "expression": {
                          "id": 8887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8874,
                            "name": "_payment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8864,
                            "src": "4684:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8886,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8883,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 8880,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 8877,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "id": 8875,
                                                "name": "_accountedGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8867,
                                                "src": "4698:13:39",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "*",
                                              "rightExpression": {
                                                "id": 8876,
                                                "name": "_boost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 8861,
                                                "src": "4714:6:39",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "src": "4698:22:39",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 8878,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "4697:24:39",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 8879,
                                          "name": "_BASE",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5640,
                                          "src": "4724:5:39",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "4697:32:39",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 8881,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "4696:34:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 8882,
                                    "name": "_oneEthQuote",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8859,
                                    "src": "4733:12:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "4696:49:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 8884,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "4695:51:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 8885,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4749:7:39",
                              "subdenomination": "ether",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                "typeString": "int_const 1000000000000000000"
                              },
                              "value": "1"
                            },
                            "src": "4695:61:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4684:72:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8888,
                        "nodeType": "ExpressionStatement",
                        "src": "4684:72:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8853,
                    "nodeType": "StructuredDocumentation",
                    "src": "4043:405:39",
                    "text": "@notice Calculate amount to be payed in KP3R, taking into account multiple parameters\n @param _gasLeft Amount of gas left after working the job\n @param _extraGas Amount of expected unaccounted gas\n @param _oneEthQuote Amount of KP3R equivalent to 1 ETH\n @param _boost Reward given to the keeper for having bonded KP3R tokens\n @return _payment Amount to be payed in KP3R tokens"
                  },
                  "id": 8890,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_calculatePayment",
                  "nameLocation": "4460:17:39",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8862,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8855,
                        "mutability": "mutable",
                        "name": "_gasLeft",
                        "nameLocation": "4491:8:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8890,
                        "src": "4483:16:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8854,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4483:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8857,
                        "mutability": "mutable",
                        "name": "_extraGas",
                        "nameLocation": "4513:9:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8890,
                        "src": "4505:17:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8856,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4505:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8859,
                        "mutability": "mutable",
                        "name": "_oneEthQuote",
                        "nameLocation": "4536:12:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8890,
                        "src": "4528:20:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8858,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4528:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8861,
                        "mutability": "mutable",
                        "name": "_boost",
                        "nameLocation": "4562:6:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8890,
                        "src": "4554:14:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8860,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4554:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4477:95:39"
                  },
                  "returnParameters": {
                    "id": 8865,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8864,
                        "mutability": "mutable",
                        "name": "_payment",
                        "nameLocation": "4604:8:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8890,
                        "src": "4596:16:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8863,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4596:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4595:18:39"
                  },
                  "scope": 8908,
                  "src": "4451:310:39",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8906,
                    "nodeType": "Block",
                    "src": "5022:43:39",
                    "statements": [
                      {
                        "expression": {
                          "id": 8904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8896,
                            "name": "_gasLeft",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8894,
                            "src": "5028:8:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 8903,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 8900,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 8897,
                                      "name": "gasleft",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -7,
                                      "src": "5040:7:39",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                                        "typeString": "function () view returns (uint256)"
                                      }
                                    },
                                    "id": 8898,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5040:9:39",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "hexValue": "3634",
                                    "id": 8899,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5052:2:39",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  "src": "5040:14:39",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 8901,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "5039:16:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "hexValue": "3633",
                              "id": 8902,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5058:2:39",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_63_by_1",
                                "typeString": "int_const 63"
                              },
                              "value": "63"
                            },
                            "src": "5039:21:39",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5028:32:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8905,
                        "nodeType": "ExpressionStatement",
                        "src": "5028:32:39"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8891,
                    "nodeType": "StructuredDocumentation",
                    "src": "4765:190:39",
                    "text": "@notice Return the gas left and add 1/64 in order to match real gas left at first level of depth (EIP-150)\n @return _gasLeft Amount of gas left recording taking into account EIP-150"
                  },
                  "id": 8907,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getGasLeft",
                  "nameLocation": "4967:11:39",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8892,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4978:2:39"
                  },
                  "returnParameters": {
                    "id": 8895,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8894,
                        "mutability": "mutable",
                        "name": "_gasLeft",
                        "nameLocation": "5012:8:39",
                        "nodeType": "VariableDeclaration",
                        "scope": 8907,
                        "src": "5004:16:39",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8893,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5004:7:39",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5003:18:39"
                  },
                  "scope": 8908,
                  "src": "4958:107:39",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 8909,
              "src": "331:4736:39",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13061,
                13064,
                13067,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13348,
                13351,
                13422,
                13425,
                13474,
                13477,
                13480,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:5036:39"
        },
        "id": 39
      },
      "solidity/contracts/peripherals/jobs/Keep3rJobs.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobs.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rDisputable": [
              13033
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IPairManager": [
              11703
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rDisputable": [
              5578
            ],
            "Keep3rJobDisputable": [
              6259
            ],
            "Keep3rJobFundableCredits": [
              6508
            ],
            "Keep3rJobFundableLiquidity": [
              7939
            ],
            "Keep3rJobManager": [
              8000
            ],
            "Keep3rJobMigration": [
              8292
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rJobWorkable": [
              8908
            ],
            "Keep3rJobs": [
              8920
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 8921,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8910,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:40"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol",
              "file": "./Keep3rJobDisputable.sol",
              "id": 8911,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8921,
              "sourceUnit": 6260,
              "src": "65:35:40",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol",
              "file": "./Keep3rJobWorkable.sol",
              "id": 8912,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8921,
              "sourceUnit": 8909,
              "src": "101:33:40",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol",
              "file": "./Keep3rJobManager.sol",
              "id": 8913,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8921,
              "sourceUnit": 8001,
              "src": "135:32:40",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8914,
                    "name": "Keep3rJobDisputable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 6259,
                    "src": "201:19:40"
                  },
                  "id": 8915,
                  "nodeType": "InheritanceSpecifier",
                  "src": "201:19:40"
                },
                {
                  "baseName": {
                    "id": 8916,
                    "name": "Keep3rJobManager",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 8000,
                    "src": "222:16:40"
                  },
                  "id": 8917,
                  "nodeType": "InheritanceSpecifier",
                  "src": "222:16:40"
                },
                {
                  "baseName": {
                    "id": 8918,
                    "name": "Keep3rJobWorkable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 8908,
                    "src": "240:17:40"
                  },
                  "id": 8919,
                  "nodeType": "InheritanceSpecifier",
                  "src": "240:17:40"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 8920,
              "linearizedBaseContracts": [
                8920,
                8908,
                8292,
                8000,
                6259,
                7939,
                6508,
                5934,
                5578,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                39,
                13326,
                13033,
                13559,
                13305,
                13100,
                13505,
                13400
              ],
              "name": "Keep3rJobs",
              "nameLocation": "187:10:40",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 8921,
              "src": "169:91:40",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13017,
                13020,
                13061,
                13064,
                13067,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13316,
                13319,
                13348,
                13351,
                13422,
                13425,
                13474,
                13477,
                13480,
                13535,
                13538,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:229:40"
        },
        "id": 40
      },
      "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rDisputable": [
              13033
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IKeep3rV1": [
              12600
            ],
            "IKeep3rV1Proxy": [
              12773
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rDisputable": [
              5578
            ],
            "Keep3rKeeperDisputable": [
              9079
            ],
            "Keep3rKeeperFundable": [
              9479
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 9080,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8922,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:41"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol",
              "file": "./Keep3rKeeperFundable.sol",
              "id": 8923,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9080,
              "sourceUnit": 9480,
              "src": "65:36:41",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rDisputable.sol",
              "file": "../Keep3rDisputable.sol",
              "id": 8924,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9080,
              "sourceUnit": 5579,
              "src": "102:33:41",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/external/IKeep3rV1.sol",
              "file": "../../../interfaces/external/IKeep3rV1.sol",
              "id": 8925,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9080,
              "sourceUnit": 12601,
              "src": "136:52:41",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rKeepers.sol",
              "file": "../../../interfaces/peripherals/IKeep3rKeepers.sol",
              "id": 8926,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9080,
              "sourceUnit": 13664,
              "src": "189:60:41",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 8927,
                    "name": "IKeep3rKeeperDisputable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13659,
                    "src": "295:23:41"
                  },
                  "id": 8928,
                  "nodeType": "InheritanceSpecifier",
                  "src": "295:23:41"
                },
                {
                  "baseName": {
                    "id": 8929,
                    "name": "Keep3rDisputable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5578,
                    "src": "320:16:41"
                  },
                  "id": 8930,
                  "nodeType": "InheritanceSpecifier",
                  "src": "320:16:41"
                },
                {
                  "baseName": {
                    "id": 8931,
                    "name": "Keep3rKeeperFundable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 9479,
                    "src": "338:20:41"
                  },
                  "id": 8932,
                  "nodeType": "InheritanceSpecifier",
                  "src": "338:20:41"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 9079,
              "linearizedBaseContracts": [
                9079,
                9479,
                5934,
                5578,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                39,
                13623,
                13033,
                13659
              ],
              "name": "Keep3rKeeperDisputable",
              "nameLocation": "269:22:41",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 8936,
                  "libraryName": {
                    "id": 8933,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "369:13:41"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "363:49:41",
                  "typeName": {
                    "id": 8935,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8934,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "387:24:41"
                    },
                    "referencedDeclaration": 1631,
                    "src": "387:24:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "id": 8940,
                  "libraryName": {
                    "id": 8937,
                    "name": "SafeERC20",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 912,
                    "src": "421:9:41"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "415:27:41",
                  "typeName": {
                    "id": 8939,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8938,
                      "name": "IERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 663,
                      "src": "435:6:41"
                    },
                    "referencedDeclaration": 663,
                    "src": "435:6:41",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$663",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "baseFunctions": [
                    13652
                  ],
                  "body": {
                    "id": 8979,
                    "nodeType": "Block",
                    "src": "629:185:41",
                    "statements": [
                      {
                        "condition": {
                          "id": 8958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "639:18:41",
                          "subExpression": {
                            "baseExpression": {
                              "id": 8955,
                              "name": "disputes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5386,
                              "src": "640:8:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 8957,
                            "indexExpression": {
                              "id": 8956,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8943,
                              "src": "649:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "640:17:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8962,
                        "nodeType": "IfStatement",
                        "src": "635:44:41",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8959,
                              "name": "NotDisputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13020,
                              "src": "666:11:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8960,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "666:13:41",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8961,
                          "nodeType": "RevertStatement",
                          "src": "659:20:41"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8964,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8943,
                              "src": "692:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8965,
                              "name": "_bonded",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8945,
                              "src": "701:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 8966,
                              "name": "_bondAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8947,
                              "src": "710:11:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 8967,
                              "name": "_unbondAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8949,
                              "src": "723:13:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8963,
                            "name": "_slash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9078,
                            "src": "685:6:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 8968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "685:52:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8969,
                        "nodeType": "ExpressionStatement",
                        "src": "685:52:41"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 8971,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8943,
                              "src": "760:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 8972,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "769:3:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8973,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "769:10:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 8976,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 8974,
                                "name": "_bondAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8947,
                                "src": "781:11:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "id": 8975,
                                "name": "_unbondAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8949,
                                "src": "795:13:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "781:27:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8970,
                            "name": "KeeperSlash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13633,
                            "src": "748:11:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 8977,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "748:61:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8978,
                        "nodeType": "EmitStatement",
                        "src": "743:66:41"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8941,
                    "nodeType": "StructuredDocumentation",
                    "src": "446:39:41",
                    "text": "@inheritdoc IKeep3rKeeperDisputable"
                  },
                  "functionSelector": "c20297f0",
                  "id": 8980,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 8953,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8952,
                        "name": "onlySlasher",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6086,
                        "src": "617:11:41"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "617:11:41"
                    }
                  ],
                  "name": "slash",
                  "nameLocation": "497:5:41",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8951,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "608:8:41"
                  },
                  "parameters": {
                    "id": 8950,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8943,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "516:7:41",
                        "nodeType": "VariableDeclaration",
                        "scope": 8980,
                        "src": "508:15:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8942,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "508:7:41",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8945,
                        "mutability": "mutable",
                        "name": "_bonded",
                        "nameLocation": "537:7:41",
                        "nodeType": "VariableDeclaration",
                        "scope": 8980,
                        "src": "529:15:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8944,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "529:7:41",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8947,
                        "mutability": "mutable",
                        "name": "_bondAmount",
                        "nameLocation": "558:11:41",
                        "nodeType": "VariableDeclaration",
                        "scope": 8980,
                        "src": "550:19:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8946,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "550:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8949,
                        "mutability": "mutable",
                        "name": "_unbondAmount",
                        "nameLocation": "583:13:41",
                        "nodeType": "VariableDeclaration",
                        "scope": 8980,
                        "src": "575:21:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8948,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "575:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "502:98:41"
                  },
                  "returnParameters": {
                    "id": 8954,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "629:0:41"
                  },
                  "scope": 9079,
                  "src": "488:326:41",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    13658
                  ],
                  "body": {
                    "id": 9024,
                    "nodeType": "Block",
                    "src": "923:221:41",
                    "statements": [
                      {
                        "condition": {
                          "id": 8992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "933:18:41",
                          "subExpression": {
                            "baseExpression": {
                              "id": 8989,
                              "name": "disputes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5386,
                              "src": "934:8:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 8991,
                            "indexExpression": {
                              "id": 8990,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8983,
                              "src": "943:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "934:17:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8996,
                        "nodeType": "IfStatement",
                        "src": "929:44:41",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 8993,
                              "name": "NotDisputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13020,
                              "src": "960:11:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 8994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "960:13:41",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 8995,
                          "nodeType": "RevertStatement",
                          "src": "953:20:41"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9000,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8983,
                              "src": "995:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 8997,
                              "name": "_keepers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5368,
                              "src": "979:8:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 8999,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "remove",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1685,
                            "src": "979:15:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 9001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "979:24:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9002,
                        "nodeType": "ExpressionStatement",
                        "src": "979:24:41"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9004,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8983,
                              "src": "1016:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9005,
                              "name": "keep3rV1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5594,
                              "src": "1025:8:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 9006,
                                  "name": "bonds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5394,
                                  "src": "1035:5:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                    "typeString": "mapping(address => mapping(address => uint256))"
                                  }
                                },
                                "id": 9008,
                                "indexExpression": {
                                  "id": 9007,
                                  "name": "_keeper",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8983,
                                  "src": "1041:7:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1035:14:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 9010,
                              "indexExpression": {
                                "id": 9009,
                                "name": "keep3rV1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5594,
                                "src": "1050:8:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1035:24:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "baseExpression": {
                                "baseExpression": {
                                  "id": 9011,
                                  "name": "pendingUnbonds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5466,
                                  "src": "1061:14:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                    "typeString": "mapping(address => mapping(address => uint256))"
                                  }
                                },
                                "id": 9013,
                                "indexExpression": {
                                  "id": 9012,
                                  "name": "_keeper",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8983,
                                  "src": "1076:7:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1061:23:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 9015,
                              "indexExpression": {
                                "id": 9014,
                                "name": "keep3rV1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5594,
                                "src": "1085:8:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1061:33:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9003,
                            "name": "_slash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9078,
                            "src": "1009:6:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 9016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1009:86:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9017,
                        "nodeType": "ExpressionStatement",
                        "src": "1009:86:41"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 9019,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8983,
                              "src": "1119:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 9020,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1128:3:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9021,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1128:10:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 9018,
                            "name": "KeeperRevoke",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13640,
                            "src": "1106:12:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 9022,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1106:33:41",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9023,
                        "nodeType": "EmitStatement",
                        "src": "1101:38:41"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8981,
                    "nodeType": "StructuredDocumentation",
                    "src": "818:39:41",
                    "text": "@inheritdoc IKeep3rKeeperDisputable"
                  },
                  "functionSelector": "74a8f103",
                  "id": 9025,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 8987,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 8986,
                        "name": "onlySlasher",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6086,
                        "src": "911:11:41"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "911:11:41"
                    }
                  ],
                  "name": "revoke",
                  "nameLocation": "869:6:41",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 8985,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "902:8:41"
                  },
                  "parameters": {
                    "id": 8984,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8983,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "884:7:41",
                        "nodeType": "VariableDeclaration",
                        "scope": 9025,
                        "src": "876:15:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8982,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "876:7:41",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "875:17:41"
                  },
                  "returnParameters": {
                    "id": 8988,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "923:0:41"
                  },
                  "scope": 9079,
                  "src": "860:284:41",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9077,
                    "nodeType": "Block",
                    "src": "1271:259:41",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9038,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9036,
                            "name": "_bonded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9029,
                            "src": "1281:7:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9037,
                            "name": "keep3rV1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5594,
                            "src": "1292:8:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1281:19:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9060,
                        "nodeType": "IfStatement",
                        "src": "1277:150:41",
                        "trueBody": {
                          "id": 9059,
                          "nodeType": "Block",
                          "src": "1302:125:41",
                          "statements": [
                            {
                              "clauses": [
                                {
                                  "block": {
                                    "id": 9051,
                                    "nodeType": "Block",
                                    "src": "1395:2:41",
                                    "statements": []
                                  },
                                  "errorName": "",
                                  "id": 9052,
                                  "nodeType": "TryCatchClause",
                                  "parameters": {
                                    "id": 9050,
                                    "nodeType": "ParameterList",
                                    "parameters": [
                                      {
                                        "constant": false,
                                        "id": 9049,
                                        "mutability": "mutable",
                                        "name": "",
                                        "nameLocation": "-1:-1:-1",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 9052,
                                        "src": "1389:4:41",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "typeName": {
                                          "id": 9048,
                                          "name": "bool",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1389:4:41",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "src": "1388:6:41"
                                  },
                                  "src": "1380:17:41"
                                },
                                {
                                  "block": {
                                    "id": 9056,
                                    "nodeType": "Block",
                                    "src": "1419:2:41",
                                    "statements": []
                                  },
                                  "errorName": "",
                                  "id": 9057,
                                  "nodeType": "TryCatchClause",
                                  "parameters": {
                                    "id": 9055,
                                    "nodeType": "ParameterList",
                                    "parameters": [
                                      {
                                        "constant": false,
                                        "id": 9054,
                                        "mutability": "mutable",
                                        "name": "",
                                        "nameLocation": "-1:-1:-1",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 9057,
                                        "src": "1405:12:41",
                                        "stateVariable": false,
                                        "storageLocation": "memory",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes"
                                        },
                                        "typeName": {
                                          "id": 9053,
                                          "name": "bytes",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1405:5:41",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "src": "1404:14:41"
                                  },
                                  "src": "1398:23:41"
                                }
                              ],
                              "externalCall": {
                                "arguments": [
                                  {
                                    "id": 9043,
                                    "name": "governance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5266,
                                    "src": "1339:10:41",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 9046,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 9044,
                                      "name": "_bondAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9031,
                                      "src": "1351:11:41",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 9045,
                                      "name": "_unbondAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9033,
                                      "src": "1365:13:41",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1351:27:41",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 9040,
                                        "name": "_bonded",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9029,
                                        "src": "1321:7:41",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 9039,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 663,
                                      "src": "1314:6:41",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 9041,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1314:15:41",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$663",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 9042,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 612,
                                  "src": "1314:24:41",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,uint256) external returns (bool)"
                                  }
                                },
                                "id": 9047,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1314:65:41",
                                "tryCall": true,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 9058,
                              "nodeType": "TryStatement",
                              "src": "1310:111:41"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 9067,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9061,
                                "name": "bonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5394,
                                "src": "1432:5:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9064,
                              "indexExpression": {
                                "id": 9062,
                                "name": "_keeper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9027,
                                "src": "1438:7:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1432:14:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9065,
                            "indexExpression": {
                              "id": 9063,
                              "name": "_bonded",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9029,
                              "src": "1447:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1432:23:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 9066,
                            "name": "_bondAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9031,
                            "src": "1459:11:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1432:38:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9068,
                        "nodeType": "ExpressionStatement",
                        "src": "1432:38:41"
                      },
                      {
                        "expression": {
                          "id": 9075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9069,
                                "name": "pendingUnbonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5466,
                                "src": "1476:14:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9072,
                              "indexExpression": {
                                "id": 9070,
                                "name": "_keeper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9027,
                                "src": "1491:7:41",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1476:23:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9073,
                            "indexExpression": {
                              "id": 9071,
                              "name": "_bonded",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9029,
                              "src": "1500:7:41",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1476:32:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 9074,
                            "name": "_unbondAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9033,
                            "src": "1512:13:41",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1476:49:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9076,
                        "nodeType": "ExpressionStatement",
                        "src": "1476:49:41"
                      }
                    ]
                  },
                  "id": 9078,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_slash",
                  "nameLocation": "1157:6:41",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9034,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9027,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1177:7:41",
                        "nodeType": "VariableDeclaration",
                        "scope": 9078,
                        "src": "1169:15:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9026,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1169:7:41",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9029,
                        "mutability": "mutable",
                        "name": "_bonded",
                        "nameLocation": "1198:7:41",
                        "nodeType": "VariableDeclaration",
                        "scope": 9078,
                        "src": "1190:15:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9028,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1190:7:41",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9031,
                        "mutability": "mutable",
                        "name": "_bondAmount",
                        "nameLocation": "1219:11:41",
                        "nodeType": "VariableDeclaration",
                        "scope": 9078,
                        "src": "1211:19:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9030,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1211:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9033,
                        "mutability": "mutable",
                        "name": "_unbondAmount",
                        "nameLocation": "1244:13:41",
                        "nodeType": "VariableDeclaration",
                        "scope": 9078,
                        "src": "1236:21:41",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9032,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1236:7:41",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1163:98:41"
                  },
                  "returnParameters": {
                    "id": 9035,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1271:0:41"
                  },
                  "scope": 9079,
                  "src": "1148:382:41",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 9080,
              "src": "251:1281:41",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13017,
                13020,
                13594,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:1501:41"
        },
        "id": 41
      },
      "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IKeep3rV1": [
              12600
            ],
            "IKeep3rV1Proxy": [
              12773
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rKeeperFundable": [
              9479
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 9480,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9081,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:42"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rAccountance.sol",
              "file": "../Keep3rAccountance.sol",
              "id": 9082,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9480,
              "sourceUnit": 5508,
              "src": "65:34:42",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rParameters.sol",
              "file": "../Keep3rParameters.sol",
              "id": 9083,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9480,
              "sourceUnit": 5935,
              "src": "100:33:42",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rKeepers.sol",
              "file": "../../../interfaces/peripherals/IKeep3rKeepers.sol",
              "id": 9084,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9480,
              "sourceUnit": 13664,
              "src": "134:60:42",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/external/IKeep3rV1.sol",
              "file": "../../../interfaces/external/IKeep3rV1.sol",
              "id": 9085,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9480,
              "sourceUnit": 12601,
              "src": "196:52:42",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/external/IKeep3rV1Proxy.sol",
              "file": "../../../interfaces/external/IKeep3rV1Proxy.sol",
              "id": 9086,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9480,
              "sourceUnit": 12774,
              "src": "249:57:42",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
              "file": "@openzeppelin/contracts/security/ReentrancyGuard.sol",
              "id": 9087,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9480,
              "sourceUnit": 40,
              "src": "308:62:42",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 9088,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9480,
              "sourceUnit": 664,
              "src": "371:56:42",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
              "id": 9089,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9480,
              "sourceUnit": 913,
              "src": "428:65:42",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9090,
                    "name": "IKeep3rKeeperFundable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13623,
                    "src": "537:21:42"
                  },
                  "id": 9091,
                  "nodeType": "InheritanceSpecifier",
                  "src": "537:21:42"
                },
                {
                  "baseName": {
                    "id": 9092,
                    "name": "ReentrancyGuard",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 39,
                    "src": "560:15:42"
                  },
                  "id": 9093,
                  "nodeType": "InheritanceSpecifier",
                  "src": "560:15:42"
                },
                {
                  "baseName": {
                    "id": 9094,
                    "name": "Keep3rParameters",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5934,
                    "src": "577:16:42"
                  },
                  "id": 9095,
                  "nodeType": "InheritanceSpecifier",
                  "src": "577:16:42"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 9479,
              "linearizedBaseContracts": [
                9479,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                39,
                13623
              ],
              "name": "Keep3rKeeperFundable",
              "nameLocation": "513:20:42",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 9099,
                  "libraryName": {
                    "id": 9096,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "604:13:42"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "598:49:42",
                  "typeName": {
                    "id": 9098,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 9097,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "622:24:42"
                    },
                    "referencedDeclaration": 1631,
                    "src": "622:24:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "id": 9103,
                  "libraryName": {
                    "id": 9100,
                    "name": "SafeERC20",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 912,
                    "src": "656:9:42"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "650:27:42",
                  "typeName": {
                    "id": 9102,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 9101,
                      "name": "IERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 663,
                      "src": "670:6:42"
                    },
                    "referencedDeclaration": 663,
                    "src": "670:6:42",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$663",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "baseFunctions": [
                    13602
                  ],
                  "body": {
                    "id": 9205,
                    "nodeType": "Block",
                    "src": "801:529:42",
                    "statements": [
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 9114,
                            "name": "disputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5386,
                            "src": "811:8:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 9117,
                          "indexExpression": {
                            "expression": {
                              "id": 9115,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "820:3:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 9116,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "820:10:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "811:20:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9121,
                        "nodeType": "IfStatement",
                        "src": "807:43:42",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9118,
                              "name": "Disputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13785,
                              "src": "840:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 9119,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "840:10:42",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 9120,
                          "nodeType": "RevertStatement",
                          "src": "833:17:42"
                        }
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9124,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "875:3:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9125,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "875:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 9122,
                              "name": "_jobs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "860:5:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 9123,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contains",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1712,
                            "src": "860:14:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                            }
                          },
                          "id": 9126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "860:26:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9130,
                        "nodeType": "IfStatement",
                        "src": "856:52:42",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9127,
                              "name": "AlreadyAJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13594,
                              "src": "895:11:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 9128,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "895:13:42",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 9129,
                          "nodeType": "RevertStatement",
                          "src": "888:20:42"
                        }
                      },
                      {
                        "expression": {
                          "id": 9141,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9131,
                                "name": "canActivateAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5450,
                                "src": "914:16:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9135,
                              "indexExpression": {
                                "expression": {
                                  "id": 9132,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "931:3:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9133,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "931:10:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "914:28:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9136,
                            "indexExpression": {
                              "id": 9134,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9106,
                              "src": "943:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "914:38:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9140,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 9137,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "955:5:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 9138,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "955:15:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 9139,
                              "name": "bondTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5611,
                              "src": "973:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "955:26:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "914:67:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9142,
                        "nodeType": "ExpressionStatement",
                        "src": "914:67:42"
                      },
                      {
                        "assignments": [
                          9144
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9144,
                            "mutability": "mutable",
                            "name": "_before",
                            "nameLocation": "996:7:42",
                            "nodeType": "VariableDeclaration",
                            "scope": 9205,
                            "src": "988:15:42",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 9143,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "988:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9154,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 9151,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "1041:4:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Keep3rKeeperFundable_$9479",
                                    "typeString": "contract Keep3rKeeperFundable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Keep3rKeeperFundable_$9479",
                                    "typeString": "contract Keep3rKeeperFundable"
                                  }
                                ],
                                "id": 9150,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1033:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 9149,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1033:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 9152,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1033:13:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 9146,
                                  "name": "_bonding",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9106,
                                  "src": "1013:8:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 9145,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "1006:6:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 9147,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1006:16:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 9148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 602,
                            "src": "1006:26:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 9153,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1006:41:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "988:59:42"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9159,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1087:3:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9160,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1087:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 9163,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "1107:4:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Keep3rKeeperFundable_$9479",
                                    "typeString": "contract Keep3rKeeperFundable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Keep3rKeeperFundable_$9479",
                                    "typeString": "contract Keep3rKeeperFundable"
                                  }
                                ],
                                "id": 9162,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1099:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 9161,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1099:7:42",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 9164,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1099:13:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9165,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9108,
                              "src": "1114:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 9156,
                                  "name": "_bonding",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9106,
                                  "src": "1060:8:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 9155,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "1053:6:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 9157,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1053:16:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 9158,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 745,
                            "src": "1053:33:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$663_$",
                              "typeString": "function (contract IERC20,address,address,uint256)"
                            }
                          },
                          "id": 9166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1053:69:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9167,
                        "nodeType": "ExpressionStatement",
                        "src": "1053:69:42"
                      },
                      {
                        "expression": {
                          "id": 9180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9168,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9108,
                            "src": "1128:7:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9179,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 9175,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "1173:4:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Keep3rKeeperFundable_$9479",
                                        "typeString": "contract Keep3rKeeperFundable"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Keep3rKeeperFundable_$9479",
                                        "typeString": "contract Keep3rKeeperFundable"
                                      }
                                    ],
                                    "id": 9174,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1165:7:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 9173,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1165:7:42",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 9176,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1165:13:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 9170,
                                      "name": "_bonding",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9106,
                                      "src": "1145:8:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 9169,
                                    "name": "IERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 663,
                                    "src": "1138:6:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                      "typeString": "type(contract IERC20)"
                                    }
                                  },
                                  "id": 9171,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1138:16:42",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$663",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 9172,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 602,
                                "src": "1138:26:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 9177,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1138:41:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 9178,
                              "name": "_before",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9144,
                              "src": "1182:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1138:51:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1128:61:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9181,
                        "nodeType": "ExpressionStatement",
                        "src": "1128:61:42"
                      },
                      {
                        "expression": {
                          "id": 9187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 9182,
                              "name": "hasBonded",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5472,
                              "src": "1196:9:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 9185,
                            "indexExpression": {
                              "expression": {
                                "id": 9183,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1206:3:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9184,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1206:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1196:21:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 9186,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1220:4:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "1196:28:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9188,
                        "nodeType": "ExpressionStatement",
                        "src": "1196:28:42"
                      },
                      {
                        "expression": {
                          "id": 9196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9189,
                                "name": "pendingBonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5442,
                                "src": "1230:12:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9193,
                              "indexExpression": {
                                "expression": {
                                  "id": 9190,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "1243:3:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9191,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "1243:10:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1230:24:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9194,
                            "indexExpression": {
                              "id": 9192,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9106,
                              "src": "1255:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1230:34:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 9195,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9108,
                            "src": "1268:7:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1230:45:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9197,
                        "nodeType": "ExpressionStatement",
                        "src": "1230:45:42"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9199,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1295:3:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9200,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1295:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9201,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9106,
                              "src": "1307:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9202,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9108,
                              "src": "1317:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9198,
                            "name": "Bonding",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12875,
                            "src": "1287:7:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 9203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1287:38:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9204,
                        "nodeType": "EmitStatement",
                        "src": "1282:43:42"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9104,
                    "nodeType": "StructuredDocumentation",
                    "src": "681:37:42",
                    "text": "@inheritdoc IKeep3rKeeperFundable"
                  },
                  "functionSelector": "a515366a",
                  "id": 9206,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9112,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9111,
                        "name": "nonReentrant",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 38,
                        "src": "788:12:42"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "788:12:42"
                    }
                  ],
                  "name": "bond",
                  "nameLocation": "730:4:42",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9110,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "779:8:42"
                  },
                  "parameters": {
                    "id": 9109,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9106,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "743:8:42",
                        "nodeType": "VariableDeclaration",
                        "scope": 9206,
                        "src": "735:16:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9105,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "735:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9108,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "761:7:42",
                        "nodeType": "VariableDeclaration",
                        "scope": 9206,
                        "src": "753:15:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9107,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "753:7:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "734:35:42"
                  },
                  "returnParameters": {
                    "id": 9113,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "801:0:42"
                  },
                  "scope": 9479,
                  "src": "721:609:42",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13616
                  ],
                  "body": {
                    "id": 9269,
                    "nodeType": "Block",
                    "src": "1428:382:42",
                    "statements": [
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 9213,
                            "name": "disputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5386,
                            "src": "1438:8:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 9216,
                          "indexExpression": {
                            "expression": {
                              "id": 9214,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "1447:3:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 9215,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1447:10:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1438:20:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9220,
                        "nodeType": "IfStatement",
                        "src": "1434:43:42",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9217,
                              "name": "Disputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13785,
                              "src": "1467:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 9218,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1467:10:42",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 9219,
                          "nodeType": "RevertStatement",
                          "src": "1460:17:42"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9228,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9221,
                                "name": "canActivateAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5450,
                                "src": "1487:16:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9224,
                              "indexExpression": {
                                "expression": {
                                  "id": 9222,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "1504:3:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9223,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "1504:10:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1487:28:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9226,
                            "indexExpression": {
                              "id": 9225,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9209,
                              "src": "1516:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1487:38:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 9227,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1529:1:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1487:43:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9232,
                        "nodeType": "IfStatement",
                        "src": "1483:73:42",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9229,
                              "name": "BondsUnexistent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13788,
                              "src": "1539:15:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 9230,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1539:17:42",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 9231,
                          "nodeType": "RevertStatement",
                          "src": "1532:24:42"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9233,
                                "name": "canActivateAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5450,
                                "src": "1566:16:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9236,
                              "indexExpression": {
                                "expression": {
                                  "id": 9234,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "1583:3:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9235,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "1583:10:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1566:28:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9238,
                            "indexExpression": {
                              "id": 9237,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9209,
                              "src": "1595:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1566:38:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "expression": {
                              "id": 9239,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "1608:5:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 9240,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "1608:15:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1566:57:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9245,
                        "nodeType": "IfStatement",
                        "src": "1562:83:42",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9242,
                              "name": "BondsLocked",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13791,
                              "src": "1632:11:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 9243,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1632:13:42",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 9244,
                          "nodeType": "RevertStatement",
                          "src": "1625:20:42"
                        }
                      },
                      {
                        "expression": {
                          "id": 9252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "1652:45:42",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9246,
                                "name": "canActivateAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5450,
                                "src": "1659:16:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9249,
                              "indexExpression": {
                                "expression": {
                                  "id": 9247,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "1676:3:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9248,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "1676:10:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1659:28:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9251,
                            "indexExpression": {
                              "id": 9250,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9209,
                              "src": "1688:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1659:38:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9253,
                        "nodeType": "ExpressionStatement",
                        "src": "1652:45:42"
                      },
                      {
                        "assignments": [
                          9255
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9255,
                            "mutability": "mutable",
                            "name": "_amount",
                            "nameLocation": "1712:7:42",
                            "nodeType": "VariableDeclaration",
                            "scope": 9269,
                            "src": "1704:15:42",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 9254,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1704:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9261,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9257,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1732:3:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9258,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1732:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9259,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9209,
                              "src": "1744:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 9256,
                            "name": "_activate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9478,
                            "src": "1722:9:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) returns (uint256)"
                            }
                          },
                          "id": 9260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1722:31:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1704:49:42"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9263,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1775:3:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9264,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1775:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9265,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9209,
                              "src": "1787:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9266,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9255,
                              "src": "1797:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9262,
                            "name": "Activation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13582,
                            "src": "1764:10:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 9267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1764:41:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9268,
                        "nodeType": "EmitStatement",
                        "src": "1759:46:42"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9207,
                    "nodeType": "StructuredDocumentation",
                    "src": "1334:37:42",
                    "text": "@inheritdoc IKeep3rKeeperFundable"
                  },
                  "functionSelector": "1c5a9d9c",
                  "id": 9270,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "activate",
                  "nameLocation": "1383:8:42",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9211,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1419:8:42"
                  },
                  "parameters": {
                    "id": 9210,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9209,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "1400:8:42",
                        "nodeType": "VariableDeclaration",
                        "scope": 9270,
                        "src": "1392:16:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9208,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1392:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1391:18:42"
                  },
                  "returnParameters": {
                    "id": 9212,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1428:0:42"
                  },
                  "scope": 9479,
                  "src": "1374:436:42",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13610
                  ],
                  "body": {
                    "id": 9316,
                    "nodeType": "Block",
                    "src": "1923:229:42",
                    "statements": [
                      {
                        "expression": {
                          "id": 9289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9279,
                                "name": "canWithdrawAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5458,
                                "src": "1929:16:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9283,
                              "indexExpression": {
                                "expression": {
                                  "id": 9280,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "1946:3:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9281,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "1946:10:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1929:28:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9284,
                            "indexExpression": {
                              "id": 9282,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9273,
                              "src": "1958:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1929:38:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9288,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 9285,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "1970:5:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 9286,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "1970:15:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 9287,
                              "name": "unbondTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5616,
                              "src": "1988:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1970:28:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1929:69:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9290,
                        "nodeType": "ExpressionStatement",
                        "src": "1929:69:42"
                      },
                      {
                        "expression": {
                          "id": 9298,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9291,
                                "name": "bonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5394,
                                "src": "2004:5:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9295,
                              "indexExpression": {
                                "expression": {
                                  "id": 9292,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "2010:3:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9293,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "2010:10:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2004:17:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9296,
                            "indexExpression": {
                              "id": 9294,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9273,
                              "src": "2022:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2004:27:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "id": 9297,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9275,
                            "src": "2035:7:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2004:38:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9299,
                        "nodeType": "ExpressionStatement",
                        "src": "2004:38:42"
                      },
                      {
                        "expression": {
                          "id": 9307,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9300,
                                "name": "pendingUnbonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5466,
                                "src": "2048:14:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9304,
                              "indexExpression": {
                                "expression": {
                                  "id": 9301,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "2063:3:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9302,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "2063:10:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2048:26:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9305,
                            "indexExpression": {
                              "id": 9303,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9273,
                              "src": "2075:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2048:36:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 9306,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9275,
                            "src": "2088:7:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2048:47:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9308,
                        "nodeType": "ExpressionStatement",
                        "src": "2048:47:42"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9310,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2117:3:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9311,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "2117:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9312,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9273,
                              "src": "2129:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9313,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9275,
                              "src": "2139:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9309,
                            "name": "Unbonding",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12884,
                            "src": "2107:9:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 9314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2107:40:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9315,
                        "nodeType": "EmitStatement",
                        "src": "2102:45:42"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9271,
                    "nodeType": "StructuredDocumentation",
                    "src": "1814:37:42",
                    "text": "@inheritdoc IKeep3rKeeperFundable"
                  },
                  "functionSelector": "a5d059ca",
                  "id": 9317,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unbond",
                  "nameLocation": "1863:6:42",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9277,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1914:8:42"
                  },
                  "parameters": {
                    "id": 9276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9273,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "1878:8:42",
                        "nodeType": "VariableDeclaration",
                        "scope": 9317,
                        "src": "1870:16:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9272,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1870:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9275,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1896:7:42",
                        "nodeType": "VariableDeclaration",
                        "scope": 9317,
                        "src": "1888:15:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9274,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1888:7:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1869:35:42"
                  },
                  "returnParameters": {
                    "id": 9278,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1923:0:42"
                  },
                  "scope": 9479,
                  "src": "1854:298:42",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    13622
                  ],
                  "body": {
                    "id": 9412,
                    "nodeType": "Block",
                    "src": "2263:586:42",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9326,
                                "name": "pendingUnbonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5466,
                                "src": "2273:14:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9329,
                              "indexExpression": {
                                "expression": {
                                  "id": 9327,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "2288:3:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9328,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "2288:10:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2273:26:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9331,
                            "indexExpression": {
                              "id": 9330,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9320,
                              "src": "2300:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2273:36:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 9332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2313:1:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2273:41:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9337,
                        "nodeType": "IfStatement",
                        "src": "2269:73:42",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9334,
                              "name": "UnbondsUnexistent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13794,
                              "src": "2323:17:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 9335,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2323:19:42",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 9336,
                          "nodeType": "RevertStatement",
                          "src": "2316:26:42"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9338,
                                "name": "canWithdrawAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5458,
                                "src": "2352:16:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9341,
                              "indexExpression": {
                                "expression": {
                                  "id": 9339,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "2369:3:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9340,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "2369:10:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2352:28:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9343,
                            "indexExpression": {
                              "id": 9342,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9320,
                              "src": "2381:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2352:38:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "expression": {
                              "id": 9344,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "2394:5:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 9345,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "2394:15:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2352:57:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9350,
                        "nodeType": "IfStatement",
                        "src": "2348:85:42",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9347,
                              "name": "UnbondsLocked",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13797,
                              "src": "2418:13:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 9348,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2418:15:42",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 9349,
                          "nodeType": "RevertStatement",
                          "src": "2411:22:42"
                        }
                      },
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 9351,
                            "name": "disputes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5386,
                            "src": "2443:8:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 9354,
                          "indexExpression": {
                            "expression": {
                              "id": 9352,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "2452:3:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 9353,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "2452:10:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2443:20:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9358,
                        "nodeType": "IfStatement",
                        "src": "2439:43:42",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9355,
                              "name": "Disputed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13785,
                              "src": "2472:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 9356,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2472:10:42",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 9357,
                          "nodeType": "RevertStatement",
                          "src": "2465:17:42"
                        }
                      },
                      {
                        "assignments": [
                          9360
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9360,
                            "mutability": "mutable",
                            "name": "_amount",
                            "nameLocation": "2497:7:42",
                            "nodeType": "VariableDeclaration",
                            "scope": 9412,
                            "src": "2489:15:42",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 9359,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2489:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9367,
                        "initialValue": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 9361,
                              "name": "pendingUnbonds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5466,
                              "src": "2507:14:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 9364,
                            "indexExpression": {
                              "expression": {
                                "id": 9362,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2522:3:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9363,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "2522:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2507:26:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 9366,
                          "indexExpression": {
                            "id": 9365,
                            "name": "_bonding",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9320,
                            "src": "2534:8:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2507:36:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2489:54:42"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9368,
                            "name": "_bonding",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9320,
                            "src": "2554:8:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 9369,
                            "name": "keep3rV1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5594,
                            "src": "2566:8:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2554:20:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9379,
                        "nodeType": "IfStatement",
                        "src": "2550:84:42",
                        "trueBody": {
                          "id": 9378,
                          "nodeType": "Block",
                          "src": "2576:58:42",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 9375,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9360,
                                    "src": "2619:7:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 9372,
                                        "name": "keep3rV1Proxy",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5598,
                                        "src": "2599:13:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 9371,
                                      "name": "IKeep3rV1Proxy",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12773,
                                      "src": "2584:14:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IKeep3rV1Proxy_$12773_$",
                                        "typeString": "type(contract IKeep3rV1Proxy)"
                                      }
                                    },
                                    "id": 9373,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2584:29:42",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IKeep3rV1Proxy_$12773",
                                      "typeString": "contract IKeep3rV1Proxy"
                                    }
                                  },
                                  "id": 9374,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12687,
                                  "src": "2584:34:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) external"
                                  }
                                },
                                "id": 9376,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2584:43:42",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9377,
                              "nodeType": "ExpressionStatement",
                              "src": "2584:43:42"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 9386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "2640:43:42",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9380,
                                "name": "pendingUnbonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5466,
                                "src": "2647:14:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9383,
                              "indexExpression": {
                                "expression": {
                                  "id": 9381,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "2662:3:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9382,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "2662:10:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2647:26:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9385,
                            "indexExpression": {
                              "id": 9384,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9320,
                              "src": "2674:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2647:36:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9387,
                        "nodeType": "ExpressionStatement",
                        "src": "2640:43:42"
                      },
                      {
                        "expression": {
                          "id": 9394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "2689:45:42",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9388,
                                "name": "canWithdrawAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5458,
                                "src": "2696:16:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9391,
                              "indexExpression": {
                                "expression": {
                                  "id": 9389,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "2713:3:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9390,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "2713:10:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2696:28:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9393,
                            "indexExpression": {
                              "id": 9392,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9320,
                              "src": "2725:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2696:38:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9395,
                        "nodeType": "ExpressionStatement",
                        "src": "2689:45:42"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9400,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2771:3:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9401,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "2771:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9402,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9360,
                              "src": "2783:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 9397,
                                  "name": "_bonding",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9320,
                                  "src": "2748:8:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 9396,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "2741:6:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$663_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 9398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2741:16:42",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$663",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 9399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 719,
                            "src": "2741:29:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$663_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$663_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 9403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2741:50:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9404,
                        "nodeType": "ExpressionStatement",
                        "src": "2741:50:42"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9406,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "2814:3:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9407,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "2814:10:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9408,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9320,
                              "src": "2826:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9409,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9360,
                              "src": "2836:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9405,
                            "name": "Withdrawal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13591,
                            "src": "2803:10:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 9410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2803:41:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9411,
                        "nodeType": "EmitStatement",
                        "src": "2798:46:42"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9318,
                    "nodeType": "StructuredDocumentation",
                    "src": "2156:37:42",
                    "text": "@inheritdoc IKeep3rKeeperFundable"
                  },
                  "functionSelector": "51cff8d9",
                  "id": 9413,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9324,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9323,
                        "name": "nonReentrant",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 38,
                        "src": "2250:12:42"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2250:12:42"
                    }
                  ],
                  "name": "withdraw",
                  "nameLocation": "2205:8:42",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9322,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2241:8:42"
                  },
                  "parameters": {
                    "id": 9321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9320,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "2222:8:42",
                        "nodeType": "VariableDeclaration",
                        "scope": 9413,
                        "src": "2214:16:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9319,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2214:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2213:18:42"
                  },
                  "returnParameters": {
                    "id": 9325,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2263:0:42"
                  },
                  "scope": 9479,
                  "src": "2196:653:42",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9477,
                    "nodeType": "Block",
                    "src": "2950:357:42",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 9422,
                              "name": "firstSeen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5380,
                              "src": "2960:9:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9424,
                            "indexExpression": {
                              "id": 9423,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9415,
                              "src": "2970:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2960:18:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 9425,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2982:1:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2960:23:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9435,
                        "nodeType": "IfStatement",
                        "src": "2956:80:42",
                        "trueBody": {
                          "id": 9434,
                          "nodeType": "Block",
                          "src": "2985:51:42",
                          "statements": [
                            {
                              "expression": {
                                "id": 9432,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 9427,
                                    "name": "firstSeen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5380,
                                    "src": "2993:9:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 9429,
                                  "indexExpression": {
                                    "id": 9428,
                                    "name": "_keeper",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9415,
                                    "src": "3003:7:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2993:18:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 9430,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "3014:5:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 9431,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "3014:15:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2993:36:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9433,
                              "nodeType": "ExpressionStatement",
                              "src": "2993:36:42"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9439,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9415,
                              "src": "3054:7:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 9436,
                              "name": "_keepers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5368,
                              "src": "3041:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 9438,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "3041:12:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 9440,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3041:21:42",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9441,
                        "nodeType": "ExpressionStatement",
                        "src": "3041:21:42"
                      },
                      {
                        "expression": {
                          "id": 9448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9442,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9420,
                            "src": "3068:7:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9443,
                                "name": "pendingBonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5442,
                                "src": "3078:12:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9445,
                              "indexExpression": {
                                "id": 9444,
                                "name": "_keeper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9415,
                                "src": "3091:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3078:21:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9447,
                            "indexExpression": {
                              "id": 9446,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9417,
                              "src": "3100:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3078:31:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3068:41:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9449,
                        "nodeType": "ExpressionStatement",
                        "src": "3068:41:42"
                      },
                      {
                        "expression": {
                          "id": 9455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "3115:38:42",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9450,
                                "name": "pendingBonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5442,
                                "src": "3122:12:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9452,
                              "indexExpression": {
                                "id": 9451,
                                "name": "_keeper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9415,
                                "src": "3135:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3122:21:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9454,
                            "indexExpression": {
                              "id": 9453,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9417,
                              "src": "3144:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3122:31:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9456,
                        "nodeType": "ExpressionStatement",
                        "src": "3115:38:42"
                      },
                      {
                        "expression": {
                          "id": 9463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 9457,
                                "name": "bonds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5394,
                                "src": "3188:5:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 9460,
                              "indexExpression": {
                                "id": 9458,
                                "name": "_keeper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9415,
                                "src": "3194:7:42",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3188:14:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 9461,
                            "indexExpression": {
                              "id": 9459,
                              "name": "_bonding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9417,
                              "src": "3203:8:42",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "3188:24:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 9462,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9420,
                            "src": "3216:7:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3188:35:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9464,
                        "nodeType": "ExpressionStatement",
                        "src": "3188:35:42"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9467,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9465,
                            "name": "_bonding",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9417,
                            "src": "3233:8:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 9466,
                            "name": "keep3rV1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5594,
                            "src": "3245:8:42",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3233:20:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9476,
                        "nodeType": "IfStatement",
                        "src": "3229:74:42",
                        "trueBody": {
                          "id": 9475,
                          "nodeType": "Block",
                          "src": "3255:48:42",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 9472,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9420,
                                    "src": "3288:7:42",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 9469,
                                        "name": "keep3rV1",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5594,
                                        "src": "3273:8:42",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 9468,
                                      "name": "IKeep3rV1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 12600,
                                      "src": "3263:9:42",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IKeep3rV1_$12600_$",
                                        "typeString": "type(contract IKeep3rV1)"
                                      }
                                    },
                                    "id": 9470,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3263:19:42",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IKeep3rV1_$12600",
                                      "typeString": "contract IKeep3rV1"
                                    }
                                  },
                                  "id": 9471,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "burn",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12443,
                                  "src": "3263:24:42",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) external"
                                  }
                                },
                                "id": 9473,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3263:33:42",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9474,
                              "nodeType": "ExpressionStatement",
                              "src": "3263:33:42"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 9478,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_activate",
                  "nameLocation": "2862:9:42",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9418,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9415,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "2880:7:42",
                        "nodeType": "VariableDeclaration",
                        "scope": 9478,
                        "src": "2872:15:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9414,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2872:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9417,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "2897:8:42",
                        "nodeType": "VariableDeclaration",
                        "scope": 9478,
                        "src": "2889:16:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9416,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2889:7:42",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2871:35:42"
                  },
                  "returnParameters": {
                    "id": 9421,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9420,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "2941:7:42",
                        "nodeType": "VariableDeclaration",
                        "scope": 9478,
                        "src": "2933:15:42",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9419,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2933:7:42",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2932:17:42"
                  },
                  "scope": 9479,
                  "src": "2853:454:42",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 9480,
              "src": "495:2814:42",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13594,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:3278:42"
        },
        "id": 42
      },
      "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol": {
        "ast": {
          "absolutePath": "solidity/contracts/peripherals/keepers/Keep3rKeepers.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rDisputable": [
              13033
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IKeep3rV1": [
              12600
            ],
            "IKeep3rV1Proxy": [
              12773
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rDisputable": [
              5578
            ],
            "Keep3rKeeperDisputable": [
              9079
            ],
            "Keep3rKeeperFundable": [
              9479
            ],
            "Keep3rKeepers": [
              9485
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 9486,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9481,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:43"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol",
              "file": "./Keep3rKeeperDisputable.sol",
              "id": 9482,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9486,
              "sourceUnit": 9080,
              "src": "65:38:43",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9483,
                    "name": "Keep3rKeeperDisputable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 9079,
                    "src": "140:22:43"
                  },
                  "id": 9484,
                  "nodeType": "InheritanceSpecifier",
                  "src": "140:22:43"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 9485,
              "linearizedBaseContracts": [
                9485,
                9079,
                9479,
                5934,
                5578,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                39,
                13623,
                13033,
                13659
              ],
              "name": "Keep3rKeepers",
              "nameLocation": "123:13:43",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 9486,
              "src": "105:60:43",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13017,
                13020,
                13594,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:134:43"
        },
        "id": 43
      },
      "solidity/for-test/BasicJob.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/BasicJob.sol",
          "exportedSymbols": {
            "BasicJob": [
              9593
            ],
            "IBaseErrors": [
              12793
            ],
            "IKeep3r": [
              11407
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ]
          },
          "id": 9594,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9487,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:44"
            },
            {
              "absolutePath": "solidity/interfaces/IKeep3r.sol",
              "file": "../interfaces/IKeep3r.sol",
              "id": 9488,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9594,
              "sourceUnit": 11408,
              "src": "65:35:44",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9593,
              "linearizedBaseContracts": [
                9593
              ],
              "name": "BasicJob",
              "nameLocation": "111:8:44",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 9490,
                  "name": "KeeperNotValid",
                  "nameLocation": "130:14:44",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 9489,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "144:2:44"
                  },
                  "src": "124:23:44"
                },
                {
                  "constant": false,
                  "functionSelector": "634c7bb5",
                  "id": 9492,
                  "mutability": "mutable",
                  "name": "keep3r",
                  "nameLocation": "166:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 9593,
                  "src": "151:21:44",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9491,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "151:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "affed0e0",
                  "id": 9494,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nameLocation": "191:5:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 9593,
                  "src": "176:20:44",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9493,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "176:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "38d94193",
                  "id": 9497,
                  "mutability": "mutable",
                  "name": "array",
                  "nameLocation": "217:5:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 9593,
                  "src": "200:22:44",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 9495,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "200:7:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 9496,
                    "nodeType": "ArrayTypeName",
                    "src": "200:9:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9506,
                    "nodeType": "Block",
                    "src": "256:27:44",
                    "statements": [
                      {
                        "expression": {
                          "id": 9504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9502,
                            "name": "keep3r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9492,
                            "src": "262:6:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 9503,
                            "name": "_keep3r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9499,
                            "src": "271:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "262:16:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 9505,
                        "nodeType": "ExpressionStatement",
                        "src": "262:16:44"
                      }
                    ]
                  },
                  "id": 9507,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9500,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9499,
                        "mutability": "mutable",
                        "name": "_keep3r",
                        "nameLocation": "247:7:44",
                        "nodeType": "VariableDeclaration",
                        "scope": 9507,
                        "src": "239:15:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9498,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "239:7:44",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "238:17:44"
                  },
                  "returnParameters": {
                    "id": 9501,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "256:0:44"
                  },
                  "scope": 9593,
                  "src": "227:56:44",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9512,
                    "nodeType": "Block",
                    "src": "319:2:44",
                    "statements": []
                  },
                  "functionSelector": "322e9f04",
                  "id": 9513,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9510,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9509,
                        "name": "upkeep",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9592,
                        "src": "312:6:44"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "312:6:44"
                    }
                  ],
                  "name": "work",
                  "nameLocation": "296:4:44",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9508,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "300:2:44"
                  },
                  "returnParameters": {
                    "id": 9511,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "319:0:44"
                  },
                  "scope": 9593,
                  "src": "287:34:44",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9535,
                    "nodeType": "Block",
                    "src": "377:75:44",
                    "statements": [
                      {
                        "body": {
                          "id": 9533,
                          "nodeType": "Block",
                          "src": "426:22:44",
                          "statements": [
                            {
                              "expression": {
                                "id": 9531,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "434:7:44",
                                "subExpression": {
                                  "id": 9530,
                                  "name": "nonce",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9494,
                                  "src": "434:5:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9532,
                              "nodeType": "ExpressionStatement",
                              "src": "434:7:44"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9526,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9524,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9521,
                            "src": "407:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 9525,
                            "name": "_howHard",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9515,
                            "src": "411:8:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "407:12:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9534,
                        "initializationExpression": {
                          "assignments": [
                            9521
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 9521,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "396:1:44",
                              "nodeType": "VariableDeclaration",
                              "scope": 9534,
                              "src": "388:9:44",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 9520,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "388:7:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 9523,
                          "initialValue": {
                            "id": 9522,
                            "name": "nonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9494,
                            "src": "400:5:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "388:17:44"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 9528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "421:3:44",
                            "subExpression": {
                              "id": 9527,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9521,
                              "src": "421:1:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9529,
                          "nodeType": "ExpressionStatement",
                          "src": "421:3:44"
                        },
                        "nodeType": "ForStatement",
                        "src": "383:65:44"
                      }
                    ]
                  },
                  "functionSelector": "3bb39c33",
                  "id": 9536,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9518,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9517,
                        "name": "upkeep",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9592,
                        "src": "370:6:44"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "370:6:44"
                    }
                  ],
                  "name": "workHard",
                  "nameLocation": "334:8:44",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9516,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9515,
                        "mutability": "mutable",
                        "name": "_howHard",
                        "nameLocation": "351:8:44",
                        "nodeType": "VariableDeclaration",
                        "scope": 9536,
                        "src": "343:16:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9514,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "343:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "342:18:44"
                  },
                  "returnParameters": {
                    "id": 9519,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "377:0:44"
                  },
                  "scope": 9593,
                  "src": "325:127:44",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9571,
                    "nodeType": "Block",
                    "src": "510:130:44",
                    "statements": [
                      {
                        "body": {
                          "id": 9558,
                          "nodeType": "Block",
                          "src": "551:28:44",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 9555,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9544,
                                    "src": "570:1:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 9552,
                                    "name": "array",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9497,
                                    "src": "559:5:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                      "typeString": "uint256[] storage ref"
                                    }
                                  },
                                  "id": 9554,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "src": "559:10:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$__$bound_to$_t_array$_t_uint256_$dyn_storage_ptr_$",
                                    "typeString": "function (uint256[] storage pointer,uint256)"
                                  }
                                },
                                "id": 9556,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "559:13:44",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9557,
                              "nodeType": "ExpressionStatement",
                              "src": "559:13:44"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9546,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9544,
                            "src": "532:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 9547,
                            "name": "_howHard",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9538,
                            "src": "536:8:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "532:12:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9559,
                        "initializationExpression": {
                          "assignments": [
                            9544
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 9544,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "529:1:44",
                              "nodeType": "VariableDeclaration",
                              "scope": 9559,
                              "src": "521:9:44",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 9543,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "521:7:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 9545,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "521:9:44"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 9550,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "546:3:44",
                            "subExpression": {
                              "id": 9549,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9544,
                              "src": "546:1:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9551,
                          "nodeType": "ExpressionStatement",
                          "src": "546:3:44"
                        },
                        "nodeType": "ForStatement",
                        "src": "516:63:44"
                      },
                      {
                        "body": {
                          "id": 9569,
                          "nodeType": "Block",
                          "src": "610:26:44",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 9564,
                                    "name": "array",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9497,
                                    "src": "618:5:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                      "typeString": "uint256[] storage ref"
                                    }
                                  },
                                  "id": 9566,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "pop",
                                  "nodeType": "MemberAccess",
                                  "src": "618:9:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_uint256_$dyn_storage_ptr_$",
                                    "typeString": "function (uint256[] storage pointer)"
                                  }
                                },
                                "id": 9567,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "618:11:44",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 9568,
                              "nodeType": "ExpressionStatement",
                              "src": "618:11:44"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9563,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 9560,
                              "name": "array",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9497,
                              "src": "592:5:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              }
                            },
                            "id": 9561,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "592:12:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 9562,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "607:1:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "592:16:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9570,
                        "nodeType": "WhileStatement",
                        "src": "585:51:44"
                      }
                    ]
                  },
                  "functionSelector": "ead731ad",
                  "id": 9572,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9541,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9540,
                        "name": "upkeep",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 9592,
                        "src": "503:6:44"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "503:6:44"
                    }
                  ],
                  "name": "workRefund",
                  "nameLocation": "465:10:44",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9539,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9538,
                        "mutability": "mutable",
                        "name": "_howHard",
                        "nameLocation": "484:8:44",
                        "nodeType": "VariableDeclaration",
                        "scope": 9572,
                        "src": "476:16:44",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9537,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "476:7:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "475:18:44"
                  },
                  "returnParameters": {
                    "id": 9542,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "510:0:44"
                  },
                  "scope": 9593,
                  "src": "456:184:44",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9591,
                    "nodeType": "Block",
                    "src": "662:94:44",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9578,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "693:3:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9579,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "693:10:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 9575,
                                  "name": "keep3r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9492,
                                  "src": "676:6:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 9574,
                                "name": "IKeep3r",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11407,
                                "src": "668:7:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IKeep3r_$11407_$",
                                  "typeString": "type(contract IKeep3r)"
                                }
                              },
                              "id": 9576,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "668:15:44",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IKeep3r_$11407",
                                "typeString": "contract IKeep3r"
                              }
                            },
                            "id": 9577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isKeeper",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13359,
                            "src": "668:24:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) external returns (bool)"
                            }
                          },
                          "id": 9580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "668:36:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9581,
                        "nodeType": "ExpressionStatement",
                        "src": "668:36:44"
                      },
                      {
                        "id": 9582,
                        "nodeType": "PlaceholderStatement",
                        "src": "710:1:44"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9587,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "740:3:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9588,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "740:10:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 9584,
                                  "name": "keep3r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9492,
                                  "src": "725:6:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 9583,
                                "name": "IKeep3r",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11407,
                                "src": "717:7:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IKeep3r_$11407_$",
                                  "typeString": "type(contract IKeep3r)"
                                }
                              },
                              "id": 9585,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "717:15:44",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IKeep3r_$11407",
                                "typeString": "contract IKeep3r"
                              }
                            },
                            "id": 9586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "worked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13381,
                            "src": "717:22:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 9589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "717:34:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9590,
                        "nodeType": "ExpressionStatement",
                        "src": "717:34:44"
                      }
                    ]
                  },
                  "id": 9592,
                  "name": "upkeep",
                  "nameLocation": "653:6:44",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 9573,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "659:2:44"
                  },
                  "src": "644:112:44",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 9594,
              "src": "102:656:44",
              "usedErrors": [
                9490
              ]
            }
          ],
          "src": "32:727:44"
        },
        "id": 44
      },
      "solidity/for-test/ERC20ForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/ERC20ForTest.sol",
          "exportedSymbols": {
            "Context": [
              1231
            ],
            "ERC20": [
              585
            ],
            "ERC20ForTest": [
              9684
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ]
          },
          "id": 9685,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9595,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:45"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "id": 9596,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9685,
              "sourceUnit": 586,
              "src": "65:55:45",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9597,
                    "name": "ERC20",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 585,
                    "src": "147:5:45"
                  },
                  "id": 9598,
                  "nodeType": "InheritanceSpecifier",
                  "src": "147:5:45"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9684,
              "linearizedBaseContracts": [
                9684,
                585,
                688,
                663,
                1231
              ],
              "name": "ERC20ForTest",
              "nameLocation": "131:12:45",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 9618,
                    "nodeType": "Block",
                    "src": "305:50:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9614,
                              "name": "_initialAccount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9604,
                              "src": "317:15:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9615,
                              "name": "_initialBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9606,
                              "src": "334:15:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9613,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 445,
                            "src": "311:5:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 9616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "311:39:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9617,
                        "nodeType": "ExpressionStatement",
                        "src": "311:39:45"
                      }
                    ]
                  },
                  "id": 9619,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 9609,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9600,
                          "src": "289:5:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "id": 9610,
                          "name": "_symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9602,
                          "src": "296:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 9611,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 9608,
                        "name": "ERC20",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 585,
                        "src": "283:5:45"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "283:21:45"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9607,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9600,
                        "mutability": "mutable",
                        "name": "_name",
                        "nameLocation": "188:5:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9619,
                        "src": "174:19:45",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 9599,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "174:6:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9602,
                        "mutability": "mutable",
                        "name": "_symbol",
                        "nameLocation": "213:7:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9619,
                        "src": "199:21:45",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 9601,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "199:6:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9604,
                        "mutability": "mutable",
                        "name": "_initialAccount",
                        "nameLocation": "234:15:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9619,
                        "src": "226:23:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9603,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "226:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9606,
                        "mutability": "mutable",
                        "name": "_initialBalance",
                        "nameLocation": "263:15:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9619,
                        "src": "255:23:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9605,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "255:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "168:114:45"
                  },
                  "returnParameters": {
                    "id": 9612,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "305:0:45"
                  },
                  "scope": 9684,
                  "src": "157:198:45",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9631,
                    "nodeType": "Block",
                    "src": "415:35:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9627,
                              "name": "_account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9621,
                              "src": "427:8:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9628,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9623,
                              "src": "437:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9626,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 445,
                            "src": "421:5:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 9629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "421:24:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9630,
                        "nodeType": "ExpressionStatement",
                        "src": "421:24:45"
                      }
                    ]
                  },
                  "functionSelector": "40c10f19",
                  "id": 9632,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nameLocation": "368:4:45",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9624,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9621,
                        "mutability": "mutable",
                        "name": "_account",
                        "nameLocation": "381:8:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9632,
                        "src": "373:16:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9620,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "373:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9623,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "399:7:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9632,
                        "src": "391:15:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9622,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "391:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "372:35:45"
                  },
                  "returnParameters": {
                    "id": 9625,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "415:0:45"
                  },
                  "scope": 9684,
                  "src": "359:91:45",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9644,
                    "nodeType": "Block",
                    "src": "510:35:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9640,
                              "name": "_account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9634,
                              "src": "522:8:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9641,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9636,
                              "src": "532:7:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9639,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 517,
                            "src": "516:5:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 9642,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "516:24:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9643,
                        "nodeType": "ExpressionStatement",
                        "src": "516:24:45"
                      }
                    ]
                  },
                  "functionSelector": "9dc29fac",
                  "id": 9645,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nameLocation": "463:4:45",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9637,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9634,
                        "mutability": "mutable",
                        "name": "_account",
                        "nameLocation": "476:8:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9645,
                        "src": "468:16:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9633,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "468:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9636,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "494:7:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9645,
                        "src": "486:15:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9635,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "486:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "467:35:45"
                  },
                  "returnParameters": {
                    "id": 9638,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "510:0:45"
                  },
                  "scope": 9684,
                  "src": "454:91:45",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9660,
                    "nodeType": "Block",
                    "src": "642:40:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9655,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9647,
                              "src": "658:5:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9656,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9649,
                              "src": "665:3:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9657,
                              "name": "_value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9651,
                              "src": "670:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9654,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 389,
                            "src": "648:9:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 9658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "648:29:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9659,
                        "nodeType": "ExpressionStatement",
                        "src": "648:29:45"
                      }
                    ]
                  },
                  "functionSelector": "222f5be0",
                  "id": 9661,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferInternal",
                  "nameLocation": "558:16:45",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9652,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9647,
                        "mutability": "mutable",
                        "name": "_from",
                        "nameLocation": "588:5:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9661,
                        "src": "580:13:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9646,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "580:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9649,
                        "mutability": "mutable",
                        "name": "_to",
                        "nameLocation": "607:3:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9661,
                        "src": "599:11:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9648,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "599:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9651,
                        "mutability": "mutable",
                        "name": "_value",
                        "nameLocation": "624:6:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9661,
                        "src": "616:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9650,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "616:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "574:60:45"
                  },
                  "returnParameters": {
                    "id": 9653,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "642:0:45"
                  },
                  "scope": 9684,
                  "src": "549:133:45",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9676,
                    "nodeType": "Block",
                    "src": "784:45:45",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9671,
                              "name": "_owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9663,
                              "src": "799:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9672,
                              "name": "_spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9665,
                              "src": "807:8:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9673,
                              "name": "_value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9667,
                              "src": "817:6:45",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9670,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 562,
                            "src": "790:8:45",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 9674,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "790:34:45",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9675,
                        "nodeType": "ExpressionStatement",
                        "src": "790:34:45"
                      }
                    ]
                  },
                  "functionSelector": "56189cb4",
                  "id": 9677,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approveInternal",
                  "nameLocation": "695:15:45",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9668,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9663,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nameLocation": "724:6:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9677,
                        "src": "716:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9662,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "716:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9665,
                        "mutability": "mutable",
                        "name": "_spender",
                        "nameLocation": "744:8:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9677,
                        "src": "736:16:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9664,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "736:7:45",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9667,
                        "mutability": "mutable",
                        "name": "_value",
                        "nameLocation": "766:6:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9677,
                        "src": "758:14:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9666,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "758:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "710:66:45"
                  },
                  "returnParameters": {
                    "id": 9669,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "784:0:45"
                  },
                  "scope": 9684,
                  "src": "686:143:45",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9682,
                    "nodeType": "Block",
                    "src": "884:55:45",
                    "statements": []
                  },
                  "functionSelector": "b6b55f25",
                  "id": 9683,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deposit",
                  "nameLocation": "842:7:45",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9680,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9679,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "858:7:45",
                        "nodeType": "VariableDeclaration",
                        "scope": 9683,
                        "src": "850:15:45",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9678,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "850:7:45",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "849:17:45"
                  },
                  "returnParameters": {
                    "id": 9681,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "884:0:45"
                  },
                  "scope": 9684,
                  "src": "833:106:45",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 9685,
              "src": "122:819:45",
              "usedErrors": []
            }
          ],
          "src": "32:910:45"
        },
        "id": 45
      },
      "solidity/for-test/IUniswapV3PoolForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/IUniswapV3PoolForTest.sol",
          "exportedSymbols": {
            "IERC20Minimal": [
              1990
            ],
            "IUniswapV3Pool": [
              2012
            ],
            "IUniswapV3PoolActions": [
              2108
            ],
            "IUniswapV3PoolDerivedState": [
              2139
            ],
            "IUniswapV3PoolEvents": [
              2258
            ],
            "IUniswapV3PoolForTest": [
              9693
            ],
            "IUniswapV3PoolImmutables": [
              2298
            ],
            "IUniswapV3PoolOwnerActions": [
              2324
            ],
            "IUniswapV3PoolState": [
              2432
            ]
          },
          "id": 9694,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9686,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:46"
            },
            {
              "absolutePath": "@uniswap/v3-core/contracts/interfaces/IERC20Minimal.sol",
              "file": "@uniswap/v3-core/contracts/interfaces/IERC20Minimal.sol",
              "id": 9687,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9694,
              "sourceUnit": 1991,
              "src": "65:65:46",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
              "file": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
              "id": 9688,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9694,
              "sourceUnit": 2013,
              "src": "131:66:46",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9689,
                    "name": "IERC20Minimal",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1990,
                    "src": "279:13:46"
                  },
                  "id": 9690,
                  "nodeType": "InheritanceSpecifier",
                  "src": "279:13:46"
                },
                {
                  "baseName": {
                    "id": 9691,
                    "name": "IUniswapV3Pool",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2012,
                    "src": "294:14:46"
                  },
                  "id": 9692,
                  "nodeType": "InheritanceSpecifier",
                  "src": "294:14:46"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 9693,
              "linearizedBaseContracts": [
                9693,
                2012,
                2258,
                2324,
                2108,
                2139,
                2432,
                2298,
                1990
              ],
              "name": "IUniswapV3PoolForTest",
              "nameLocation": "254:21:46",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 9694,
              "src": "244:69:46",
              "usedErrors": []
            }
          ],
          "src": "32:282:46"
        },
        "id": 46
      },
      "solidity/for-test/JobForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/JobForTest.sol",
          "exportedSymbols": {
            "IBaseErrors": [
              12793
            ],
            "IKeep3r": [
              11407
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "JobForTest": [
              9793
            ]
          },
          "id": 9794,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9695,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:47"
            },
            {
              "absolutePath": "solidity/interfaces/IKeep3r.sol",
              "file": "../interfaces/IKeep3r.sol",
              "id": 9696,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9794,
              "sourceUnit": 11408,
              "src": "65:35:47",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9793,
              "linearizedBaseContracts": [
                9793
              ],
              "name": "JobForTest",
              "nameLocation": "111:10:47",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 9698,
                  "name": "InvalidKeeper",
                  "nameLocation": "132:13:47",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 9697,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "145:2:47"
                  },
                  "src": "126:22:47"
                },
                {
                  "constant": false,
                  "functionSelector": "634c7bb5",
                  "id": 9700,
                  "mutability": "mutable",
                  "name": "keep3r",
                  "nameLocation": "166:6:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 9793,
                  "src": "151:21:47",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9699,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "151:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "affed0e0",
                  "id": 9702,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nameLocation": "191:5:47",
                  "nodeType": "VariableDeclaration",
                  "scope": 9793,
                  "src": "176:20:47",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9701,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "176:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9711,
                    "nodeType": "Block",
                    "src": "230:27:47",
                    "statements": [
                      {
                        "expression": {
                          "id": 9709,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9707,
                            "name": "keep3r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9700,
                            "src": "236:6:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 9708,
                            "name": "_keep3r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9704,
                            "src": "245:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "236:16:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 9710,
                        "nodeType": "ExpressionStatement",
                        "src": "236:16:47"
                      }
                    ]
                  },
                  "id": 9712,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9705,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9704,
                        "mutability": "mutable",
                        "name": "_keep3r",
                        "nameLocation": "221:7:47",
                        "nodeType": "VariableDeclaration",
                        "scope": 9712,
                        "src": "213:15:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9703,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "213:7:47",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "212:17:47"
                  },
                  "returnParameters": {
                    "id": 9706,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "230:0:47"
                  },
                  "scope": 9793,
                  "src": "201:56:47",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9749,
                    "nodeType": "Block",
                    "src": "286:176:47",
                    "statements": [
                      {
                        "condition": {
                          "id": 9722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "296:37:47",
                          "subExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 9719,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "322:3:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9720,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "322:10:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 9716,
                                    "name": "keep3r",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9700,
                                    "src": "305:6:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 9715,
                                  "name": "IKeep3r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11407,
                                  "src": "297:7:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IKeep3r_$11407_$",
                                    "typeString": "type(contract IKeep3r)"
                                  }
                                },
                                "id": 9717,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "297:15:47",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IKeep3r_$11407",
                                  "typeString": "contract IKeep3r"
                                }
                              },
                              "id": 9718,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "isKeeper",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13359,
                              "src": "297:24:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address) external returns (bool)"
                              }
                            },
                            "id": 9721,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "297:36:47",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9726,
                        "nodeType": "IfStatement",
                        "src": "292:65:47",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9723,
                              "name": "InvalidKeeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9698,
                              "src": "342:13:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 9724,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "342:15:47",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 9725,
                          "nodeType": "RevertStatement",
                          "src": "335:22:47"
                        }
                      },
                      {
                        "body": {
                          "id": 9739,
                          "nodeType": "Block",
                          "src": "395:22:47",
                          "statements": [
                            {
                              "expression": {
                                "id": 9737,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "403:7:47",
                                "subExpression": {
                                  "id": 9736,
                                  "name": "nonce",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9702,
                                  "src": "403:5:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9738,
                              "nodeType": "ExpressionStatement",
                              "src": "403:7:47"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9730,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9728,
                            "src": "380:1:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "31303030",
                            "id": 9731,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "384:4:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000_by_1",
                              "typeString": "int_const 1000"
                            },
                            "value": "1000"
                          },
                          "src": "380:8:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9740,
                        "initializationExpression": {
                          "assignments": [
                            9728
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 9728,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "377:1:47",
                              "nodeType": "VariableDeclaration",
                              "scope": 9740,
                              "src": "369:9:47",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 9727,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "369:7:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 9729,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "369:9:47"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 9734,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "390:3:47",
                            "subExpression": {
                              "id": 9733,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9728,
                              "src": "390:1:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9735,
                          "nodeType": "ExpressionStatement",
                          "src": "390:3:47"
                        },
                        "nodeType": "ForStatement",
                        "src": "364:53:47"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9745,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "446:3:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9746,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "446:10:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 9742,
                                  "name": "keep3r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9700,
                                  "src": "431:6:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 9741,
                                "name": "IKeep3r",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11407,
                                "src": "423:7:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IKeep3r_$11407_$",
                                  "typeString": "type(contract IKeep3r)"
                                }
                              },
                              "id": 9743,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "423:15:47",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IKeep3r_$11407",
                                "typeString": "contract IKeep3r"
                              }
                            },
                            "id": 9744,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "worked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13381,
                            "src": "423:22:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 9747,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "423:34:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9748,
                        "nodeType": "ExpressionStatement",
                        "src": "423:34:47"
                      }
                    ]
                  },
                  "functionSelector": "322e9f04",
                  "id": 9750,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "work",
                  "nameLocation": "270:4:47",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9713,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "274:2:47"
                  },
                  "returnParameters": {
                    "id": 9714,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "286:0:47"
                  },
                  "scope": 9793,
                  "src": "261:201:47",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9791,
                    "nodeType": "Block",
                    "src": "510:186:47",
                    "statements": [
                      {
                        "condition": {
                          "id": 9762,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "520:37:47",
                          "subExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 9759,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "546:3:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 9760,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "546:10:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 9756,
                                    "name": "keep3r",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9700,
                                    "src": "529:6:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 9755,
                                  "name": "IKeep3r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11407,
                                  "src": "521:7:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IKeep3r_$11407_$",
                                    "typeString": "type(contract IKeep3r)"
                                  }
                                },
                                "id": 9757,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "521:15:47",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IKeep3r_$11407",
                                  "typeString": "contract IKeep3r"
                                }
                              },
                              "id": 9758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "isKeeper",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13359,
                              "src": "521:24:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address) external returns (bool)"
                              }
                            },
                            "id": 9761,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "521:36:47",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9766,
                        "nodeType": "IfStatement",
                        "src": "516:65:47",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9763,
                              "name": "InvalidKeeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9698,
                              "src": "566:13:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 9764,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "566:15:47",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 9765,
                          "nodeType": "RevertStatement",
                          "src": "559:22:47"
                        }
                      },
                      {
                        "body": {
                          "id": 9781,
                          "nodeType": "Block",
                          "src": "629:22:47",
                          "statements": [
                            {
                              "expression": {
                                "id": 9779,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "637:7:47",
                                "subExpression": {
                                  "id": 9778,
                                  "name": "nonce",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9702,
                                  "src": "637:5:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 9780,
                              "nodeType": "ExpressionStatement",
                              "src": "637:7:47"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9770,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9768,
                            "src": "604:1:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9773,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "31303030",
                              "id": 9771,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "608:4:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000_by_1",
                                "typeString": "int_const 1000"
                              },
                              "value": "1000"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 9772,
                              "name": "_factor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9752,
                              "src": "615:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "608:14:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "604:18:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9782,
                        "initializationExpression": {
                          "assignments": [
                            9768
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 9768,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "601:1:47",
                              "nodeType": "VariableDeclaration",
                              "scope": 9782,
                              "src": "593:9:47",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 9767,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "593:7:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 9769,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "593:9:47"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 9776,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "624:3:47",
                            "subExpression": {
                              "id": 9775,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9768,
                              "src": "624:1:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9777,
                          "nodeType": "ExpressionStatement",
                          "src": "624:3:47"
                        },
                        "nodeType": "ForStatement",
                        "src": "588:63:47"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 9787,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "680:3:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9788,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "680:10:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 9784,
                                  "name": "keep3r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9700,
                                  "src": "665:6:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 9783,
                                "name": "IKeep3r",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11407,
                                "src": "657:7:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IKeep3r_$11407_$",
                                  "typeString": "type(contract IKeep3r)"
                                }
                              },
                              "id": 9785,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "657:15:47",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IKeep3r_$11407",
                                "typeString": "contract IKeep3r"
                              }
                            },
                            "id": 9786,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "worked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13381,
                            "src": "657:22:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 9789,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "657:34:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9790,
                        "nodeType": "ExpressionStatement",
                        "src": "657:34:47"
                      }
                    ]
                  },
                  "functionSelector": "3bb39c33",
                  "id": 9792,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "workHard",
                  "nameLocation": "475:8:47",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9753,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9752,
                        "mutability": "mutable",
                        "name": "_factor",
                        "nameLocation": "492:7:47",
                        "nodeType": "VariableDeclaration",
                        "scope": 9792,
                        "src": "484:15:47",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9751,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "484:7:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "483:17:47"
                  },
                  "returnParameters": {
                    "id": 9754,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "510:0:47"
                  },
                  "scope": 9793,
                  "src": "466:230:47",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 9794,
              "src": "102:596:47",
              "usedErrors": [
                9698
              ]
            }
          ],
          "src": "32:667:47"
        },
        "id": 47
      },
      "solidity/for-test/Keep3rForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/Keep3rForTest.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "DustCollector": [
              5257
            ],
            "EnumerableSet": [
              1918
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IDustCollector": [
              12818
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rDisputable": [
              13033
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IKeep3rV1": [
              12600
            ],
            "IKeep3rV1Proxy": [
              12773
            ],
            "IPairManager": [
              11703
            ],
            "Keep3r": [
              2472
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rDisputable": [
              5578
            ],
            "Keep3rForTest": [
              9832
            ],
            "Keep3rJobDisputable": [
              6259
            ],
            "Keep3rJobFundableCredits": [
              6508
            ],
            "Keep3rJobFundableLiquidity": [
              7939
            ],
            "Keep3rJobManager": [
              8000
            ],
            "Keep3rJobMigration": [
              8292
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rJobWorkable": [
              8908
            ],
            "Keep3rJobs": [
              8920
            ],
            "Keep3rKeeperDisputable": [
              9079
            ],
            "Keep3rKeeperFundable": [
              9479
            ],
            "Keep3rKeepers": [
              9485
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 9833,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9795,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:48"
            },
            {
              "absolutePath": "solidity/contracts/Keep3r.sol",
              "file": "../contracts/Keep3r.sol",
              "id": 9796,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9833,
              "sourceUnit": 2473,
              "src": "65:33:48",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9797,
                    "name": "Keep3r",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2472,
                    "src": "126:6:48"
                  },
                  "id": 9798,
                  "nodeType": "InheritanceSpecifier",
                  "src": "126:6:48"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9832,
              "linearizedBaseContracts": [
                9832,
                2472,
                9485,
                9079,
                9479,
                8920,
                8908,
                8292,
                8000,
                6259,
                7939,
                6508,
                5934,
                5578,
                6101,
                5257,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12818,
                12793,
                8406,
                13456,
                39,
                13623,
                13326,
                13033,
                13659,
                13559,
                13305,
                13100,
                13505,
                13400
              ],
              "name": "Keep3rForTest",
              "nameLocation": "109:13:48",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 9818,
                    "nodeType": "Block",
                    "src": "360:2:48",
                    "statements": []
                  },
                  "id": 9819,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 9811,
                          "name": "_governance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9800,
                          "src": "290:11:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 9812,
                          "name": "_keep3rHelper",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9802,
                          "src": "303:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 9813,
                          "name": "_keep3rV1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9804,
                          "src": "318:9:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 9814,
                          "name": "_keep3rV1Proxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9806,
                          "src": "329:14:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 9815,
                          "name": "_kp3rWethPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9808,
                          "src": "345:13:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 9816,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 9810,
                        "name": "Keep3r",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2472,
                        "src": "283:6:48"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "283:76:48"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9809,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9800,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "162:11:48",
                        "nodeType": "VariableDeclaration",
                        "scope": 9819,
                        "src": "154:19:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9799,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "154:7:48",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9802,
                        "mutability": "mutable",
                        "name": "_keep3rHelper",
                        "nameLocation": "187:13:48",
                        "nodeType": "VariableDeclaration",
                        "scope": 9819,
                        "src": "179:21:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9801,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "179:7:48",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9804,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "214:9:48",
                        "nodeType": "VariableDeclaration",
                        "scope": 9819,
                        "src": "206:17:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9803,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "206:7:48",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9806,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "237:14:48",
                        "nodeType": "VariableDeclaration",
                        "scope": 9819,
                        "src": "229:22:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9805,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "229:7:48",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9808,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "265:13:48",
                        "nodeType": "VariableDeclaration",
                        "scope": 9819,
                        "src": "257:21:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9807,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "257:7:48",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "148:134:48"
                  },
                  "returnParameters": {
                    "id": 9817,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "360:0:48"
                  },
                  "scope": 9832,
                  "src": "137:225:48",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9830,
                    "nodeType": "Block",
                    "src": "438:43:48",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 9826,
                            "name": "_isKP3RToken0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5434,
                            "src": "451:13:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 9828,
                          "indexExpression": {
                            "id": 9827,
                            "name": "_liquidity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9821,
                            "src": "465:10:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "451:25:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 9825,
                        "id": 9829,
                        "nodeType": "Return",
                        "src": "444:32:48"
                      }
                    ]
                  },
                  "functionSelector": "454c5031",
                  "id": 9831,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewTickOrder",
                  "nameLocation": "375:13:48",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9822,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9821,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "397:10:48",
                        "nodeType": "VariableDeclaration",
                        "scope": 9831,
                        "src": "389:18:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9820,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "389:7:48",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "388:20:48"
                  },
                  "returnParameters": {
                    "id": 9825,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9824,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9831,
                        "src": "432:4:48",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 9823,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "432:4:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "431:6:48"
                  },
                  "scope": 9832,
                  "src": "366:115:48",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 9833,
              "src": "100:383:48",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13017,
                13020,
                13061,
                13064,
                13067,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13316,
                13319,
                13348,
                13351,
                13422,
                13425,
                13474,
                13477,
                13480,
                13535,
                13538,
                13594,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:452:48"
        },
        "id": 48
      },
      "solidity/for-test/Keep3rHelperForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/Keep3rHelperForTest.sol",
          "exportedSymbols": {
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3r": [
              11407
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rHelperParameters": [
              11672
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IKeep3rV1": [
              12600
            ],
            "IUniswapV3Pool": [
              2012
            ],
            "IUniswapV3PoolActions": [
              2108
            ],
            "IUniswapV3PoolDerivedState": [
              2139
            ],
            "IUniswapV3PoolEvents": [
              2258
            ],
            "IUniswapV3PoolImmutables": [
              2298
            ],
            "IUniswapV3PoolOwnerActions": [
              2324
            ],
            "IUniswapV3PoolState": [
              2432
            ],
            "Keep3rHelper": [
              2956
            ],
            "Keep3rHelperForTest": [
              9871
            ],
            "Keep3rHelperParameters": [
              3207
            ],
            "Math": [
              1319
            ],
            "TickMath": [
              5188
            ]
          },
          "id": 9872,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9834,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:49"
            },
            {
              "absolutePath": "solidity/contracts/Keep3rHelper.sol",
              "file": "../contracts/Keep3rHelper.sol",
              "id": 9835,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9872,
              "sourceUnit": 2957,
              "src": "65:39:49",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9836,
                    "name": "Keep3rHelper",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2956,
                    "src": "138:12:49"
                  },
                  "id": 9837,
                  "nodeType": "InheritanceSpecifier",
                  "src": "138:12:49"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 9871,
              "linearizedBaseContracts": [
                9871,
                2956,
                3207,
                5354,
                12863,
                11672,
                11525
              ],
              "name": "Keep3rHelperForTest",
              "nameLocation": "115:19:49",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "functionSelector": "5cf24969",
                  "id": 9839,
                  "mutability": "mutable",
                  "name": "basefee",
                  "nameLocation": "170:7:49",
                  "nodeType": "VariableDeclaration",
                  "scope": 9871,
                  "src": "155:22:49",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9838,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "155:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9850,
                    "nodeType": "Block",
                    "src": "271:2:49",
                    "statements": []
                  },
                  "id": 9851,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 9846,
                          "name": "_keep3rV2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9841,
                          "src": "247:9:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 9847,
                          "name": "_governance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9843,
                          "src": "258:11:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 9848,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 9845,
                        "name": "Keep3rHelper",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2956,
                        "src": "234:12:49"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "234:36:49"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9844,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9841,
                        "mutability": "mutable",
                        "name": "_keep3rV2",
                        "nameLocation": "202:9:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 9851,
                        "src": "194:17:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9840,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "194:7:49",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9843,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "221:11:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 9851,
                        "src": "213:19:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9842,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "213:7:49",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "193:40:49"
                  },
                  "returnParameters": {
                    "id": 9849,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "271:0:49"
                  },
                  "scope": 9871,
                  "src": "182:91:49",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2955
                  ],
                  "body": {
                    "id": 9859,
                    "nodeType": "Block",
                    "src": "341:25:49",
                    "statements": [
                      {
                        "expression": {
                          "id": 9857,
                          "name": "basefee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9839,
                          "src": "354:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 9856,
                        "id": 9858,
                        "nodeType": "Return",
                        "src": "347:14:49"
                      }
                    ]
                  },
                  "id": 9860,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getBasefee",
                  "nameLocation": "286:11:49",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 9853,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "314:8:49"
                  },
                  "parameters": {
                    "id": 9852,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "297:2:49"
                  },
                  "returnParameters": {
                    "id": 9856,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9855,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9860,
                        "src": "332:7:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9854,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "332:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "331:9:49"
                  },
                  "scope": 9871,
                  "src": "277:89:49",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9869,
                    "nodeType": "Block",
                    "src": "417:29:49",
                    "statements": [
                      {
                        "expression": {
                          "id": 9867,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9865,
                            "name": "basefee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9839,
                            "src": "423:7:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 9866,
                            "name": "_baseFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9862,
                            "src": "433:8:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "423:18:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 9868,
                        "nodeType": "ExpressionStatement",
                        "src": "423:18:49"
                      }
                    ]
                  },
                  "functionSelector": "46860698",
                  "id": 9870,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setBaseFee",
                  "nameLocation": "379:10:49",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9863,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9862,
                        "mutability": "mutable",
                        "name": "_baseFee",
                        "nameLocation": "398:8:49",
                        "nodeType": "VariableDeclaration",
                        "scope": 9870,
                        "src": "390:16:49",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9861,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "390:7:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "389:18:49"
                  },
                  "returnParameters": {
                    "id": 9864,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "417:0:49"
                  },
                  "scope": 9871,
                  "src": "370:76:49",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 9872,
              "src": "106:342:49",
              "usedErrors": [
                11413,
                11536,
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "32:417:49"
        },
        "id": 49
      },
      "solidity/for-test/UniV3PairManagerForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/UniV3PairManagerForTest.sol",
          "exportedSymbols": {
            "Context": [
              1231
            ],
            "ERC20": [
              585
            ],
            "FixedPoint96": [
              4130
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IPairManager": [
              11703
            ],
            "IUniV3PairManager": [
              11866
            ],
            "IUniswapV3Pool": [
              2012
            ],
            "IUniswapV3PoolActions": [
              2108
            ],
            "IUniswapV3PoolDerivedState": [
              2139
            ],
            "IUniswapV3PoolEvents": [
              2258
            ],
            "IUniswapV3PoolImmutables": [
              2298
            ],
            "IUniswapV3PoolOwnerActions": [
              2324
            ],
            "IUniswapV3PoolState": [
              2432
            ],
            "IWeth9": [
              12787
            ],
            "LiquidityAmounts": [
              4640
            ],
            "PoolAddress": [
              4650
            ],
            "TickMath": [
              5188
            ],
            "UniV3PairManager": [
              4051
            ],
            "UniV3PairManagerForTest": [
              10007
            ]
          },
          "id": 10008,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9873,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:50"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
              "id": 9874,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10008,
              "sourceUnit": 586,
              "src": "65:55:50",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
              "file": "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol",
              "id": 9875,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10008,
              "sourceUnit": 2013,
              "src": "121:66:50",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/LiquidityAmounts.sol",
              "file": "../contracts/libraries/LiquidityAmounts.sol",
              "id": 9876,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10008,
              "sourceUnit": 4641,
              "src": "189:53:50",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/PoolAddress.sol",
              "file": "../contracts/libraries/PoolAddress.sol",
              "id": 9877,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10008,
              "sourceUnit": 4651,
              "src": "243:48:50",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/FixedPoint96.sol",
              "file": "../contracts/libraries/FixedPoint96.sol",
              "id": 9878,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10008,
              "sourceUnit": 4131,
              "src": "292:49:50",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/FullMath.sol",
              "file": "../contracts/libraries/FullMath.sol",
              "id": 9879,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10008,
              "sourceUnit": 4309,
              "src": "342:45:50",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/TickMath.sol",
              "file": "../contracts/libraries/TickMath.sol",
              "id": 9880,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10008,
              "sourceUnit": 5189,
              "src": "388:45:50",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/UniV3PairManager.sol",
              "file": "../contracts/UniV3PairManager.sol",
              "id": 9881,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10008,
              "sourceUnit": 4052,
              "src": "434:43:50",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/external/IWeth9.sol",
              "file": "../interfaces/external/IWeth9.sol",
              "id": 9882,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10008,
              "sourceUnit": 12788,
              "src": "478:43:50",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/IUniV3PairManager.sol",
              "file": "../interfaces/IUniV3PairManager.sol",
              "id": 9883,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10008,
              "sourceUnit": 11867,
              "src": "522:45:50",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9884,
                    "name": "UniV3PairManager",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 4051,
                    "src": "605:16:50"
                  },
                  "id": 9885,
                  "nodeType": "InheritanceSpecifier",
                  "src": "605:16:50"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 10007,
              "linearizedBaseContracts": [
                10007,
                4051,
                5354,
                11866,
                11703,
                688,
                663,
                12863
              ],
              "name": "UniV3PairManagerForTest",
              "nameLocation": "578:23:50",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 9896,
                    "nodeType": "Block",
                    "src": "711:2:50",
                    "statements": []
                  },
                  "id": 9897,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 9892,
                          "name": "_pool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9887,
                          "src": "691:5:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 9893,
                          "name": "_governance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9889,
                          "src": "698:11:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 9894,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 9891,
                        "name": "UniV3PairManager",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 4051,
                        "src": "674:16:50"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "674:36:50"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9890,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9887,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "646:5:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9897,
                        "src": "638:13:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9886,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "638:7:50",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9889,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "661:11:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9897,
                        "src": "653:19:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9888,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "653:7:50",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "637:36:50"
                  },
                  "returnParameters": {
                    "id": 9895,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "711:0:50"
                  },
                  "scope": 10007,
                  "src": "626:87:50",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9921,
                    "nodeType": "Block",
                    "src": "960:87:50",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9915,
                              "name": "amount0Desired",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9899,
                              "src": "987:14:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 9916,
                              "name": "amount1Desired",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9901,
                              "src": "1003:14:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 9917,
                              "name": "amount0Min",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9903,
                              "src": "1019:10:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 9918,
                              "name": "amount1Min",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9905,
                              "src": "1031:10:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9914,
                            "name": "_addLiquidity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3894,
                            "src": "973:13:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint128_$_t_uint256_$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256,uint256) returns (uint128,uint256,uint256)"
                            }
                          },
                          "id": 9919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "973:69:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint128_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint128,uint256,uint256)"
                          }
                        },
                        "functionReturnParameters": 9913,
                        "id": 9920,
                        "nodeType": "Return",
                        "src": "966:76:50"
                      }
                    ]
                  },
                  "functionSelector": "a5dc7d4d",
                  "id": 9922,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalAddLiquidity",
                  "nameLocation": "726:20:50",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9906,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9899,
                        "mutability": "mutable",
                        "name": "amount0Desired",
                        "nameLocation": "760:14:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9922,
                        "src": "752:22:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9898,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "752:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9901,
                        "mutability": "mutable",
                        "name": "amount1Desired",
                        "nameLocation": "788:14:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9922,
                        "src": "780:22:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9900,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "780:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9903,
                        "mutability": "mutable",
                        "name": "amount0Min",
                        "nameLocation": "816:10:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9922,
                        "src": "808:18:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9902,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "808:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9905,
                        "mutability": "mutable",
                        "name": "amount1Min",
                        "nameLocation": "840:10:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9922,
                        "src": "832:18:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9904,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "832:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "746:108:50"
                  },
                  "returnParameters": {
                    "id": 9913,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9908,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "896:9:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9922,
                        "src": "888:17:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 9907,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "888:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9910,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "921:7:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9922,
                        "src": "913:15:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9909,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "913:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9912,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "944:7:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9922,
                        "src": "936:15:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9911,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "936:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "880:77:50"
                  },
                  "scope": 10007,
                  "src": "717:330:50",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9940,
                    "nodeType": "Block",
                    "src": "1165:54:50",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9934,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9924,
                              "src": "1183:5:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9935,
                              "name": "payer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9926,
                              "src": "1190:5:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9936,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9928,
                              "src": "1197:9:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9937,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9930,
                              "src": "1208:5:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9933,
                            "name": "_pay",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3914,
                            "src": "1178:4:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 9938,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1178:36:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "functionReturnParameters": 9932,
                        "id": 9939,
                        "nodeType": "Return",
                        "src": "1171:43:50"
                      }
                    ]
                  },
                  "functionSelector": "4c0549b0",
                  "id": 9941,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalPay",
                  "nameLocation": "1060:11:50",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9931,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9924,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "1085:5:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9941,
                        "src": "1077:13:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9923,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1077:7:50",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9926,
                        "mutability": "mutable",
                        "name": "payer",
                        "nameLocation": "1104:5:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9941,
                        "src": "1096:13:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9925,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1096:7:50",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9928,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "1123:9:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9941,
                        "src": "1115:17:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9927,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1115:7:50",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9930,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1146:5:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9941,
                        "src": "1138:13:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9929,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1138:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1071:84:50"
                  },
                  "returnParameters": {
                    "id": 9932,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1165:0:50"
                  },
                  "scope": 10007,
                  "src": "1051:168:50",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9953,
                    "nodeType": "Block",
                    "src": "1283:36:50",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9949,
                              "name": "dst",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9943,
                              "src": "1302:3:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9950,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9945,
                              "src": "1307:6:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9948,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3942,
                            "src": "1296:5:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 9951,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1296:18:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "functionReturnParameters": 9947,
                        "id": 9952,
                        "nodeType": "Return",
                        "src": "1289:25:50"
                      }
                    ]
                  },
                  "functionSelector": "35001a1a",
                  "id": 9954,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalMint",
                  "nameLocation": "1232:12:50",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9946,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9943,
                        "mutability": "mutable",
                        "name": "dst",
                        "nameLocation": "1253:3:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9954,
                        "src": "1245:11:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9942,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1245:7:50",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9945,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "1266:6:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9954,
                        "src": "1258:14:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9944,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1258:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1244:29:50"
                  },
                  "returnParameters": {
                    "id": 9947,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1283:0:50"
                  },
                  "scope": 10007,
                  "src": "1223:96:50",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9966,
                    "nodeType": "Block",
                    "src": "1383:36:50",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9962,
                              "name": "dst",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9956,
                              "src": "1402:3:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9963,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9958,
                              "src": "1407:6:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9961,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3970,
                            "src": "1396:5:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 9964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1396:18:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "functionReturnParameters": 9960,
                        "id": 9965,
                        "nodeType": "Return",
                        "src": "1389:25:50"
                      }
                    ]
                  },
                  "functionSelector": "3a323bdf",
                  "id": 9967,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalBurn",
                  "nameLocation": "1332:12:50",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9959,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9956,
                        "mutability": "mutable",
                        "name": "dst",
                        "nameLocation": "1353:3:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9967,
                        "src": "1345:11:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9955,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1345:7:50",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9958,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "1366:6:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9967,
                        "src": "1358:14:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9957,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1358:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1344:29:50"
                  },
                  "returnParameters": {
                    "id": 9960,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1383:0:50"
                  },
                  "scope": 10007,
                  "src": "1323:96:50",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 9982,
                    "nodeType": "Block",
                    "src": "1522:44:50",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9977,
                              "name": "src",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9969,
                              "src": "1544:3:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9978,
                              "name": "dst",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9971,
                              "src": "1549:3:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9979,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9973,
                              "src": "1554:6:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9976,
                            "name": "_transferTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3999,
                            "src": "1528:15:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 9980,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1528:33:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9981,
                        "nodeType": "ExpressionStatement",
                        "src": "1528:33:50"
                      }
                    ]
                  },
                  "functionSelector": "cf45affb",
                  "id": 9983,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalTransferTokens",
                  "nameLocation": "1432:22:50",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9974,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9969,
                        "mutability": "mutable",
                        "name": "src",
                        "nameLocation": "1468:3:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9983,
                        "src": "1460:11:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9968,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1460:7:50",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9971,
                        "mutability": "mutable",
                        "name": "dst",
                        "nameLocation": "1485:3:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9983,
                        "src": "1477:11:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9970,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1477:7:50",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9973,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "1502:6:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 9983,
                        "src": "1494:14:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9972,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1494:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1454:58:50"
                  },
                  "returnParameters": {
                    "id": 9975,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1522:0:50"
                  },
                  "scope": 10007,
                  "src": "1423:143:50",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10001,
                    "nodeType": "Block",
                    "src": "1689:52:50",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9995,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9985,
                              "src": "1713:5:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9996,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9987,
                              "src": "1720:4:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9997,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9989,
                              "src": "1726:2:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 9998,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9991,
                              "src": "1730:5:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9994,
                            "name": "_safeTransferFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4050,
                            "src": "1695:17:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 9999,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1695:41:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10000,
                        "nodeType": "ExpressionStatement",
                        "src": "1695:41:50"
                      }
                    ]
                  },
                  "functionSelector": "eaf00b23",
                  "id": 10002,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalSafeTransferFrom",
                  "nameLocation": "1579:24:50",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9992,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9985,
                        "mutability": "mutable",
                        "name": "token",
                        "nameLocation": "1617:5:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 10002,
                        "src": "1609:13:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9984,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1609:7:50",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9987,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "1636:4:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 10002,
                        "src": "1628:12:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9986,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1628:7:50",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9989,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "1654:2:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 10002,
                        "src": "1646:10:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9988,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1646:7:50",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9991,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1670:5:50",
                        "nodeType": "VariableDeclaration",
                        "scope": 10002,
                        "src": "1662:13:50",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9990,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1662:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1603:76:50"
                  },
                  "returnParameters": {
                    "id": 9993,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1689:0:50"
                  },
                  "scope": 10007,
                  "src": "1570:171:50",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10005,
                    "nodeType": "Block",
                    "src": "1772:2:50",
                    "statements": []
                  },
                  "id": 10006,
                  "implemented": true,
                  "kind": "receive",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10003,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1752:2:50"
                  },
                  "returnParameters": {
                    "id": 10004,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1772:0:50"
                  },
                  "scope": 10007,
                  "src": "1745:29:50",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 10008,
              "src": "569:1207:50",
              "usedErrors": [
                11795,
                11798,
                11801,
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "32:1745:50"
        },
        "id": 50
      },
      "solidity/for-test/libraries/LiquidityAmountsForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/libraries/LiquidityAmountsForTest.sol",
          "exportedSymbols": {
            "FixedPoint96": [
              4130
            ],
            "FullMath": [
              4308
            ],
            "LiquidityAmountsForTest": [
              10340
            ]
          },
          "id": 10341,
          "license": "GPL-2.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10009,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "45:31:51"
            },
            {
              "absolutePath": "solidity/contracts/libraries/FullMath.sol",
              "file": "../../contracts/libraries/FullMath.sol",
              "id": 10010,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10341,
              "sourceUnit": 4309,
              "src": "78:48:51",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/FixedPoint96.sol",
              "file": "../../contracts/libraries/FixedPoint96.sol",
              "id": 10011,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10341,
              "sourceUnit": 4131,
              "src": "127:52:51",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 10012,
                "nodeType": "StructuredDocumentation",
                "src": "181:102:51",
                "text": "@dev Made this library into a contract to be able to calculate liquidity more precisely for tests"
              },
              "fullyImplemented": true,
              "id": 10340,
              "linearizedBaseContracts": [
                10340
              ],
              "name": "LiquidityAmountsForTest",
              "nameLocation": "312:23:51",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 10031,
                    "nodeType": "Block",
                    "src": "403:41:51",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 10028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "id": 10025,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 10020,
                                      "name": "y",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10017,
                                      "src": "418:1:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "arguments": [
                                        {
                                          "id": 10023,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 10014,
                                          "src": "430:1:51",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 10022,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "422:7:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint128_$",
                                          "typeString": "type(uint128)"
                                        },
                                        "typeName": {
                                          "id": 10021,
                                          "name": "uint128",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "422:7:51",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 10024,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "422:10:51",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "src": "418:14:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "id": 10026,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "417:16:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 10027,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10014,
                                "src": "437:1:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "417:21:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 10019,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "409:7:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 10029,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "409:30:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10030,
                        "nodeType": "ExpressionStatement",
                        "src": "409:30:51"
                      }
                    ]
                  },
                  "id": 10032,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint128",
                  "nameLocation": "349:9:51",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10015,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10014,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "367:1:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10032,
                        "src": "359:9:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10013,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "359:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "358:11:51"
                  },
                  "returnParameters": {
                    "id": 10018,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10017,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "400:1:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10032,
                        "src": "392:9:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 10016,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "392:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "391:11:51"
                  },
                  "scope": 10340,
                  "src": "340:104:51",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 10076,
                    "nodeType": "Block",
                    "src": "599:294:51",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 10045,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10043,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10034,
                            "src": "609:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 10044,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10036,
                            "src": "625:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "609:29:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10054,
                        "nodeType": "IfStatement",
                        "src": "605:98:51",
                        "trueBody": {
                          "expression": {
                            "id": 10052,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 10046,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10034,
                                  "src": "641:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 10047,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10036,
                                  "src": "656:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 10048,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "640:30:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 10049,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10036,
                                  "src": "674:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 10050,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10034,
                                  "src": "689:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 10051,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "673:30:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "src": "640:63:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 10053,
                          "nodeType": "ExpressionStatement",
                          "src": "640:63:51"
                        }
                      },
                      {
                        "assignments": [
                          10056
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10056,
                            "mutability": "mutable",
                            "name": "intermediate",
                            "nameLocation": "717:12:51",
                            "nodeType": "VariableDeclaration",
                            "scope": 10076,
                            "src": "709:20:51",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 10055,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "709:7:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10064,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 10059,
                              "name": "sqrtRatioAX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10034,
                              "src": "748:13:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "id": 10060,
                              "name": "sqrtRatioBX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10036,
                              "src": "763:13:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "expression": {
                                "id": 10061,
                                "name": "FixedPoint96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4130,
                                "src": "778:12:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$4130_$",
                                  "typeString": "type(library FixedPoint96)"
                                }
                              },
                              "id": 10062,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "Q96",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4129,
                              "src": "778:16:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 10057,
                              "name": "FullMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4308,
                              "src": "732:8:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                "typeString": "type(library FullMath)"
                              }
                            },
                            "id": 10058,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mulDiv",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4263,
                            "src": "732:15:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 10063,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "732:63:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "709:86:51"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 10068,
                                  "name": "amount0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10038,
                                  "src": "834:7:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 10069,
                                  "name": "intermediate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10056,
                                  "src": "843:12:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  "id": 10072,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 10070,
                                    "name": "sqrtRatioBX96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10036,
                                    "src": "857:13:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 10071,
                                    "name": "sqrtRatioAX96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10034,
                                    "src": "873:13:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  "src": "857:29:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                ],
                                "expression": {
                                  "id": 10066,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4308,
                                  "src": "818:8:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 10067,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4263,
                                "src": "818:15:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 10073,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "818:69:51",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 10065,
                            "name": "toUint128",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10032,
                            "src": "808:9:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$",
                              "typeString": "function (uint256) pure returns (uint128)"
                            }
                          },
                          "id": 10074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "808:80:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "functionReturnParameters": 10042,
                        "id": 10075,
                        "nodeType": "Return",
                        "src": "801:87:51"
                      }
                    ]
                  },
                  "functionSelector": "67df6e89",
                  "id": 10077,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getLiquidityForAmount0",
                  "nameLocation": "457:22:51",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10039,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10034,
                        "mutability": "mutable",
                        "name": "sqrtRatioAX96",
                        "nameLocation": "493:13:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10077,
                        "src": "485:21:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10033,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "485:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10036,
                        "mutability": "mutable",
                        "name": "sqrtRatioBX96",
                        "nameLocation": "520:13:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10077,
                        "src": "512:21:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10035,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "512:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10038,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "547:7:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10077,
                        "src": "539:15:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10037,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "539:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "479:79:51"
                  },
                  "returnParameters": {
                    "id": 10042,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10041,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "588:9:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10077,
                        "src": "580:17:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 10040,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "580:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "579:19:51"
                  },
                  "scope": 10340,
                  "src": "448:445:51",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10112,
                    "nodeType": "Block",
                    "src": "1048:206:51",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 10090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10088,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10079,
                            "src": "1058:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 10089,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10081,
                            "src": "1074:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "1058:29:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10099,
                        "nodeType": "IfStatement",
                        "src": "1054:98:51",
                        "trueBody": {
                          "expression": {
                            "id": 10097,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 10091,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10079,
                                  "src": "1090:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 10092,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10081,
                                  "src": "1105:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 10093,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "1089:30:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 10094,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10081,
                                  "src": "1123:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 10095,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10079,
                                  "src": "1138:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 10096,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1122:30:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "src": "1089:63:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 10098,
                          "nodeType": "ExpressionStatement",
                          "src": "1089:63:51"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 10103,
                                  "name": "amount1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10083,
                                  "src": "1191:7:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 10104,
                                    "name": "FixedPoint96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4130,
                                    "src": "1200:12:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$4130_$",
                                      "typeString": "type(library FixedPoint96)"
                                    }
                                  },
                                  "id": 10105,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "Q96",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4129,
                                  "src": "1200:16:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  "id": 10108,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 10106,
                                    "name": "sqrtRatioBX96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10081,
                                    "src": "1218:13:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 10107,
                                    "name": "sqrtRatioAX96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10079,
                                    "src": "1234:13:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  },
                                  "src": "1218:29:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                ],
                                "expression": {
                                  "id": 10101,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4308,
                                  "src": "1175:8:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 10102,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4263,
                                "src": "1175:15:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 10109,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1175:73:51",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 10100,
                            "name": "toUint128",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10032,
                            "src": "1165:9:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$",
                              "typeString": "function (uint256) pure returns (uint128)"
                            }
                          },
                          "id": 10110,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1165:84:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "functionReturnParameters": 10087,
                        "id": 10111,
                        "nodeType": "Return",
                        "src": "1158:91:51"
                      }
                    ]
                  },
                  "functionSelector": "08c0f795",
                  "id": 10113,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getLiquidityForAmount1",
                  "nameLocation": "906:22:51",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10084,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10079,
                        "mutability": "mutable",
                        "name": "sqrtRatioAX96",
                        "nameLocation": "942:13:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10113,
                        "src": "934:21:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10078,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "934:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10081,
                        "mutability": "mutable",
                        "name": "sqrtRatioBX96",
                        "nameLocation": "969:13:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10113,
                        "src": "961:21:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10080,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "961:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10083,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "996:7:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10113,
                        "src": "988:15:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10082,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "988:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "928:79:51"
                  },
                  "returnParameters": {
                    "id": 10087,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10086,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "1037:9:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10113,
                        "src": "1029:17:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 10085,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1029:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1028:19:51"
                  },
                  "scope": 10340,
                  "src": "897:357:51",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10192,
                    "nodeType": "Block",
                    "src": "1458:627:51",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 10130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10128,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10117,
                            "src": "1468:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 10129,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10119,
                            "src": "1484:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "1468:29:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10139,
                        "nodeType": "IfStatement",
                        "src": "1464:98:51",
                        "trueBody": {
                          "expression": {
                            "id": 10137,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 10131,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10117,
                                  "src": "1500:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 10132,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10119,
                                  "src": "1515:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 10133,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "1499:30:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 10134,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10119,
                                  "src": "1533:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 10135,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10117,
                                  "src": "1548:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 10136,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1532:30:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "src": "1499:63:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 10138,
                          "nodeType": "ExpressionStatement",
                          "src": "1499:63:51"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 10142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10140,
                            "name": "sqrtRatioX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10115,
                            "src": "1573:12:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 10141,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10117,
                            "src": "1589:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "1573:29:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "id": 10154,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 10152,
                              "name": "sqrtRatioX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10115,
                              "src": "1702:12:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 10153,
                              "name": "sqrtRatioBX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10119,
                              "src": "1717:13:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "src": "1702:28:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 10189,
                            "nodeType": "Block",
                            "src": "1993:88:51",
                            "statements": [
                              {
                                "expression": {
                                  "id": 10187,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 10181,
                                    "name": "liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10126,
                                    "src": "2001:9:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "arguments": [
                                      {
                                        "id": 10183,
                                        "name": "sqrtRatioAX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10117,
                                        "src": "2036:13:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 10184,
                                        "name": "sqrtRatioBX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10119,
                                        "src": "2051:13:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 10185,
                                        "name": "amount1",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10123,
                                        "src": "2066:7:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 10182,
                                      "name": "getLiquidityForAmount1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10113,
                                      "src": "2013:22:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint256_$returns$_t_uint128_$",
                                        "typeString": "function (uint160,uint160,uint256) pure returns (uint128)"
                                      }
                                    },
                                    "id": 10186,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2013:61:51",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "src": "2001:73:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "id": 10188,
                                "nodeType": "ExpressionStatement",
                                "src": "2001:73:51"
                              }
                            ]
                          },
                          "id": 10190,
                          "nodeType": "IfStatement",
                          "src": "1698:383:51",
                          "trueBody": {
                            "id": 10180,
                            "nodeType": "Block",
                            "src": "1732:255:51",
                            "statements": [
                              {
                                "assignments": [
                                  10156
                                ],
                                "declarations": [
                                  {
                                    "constant": false,
                                    "id": 10156,
                                    "mutability": "mutable",
                                    "name": "liquidity0",
                                    "nameLocation": "1748:10:51",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 10180,
                                    "src": "1740:18:51",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    "typeName": {
                                      "id": 10155,
                                      "name": "uint128",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1740:7:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "visibility": "internal"
                                  }
                                ],
                                "id": 10162,
                                "initialValue": {
                                  "arguments": [
                                    {
                                      "id": 10158,
                                      "name": "sqrtRatioX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10115,
                                      "src": "1784:12:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 10159,
                                      "name": "sqrtRatioBX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10119,
                                      "src": "1798:13:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 10160,
                                      "name": "amount0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10121,
                                      "src": "1813:7:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 10157,
                                    "name": "getLiquidityForAmount0",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10077,
                                    "src": "1761:22:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint256_$returns$_t_uint128_$",
                                      "typeString": "function (uint160,uint160,uint256) pure returns (uint128)"
                                    }
                                  },
                                  "id": 10161,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1761:60:51",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "nodeType": "VariableDeclarationStatement",
                                "src": "1740:81:51"
                              },
                              {
                                "assignments": [
                                  10164
                                ],
                                "declarations": [
                                  {
                                    "constant": false,
                                    "id": 10164,
                                    "mutability": "mutable",
                                    "name": "liquidity1",
                                    "nameLocation": "1837:10:51",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 10180,
                                    "src": "1829:18:51",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    "typeName": {
                                      "id": 10163,
                                      "name": "uint128",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1829:7:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "visibility": "internal"
                                  }
                                ],
                                "id": 10170,
                                "initialValue": {
                                  "arguments": [
                                    {
                                      "id": 10166,
                                      "name": "sqrtRatioAX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10117,
                                      "src": "1873:13:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 10167,
                                      "name": "sqrtRatioX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10115,
                                      "src": "1888:12:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 10168,
                                      "name": "amount1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10123,
                                      "src": "1902:7:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 10165,
                                    "name": "getLiquidityForAmount1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10113,
                                    "src": "1850:22:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint256_$returns$_t_uint128_$",
                                      "typeString": "function (uint160,uint160,uint256) pure returns (uint128)"
                                    }
                                  },
                                  "id": 10169,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1850:60:51",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "nodeType": "VariableDeclarationStatement",
                                "src": "1829:81:51"
                              },
                              {
                                "expression": {
                                  "id": 10178,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 10171,
                                    "name": "liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10126,
                                    "src": "1919:9:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      },
                                      "id": 10174,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 10172,
                                        "name": "liquidity0",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10156,
                                        "src": "1931:10:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "id": 10173,
                                        "name": "liquidity1",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10164,
                                        "src": "1944:10:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      "src": "1931:23:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "id": 10176,
                                      "name": "liquidity1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10164,
                                      "src": "1970:10:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "id": 10177,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "1931:49:51",
                                    "trueExpression": {
                                      "id": 10175,
                                      "name": "liquidity0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10156,
                                      "src": "1957:10:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  },
                                  "src": "1919:61:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "id": 10179,
                                "nodeType": "ExpressionStatement",
                                "src": "1919:61:51"
                              }
                            ]
                          }
                        },
                        "id": 10191,
                        "nodeType": "IfStatement",
                        "src": "1569:512:51",
                        "trueBody": {
                          "id": 10151,
                          "nodeType": "Block",
                          "src": "1604:88:51",
                          "statements": [
                            {
                              "expression": {
                                "id": 10149,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 10143,
                                  "name": "liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10126,
                                  "src": "1612:9:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 10145,
                                      "name": "sqrtRatioAX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10117,
                                      "src": "1647:13:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 10146,
                                      "name": "sqrtRatioBX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10119,
                                      "src": "1662:13:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 10147,
                                      "name": "amount0",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10121,
                                      "src": "1677:7:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 10144,
                                    "name": "getLiquidityForAmount0",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10077,
                                    "src": "1624:22:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint256_$returns$_t_uint128_$",
                                      "typeString": "function (uint160,uint160,uint256) pure returns (uint128)"
                                    }
                                  },
                                  "id": 10148,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1624:61:51",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "src": "1612:73:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "id": 10150,
                              "nodeType": "ExpressionStatement",
                              "src": "1612:73:51"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "functionSelector": "6098fd4a",
                  "id": 10193,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getLiquidityForAmounts",
                  "nameLocation": "1267:22:51",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10124,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10115,
                        "mutability": "mutable",
                        "name": "sqrtRatioX96",
                        "nameLocation": "1303:12:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10193,
                        "src": "1295:20:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10114,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1295:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10117,
                        "mutability": "mutable",
                        "name": "sqrtRatioAX96",
                        "nameLocation": "1329:13:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10193,
                        "src": "1321:21:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10116,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1321:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10119,
                        "mutability": "mutable",
                        "name": "sqrtRatioBX96",
                        "nameLocation": "1356:13:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10193,
                        "src": "1348:21:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10118,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1348:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10121,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "1383:7:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10193,
                        "src": "1375:15:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10120,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1375:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10123,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "1404:7:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10193,
                        "src": "1396:15:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10122,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1396:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1289:126:51"
                  },
                  "returnParameters": {
                    "id": 10127,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10126,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "1447:9:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10193,
                        "src": "1439:17:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 10125,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "1439:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1438:19:51"
                  },
                  "scope": 10340,
                  "src": "1258:827:51",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10233,
                    "nodeType": "Block",
                    "src": "2240:247:51",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 10206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10204,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10195,
                            "src": "2250:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 10205,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10197,
                            "src": "2266:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "2250:29:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10215,
                        "nodeType": "IfStatement",
                        "src": "2246:98:51",
                        "trueBody": {
                          "expression": {
                            "id": 10213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 10207,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10195,
                                  "src": "2282:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 10208,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10197,
                                  "src": "2297:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 10209,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "2281:30:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 10210,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10197,
                                  "src": "2315:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 10211,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10195,
                                  "src": "2330:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 10212,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2314:30:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "src": "2281:63:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 10214,
                          "nodeType": "ExpressionStatement",
                          "src": "2281:63:51"
                        }
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 10224,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 10220,
                                      "name": "liquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10199,
                                      "src": "2382:9:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    ],
                                    "id": 10219,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2374:7:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 10218,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2374:7:51",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 10221,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2374:18:51",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<<",
                                "rightExpression": {
                                  "expression": {
                                    "id": 10222,
                                    "name": "FixedPoint96",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4130,
                                    "src": "2396:12:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$4130_$",
                                      "typeString": "type(library FixedPoint96)"
                                    }
                                  },
                                  "id": 10223,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "RESOLUTION",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4126,
                                  "src": "2396:23:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "2374:45:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 10227,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 10225,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10197,
                                  "src": "2421:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 10226,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10195,
                                  "src": "2437:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "2421:29:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "id": 10228,
                                "name": "sqrtRatioBX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10197,
                                "src": "2452:13:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "expression": {
                                "id": 10216,
                                "name": "FullMath",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4308,
                                "src": "2358:8:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                  "typeString": "type(library FullMath)"
                                }
                              },
                              "id": 10217,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mulDiv",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4263,
                              "src": "2358:15:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 10229,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2358:108:51",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "id": 10230,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10195,
                            "src": "2469:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "2358:124:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 10203,
                        "id": 10232,
                        "nodeType": "Return",
                        "src": "2351:131:51"
                      }
                    ]
                  },
                  "functionSelector": "6ac69a8e",
                  "id": 10234,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmount0ForLiquidity",
                  "nameLocation": "2098:22:51",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10200,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10195,
                        "mutability": "mutable",
                        "name": "sqrtRatioAX96",
                        "nameLocation": "2134:13:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10234,
                        "src": "2126:21:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10194,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2126:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10197,
                        "mutability": "mutable",
                        "name": "sqrtRatioBX96",
                        "nameLocation": "2161:13:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10234,
                        "src": "2153:21:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10196,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2153:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10199,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "2188:9:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10234,
                        "src": "2180:17:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 10198,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2180:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2120:81:51"
                  },
                  "returnParameters": {
                    "id": 10203,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10202,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "2231:7:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10234,
                        "src": "2223:15:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10201,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2223:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2222:17:51"
                  },
                  "scope": 10340,
                  "src": "2089:398:51",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10267,
                    "nodeType": "Block",
                    "src": "2642:198:51",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 10247,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10245,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10236,
                            "src": "2652:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 10246,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10238,
                            "src": "2668:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "2652:29:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10256,
                        "nodeType": "IfStatement",
                        "src": "2648:98:51",
                        "trueBody": {
                          "expression": {
                            "id": 10254,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 10248,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10236,
                                  "src": "2684:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 10249,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10238,
                                  "src": "2699:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 10250,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "2683:30:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 10251,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10238,
                                  "src": "2717:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 10252,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10236,
                                  "src": "2732:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 10253,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "2716:30:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "src": "2683:63:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 10255,
                          "nodeType": "ExpressionStatement",
                          "src": "2683:63:51"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10259,
                              "name": "liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10240,
                              "src": "2776:9:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              "id": 10262,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 10260,
                                "name": "sqrtRatioBX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10238,
                                "src": "2787:13:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "id": 10261,
                                "name": "sqrtRatioAX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10236,
                                "src": "2803:13:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "src": "2787:29:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "expression": {
                                "id": 10263,
                                "name": "FixedPoint96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4130,
                                "src": "2818:12:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$4130_$",
                                  "typeString": "type(library FixedPoint96)"
                                }
                              },
                              "id": 10264,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "Q96",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4129,
                              "src": "2818:16:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 10257,
                              "name": "FullMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4308,
                              "src": "2760:8:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FullMath_$4308_$",
                                "typeString": "type(library FullMath)"
                              }
                            },
                            "id": 10258,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mulDiv",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4263,
                            "src": "2760:15:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 10265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2760:75:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 10244,
                        "id": 10266,
                        "nodeType": "Return",
                        "src": "2753:82:51"
                      }
                    ]
                  },
                  "functionSelector": "29e24cb7",
                  "id": 10268,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmount1ForLiquidity",
                  "nameLocation": "2500:22:51",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10241,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10236,
                        "mutability": "mutable",
                        "name": "sqrtRatioAX96",
                        "nameLocation": "2536:13:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10268,
                        "src": "2528:21:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10235,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2528:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10238,
                        "mutability": "mutable",
                        "name": "sqrtRatioBX96",
                        "nameLocation": "2563:13:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10268,
                        "src": "2555:21:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10237,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2555:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10240,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "2590:9:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10268,
                        "src": "2582:17:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 10239,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2582:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2522:81:51"
                  },
                  "returnParameters": {
                    "id": 10244,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10243,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "2633:7:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10268,
                        "src": "2625:15:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10242,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2625:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2624:17:51"
                  },
                  "scope": 10340,
                  "src": "2491:349:51",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10338,
                    "nodeType": "Block",
                    "src": "3040:539:51",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 10285,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10283,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10272,
                            "src": "3050:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 10284,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10274,
                            "src": "3066:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "3050:29:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10294,
                        "nodeType": "IfStatement",
                        "src": "3046:98:51",
                        "trueBody": {
                          "expression": {
                            "id": 10292,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "components": [
                                {
                                  "id": 10286,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10272,
                                  "src": "3082:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 10287,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10274,
                                  "src": "3097:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 10288,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "TupleExpression",
                              "src": "3081:30:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "components": [
                                {
                                  "id": 10289,
                                  "name": "sqrtRatioBX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10274,
                                  "src": "3115:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 10290,
                                  "name": "sqrtRatioAX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10272,
                                  "src": "3130:13:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "id": 10291,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "3114:30:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                                "typeString": "tuple(uint160,uint160)"
                              }
                            },
                            "src": "3081:63:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 10293,
                          "nodeType": "ExpressionStatement",
                          "src": "3081:63:51"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 10297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10295,
                            "name": "sqrtRatioX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10270,
                            "src": "3155:12:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "id": 10296,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10272,
                            "src": "3171:13:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "3155:29:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            },
                            "id": 10309,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 10307,
                              "name": "sqrtRatioX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10270,
                              "src": "3284:12:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 10308,
                              "name": "sqrtRatioBX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10274,
                              "src": "3299:13:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            "src": "3284:28:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "id": 10335,
                            "nodeType": "Block",
                            "src": "3487:88:51",
                            "statements": [
                              {
                                "expression": {
                                  "id": 10333,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 10327,
                                    "name": "amount1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10281,
                                    "src": "3495:7:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "arguments": [
                                      {
                                        "id": 10329,
                                        "name": "sqrtRatioAX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10272,
                                        "src": "3528:13:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 10330,
                                        "name": "sqrtRatioBX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10274,
                                        "src": "3543:13:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 10331,
                                        "name": "liquidity",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10276,
                                        "src": "3558:9:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      ],
                                      "id": 10328,
                                      "name": "getAmount1ForLiquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10268,
                                      "src": "3505:22:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$returns$_t_uint256_$",
                                        "typeString": "function (uint160,uint160,uint128) pure returns (uint256)"
                                      }
                                    },
                                    "id": 10332,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3505:63:51",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3495:73:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 10334,
                                "nodeType": "ExpressionStatement",
                                "src": "3495:73:51"
                              }
                            ]
                          },
                          "id": 10336,
                          "nodeType": "IfStatement",
                          "src": "3280:295:51",
                          "trueBody": {
                            "id": 10326,
                            "nodeType": "Block",
                            "src": "3314:167:51",
                            "statements": [
                              {
                                "expression": {
                                  "id": 10316,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 10310,
                                    "name": "amount0",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10279,
                                    "src": "3322:7:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "arguments": [
                                      {
                                        "id": 10312,
                                        "name": "sqrtRatioX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10270,
                                        "src": "3355:12:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 10313,
                                        "name": "sqrtRatioBX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10274,
                                        "src": "3369:13:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 10314,
                                        "name": "liquidity",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10276,
                                        "src": "3384:9:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      ],
                                      "id": 10311,
                                      "name": "getAmount0ForLiquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10234,
                                      "src": "3332:22:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$returns$_t_uint256_$",
                                        "typeString": "function (uint160,uint160,uint128) pure returns (uint256)"
                                      }
                                    },
                                    "id": 10315,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3332:62:51",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3322:72:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 10317,
                                "nodeType": "ExpressionStatement",
                                "src": "3322:72:51"
                              },
                              {
                                "expression": {
                                  "id": 10324,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 10318,
                                    "name": "amount1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10281,
                                    "src": "3402:7:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "arguments": [
                                      {
                                        "id": 10320,
                                        "name": "sqrtRatioAX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10272,
                                        "src": "3435:13:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 10321,
                                        "name": "sqrtRatioX96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10270,
                                        "src": "3450:12:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      },
                                      {
                                        "id": 10322,
                                        "name": "liquidity",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10276,
                                        "src": "3464:9:51",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        },
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      ],
                                      "id": 10319,
                                      "name": "getAmount1ForLiquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10268,
                                      "src": "3412:22:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$returns$_t_uint256_$",
                                        "typeString": "function (uint160,uint160,uint128) pure returns (uint256)"
                                      }
                                    },
                                    "id": 10323,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3412:62:51",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3402:72:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 10325,
                                "nodeType": "ExpressionStatement",
                                "src": "3402:72:51"
                              }
                            ]
                          }
                        },
                        "id": 10337,
                        "nodeType": "IfStatement",
                        "src": "3151:424:51",
                        "trueBody": {
                          "id": 10306,
                          "nodeType": "Block",
                          "src": "3186:88:51",
                          "statements": [
                            {
                              "expression": {
                                "id": 10304,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 10298,
                                  "name": "amount0",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10279,
                                  "src": "3194:7:51",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 10300,
                                      "name": "sqrtRatioAX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10272,
                                      "src": "3227:13:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 10301,
                                      "name": "sqrtRatioBX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10274,
                                      "src": "3242:13:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    {
                                      "id": 10302,
                                      "name": "liquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10276,
                                      "src": "3257:9:51",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    ],
                                    "id": 10299,
                                    "name": "getAmount0ForLiquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10234,
                                    "src": "3204:22:51",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$returns$_t_uint256_$",
                                      "typeString": "function (uint160,uint160,uint128) pure returns (uint256)"
                                    }
                                  },
                                  "id": 10303,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3204:63:51",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3194:73:51",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10305,
                              "nodeType": "ExpressionStatement",
                              "src": "3194:73:51"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "functionSelector": "c72e160b",
                  "id": 10339,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAmountsForLiquidity",
                  "nameLocation": "2853:22:51",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10277,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10270,
                        "mutability": "mutable",
                        "name": "sqrtRatioX96",
                        "nameLocation": "2889:12:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10339,
                        "src": "2881:20:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10269,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2881:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10272,
                        "mutability": "mutable",
                        "name": "sqrtRatioAX96",
                        "nameLocation": "2915:13:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10339,
                        "src": "2907:21:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10271,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2907:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10274,
                        "mutability": "mutable",
                        "name": "sqrtRatioBX96",
                        "nameLocation": "2942:13:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10339,
                        "src": "2934:21:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 10273,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2934:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10276,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "2969:9:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10339,
                        "src": "2961:17:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 10275,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "2961:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2875:107:51"
                  },
                  "returnParameters": {
                    "id": 10282,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10279,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "3014:7:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10339,
                        "src": "3006:15:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10278,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3006:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10281,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "3031:7:51",
                        "nodeType": "VariableDeclaration",
                        "scope": 10339,
                        "src": "3023:15:51",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10280,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3023:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3005:34:51"
                  },
                  "scope": 10340,
                  "src": "2844:735:51",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 10341,
              "src": "303:3278:51",
              "usedErrors": []
            }
          ],
          "src": "45:3537:51"
        },
        "id": 51
      },
      "solidity/for-test/peripherals/DustCollectorForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/DustCollectorForTest.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "DustCollector": [
              5257
            ],
            "DustCollectorForTest": [
              10356
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IDustCollector": [
              12818
            ],
            "IERC20": [
              663
            ],
            "IGovernable": [
              12863
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 10357,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10342,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:52"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/DustCollector.sol",
              "file": "../../contracts/peripherals/DustCollector.sol",
              "id": 10343,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10357,
              "sourceUnit": 5258,
              "src": "65:55:52",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 10344,
                    "name": "DustCollector",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5257,
                    "src": "155:13:52"
                  },
                  "id": 10345,
                  "nodeType": "InheritanceSpecifier",
                  "src": "155:13:52"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 10356,
              "linearizedBaseContracts": [
                10356,
                5257,
                5354,
                12863,
                12818,
                12793
              ],
              "name": "DustCollectorForTest",
              "nameLocation": "131:20:52",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 10354,
                    "nodeType": "Block",
                    "src": "226:2:52",
                    "statements": []
                  },
                  "id": 10355,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [],
                      "id": 10348,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10347,
                        "name": "DustCollector",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5257,
                        "src": "187:13:52"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "187:15:52"
                    },
                    {
                      "arguments": [
                        {
                          "expression": {
                            "id": 10350,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "214:3:52",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 10351,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "214:10:52",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10352,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10349,
                        "name": "Governable",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5354,
                        "src": "203:10:52"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "203:22:52"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10346,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "184:2:52"
                  },
                  "returnParameters": {
                    "id": 10353,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "226:0:52"
                  },
                  "scope": 10356,
                  "src": "173:55:52",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 10357,
              "src": "122:108:52",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "32:199:52"
        },
        "id": 52
      },
      "solidity/for-test/peripherals/GovernableForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/GovernableForTest.sol",
          "exportedSymbols": {
            "Governable": [
              5354
            ],
            "GovernableForTest": [
              10371
            ],
            "IGovernable": [
              12863
            ]
          },
          "id": 10372,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10358,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:53"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Governable.sol",
              "file": "../../contracts/peripherals/Governable.sol",
              "id": 10359,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10372,
              "sourceUnit": 5355,
              "src": "65:52:53",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 10360,
                    "name": "Governable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5354,
                    "src": "149:10:53"
                  },
                  "id": 10361,
                  "nodeType": "InheritanceSpecifier",
                  "src": "149:10:53"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 10371,
              "linearizedBaseContracts": [
                10371,
                5354,
                12863
              ],
              "name": "GovernableForTest",
              "nameLocation": "128:17:53",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 10369,
                    "nodeType": "Block",
                    "src": "217:2:53",
                    "statements": []
                  },
                  "id": 10370,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 10366,
                          "name": "_governor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10363,
                          "src": "206:9:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10367,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10365,
                        "name": "Governable",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5354,
                        "src": "195:10:53"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "195:21:53"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10364,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10363,
                        "mutability": "mutable",
                        "name": "_governor",
                        "nameLocation": "184:9:53",
                        "nodeType": "VariableDeclaration",
                        "scope": 10370,
                        "src": "176:17:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10362,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176:7:53",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "175:19:53"
                  },
                  "returnParameters": {
                    "id": 10368,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "217:0:53"
                  },
                  "scope": 10371,
                  "src": "164:55:53",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 10372,
              "src": "119:102:53",
              "usedErrors": [
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "32:190:53"
        },
        "id": 53
      },
      "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/Keep3rAccountanceForTest.sol",
          "exportedSymbols": {
            "EnumerableSet": [
              1918
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rAccountanceForTest": [
              10405
            ]
          },
          "id": 10406,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10373,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:54"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rAccountance.sol",
              "file": "../../contracts/peripherals/Keep3rAccountance.sol",
              "id": 10374,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10406,
              "sourceUnit": 5508,
              "src": "65:59:54",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 10375,
                    "name": "Keep3rAccountance",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5507,
                    "src": "163:17:54"
                  },
                  "id": 10376,
                  "nodeType": "InheritanceSpecifier",
                  "src": "163:17:54"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 10405,
              "linearizedBaseContracts": [
                10405,
                5507,
                12997
              ],
              "name": "Keep3rAccountanceForTest",
              "nameLocation": "135:24:54",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 10380,
                  "libraryName": {
                    "id": 10377,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "191:13:54"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "185:49:54",
                  "typeName": {
                    "id": 10379,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 10378,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "209:24:54"
                    },
                    "referencedDeclaration": 1631,
                    "src": "209:24:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "body": {
                    "id": 10391,
                    "nodeType": "Block",
                    "src": "276:25:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10388,
                              "name": "job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10382,
                              "src": "292:3:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 10385,
                              "name": "_jobs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "282:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10387,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "282:9:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10389,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "282:14:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10390,
                        "nodeType": "ExpressionStatement",
                        "src": "282:14:54"
                      }
                    ]
                  },
                  "functionSelector": "a662031b",
                  "id": 10392,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setJob",
                  "nameLocation": "247:6:54",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10383,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10382,
                        "mutability": "mutable",
                        "name": "job",
                        "nameLocation": "262:3:54",
                        "nodeType": "VariableDeclaration",
                        "scope": 10392,
                        "src": "254:11:54",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10381,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "254:7:54",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "253:13:54"
                  },
                  "returnParameters": {
                    "id": 10384,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "276:0:54"
                  },
                  "scope": 10405,
                  "src": "238:63:54",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10403,
                    "nodeType": "Block",
                    "src": "349:31:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10400,
                              "name": "keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10394,
                              "src": "368:6:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 10397,
                              "name": "_keepers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5368,
                              "src": "355:8:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10399,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "355:12:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10401,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "355:20:54",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10402,
                        "nodeType": "ExpressionStatement",
                        "src": "355:20:54"
                      }
                    ]
                  },
                  "functionSelector": "748747e6",
                  "id": 10404,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKeeper",
                  "nameLocation": "314:9:54",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10395,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10394,
                        "mutability": "mutable",
                        "name": "keeper",
                        "nameLocation": "332:6:54",
                        "nodeType": "VariableDeclaration",
                        "scope": 10404,
                        "src": "324:14:54",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10393,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "324:7:54",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "323:16:54"
                  },
                  "returnParameters": {
                    "id": 10396,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "349:0:54"
                  },
                  "scope": 10405,
                  "src": "305:75:54",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 10406,
              "src": "126:256:54",
              "usedErrors": [
                12993,
                12996
              ]
            }
          ],
          "src": "32:351:54"
        },
        "id": 54
      },
      "solidity/for-test/peripherals/Keep3rDisputableForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/Keep3rDisputableForTest.sol",
          "exportedSymbols": {
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rDisputable": [
              13033
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rDisputable": [
              5578
            ],
            "Keep3rDisputableForTest": [
              10419
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ]
          },
          "id": 10420,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10407,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:55"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rDisputable.sol",
              "file": "../../contracts/peripherals/Keep3rDisputable.sol",
              "id": 10408,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10420,
              "sourceUnit": 5579,
              "src": "65:58:55",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 10409,
                    "name": "Keep3rDisputable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5578,
                    "src": "161:16:55"
                  },
                  "id": 10410,
                  "nodeType": "InheritanceSpecifier",
                  "src": "161:16:55"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 10419,
              "linearizedBaseContracts": [
                10419,
                5578,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13033
              ],
              "name": "Keep3rDisputableForTest",
              "nameLocation": "134:23:55",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 10417,
                    "nodeType": "Block",
                    "src": "220:2:55",
                    "statements": []
                  },
                  "id": 10418,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "expression": {
                            "id": 10413,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "208:3:55",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 10414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "208:10:55",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10415,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10412,
                        "name": "Keep3rRoles",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6101,
                        "src": "196:11:55"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "196:23:55"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10411,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "193:2:55"
                  },
                  "returnParameters": {
                    "id": 10416,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "220:0:55"
                  },
                  "scope": 10419,
                  "src": "182:40:55",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 10420,
              "src": "125:99:55",
              "usedErrors": [
                12834,
                12837,
                12840,
                12993,
                12996,
                13017,
                13020,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:193:55"
        },
        "id": 55
      },
      "solidity/for-test/peripherals/Keep3rParametersForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/Keep3rParametersForTest.sol",
          "exportedSymbols": {
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rParametersForTest": [
              10471
            ],
            "Keep3rRoles": [
              6101
            ]
          },
          "id": 10472,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10421,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:56"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/Keep3rParameters.sol",
              "file": "../../contracts/peripherals/Keep3rParameters.sol",
              "id": 10422,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10472,
              "sourceUnit": 5935,
              "src": "65:58:56",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 10423,
                    "name": "Keep3rParameters",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 5934,
                    "src": "161:16:56"
                  },
                  "id": 10424,
                  "nodeType": "InheritanceSpecifier",
                  "src": "161:16:56"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 10471,
              "linearizedBaseContracts": [
                10471,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793
              ],
              "name": "Keep3rParametersForTest",
              "nameLocation": "134:23:56",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 10445,
                    "nodeType": "Block",
                    "src": "401:2:56",
                    "statements": []
                  },
                  "id": 10446,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 10435,
                          "name": "_keep3rHelper",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10426,
                          "src": "320:13:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10436,
                          "name": "_keep3rV1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10428,
                          "src": "335:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10437,
                          "name": "_keep3rV1Proxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10430,
                          "src": "346:14:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10438,
                          "name": "_kp3rWethPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10432,
                          "src": "362:13:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10439,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10434,
                        "name": "Keep3rParameters",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5934,
                        "src": "303:16:56"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "303:73:56"
                    },
                    {
                      "arguments": [
                        {
                          "expression": {
                            "id": 10441,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "389:3:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 10442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "389:10:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10443,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10440,
                        "name": "Keep3rRoles",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6101,
                        "src": "377:11:56"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "377:23:56"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10433,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10426,
                        "mutability": "mutable",
                        "name": "_keep3rHelper",
                        "nameLocation": "207:13:56",
                        "nodeType": "VariableDeclaration",
                        "scope": 10446,
                        "src": "199:21:56",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10425,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "199:7:56",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10428,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "234:9:56",
                        "nodeType": "VariableDeclaration",
                        "scope": 10446,
                        "src": "226:17:56",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10427,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "226:7:56",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10430,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "257:14:56",
                        "nodeType": "VariableDeclaration",
                        "scope": 10446,
                        "src": "249:22:56",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10429,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "249:7:56",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10432,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "285:13:56",
                        "nodeType": "VariableDeclaration",
                        "scope": 10446,
                        "src": "277:21:56",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10431,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "277:7:56",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "193:109:56"
                  },
                  "returnParameters": {
                    "id": 10444,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "401:0:56"
                  },
                  "scope": 10471,
                  "src": "182:221:56",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10457,
                    "nodeType": "Block",
                    "src": "479:39:56",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 10453,
                            "name": "_liquidityPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5429,
                            "src": "492:14:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 10455,
                          "indexExpression": {
                            "id": 10454,
                            "name": "_pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10448,
                            "src": "507:5:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "492:21:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 10452,
                        "id": 10456,
                        "nodeType": "Return",
                        "src": "485:28:56"
                      }
                    ]
                  },
                  "functionSelector": "240d2d74",
                  "id": 10458,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewLiquidityPool",
                  "nameLocation": "416:17:56",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10449,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10448,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "442:5:56",
                        "nodeType": "VariableDeclaration",
                        "scope": 10458,
                        "src": "434:13:56",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10447,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "434:7:56",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "433:15:56"
                  },
                  "returnParameters": {
                    "id": 10452,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10451,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 10458,
                        "src": "470:7:56",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10450,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "470:7:56",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "469:9:56"
                  },
                  "scope": 10471,
                  "src": "407:111:56",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10469,
                    "nodeType": "Block",
                    "src": "590:38:56",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 10465,
                            "name": "_isKP3RToken0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5434,
                            "src": "603:13:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 10467,
                          "indexExpression": {
                            "id": 10466,
                            "name": "_pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10460,
                            "src": "617:5:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "603:20:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 10464,
                        "id": 10468,
                        "nodeType": "Return",
                        "src": "596:27:56"
                      }
                    ]
                  },
                  "functionSelector": "4b6c91a7",
                  "id": 10470,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewIsKP3RToken0",
                  "nameLocation": "531:16:56",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10461,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10460,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "556:5:56",
                        "nodeType": "VariableDeclaration",
                        "scope": 10470,
                        "src": "548:13:56",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10459,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "548:7:56",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "547:15:56"
                  },
                  "returnParameters": {
                    "id": 10464,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10463,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 10470,
                        "src": "584:4:56",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 10462,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "584:4:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "583:6:56"
                  },
                  "scope": 10471,
                  "src": "522:106:56",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 10472,
              "src": "125:505:56",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:599:56"
        },
        "id": 56
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/jobs/Keep3rJobDisputableForTest.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rDisputable": [
              13033
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IPairManager": [
              11703
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rDisputable": [
              5578
            ],
            "Keep3rJobDisputable": [
              6259
            ],
            "Keep3rJobDisputableForTest": [
              10679
            ],
            "Keep3rJobFundableCredits": [
              6508
            ],
            "Keep3rJobFundableLiquidity": [
              7939
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 10680,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10473,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:57"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobDisputable.sol",
              "file": "../../../contracts/peripherals/jobs/Keep3rJobDisputable.sol",
              "id": 10474,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10680,
              "sourceUnit": 6260,
              "src": "65:69:57",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 10475,
                    "name": "Keep3rJobDisputable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 6259,
                    "src": "175:19:57"
                  },
                  "id": 10476,
                  "nodeType": "InheritanceSpecifier",
                  "src": "175:19:57"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 10679,
              "linearizedBaseContracts": [
                10679,
                6259,
                7939,
                6508,
                5934,
                5578,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                39,
                13033,
                13559,
                13305,
                13100
              ],
              "name": "Keep3rJobDisputableForTest",
              "nameLocation": "145:26:57",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 10480,
                  "libraryName": {
                    "id": 10477,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "205:13:57"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "199:49:57",
                  "typeName": {
                    "id": 10479,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 10478,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "223:24:57"
                    },
                    "referencedDeclaration": 1631,
                    "src": "223:24:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "body": {
                    "id": 10501,
                    "nodeType": "Block",
                    "src": "453:2:57",
                    "statements": []
                  },
                  "id": 10502,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 10491,
                          "name": "_kph",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10482,
                          "src": "381:4:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10492,
                          "name": "_keep3rV1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10484,
                          "src": "387:9:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10493,
                          "name": "_keep3rV1Proxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10486,
                          "src": "398:14:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10494,
                          "name": "_kp3rWethPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10488,
                          "src": "414:13:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10495,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10490,
                        "name": "Keep3rParameters",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5934,
                        "src": "364:16:57"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "364:64:57"
                    },
                    {
                      "arguments": [
                        {
                          "expression": {
                            "id": 10497,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "441:3:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 10498,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "441:10:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10499,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10496,
                        "name": "Keep3rRoles",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6101,
                        "src": "429:11:57"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "429:23:57"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10489,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10482,
                        "mutability": "mutable",
                        "name": "_kph",
                        "nameLocation": "277:4:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10502,
                        "src": "269:12:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10481,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "269:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10484,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "295:9:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10502,
                        "src": "287:17:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10483,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "287:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10486,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "318:14:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10502,
                        "src": "310:22:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10485,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "310:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10488,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "346:13:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10502,
                        "src": "338:21:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10487,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "338:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "263:100:57"
                  },
                  "returnParameters": {
                    "id": 10500,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "453:0:57"
                  },
                  "scope": 10679,
                  "src": "252:203:57",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10516,
                    "nodeType": "Block",
                    "src": "527:48:57",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10513,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10506,
                              "src": "559:10:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "baseExpression": {
                                "id": 10509,
                                "name": "_jobLiquidities",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5424,
                                "src": "533:15:57",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                  "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                }
                              },
                              "id": 10511,
                              "indexExpression": {
                                "id": 10510,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10504,
                                "src": "549:4:57",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "533:21:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10512,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "533:25:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "533:37:57",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10515,
                        "nodeType": "ExpressionStatement",
                        "src": "533:37:57"
                      }
                    ]
                  },
                  "functionSelector": "cacdf93d",
                  "id": 10517,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setJobLiquidity",
                  "nameLocation": "468:15:57",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10507,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10504,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "492:4:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10517,
                        "src": "484:12:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10503,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "484:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10506,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "506:10:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10517,
                        "src": "498:18:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10505,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "498:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "483:34:57"
                  },
                  "returnParameters": {
                    "id": 10508,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "527:0:57"
                  },
                  "scope": 10679,
                  "src": "459:116:57",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10531,
                    "nodeType": "Block",
                    "src": "639:39:57",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10528,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10521,
                              "src": "666:6:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "baseExpression": {
                                "id": 10524,
                                "name": "_jobTokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5418,
                                "src": "645:10:57",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                  "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                }
                              },
                              "id": 10526,
                              "indexExpression": {
                                "id": 10525,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10519,
                                "src": "656:4:57",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "645:16:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10527,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "645:20:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10529,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "645:28:57",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10530,
                        "nodeType": "ExpressionStatement",
                        "src": "645:28:57"
                      }
                    ]
                  },
                  "functionSelector": "e01f857c",
                  "id": 10532,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setJobToken",
                  "nameLocation": "588:11:57",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10522,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10519,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "608:4:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10532,
                        "src": "600:12:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10518,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "600:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10521,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "622:6:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10532,
                        "src": "614:14:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10520,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "614:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "599:30:57"
                  },
                  "returnParameters": {
                    "id": 10523,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "639:0:57"
                  },
                  "scope": 10679,
                  "src": "579:99:57",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10543,
                    "nodeType": "Block",
                    "src": "741:47:57",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10540,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10534,
                              "src": "772:10:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 10537,
                              "name": "_approvedLiquidities",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6540,
                              "src": "747:20:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10539,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "747:24:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "747:36:57",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10542,
                        "nodeType": "ExpressionStatement",
                        "src": "747:36:57"
                      }
                    ]
                  },
                  "functionSelector": "280b656c",
                  "id": 10544,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovedLiquidity",
                  "nameLocation": "691:20:57",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10535,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10534,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "720:10:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10544,
                        "src": "712:18:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10533,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "712:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "711:20:57"
                  },
                  "returnParameters": {
                    "id": 10536,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "741:0:57"
                  },
                  "scope": 10679,
                  "src": "682:106:57",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10555,
                    "nodeType": "Block",
                    "src": "850:50:57",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10552,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10546,
                              "src": "884:10:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 10549,
                              "name": "_approvedLiquidities",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6540,
                              "src": "856:20:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10551,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "remove",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1685,
                            "src": "856:27:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10553,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "856:39:57",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10554,
                        "nodeType": "ExpressionStatement",
                        "src": "856:39:57"
                      }
                    ]
                  },
                  "functionSelector": "deaf81d4",
                  "id": 10556,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setRevokedLiquidity",
                  "nameLocation": "801:19:57",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10547,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10546,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "829:10:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10556,
                        "src": "821:18:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10545,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "821:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "820:20:57"
                  },
                  "returnParameters": {
                    "id": 10548,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "850:0:57"
                  },
                  "scope": 10679,
                  "src": "792:108:57",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10569,
                    "nodeType": "Block",
                    "src": "996:48:57",
                    "statements": [
                      {
                        "expression": {
                          "id": 10567,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10563,
                            "name": "_credits",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10561,
                            "src": "1002:8:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 10564,
                              "name": "_jobLiquidityCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5407,
                              "src": "1013:20:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 10566,
                            "indexExpression": {
                              "id": 10565,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10558,
                              "src": "1034:4:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1013:26:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1002:37:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 10568,
                        "nodeType": "ExpressionStatement",
                        "src": "1002:37:57"
                      }
                    ]
                  },
                  "functionSelector": "de55351d",
                  "id": 10570,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalJobLiquidityCredits",
                  "nameLocation": "913:27:57",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10559,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10558,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "949:4:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10570,
                        "src": "941:12:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10557,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "941:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "940:14:57"
                  },
                  "returnParameters": {
                    "id": 10562,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10561,
                        "mutability": "mutable",
                        "name": "_credits",
                        "nameLocation": "986:8:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10570,
                        "src": "978:16:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10560,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "978:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "977:18:57"
                  },
                  "scope": 10679,
                  "src": "904:140:57",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10583,
                    "nodeType": "Block",
                    "src": "1137:45:57",
                    "statements": [
                      {
                        "expression": {
                          "id": 10581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10577,
                            "name": "_credits",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10575,
                            "src": "1143:8:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 10578,
                              "name": "_jobPeriodCredits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5412,
                              "src": "1154:17:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 10580,
                            "indexExpression": {
                              "id": 10579,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10572,
                              "src": "1172:4:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1154:23:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1143:34:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 10582,
                        "nodeType": "ExpressionStatement",
                        "src": "1143:34:57"
                      }
                    ]
                  },
                  "functionSelector": "0dc60206",
                  "id": 10584,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalJobPeriodCredits",
                  "nameLocation": "1057:24:57",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10573,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10572,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1090:4:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10584,
                        "src": "1082:12:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10571,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1082:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1081:14:57"
                  },
                  "returnParameters": {
                    "id": 10576,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10575,
                        "mutability": "mutable",
                        "name": "_credits",
                        "nameLocation": "1127:8:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10584,
                        "src": "1119:16:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10574,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1119:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1118:18:57"
                  },
                  "scope": 10679,
                  "src": "1048:134:57",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10630,
                    "nodeType": "Block",
                    "src": "1276:168:57",
                    "statements": [
                      {
                        "expression": {
                          "id": 10602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10592,
                            "name": "_tokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10590,
                            "src": "1282:7:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 10596,
                                      "name": "_jobTokens",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5418,
                                      "src": "1306:10:57",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 10598,
                                    "indexExpression": {
                                      "id": 10597,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10586,
                                      "src": "1317:4:57",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1306:16:57",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 10599,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1727,
                                  "src": "1306:23:57",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
                                  }
                                },
                                "id": 10600,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1306:25:57",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 10595,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "1292:13:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (address[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 10593,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1296:7:57",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 10594,
                                "nodeType": "ArrayTypeName",
                                "src": "1296:9:57",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                  "typeString": "address[]"
                                }
                              }
                            },
                            "id": 10601,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1292:40:57",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "src": "1282:50:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 10603,
                        "nodeType": "ExpressionStatement",
                        "src": "1282:50:57"
                      },
                      {
                        "body": {
                          "id": 10628,
                          "nodeType": "Block",
                          "src": "1390:50:57",
                          "statements": [
                            {
                              "expression": {
                                "id": 10626,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 10617,
                                    "name": "_tokens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10590,
                                    "src": "1398:7:57",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 10619,
                                  "indexExpression": {
                                    "id": 10618,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10605,
                                    "src": "1406:1:57",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "1398:10:57",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 10624,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10605,
                                      "src": "1431:1:57",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "baseExpression": {
                                        "id": 10620,
                                        "name": "_jobTokens",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5418,
                                        "src": "1411:10:57",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                          "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                        }
                                      },
                                      "id": 10622,
                                      "indexExpression": {
                                        "id": 10621,
                                        "name": "_job",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10586,
                                        "src": "1422:4:57",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "1411:16:57",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                        "typeString": "struct EnumerableSet.AddressSet storage ref"
                                      }
                                    },
                                    "id": 10623,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "at",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1754,
                                    "src": "1411:19:57",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                      "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"
                                    }
                                  },
                                  "id": 10625,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1411:22:57",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "1398:35:57",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 10627,
                              "nodeType": "ExpressionStatement",
                              "src": "1398:35:57"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10607,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10605,
                            "src": "1354:1:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "baseExpression": {
                                  "id": 10608,
                                  "name": "_jobTokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5418,
                                  "src": "1358:10:57",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 10610,
                                "indexExpression": {
                                  "id": 10609,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10586,
                                  "src": "1369:4:57",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1358:16:57",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 10611,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1727,
                              "src": "1358:23:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
                              }
                            },
                            "id": 10612,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1358:25:57",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1354:29:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10629,
                        "initializationExpression": {
                          "assignments": [
                            10605
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 10605,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "1351:1:57",
                              "nodeType": "VariableDeclaration",
                              "scope": 10629,
                              "src": "1343:9:57",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 10604,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1343:7:57",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 10606,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "1343:9:57"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 10615,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "1385:3:57",
                            "subExpression": {
                              "id": 10614,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10605,
                              "src": "1385:1:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10616,
                          "nodeType": "ExpressionStatement",
                          "src": "1385:3:57"
                        },
                        "nodeType": "ForStatement",
                        "src": "1338:102:57"
                      }
                    ]
                  },
                  "functionSelector": "e89aad28",
                  "id": 10631,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalJobTokens",
                  "nameLocation": "1195:17:57",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10587,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10586,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1221:4:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10631,
                        "src": "1213:12:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10585,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1213:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1212:14:57"
                  },
                  "returnParameters": {
                    "id": 10591,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10590,
                        "mutability": "mutable",
                        "name": "_tokens",
                        "nameLocation": "1267:7:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10631,
                        "src": "1250:24:57",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10588,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1250:7:57",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 10589,
                          "nodeType": "ArrayTypeName",
                          "src": "1250:9:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1249:26:57"
                  },
                  "scope": 10679,
                  "src": "1186:258:57",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10677,
                    "nodeType": "Block",
                    "src": "1543:183:57",
                    "statements": [
                      {
                        "expression": {
                          "id": 10649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10639,
                            "name": "_tokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10637,
                            "src": "1549:7:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "baseExpression": {
                                      "id": 10643,
                                      "name": "_jobLiquidities",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5424,
                                      "src": "1573:15:57",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                        "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                      }
                                    },
                                    "id": 10645,
                                    "indexExpression": {
                                      "id": 10644,
                                      "name": "_job",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10633,
                                      "src": "1589:4:57",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1573:21:57",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                      "typeString": "struct EnumerableSet.AddressSet storage ref"
                                    }
                                  },
                                  "id": 10646,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1727,
                                  "src": "1573:28:57",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                    "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
                                  }
                                },
                                "id": 10647,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1573:30:57",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 10642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "1559:13:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (address[] memory)"
                              },
                              "typeName": {
                                "baseType": {
                                  "id": 10640,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1563:7:57",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 10641,
                                "nodeType": "ArrayTypeName",
                                "src": "1563:9:57",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                  "typeString": "address[]"
                                }
                              }
                            },
                            "id": 10648,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1559:45:57",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "src": "1549:55:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 10650,
                        "nodeType": "ExpressionStatement",
                        "src": "1549:55:57"
                      },
                      {
                        "body": {
                          "id": 10675,
                          "nodeType": "Block",
                          "src": "1667:55:57",
                          "statements": [
                            {
                              "expression": {
                                "id": 10673,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 10664,
                                    "name": "_tokens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10637,
                                    "src": "1675:7:57",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 10666,
                                  "indexExpression": {
                                    "id": 10665,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10652,
                                    "src": "1683:1:57",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "1675:10:57",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "id": 10671,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10652,
                                      "src": "1713:1:57",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "baseExpression": {
                                        "id": 10667,
                                        "name": "_jobLiquidities",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5424,
                                        "src": "1688:15:57",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                          "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                        }
                                      },
                                      "id": 10669,
                                      "indexExpression": {
                                        "id": 10668,
                                        "name": "_job",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10633,
                                        "src": "1704:4:57",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "1688:21:57",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                        "typeString": "struct EnumerableSet.AddressSet storage ref"
                                      }
                                    },
                                    "id": 10670,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "at",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1754,
                                    "src": "1688:24:57",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                      "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"
                                    }
                                  },
                                  "id": 10672,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1688:27:57",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "1675:40:57",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 10674,
                              "nodeType": "ExpressionStatement",
                              "src": "1675:40:57"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10660,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10654,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10652,
                            "src": "1626:1:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "baseExpression": {
                                  "id": 10655,
                                  "name": "_jobLiquidities",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5424,
                                  "src": "1630:15:57",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 10657,
                                "indexExpression": {
                                  "id": 10656,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10633,
                                  "src": "1646:4:57",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1630:21:57",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 10658,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1727,
                              "src": "1630:28:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
                              }
                            },
                            "id": 10659,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1630:30:57",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1626:34:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10676,
                        "initializationExpression": {
                          "assignments": [
                            10652
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 10652,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "1623:1:57",
                              "nodeType": "VariableDeclaration",
                              "scope": 10676,
                              "src": "1615:9:57",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 10651,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1615:7:57",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 10653,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "1615:9:57"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 10662,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "1662:3:57",
                            "subExpression": {
                              "id": 10661,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10652,
                              "src": "1662:1:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10663,
                          "nodeType": "ExpressionStatement",
                          "src": "1662:3:57"
                        },
                        "nodeType": "ForStatement",
                        "src": "1610:112:57"
                      }
                    ]
                  },
                  "functionSelector": "75a9f7ff",
                  "id": 10678,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalJobLiquidities",
                  "nameLocation": "1457:22:57",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10634,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10633,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1488:4:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10678,
                        "src": "1480:12:57",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10632,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1480:7:57",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1479:14:57"
                  },
                  "returnParameters": {
                    "id": 10638,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10637,
                        "mutability": "mutable",
                        "name": "_tokens",
                        "nameLocation": "1534:7:57",
                        "nodeType": "VariableDeclaration",
                        "scope": 10678,
                        "src": "1517:24:57",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10635,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1517:7:57",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 10636,
                          "nodeType": "ArrayTypeName",
                          "src": "1517:9:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1516:26:57"
                  },
                  "scope": 10679,
                  "src": "1448:278:57",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 10680,
              "src": "136:1592:57",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13017,
                13020,
                13061,
                13064,
                13067,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13422,
                13425,
                13535,
                13538,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:1697:57"
        },
        "id": 57
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/jobs/Keep3rJobFundableCreditsForTest.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rJobFundableCredits": [
              6508
            ],
            "Keep3rJobFundableCreditsForTest": [
              10765
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 10766,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10681,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:58"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobFundableCredits.sol",
              "file": "../../../contracts/peripherals/jobs/Keep3rJobFundableCredits.sol",
              "id": 10682,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10766,
              "sourceUnit": 6509,
              "src": "65:74:58",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 10683,
                    "name": "Keep3rJobFundableCredits",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 6508,
                    "src": "185:24:58"
                  },
                  "id": 10684,
                  "nodeType": "InheritanceSpecifier",
                  "src": "185:24:58"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 10765,
              "linearizedBaseContracts": [
                10765,
                6508,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                39,
                13100
              ],
              "name": "Keep3rJobFundableCreditsForTest",
              "nameLocation": "150:31:58",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 10688,
                  "libraryName": {
                    "id": 10685,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "220:13:58"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "214:49:58",
                  "typeName": {
                    "id": 10687,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 10686,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "238:24:58"
                    },
                    "referencedDeclaration": 1631,
                    "src": "238:24:58",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "body": {
                    "id": 10709,
                    "nodeType": "Block",
                    "src": "468:2:58",
                    "statements": []
                  },
                  "id": 10710,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 10699,
                          "name": "_kph",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10690,
                          "src": "396:4:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10700,
                          "name": "_keep3rV1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10692,
                          "src": "402:9:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10701,
                          "name": "_keep3rV1Proxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10694,
                          "src": "413:14:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10702,
                          "name": "_kp3rWethPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10696,
                          "src": "429:13:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10703,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10698,
                        "name": "Keep3rParameters",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5934,
                        "src": "379:16:58"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "379:64:58"
                    },
                    {
                      "arguments": [
                        {
                          "expression": {
                            "id": 10705,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "456:3:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 10706,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "456:10:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10707,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10704,
                        "name": "Keep3rRoles",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6101,
                        "src": "444:11:58"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "444:23:58"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10697,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10690,
                        "mutability": "mutable",
                        "name": "_kph",
                        "nameLocation": "292:4:58",
                        "nodeType": "VariableDeclaration",
                        "scope": 10710,
                        "src": "284:12:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10689,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "284:7:58",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10692,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "310:9:58",
                        "nodeType": "VariableDeclaration",
                        "scope": 10710,
                        "src": "302:17:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10691,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "302:7:58",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10694,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "333:14:58",
                        "nodeType": "VariableDeclaration",
                        "scope": 10710,
                        "src": "325:22:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10693,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "325:7:58",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10696,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "361:13:58",
                        "nodeType": "VariableDeclaration",
                        "scope": 10710,
                        "src": "353:21:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10695,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "353:7:58",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "278:100:58"
                  },
                  "returnParameters": {
                    "id": 10708,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "468:0:58"
                  },
                  "scope": 10765,
                  "src": "267:203:58",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10729,
                    "nodeType": "Block",
                    "src": "532:58:58",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10720,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10712,
                              "src": "548:4:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 10717,
                              "name": "_jobs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "538:5:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10719,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "538:9:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "538:15:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10722,
                        "nodeType": "ExpressionStatement",
                        "src": "538:15:58"
                      },
                      {
                        "expression": {
                          "id": 10727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 10723,
                              "name": "jobOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8303,
                              "src": "559:8:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 10725,
                            "indexExpression": {
                              "id": 10724,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10712,
                              "src": "568:4:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "559:14:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 10726,
                            "name": "_jobOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10714,
                            "src": "576:9:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "559:26:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 10728,
                        "nodeType": "ExpressionStatement",
                        "src": "559:26:58"
                      }
                    ]
                  },
                  "functionSelector": "f4b5cd3b",
                  "id": 10730,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setJob",
                  "nameLocation": "483:6:58",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10715,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10712,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "498:4:58",
                        "nodeType": "VariableDeclaration",
                        "scope": 10730,
                        "src": "490:12:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10711,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "490:7:58",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10714,
                        "mutability": "mutable",
                        "name": "_jobOwner",
                        "nameLocation": "512:9:58",
                        "nodeType": "VariableDeclaration",
                        "scope": 10730,
                        "src": "504:17:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10713,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "504:7:58",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "489:33:58"
                  },
                  "returnParameters": {
                    "id": 10716,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "532:0:58"
                  },
                  "scope": 10765,
                  "src": "474:116:58",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10744,
                    "nodeType": "Block",
                    "src": "654:39:58",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10741,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10734,
                              "src": "681:6:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "baseExpression": {
                                "id": 10737,
                                "name": "_jobTokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5418,
                                "src": "660:10:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                  "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                }
                              },
                              "id": 10739,
                              "indexExpression": {
                                "id": 10738,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10732,
                                "src": "671:4:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "660:16:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10740,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "660:20:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "660:28:58",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10743,
                        "nodeType": "ExpressionStatement",
                        "src": "660:28:58"
                      }
                    ]
                  },
                  "functionSelector": "e01f857c",
                  "id": 10745,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setJobToken",
                  "nameLocation": "603:11:58",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10735,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10732,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "623:4:58",
                        "nodeType": "VariableDeclaration",
                        "scope": 10745,
                        "src": "615:12:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10731,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "615:7:58",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10734,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "637:6:58",
                        "nodeType": "VariableDeclaration",
                        "scope": 10745,
                        "src": "629:14:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10733,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "629:7:58",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "614:30:58"
                  },
                  "returnParameters": {
                    "id": 10736,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "654:0:58"
                  },
                  "scope": 10765,
                  "src": "594:99:58",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10763,
                    "nodeType": "Block",
                    "src": "786:56:58",
                    "statements": [
                      {
                        "expression": {
                          "id": 10761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10754,
                            "name": "_contains",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10752,
                            "src": "792:9:58",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 10759,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10749,
                                "src": "830:6:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 10755,
                                  "name": "_jobTokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5418,
                                  "src": "804:10:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 10757,
                                "indexExpression": {
                                  "id": 10756,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10747,
                                  "src": "815:4:58",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "804:16:58",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 10758,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1712,
                              "src": "804:25:58",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 10760,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "804:33:58",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "792:45:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10762,
                        "nodeType": "ExpressionStatement",
                        "src": "792:45:58"
                      }
                    ]
                  },
                  "functionSelector": "63f2e2f5",
                  "id": 10764,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isJobToken",
                  "nameLocation": "706:10:58",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10750,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10747,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "725:4:58",
                        "nodeType": "VariableDeclaration",
                        "scope": 10764,
                        "src": "717:12:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10746,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "717:7:58",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10749,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "739:6:58",
                        "nodeType": "VariableDeclaration",
                        "scope": 10764,
                        "src": "731:14:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10748,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "731:7:58",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "716:30:58"
                  },
                  "returnParameters": {
                    "id": 10753,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10752,
                        "mutability": "mutable",
                        "name": "_contains",
                        "nameLocation": "775:9:58",
                        "nodeType": "VariableDeclaration",
                        "scope": 10764,
                        "src": "770:14:58",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 10751,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "770:4:58",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "769:16:58"
                  },
                  "scope": 10765,
                  "src": "697:145:58",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 10766,
              "src": "141:703:58",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13061,
                13064,
                13067,
                13422,
                13425,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:813:58"
        },
        "id": 58
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/jobs/Keep3rJobFundableLiquidityForTest.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IPairManager": [
              11703
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rJobFundableLiquidity": [
              7939
            ],
            "Keep3rJobFundableLiquidityForTest": [
              10904
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 10905,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10767,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:59"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol",
              "file": "../../../contracts/peripherals/jobs/Keep3rJobFundableLiquidity.sol",
              "id": 10768,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10905,
              "sourceUnit": 7940,
              "src": "65:76:59",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 10769,
                    "name": "Keep3rJobFundableLiquidity",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 7939,
                    "src": "189:26:59"
                  },
                  "id": 10770,
                  "nodeType": "InheritanceSpecifier",
                  "src": "189:26:59"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 10904,
              "linearizedBaseContracts": [
                10904,
                7939,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                39,
                13305
              ],
              "name": "Keep3rJobFundableLiquidityForTest",
              "nameLocation": "152:33:59",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 10774,
                  "libraryName": {
                    "id": 10771,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "226:13:59"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "220:49:59",
                  "typeName": {
                    "id": 10773,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 10772,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "244:24:59"
                    },
                    "referencedDeclaration": 1631,
                    "src": "244:24:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "body": {
                    "id": 10795,
                    "nodeType": "Block",
                    "src": "474:2:59",
                    "statements": []
                  },
                  "id": 10796,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 10785,
                          "name": "_kph",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10776,
                          "src": "402:4:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10786,
                          "name": "_keep3rV1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10778,
                          "src": "408:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10787,
                          "name": "_keep3rV1Proxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10780,
                          "src": "419:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10788,
                          "name": "_kp3rWethPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10782,
                          "src": "435:13:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10789,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10784,
                        "name": "Keep3rParameters",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5934,
                        "src": "385:16:59"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "385:64:59"
                    },
                    {
                      "arguments": [
                        {
                          "expression": {
                            "id": 10791,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "462:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 10792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "462:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10793,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10790,
                        "name": "Keep3rRoles",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6101,
                        "src": "450:11:59"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "450:23:59"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10783,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10776,
                        "mutability": "mutable",
                        "name": "_kph",
                        "nameLocation": "298:4:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10796,
                        "src": "290:12:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10775,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "290:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10778,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "316:9:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10796,
                        "src": "308:17:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10777,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "308:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10780,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "339:14:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10796,
                        "src": "331:22:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10779,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "331:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10782,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "367:13:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10796,
                        "src": "359:21:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10781,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "359:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "284:100:59"
                  },
                  "returnParameters": {
                    "id": 10794,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "474:0:59"
                  },
                  "scope": 10904,
                  "src": "273:203:59",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10807,
                    "nodeType": "Block",
                    "src": "519:26:59",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10804,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10798,
                              "src": "535:4:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 10801,
                              "name": "_jobs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "525:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10803,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "525:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "525:15:59",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10806,
                        "nodeType": "ExpressionStatement",
                        "src": "525:15:59"
                      }
                    ]
                  },
                  "functionSelector": "a662031b",
                  "id": 10808,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setJob",
                  "nameLocation": "489:6:59",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10799,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10798,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "504:4:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10808,
                        "src": "496:12:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10797,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "496:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "495:14:59"
                  },
                  "returnParameters": {
                    "id": 10800,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "519:0:59"
                  },
                  "scope": 10904,
                  "src": "480:65:59",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10824,
                    "nodeType": "Block",
                    "src": "632:55:59",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10821,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10812,
                              "src": "671:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "baseExpression": {
                                "id": 10817,
                                "name": "_jobLiquidities",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5424,
                                "src": "645:15:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                  "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                }
                              },
                              "id": 10819,
                              "indexExpression": {
                                "id": 10818,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10810,
                                "src": "661:4:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "645:21:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10820,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "645:25:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "645:37:59",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 10816,
                        "id": 10823,
                        "nodeType": "Return",
                        "src": "638:44:59"
                      }
                    ]
                  },
                  "functionSelector": "cacdf93d",
                  "id": 10825,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setJobLiquidity",
                  "nameLocation": "558:15:59",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10813,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10810,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "582:4:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10825,
                        "src": "574:12:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10809,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "574:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10812,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "596:10:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10825,
                        "src": "588:18:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10811,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "588:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "573:34:59"
                  },
                  "returnParameters": {
                    "id": 10816,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10815,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 10825,
                        "src": "626:4:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 10814,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "626:4:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "625:6:59"
                  },
                  "scope": 10904,
                  "src": "549:138:59",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10836,
                    "nodeType": "Block",
                    "src": "750:47:59",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10833,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10827,
                              "src": "781:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 10830,
                              "name": "_approvedLiquidities",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6540,
                              "src": "756:20:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10832,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "756:24:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "756:36:59",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10835,
                        "nodeType": "ExpressionStatement",
                        "src": "756:36:59"
                      }
                    ]
                  },
                  "functionSelector": "280b656c",
                  "id": 10837,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovedLiquidity",
                  "nameLocation": "700:20:59",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10828,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10827,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "729:10:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10837,
                        "src": "721:18:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10826,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "721:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "720:20:59"
                  },
                  "returnParameters": {
                    "id": 10829,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "750:0:59"
                  },
                  "scope": 10904,
                  "src": "691:106:59",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10848,
                    "nodeType": "Block",
                    "src": "859:50:59",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10845,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10839,
                              "src": "893:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 10842,
                              "name": "_approvedLiquidities",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6540,
                              "src": "865:20:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10844,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "remove",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1685,
                            "src": "865:27:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10846,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "865:39:59",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10847,
                        "nodeType": "ExpressionStatement",
                        "src": "865:39:59"
                      }
                    ]
                  },
                  "functionSelector": "deaf81d4",
                  "id": 10849,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setRevokedLiquidity",
                  "nameLocation": "810:19:59",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10839,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "838:10:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10849,
                        "src": "830:18:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10838,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "830:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "829:20:59"
                  },
                  "returnParameters": {
                    "id": 10841,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "859:0:59"
                  },
                  "scope": 10904,
                  "src": "801:108:59",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10863,
                    "nodeType": "Block",
                    "src": "1008:41:59",
                    "statements": [
                      {
                        "expression": {
                          "id": 10861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10857,
                            "name": "_tickCache",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10855,
                            "src": "1014:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                              "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 10858,
                              "name": "_tick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6566,
                              "src": "1027:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                              }
                            },
                            "id": 10860,
                            "indexExpression": {
                              "id": 10859,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10851,
                              "src": "1033:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1027:17:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                              "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                            }
                          },
                          "src": "1014:30:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                          }
                        },
                        "id": 10862,
                        "nodeType": "ExpressionStatement",
                        "src": "1014:30:59"
                      }
                    ]
                  },
                  "functionSelector": "e485dc0e",
                  "id": 10864,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewTickCache",
                  "nameLocation": "922:13:59",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10852,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10851,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "944:10:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10864,
                        "src": "936:18:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10850,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "936:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "935:20:59"
                  },
                  "returnParameters": {
                    "id": 10856,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10855,
                        "mutability": "mutable",
                        "name": "_tickCache",
                        "nameLocation": "996:10:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10864,
                        "src": "979:27:59",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                          "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                        },
                        "typeName": {
                          "id": 10854,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 10853,
                            "name": "TickCache",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 13178,
                            "src": "979:9:59"
                          },
                          "referencedDeclaration": 13178,
                          "src": "979:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TickCache_$13178_storage_ptr",
                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "978:29:59"
                  },
                  "scope": 10904,
                  "src": "913:136:59",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10875,
                    "nodeType": "Block",
                    "src": "1125:43:59",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 10871,
                            "name": "_isKP3RToken0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5434,
                            "src": "1138:13:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 10873,
                          "indexExpression": {
                            "id": 10872,
                            "name": "_liquidity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10866,
                            "src": "1152:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1138:25:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 10870,
                        "id": 10874,
                        "nodeType": "Return",
                        "src": "1131:32:59"
                      }
                    ]
                  },
                  "functionSelector": "454c5031",
                  "id": 10876,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewTickOrder",
                  "nameLocation": "1062:13:59",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10867,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10866,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "1084:10:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10876,
                        "src": "1076:18:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10865,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1076:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1075:20:59"
                  },
                  "returnParameters": {
                    "id": 10870,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10869,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 10876,
                        "src": "1119:4:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 10868,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1119:4:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1118:6:59"
                  },
                  "scope": 10904,
                  "src": "1053:115:59",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10892,
                    "nodeType": "Block",
                    "src": "1265:49:59",
                    "statements": [
                      {
                        "expression": {
                          "id": 10890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10884,
                            "name": "_list",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10882,
                            "src": "1271:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "baseExpression": {
                                  "id": 10885,
                                  "name": "_jobLiquidities",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5424,
                                  "src": "1279:15:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 10887,
                                "indexExpression": {
                                  "id": 10886,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10878,
                                  "src": "1295:4:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1279:21:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 10888,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "values",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1784,
                              "src": "1279:28:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (address[] memory)"
                              }
                            },
                            "id": 10889,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1279:30:59",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "src": "1271:38:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 10891,
                        "nodeType": "ExpressionStatement",
                        "src": "1271:38:59"
                      }
                    ]
                  },
                  "functionSelector": "75a9f7ff",
                  "id": 10893,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalJobLiquidities",
                  "nameLocation": "1181:22:59",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10879,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10878,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1212:4:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10893,
                        "src": "1204:12:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10877,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1204:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1203:14:59"
                  },
                  "returnParameters": {
                    "id": 10883,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10882,
                        "mutability": "mutable",
                        "name": "_list",
                        "nameLocation": "1258:5:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10893,
                        "src": "1241:22:59",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10880,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1241:7:59",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 10881,
                          "nodeType": "ArrayTypeName",
                          "src": "1241:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1240:24:59"
                  },
                  "scope": 10904,
                  "src": "1172:142:59",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10902,
                    "nodeType": "Block",
                    "src": "1379:38:59",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10899,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10895,
                              "src": "1407:4:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 10898,
                            "name": "_settleJobAccountance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7938,
                            "src": "1385:21:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 10900,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1385:27:59",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10901,
                        "nodeType": "ExpressionStatement",
                        "src": "1385:27:59"
                      }
                    ]
                  },
                  "functionSelector": "3e525d20",
                  "id": 10903,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalSettleJobAccountance",
                  "nameLocation": "1327:28:59",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10896,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10895,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1364:4:59",
                        "nodeType": "VariableDeclaration",
                        "scope": 10903,
                        "src": "1356:12:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10894,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1356:7:59",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1355:14:59"
                  },
                  "returnParameters": {
                    "id": 10897,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1379:0:59"
                  },
                  "scope": 10904,
                  "src": "1318:99:59",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 10905,
              "src": "143:1276:59",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13422,
                13425,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:1388:59"
        },
        "id": 59
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/jobs/Keep3rJobManagerForTest.sol",
          "exportedSymbols": {
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rJobManager": [
              8000
            ],
            "Keep3rJobManagerForTest": [
              10951
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ]
          },
          "id": 10952,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10906,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:60"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobManager.sol",
              "file": "../../../contracts/peripherals/jobs/Keep3rJobManager.sol",
              "id": 10907,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10952,
              "sourceUnit": 8001,
              "src": "65:66:60",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 10908,
                    "name": "Keep3rJobManager",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 8000,
                    "src": "169:16:60"
                  },
                  "id": 10909,
                  "nodeType": "InheritanceSpecifier",
                  "src": "169:16:60"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 10951,
              "linearizedBaseContracts": [
                10951,
                8000,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                13326
              ],
              "name": "Keep3rJobManagerForTest",
              "nameLocation": "142:23:60",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 10913,
                  "libraryName": {
                    "id": 10910,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "196:13:60"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "190:49:60",
                  "typeName": {
                    "id": 10912,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 10911,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "214:24:60"
                    },
                    "referencedDeclaration": 1631,
                    "src": "214:24:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "body": {
                    "id": 10934,
                    "nodeType": "Block",
                    "src": "462:2:60",
                    "statements": []
                  },
                  "id": 10935,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 10924,
                          "name": "_keep3rHelper",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10915,
                          "src": "381:13:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10925,
                          "name": "_keep3rV1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10917,
                          "src": "396:9:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10926,
                          "name": "_keep3rV1Proxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10919,
                          "src": "407:14:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10927,
                          "name": "_kp3rWethPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10921,
                          "src": "423:13:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10928,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10923,
                        "name": "Keep3rParameters",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5934,
                        "src": "364:16:60"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "364:73:60"
                    },
                    {
                      "arguments": [
                        {
                          "expression": {
                            "id": 10930,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "450:3:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 10931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "450:10:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10932,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10929,
                        "name": "Keep3rRoles",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6101,
                        "src": "438:11:60"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "438:23:60"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10922,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10915,
                        "mutability": "mutable",
                        "name": "_keep3rHelper",
                        "nameLocation": "268:13:60",
                        "nodeType": "VariableDeclaration",
                        "scope": 10935,
                        "src": "260:21:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10914,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "260:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10917,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "295:9:60",
                        "nodeType": "VariableDeclaration",
                        "scope": 10935,
                        "src": "287:17:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10916,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "287:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10919,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "318:14:60",
                        "nodeType": "VariableDeclaration",
                        "scope": 10935,
                        "src": "310:22:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10918,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "310:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10921,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "346:13:60",
                        "nodeType": "VariableDeclaration",
                        "scope": 10935,
                        "src": "338:21:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10920,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "338:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "254:109:60"
                  },
                  "returnParameters": {
                    "id": 10933,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "462:0:60"
                  },
                  "scope": 10951,
                  "src": "243:221:60",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10949,
                    "nodeType": "Block",
                    "src": "533:40:60",
                    "statements": [
                      {
                        "expression": {
                          "id": 10947,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 10942,
                            "name": "_isJob",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10940,
                            "src": "539:6:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 10945,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10937,
                                "src": "563:4:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 10943,
                                "name": "_jobs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5476,
                                "src": "548:5:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 10944,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1712,
                              "src": "548:14:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 10946,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "548:20:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "539:29:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10948,
                        "nodeType": "ExpressionStatement",
                        "src": "539:29:60"
                      }
                    ]
                  },
                  "functionSelector": "1cd5c01f",
                  "id": 10950,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isJob",
                  "nameLocation": "477:5:60",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10938,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10937,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "491:4:60",
                        "nodeType": "VariableDeclaration",
                        "scope": 10950,
                        "src": "483:12:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10936,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "483:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "482:14:60"
                  },
                  "returnParameters": {
                    "id": 10941,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10940,
                        "mutability": "mutable",
                        "name": "_isJob",
                        "nameLocation": "525:6:60",
                        "nodeType": "VariableDeclaration",
                        "scope": 10950,
                        "src": "520:11:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 10939,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "520:4:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "519:13:60"
                  },
                  "scope": 10951,
                  "src": "468:105:60",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 10952,
              "src": "133:442:60",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13316,
                13319,
                13422,
                13425,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:544:60"
        },
        "id": 60
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/jobs/Keep3rJobMigrationForTest.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IPairManager": [
              11703
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rJobFundableCredits": [
              6508
            ],
            "Keep3rJobFundableLiquidity": [
              7939
            ],
            "Keep3rJobMigration": [
              8292
            ],
            "Keep3rJobMigrationForTest": [
              11113
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 11114,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 10953,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:61"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobMigration.sol",
              "file": "../../../contracts/peripherals/jobs/Keep3rJobMigration.sol",
              "id": 10954,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11114,
              "sourceUnit": 8293,
              "src": "65:68:61",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 10955,
                    "name": "Keep3rJobMigration",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 8292,
                    "src": "173:18:61"
                  },
                  "id": 10956,
                  "nodeType": "InheritanceSpecifier",
                  "src": "173:18:61"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 11113,
              "linearizedBaseContracts": [
                11113,
                8292,
                7939,
                6508,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                39,
                13305,
                13100,
                13505
              ],
              "name": "Keep3rJobMigrationForTest",
              "nameLocation": "144:25:61",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 10960,
                  "libraryName": {
                    "id": 10957,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "202:13:61"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "196:49:61",
                  "typeName": {
                    "id": 10959,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 10958,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "220:24:61"
                    },
                    "referencedDeclaration": 1631,
                    "src": "220:24:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "constant": false,
                  "functionSelector": "9035654f",
                  "id": 10964,
                  "mutability": "mutable",
                  "name": "settleJobAccountanceCallCount",
                  "nameLocation": "284:29:61",
                  "nodeType": "VariableDeclaration",
                  "scope": 11113,
                  "src": "249:64:61",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 10963,
                    "keyType": {
                      "id": 10961,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "257:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "249:27:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 10962,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "268:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10985,
                    "nodeType": "Block",
                    "src": "519:2:61",
                    "statements": []
                  },
                  "id": 10986,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 10975,
                          "name": "_kph",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10966,
                          "src": "447:4:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10976,
                          "name": "_keep3rV1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10968,
                          "src": "453:9:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10977,
                          "name": "_keep3rV1Proxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10970,
                          "src": "464:14:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 10978,
                          "name": "_kp3rWethPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10972,
                          "src": "480:13:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10979,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10974,
                        "name": "Keep3rParameters",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5934,
                        "src": "430:16:61"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "430:64:61"
                    },
                    {
                      "arguments": [
                        {
                          "expression": {
                            "id": 10981,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "507:3:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 10982,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "507:10:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 10983,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 10980,
                        "name": "Keep3rRoles",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6101,
                        "src": "495:11:61"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "495:23:61"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10973,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10966,
                        "mutability": "mutable",
                        "name": "_kph",
                        "nameLocation": "343:4:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 10986,
                        "src": "335:12:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10965,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "335:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10968,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "361:9:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 10986,
                        "src": "353:17:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10967,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "353:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10970,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "384:14:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 10986,
                        "src": "376:22:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10969,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "376:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10972,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "412:13:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 10986,
                        "src": "404:21:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10971,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "404:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "329:100:61"
                  },
                  "returnParameters": {
                    "id": 10984,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "519:0:61"
                  },
                  "scope": 11113,
                  "src": "318:203:61",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 11000,
                    "nodeType": "Block",
                    "src": "585:39:61",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10997,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10990,
                              "src": "612:6:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "baseExpression": {
                                "id": 10993,
                                "name": "_jobTokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5418,
                                "src": "591:10:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                  "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                }
                              },
                              "id": 10995,
                              "indexExpression": {
                                "id": 10994,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10988,
                                "src": "602:4:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "591:16:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 10996,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "591:20:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 10998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "591:28:61",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10999,
                        "nodeType": "ExpressionStatement",
                        "src": "591:28:61"
                      }
                    ]
                  },
                  "functionSelector": "e01f857c",
                  "id": 11001,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setJobToken",
                  "nameLocation": "534:11:61",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10991,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10988,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "554:4:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11001,
                        "src": "546:12:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10987,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "546:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10990,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "568:6:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11001,
                        "src": "560:14:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10989,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "560:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "545:30:61"
                  },
                  "returnParameters": {
                    "id": 10992,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "585:0:61"
                  },
                  "scope": 11113,
                  "src": "525:99:61",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11015,
                    "nodeType": "Block",
                    "src": "696:48:61",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 11012,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11005,
                              "src": "728:10:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "baseExpression": {
                                "id": 11008,
                                "name": "_jobLiquidities",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5424,
                                "src": "702:15:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                  "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                }
                              },
                              "id": 11010,
                              "indexExpression": {
                                "id": 11009,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11003,
                                "src": "718:4:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "702:21:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 11011,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "702:25:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 11013,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "702:37:61",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11014,
                        "nodeType": "ExpressionStatement",
                        "src": "702:37:61"
                      }
                    ]
                  },
                  "functionSelector": "cacdf93d",
                  "id": 11016,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setJobLiquidity",
                  "nameLocation": "637:15:61",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11006,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11003,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "661:4:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11016,
                        "src": "653:12:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11002,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "653:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11005,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "675:10:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11016,
                        "src": "667:18:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11004,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "667:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "652:34:61"
                  },
                  "returnParameters": {
                    "id": 11007,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "696:0:61"
                  },
                  "scope": 11113,
                  "src": "628:116:61",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11029,
                    "nodeType": "Block",
                    "src": "826:43:61",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "baseExpression": {
                                "id": 11023,
                                "name": "_jobTokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5418,
                                "src": "839:10:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                  "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                }
                              },
                              "id": 11025,
                              "indexExpression": {
                                "id": 11024,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11018,
                                "src": "850:4:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "839:16:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 11026,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1727,
                            "src": "839:23:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 11027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "839:25:61",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 11022,
                        "id": 11028,
                        "nodeType": "Return",
                        "src": "832:32:61"
                      }
                    ]
                  },
                  "functionSelector": "f22150c8",
                  "id": 11030,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewJobTokenListLength",
                  "nameLocation": "757:22:61",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11019,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11018,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "788:4:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11030,
                        "src": "780:12:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11017,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "780:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "779:14:61"
                  },
                  "returnParameters": {
                    "id": 11022,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11021,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 11030,
                        "src": "817:7:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11020,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "817:7:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "816:9:61"
                  },
                  "scope": 11113,
                  "src": "748:121:61",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11046,
                    "nodeType": "Block",
                    "src": "964:49:61",
                    "statements": [
                      {
                        "expression": {
                          "id": 11044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 11038,
                            "name": "_list",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11036,
                            "src": "970:5:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "baseExpression": {
                                  "id": 11039,
                                  "name": "_jobLiquidities",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5424,
                                  "src": "978:15:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                    "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                  }
                                },
                                "id": 11041,
                                "indexExpression": {
                                  "id": 11040,
                                  "name": "_job",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11032,
                                  "src": "994:4:61",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "978:21:61",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 11042,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "values",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1784,
                              "src": "978:28:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (address[] memory)"
                              }
                            },
                            "id": 11043,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "978:30:61",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "src": "970:38:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 11045,
                        "nodeType": "ExpressionStatement",
                        "src": "970:38:61"
                      }
                    ]
                  },
                  "functionSelector": "46d8908d",
                  "id": 11047,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewJobLiquidityList",
                  "nameLocation": "882:20:61",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11033,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11032,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "911:4:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11047,
                        "src": "903:12:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11031,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "903:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "902:14:61"
                  },
                  "returnParameters": {
                    "id": 11037,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11036,
                        "mutability": "mutable",
                        "name": "_list",
                        "nameLocation": "957:5:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11047,
                        "src": "940:22:61",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 11034,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "940:7:61",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 11035,
                          "nodeType": "ArrayTypeName",
                          "src": "940:9:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "939:24:61"
                  },
                  "scope": 11113,
                  "src": "873:140:61",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11058,
                    "nodeType": "Block",
                    "src": "1093:41:61",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 11054,
                            "name": "_jobPeriodCredits",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5412,
                            "src": "1106:17:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 11056,
                          "indexExpression": {
                            "id": 11055,
                            "name": "_job",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11049,
                            "src": "1124:4:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1106:23:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 11053,
                        "id": 11057,
                        "nodeType": "Return",
                        "src": "1099:30:61"
                      }
                    ]
                  },
                  "functionSelector": "f6bb2032",
                  "id": 11059,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewJobPeriodCredits",
                  "nameLocation": "1026:20:61",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11050,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11049,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1055:4:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11059,
                        "src": "1047:12:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11048,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1047:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1046:14:61"
                  },
                  "returnParameters": {
                    "id": 11053,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11052,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 11059,
                        "src": "1084:7:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11051,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1084:7:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1083:9:61"
                  },
                  "scope": 11113,
                  "src": "1017:117:61",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11070,
                    "nodeType": "Block",
                    "src": "1217:44:61",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 11066,
                            "name": "_jobLiquidityCredits",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5407,
                            "src": "1230:20:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 11068,
                          "indexExpression": {
                            "id": 11067,
                            "name": "_job",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11061,
                            "src": "1251:4:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1230:26:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 11065,
                        "id": 11069,
                        "nodeType": "Return",
                        "src": "1223:33:61"
                      }
                    ]
                  },
                  "functionSelector": "e7f0cbf8",
                  "id": 11071,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewJobLiquidityCredits",
                  "nameLocation": "1147:23:61",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11062,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11061,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1179:4:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11071,
                        "src": "1171:12:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11060,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1171:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1170:14:61"
                  },
                  "returnParameters": {
                    "id": 11065,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11064,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 11071,
                        "src": "1208:7:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11063,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1208:7:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1207:9:61"
                  },
                  "scope": 11113,
                  "src": "1138:123:61",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11086,
                    "nodeType": "Block",
                    "src": "1363:55:61",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 11080,
                              "name": "_migrationCreatedAt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8030,
                              "src": "1376:19:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 11082,
                            "indexExpression": {
                              "id": 11081,
                              "name": "_fromJob",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11073,
                              "src": "1396:8:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1376:29:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 11084,
                          "indexExpression": {
                            "id": 11083,
                            "name": "_toJob",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11075,
                            "src": "1406:6:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1376:37:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 11079,
                        "id": 11085,
                        "nodeType": "Return",
                        "src": "1369:44:61"
                      }
                    ]
                  },
                  "functionSelector": "bea2b827",
                  "id": 11087,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewMigrationCreatedAt",
                  "nameLocation": "1274:22:61",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11076,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11073,
                        "mutability": "mutable",
                        "name": "_fromJob",
                        "nameLocation": "1305:8:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11087,
                        "src": "1297:16:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11072,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1297:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11075,
                        "mutability": "mutable",
                        "name": "_toJob",
                        "nameLocation": "1323:6:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11087,
                        "src": "1315:14:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11074,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1315:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1296:34:61"
                  },
                  "returnParameters": {
                    "id": 11079,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11078,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 11087,
                        "src": "1354:7:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11077,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1354:7:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1353:9:61"
                  },
                  "scope": 11113,
                  "src": "1265:153:61",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11099,
                    "nodeType": "Block",
                    "src": "1480:38:61",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 11096,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11089,
                              "src": "1508:4:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 11094,
                              "name": "_jobs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "1493:5:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 11095,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contains",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1712,
                            "src": "1493:14:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                            }
                          },
                          "id": 11097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1493:20:61",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 11093,
                        "id": 11098,
                        "nodeType": "Return",
                        "src": "1486:27:61"
                      }
                    ]
                  },
                  "functionSelector": "1cd5c01f",
                  "id": 11100,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isJob",
                  "nameLocation": "1431:5:61",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11090,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11089,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1445:4:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11100,
                        "src": "1437:12:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11088,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1437:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1436:14:61"
                  },
                  "returnParameters": {
                    "id": 11093,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11092,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 11100,
                        "src": "1474:4:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 11091,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1474:4:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1473:6:61"
                  },
                  "scope": 11113,
                  "src": "1422:96:61",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    7938
                  ],
                  "body": {
                    "id": 11111,
                    "nodeType": "Block",
                    "src": "1585:48:61",
                    "statements": [
                      {
                        "expression": {
                          "id": 11109,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "1591:37:61",
                          "subExpression": {
                            "baseExpression": {
                              "id": 11106,
                              "name": "settleJobAccountanceCallCount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10964,
                              "src": "1591:29:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 11108,
                            "indexExpression": {
                              "id": 11107,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11102,
                              "src": "1621:4:61",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1591:35:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 11110,
                        "nodeType": "ExpressionStatement",
                        "src": "1591:37:61"
                      }
                    ]
                  },
                  "id": 11112,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_settleJobAccountance",
                  "nameLocation": "1531:21:61",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 11104,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1576:8:61"
                  },
                  "parameters": {
                    "id": 11103,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11102,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1561:4:61",
                        "nodeType": "VariableDeclaration",
                        "scope": 11112,
                        "src": "1553:12:61",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11101,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1553:7:61",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1552:14:61"
                  },
                  "returnParameters": {
                    "id": 11105,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1585:0:61"
                  },
                  "scope": 11113,
                  "src": "1522:111:61",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 11114,
              "src": "135:1500:61",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13061,
                13064,
                13067,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13422,
                13425,
                13474,
                13477,
                13480,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:1604:61"
        },
        "id": 61
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobOwnershipForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/jobs/Keep3rJobOwnershipForTest.sol",
          "exportedSymbols": {
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rJobOwnershipForTest": [
              11119
            ]
          },
          "id": 11120,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11115,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:62"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobOwnership.sol",
              "file": "../../../contracts/peripherals/jobs/Keep3rJobOwnership.sol",
              "id": 11116,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11120,
              "sourceUnit": 8407,
              "src": "65:68:62",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 11117,
                    "name": "Keep3rJobOwnership",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 8406,
                    "src": "173:18:62"
                  },
                  "id": 11118,
                  "nodeType": "InheritanceSpecifier",
                  "src": "173:18:62"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 11119,
              "linearizedBaseContracts": [
                11119,
                8406,
                13456
              ],
              "name": "Keep3rJobOwnershipForTest",
              "nameLocation": "144:25:62",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 11120,
              "src": "135:59:62",
              "usedErrors": [
                13422,
                13425
              ]
            }
          ],
          "src": "32:163:62"
        },
        "id": 62
      },
      "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/jobs/Keep3rJobWorkableForTest.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "FullMath": [
              4308
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IPairManager": [
              11703
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rJobFundableCredits": [
              6508
            ],
            "Keep3rJobFundableLiquidity": [
              7939
            ],
            "Keep3rJobMigration": [
              8292
            ],
            "Keep3rJobOwnership": [
              8406
            ],
            "Keep3rJobWorkable": [
              8908
            ],
            "Keep3rJobWorkableForTest": [
              11253
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "Math": [
              1319
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 11254,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11121,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:63"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/jobs/Keep3rJobWorkable.sol",
              "file": "../../../contracts/peripherals/jobs/Keep3rJobWorkable.sol",
              "id": 11122,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11254,
              "sourceUnit": 8909,
              "src": "65:67:63",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 11123,
                    "name": "Keep3rJobWorkable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 8908,
                    "src": "171:17:63"
                  },
                  "id": 11124,
                  "nodeType": "InheritanceSpecifier",
                  "src": "171:17:63"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 11253,
              "linearizedBaseContracts": [
                11253,
                8908,
                8292,
                7939,
                6508,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                8406,
                13456,
                39,
                13305,
                13100,
                13505,
                13400
              ],
              "name": "Keep3rJobWorkableForTest",
              "nameLocation": "143:24:63",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 11128,
                  "libraryName": {
                    "id": 11125,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "199:13:63"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "193:49:63",
                  "typeName": {
                    "id": 11127,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 11126,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "217:24:63"
                    },
                    "referencedDeclaration": 1631,
                    "src": "217:24:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "body": {
                    "id": 11149,
                    "nodeType": "Block",
                    "src": "465:2:63",
                    "statements": []
                  },
                  "id": 11150,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 11139,
                          "name": "_keep3rHelper",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11130,
                          "src": "384:13:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 11140,
                          "name": "_keep3rV1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11132,
                          "src": "399:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 11141,
                          "name": "_keep3rV1Proxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11134,
                          "src": "410:14:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 11142,
                          "name": "_kp3rWethPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11136,
                          "src": "426:13:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 11143,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 11138,
                        "name": "Keep3rParameters",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5934,
                        "src": "367:16:63"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "367:73:63"
                    },
                    {
                      "arguments": [
                        {
                          "expression": {
                            "id": 11145,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "453:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 11146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "453:10:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 11147,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 11144,
                        "name": "Keep3rRoles",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6101,
                        "src": "441:11:63"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "441:23:63"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11130,
                        "mutability": "mutable",
                        "name": "_keep3rHelper",
                        "nameLocation": "271:13:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11150,
                        "src": "263:21:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11129,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "263:7:63",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11132,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "298:9:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11150,
                        "src": "290:17:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11131,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "290:7:63",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11134,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "321:14:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11150,
                        "src": "313:22:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11133,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "313:7:63",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11136,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "349:13:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11150,
                        "src": "341:21:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11135,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "341:7:63",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "257:109:63"
                  },
                  "returnParameters": {
                    "id": 11148,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "465:0:63"
                  },
                  "scope": 11253,
                  "src": "246:221:63",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 11161,
                    "nodeType": "Block",
                    "src": "510:26:63",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 11158,
                              "name": "_job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11152,
                              "src": "526:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 11155,
                              "name": "_jobs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "516:5:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 11157,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "516:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 11159,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "516:15:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11160,
                        "nodeType": "ExpressionStatement",
                        "src": "516:15:63"
                      }
                    ]
                  },
                  "functionSelector": "a662031b",
                  "id": 11162,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setJob",
                  "nameLocation": "480:6:63",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11153,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11152,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "495:4:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11162,
                        "src": "487:12:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11151,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "487:7:63",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "486:14:63"
                  },
                  "returnParameters": {
                    "id": 11154,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "510:0:63"
                  },
                  "scope": 11253,
                  "src": "471:65:63",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11173,
                    "nodeType": "Block",
                    "src": "585:32:63",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 11170,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11164,
                              "src": "604:7:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 11167,
                              "name": "_keepers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5368,
                              "src": "591:8:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 11169,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "591:12:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 11171,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "591:21:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11172,
                        "nodeType": "ExpressionStatement",
                        "src": "591:21:63"
                      }
                    ]
                  },
                  "functionSelector": "748747e6",
                  "id": 11174,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKeeper",
                  "nameLocation": "549:9:63",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11165,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11164,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "567:7:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11174,
                        "src": "559:15:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11163,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "559:7:63",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "558:17:63"
                  },
                  "returnParameters": {
                    "id": 11166,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "585:0:63"
                  },
                  "scope": 11253,
                  "src": "540:77:63",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11185,
                    "nodeType": "Block",
                    "src": "680:47:63",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 11182,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11176,
                              "src": "711:10:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 11179,
                              "name": "_approvedLiquidities",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6540,
                              "src": "686:20:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 11181,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "686:24:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 11183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "686:36:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11184,
                        "nodeType": "ExpressionStatement",
                        "src": "686:36:63"
                      }
                    ]
                  },
                  "functionSelector": "280b656c",
                  "id": 11186,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovedLiquidity",
                  "nameLocation": "630:20:63",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11177,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11176,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "659:10:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11186,
                        "src": "651:18:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11175,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "651:7:63",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "650:20:63"
                  },
                  "returnParameters": {
                    "id": 11178,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "680:0:63"
                  },
                  "scope": 11253,
                  "src": "621:106:63",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11200,
                    "nodeType": "Block",
                    "src": "799:48:63",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 11197,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11190,
                              "src": "831:10:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "baseExpression": {
                                "id": 11193,
                                "name": "_jobLiquidities",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5424,
                                "src": "805:15:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressSet_$1631_storage_$",
                                  "typeString": "mapping(address => struct EnumerableSet.AddressSet storage ref)"
                                }
                              },
                              "id": 11195,
                              "indexExpression": {
                                "id": 11194,
                                "name": "_job",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11188,
                                "src": "821:4:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "805:21:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 11196,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "805:25:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 11198,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "805:37:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11199,
                        "nodeType": "ExpressionStatement",
                        "src": "805:37:63"
                      }
                    ]
                  },
                  "functionSelector": "cacdf93d",
                  "id": 11201,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setJobLiquidity",
                  "nameLocation": "740:15:63",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11191,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11188,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "764:4:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11201,
                        "src": "756:12:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11187,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "756:7:63",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11190,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "778:10:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11201,
                        "src": "770:18:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11189,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "770:7:63",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "755:34:63"
                  },
                  "returnParameters": {
                    "id": 11192,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "799:0:63"
                  },
                  "scope": 11253,
                  "src": "731:116:63",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11212,
                    "nodeType": "Block",
                    "src": "930:44:63",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 11208,
                            "name": "_jobLiquidityCredits",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5407,
                            "src": "943:20:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 11210,
                          "indexExpression": {
                            "id": 11209,
                            "name": "_job",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11203,
                            "src": "964:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "943:26:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 11207,
                        "id": 11211,
                        "nodeType": "Return",
                        "src": "936:33:63"
                      }
                    ]
                  },
                  "functionSelector": "e7f0cbf8",
                  "id": 11213,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewJobLiquidityCredits",
                  "nameLocation": "860:23:63",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11204,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11203,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "892:4:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11213,
                        "src": "884:12:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11202,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "884:7:63",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "883:14:63"
                  },
                  "returnParameters": {
                    "id": 11207,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11206,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 11213,
                        "src": "921:7:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11205,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "921:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "920:9:63"
                  },
                  "scope": 11253,
                  "src": "851:123:63",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11224,
                    "nodeType": "Block",
                    "src": "1054:41:63",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 11220,
                            "name": "_jobPeriodCredits",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5412,
                            "src": "1067:17:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 11222,
                          "indexExpression": {
                            "id": 11221,
                            "name": "_job",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11215,
                            "src": "1085:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1067:23:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 11219,
                        "id": 11223,
                        "nodeType": "Return",
                        "src": "1060:30:63"
                      }
                    ]
                  },
                  "functionSelector": "f6bb2032",
                  "id": 11225,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewJobPeriodCredits",
                  "nameLocation": "987:20:63",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11216,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11215,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1016:4:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11225,
                        "src": "1008:12:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11214,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1008:7:63",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1007:14:63"
                  },
                  "returnParameters": {
                    "id": 11219,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11218,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 11225,
                        "src": "1045:7:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11217,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1045:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1044:9:63"
                  },
                  "scope": 11253,
                  "src": "978:117:63",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11239,
                    "nodeType": "Block",
                    "src": "1194:41:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 11237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 11233,
                            "name": "_tickCache",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11231,
                            "src": "1200:10:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                              "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 11234,
                              "name": "_tick",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6566,
                              "src": "1213:5:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TickCache_$13178_storage_$",
                                "typeString": "mapping(address => struct IKeep3rJobFundableLiquidity.TickCache storage ref)"
                              }
                            },
                            "id": 11236,
                            "indexExpression": {
                              "id": 11235,
                              "name": "_liquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11227,
                              "src": "1219:10:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1213:17:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TickCache_$13178_storage",
                              "typeString": "struct IKeep3rJobFundableLiquidity.TickCache storage ref"
                            }
                          },
                          "src": "1200:30:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache memory"
                          }
                        },
                        "id": 11238,
                        "nodeType": "ExpressionStatement",
                        "src": "1200:30:63"
                      }
                    ]
                  },
                  "functionSelector": "e485dc0e",
                  "id": 11240,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewTickCache",
                  "nameLocation": "1108:13:63",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11228,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11227,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "1130:10:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11240,
                        "src": "1122:18:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11226,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1122:7:63",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1121:20:63"
                  },
                  "returnParameters": {
                    "id": 11232,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11231,
                        "mutability": "mutable",
                        "name": "_tickCache",
                        "nameLocation": "1182:10:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 11240,
                        "src": "1165:27:63",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                          "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                        },
                        "typeName": {
                          "id": 11230,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 11229,
                            "name": "TickCache",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 13178,
                            "src": "1165:9:63"
                          },
                          "referencedDeclaration": 13178,
                          "src": "1165:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TickCache_$13178_storage_ptr",
                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1164:29:63"
                  },
                  "scope": 11253,
                  "src": "1099:136:63",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11247,
                    "nodeType": "Block",
                    "src": "1290:29:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 11245,
                          "name": "_initialGas",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8427,
                          "src": "1303:11:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 11244,
                        "id": 11246,
                        "nodeType": "Return",
                        "src": "1296:18:63"
                      }
                    ]
                  },
                  "functionSelector": "4a8d1348",
                  "id": 11248,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "viewGas",
                  "nameLocation": "1248:7:63",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11241,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1255:2:63"
                  },
                  "returnParameters": {
                    "id": 11244,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11243,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 11248,
                        "src": "1281:7:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11242,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1281:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1280:9:63"
                  },
                  "scope": 11253,
                  "src": "1239:80:63",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11251,
                    "nodeType": "Block",
                    "src": "1350:2:63",
                    "statements": []
                  },
                  "id": 11252,
                  "implemented": true,
                  "kind": "receive",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11249,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1330:2:63"
                  },
                  "returnParameters": {
                    "id": 11250,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1350:0:63"
                  },
                  "scope": 11253,
                  "src": "1323:29:63",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 11254,
              "src": "134:1220:63",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13061,
                13064,
                13067,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13348,
                13351,
                13422,
                13425,
                13474,
                13477,
                13480,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:1323:63"
        },
        "id": 63
      },
      "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/keepers/Keep3rKeeperDisputableForTest.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rDisputable": [
              13033
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IKeep3rV1": [
              12600
            ],
            "IKeep3rV1Proxy": [
              12773
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rDisputable": [
              5578
            ],
            "Keep3rKeeperDisputable": [
              9079
            ],
            "Keep3rKeeperDisputableForTest": [
              11331
            ],
            "Keep3rKeeperFundable": [
              9479
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 11332,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11255,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:64"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/keepers/Keep3rKeeperDisputable.sol",
              "file": "../../../contracts/peripherals/keepers/Keep3rKeeperDisputable.sol",
              "id": 11256,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11332,
              "sourceUnit": 9080,
              "src": "65:75:64",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 11257,
                    "name": "Keep3rKeeperDisputable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 9079,
                    "src": "184:22:64"
                  },
                  "id": 11258,
                  "nodeType": "InheritanceSpecifier",
                  "src": "184:22:64"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 11331,
              "linearizedBaseContracts": [
                11331,
                9079,
                9479,
                5934,
                5578,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                39,
                13623,
                13033,
                13659
              ],
              "name": "Keep3rKeeperDisputableForTest",
              "nameLocation": "151:29:64",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 11262,
                  "libraryName": {
                    "id": 11259,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "217:13:64"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "211:49:64",
                  "typeName": {
                    "id": 11261,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 11260,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "235:24:64"
                    },
                    "referencedDeclaration": 1631,
                    "src": "235:24:64",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "body": {
                    "id": 11283,
                    "nodeType": "Block",
                    "src": "465:2:64",
                    "statements": []
                  },
                  "id": 11284,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 11273,
                          "name": "_kph",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11264,
                          "src": "393:4:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 11274,
                          "name": "_keep3rV1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11266,
                          "src": "399:9:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 11275,
                          "name": "_keep3rV1Proxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11268,
                          "src": "410:14:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 11276,
                          "name": "_kp3rWethPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11270,
                          "src": "426:13:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 11277,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 11272,
                        "name": "Keep3rParameters",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5934,
                        "src": "376:16:64"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "376:64:64"
                    },
                    {
                      "arguments": [
                        {
                          "expression": {
                            "id": 11279,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "453:3:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 11280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "453:10:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 11281,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 11278,
                        "name": "Keep3rRoles",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6101,
                        "src": "441:11:64"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "441:23:64"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11271,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11264,
                        "mutability": "mutable",
                        "name": "_kph",
                        "nameLocation": "289:4:64",
                        "nodeType": "VariableDeclaration",
                        "scope": 11284,
                        "src": "281:12:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11263,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "281:7:64",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11266,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "307:9:64",
                        "nodeType": "VariableDeclaration",
                        "scope": 11284,
                        "src": "299:17:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11265,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "299:7:64",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11268,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "330:14:64",
                        "nodeType": "VariableDeclaration",
                        "scope": 11284,
                        "src": "322:22:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11267,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "322:7:64",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11270,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "358:13:64",
                        "nodeType": "VariableDeclaration",
                        "scope": 11284,
                        "src": "350:21:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11269,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "350:7:64",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "275:100:64"
                  },
                  "returnParameters": {
                    "id": 11282,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "465:0:64"
                  },
                  "scope": 11331,
                  "src": "264:203:64",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 11295,
                    "nodeType": "Block",
                    "src": "516:32:64",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 11292,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11286,
                              "src": "535:7:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 11289,
                              "name": "_keepers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5368,
                              "src": "522:8:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 11291,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "522:12:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 11293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "522:21:64",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11294,
                        "nodeType": "ExpressionStatement",
                        "src": "522:21:64"
                      }
                    ]
                  },
                  "functionSelector": "748747e6",
                  "id": 11296,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKeeper",
                  "nameLocation": "480:9:64",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11287,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11286,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "498:7:64",
                        "nodeType": "VariableDeclaration",
                        "scope": 11296,
                        "src": "490:15:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11285,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "490:7:64",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "489:17:64"
                  },
                  "returnParameters": {
                    "id": 11288,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "516:0:64"
                  },
                  "scope": 11331,
                  "src": "471:77:64",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11314,
                    "nodeType": "Block",
                    "src": "682:63:64",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 11308,
                              "name": "_bonded",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11298,
                              "src": "695:7:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 11309,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11300,
                              "src": "704:7:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 11310,
                              "name": "_bondAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11302,
                              "src": "713:11:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 11311,
                              "name": "_unbondAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11304,
                              "src": "726:13:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 11307,
                            "name": "_slash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9078,
                            "src": "688:6:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 11312,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "688:52:64",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11313,
                        "nodeType": "ExpressionStatement",
                        "src": "688:52:64"
                      }
                    ]
                  },
                  "functionSelector": "75b9a542",
                  "id": 11315,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "internalSlash",
                  "nameLocation": "561:13:64",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11305,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11298,
                        "mutability": "mutable",
                        "name": "_bonded",
                        "nameLocation": "588:7:64",
                        "nodeType": "VariableDeclaration",
                        "scope": 11315,
                        "src": "580:15:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11297,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "580:7:64",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11300,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "609:7:64",
                        "nodeType": "VariableDeclaration",
                        "scope": 11315,
                        "src": "601:15:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11299,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "601:7:64",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11302,
                        "mutability": "mutable",
                        "name": "_bondAmount",
                        "nameLocation": "630:11:64",
                        "nodeType": "VariableDeclaration",
                        "scope": 11315,
                        "src": "622:19:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11301,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "622:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11304,
                        "mutability": "mutable",
                        "name": "_unbondAmount",
                        "nameLocation": "655:13:64",
                        "nodeType": "VariableDeclaration",
                        "scope": 11315,
                        "src": "647:21:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11303,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "647:7:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "574:98:64"
                  },
                  "returnParameters": {
                    "id": 11306,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "682:0:64"
                  },
                  "scope": 11331,
                  "src": "552:193:64",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11329,
                    "nodeType": "Block",
                    "src": "824:50:64",
                    "statements": [
                      {
                        "expression": {
                          "id": 11327,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 11322,
                            "name": "_isKeeper",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11320,
                            "src": "830:9:64",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 11325,
                                "name": "_address",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11317,
                                "src": "860:8:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 11323,
                                "name": "_keepers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5368,
                                "src": "842:8:64",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                  "typeString": "struct EnumerableSet.AddressSet storage ref"
                                }
                              },
                              "id": 11324,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contains",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1712,
                              "src": "842:17:64",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                                "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                              }
                            },
                            "id": 11326,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "842:27:64",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "830:39:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11328,
                        "nodeType": "ExpressionStatement",
                        "src": "830:39:64"
                      }
                    ]
                  },
                  "functionSelector": "6ba42aaa",
                  "id": 11330,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isKeeper",
                  "nameLocation": "758:8:64",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11318,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11317,
                        "mutability": "mutable",
                        "name": "_address",
                        "nameLocation": "775:8:64",
                        "nodeType": "VariableDeclaration",
                        "scope": 11330,
                        "src": "767:16:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11316,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "767:7:64",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "766:18:64"
                  },
                  "returnParameters": {
                    "id": 11321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11320,
                        "mutability": "mutable",
                        "name": "_isKeeper",
                        "nameLocation": "813:9:64",
                        "nodeType": "VariableDeclaration",
                        "scope": 11330,
                        "src": "808:14:64",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 11319,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "808:4:64",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "807:16:64"
                  },
                  "scope": 11331,
                  "src": "749:125:64",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 11332,
              "src": "142:734:64",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13017,
                13020,
                13594,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:845:64"
        },
        "id": 64
      },
      "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol": {
        "ast": {
          "absolutePath": "solidity/for-test/peripherals/keepers/Keep3rKeeperFundableForTest.sol",
          "exportedSymbols": {
            "Address": [
              1209
            ],
            "EnumerableSet": [
              1918
            ],
            "Governable": [
              5354
            ],
            "IBaseErrors": [
              12793
            ],
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rHelper": [
              11525
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ],
            "IKeep3rV1": [
              12600
            ],
            "IKeep3rV1Proxy": [
              12773
            ],
            "Keep3rAccountance": [
              5507
            ],
            "Keep3rKeeperFundable": [
              9479
            ],
            "Keep3rKeeperFundableForTest": [
              11388
            ],
            "Keep3rParameters": [
              5934
            ],
            "Keep3rRoles": [
              6101
            ],
            "ReentrancyGuard": [
              39
            ],
            "SafeERC20": [
              912
            ]
          },
          "id": 11389,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11333,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:65"
            },
            {
              "absolutePath": "solidity/contracts/peripherals/keepers/Keep3rKeeperFundable.sol",
              "file": "../../../contracts/peripherals/keepers/Keep3rKeeperFundable.sol",
              "id": 11334,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11389,
              "sourceUnit": 9480,
              "src": "65:73:65",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 11335,
                    "name": "Keep3rKeeperFundable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 9479,
                    "src": "180:20:65"
                  },
                  "id": 11336,
                  "nodeType": "InheritanceSpecifier",
                  "src": "180:20:65"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 11388,
              "linearizedBaseContracts": [
                11388,
                9479,
                5934,
                6101,
                5354,
                12863,
                13940,
                5507,
                12997,
                13858,
                12793,
                39,
                13623
              ],
              "name": "Keep3rKeeperFundableForTest",
              "nameLocation": "149:27:65",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 11340,
                  "libraryName": {
                    "id": 11337,
                    "name": "EnumerableSet",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1918,
                    "src": "211:13:65"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "205:49:65",
                  "typeName": {
                    "id": 11339,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 11338,
                      "name": "EnumerableSet.AddressSet",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1631,
                      "src": "229:24:65"
                    },
                    "referencedDeclaration": 1631,
                    "src": "229:24:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSet_$1631_storage_ptr",
                      "typeString": "struct EnumerableSet.AddressSet"
                    }
                  }
                },
                {
                  "body": {
                    "id": 11361,
                    "nodeType": "Block",
                    "src": "459:2:65",
                    "statements": []
                  },
                  "id": 11362,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 11351,
                          "name": "_kph",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11342,
                          "src": "387:4:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 11352,
                          "name": "_keep3rV1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11344,
                          "src": "393:9:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 11353,
                          "name": "_keep3rV1Proxy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11346,
                          "src": "404:14:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 11354,
                          "name": "_kp3rWethPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11348,
                          "src": "420:13:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 11355,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 11350,
                        "name": "Keep3rParameters",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 5934,
                        "src": "370:16:65"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "370:64:65"
                    },
                    {
                      "arguments": [
                        {
                          "expression": {
                            "id": 11357,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "447:3:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 11358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "447:10:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 11359,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 11356,
                        "name": "Keep3rRoles",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6101,
                        "src": "435:11:65"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "435:23:65"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11349,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11342,
                        "mutability": "mutable",
                        "name": "_kph",
                        "nameLocation": "283:4:65",
                        "nodeType": "VariableDeclaration",
                        "scope": 11362,
                        "src": "275:12:65",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11341,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "275:7:65",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11344,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "301:9:65",
                        "nodeType": "VariableDeclaration",
                        "scope": 11362,
                        "src": "293:17:65",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11343,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "293:7:65",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11346,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "324:14:65",
                        "nodeType": "VariableDeclaration",
                        "scope": 11362,
                        "src": "316:22:65",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11345,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "316:7:65",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11348,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "352:13:65",
                        "nodeType": "VariableDeclaration",
                        "scope": 11362,
                        "src": "344:21:65",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11347,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "344:7:65",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "269:100:65"
                  },
                  "returnParameters": {
                    "id": 11360,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "459:0:65"
                  },
                  "scope": 11388,
                  "src": "258:203:65",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 11374,
                    "nodeType": "Block",
                    "src": "529:44:65",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 11371,
                              "name": "_keeper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11364,
                              "src": "560:7:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 11369,
                              "name": "_keepers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5368,
                              "src": "542:8:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 11370,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contains",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1712,
                            "src": "542:17:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"
                            }
                          },
                          "id": 11372,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "542:26:65",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 11368,
                        "id": 11373,
                        "nodeType": "Return",
                        "src": "535:33:65"
                      }
                    ]
                  },
                  "functionSelector": "6ba42aaa",
                  "id": 11375,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isKeeper",
                  "nameLocation": "474:8:65",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11365,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11364,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "491:7:65",
                        "nodeType": "VariableDeclaration",
                        "scope": 11375,
                        "src": "483:15:65",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11363,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "483:7:65",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "482:17:65"
                  },
                  "returnParameters": {
                    "id": 11368,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11367,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 11375,
                        "src": "523:4:65",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 11366,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "523:4:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "522:6:65"
                  },
                  "scope": 11388,
                  "src": "465:108:65",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 11386,
                    "nodeType": "Block",
                    "src": "615:25:65",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 11383,
                              "name": "job",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11377,
                              "src": "631:3:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 11380,
                              "name": "_jobs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "621:5:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSet_$1631_storage",
                                "typeString": "struct EnumerableSet.AddressSet storage ref"
                              }
                            },
                            "id": 11382,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1658,
                            "src": "621:9:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$1631_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$1631_storage_ptr_$",
                              "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"
                            }
                          },
                          "id": 11384,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "621:14:65",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 11385,
                        "nodeType": "ExpressionStatement",
                        "src": "621:14:65"
                      }
                    ]
                  },
                  "functionSelector": "a662031b",
                  "id": 11387,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setJob",
                  "nameLocation": "586:6:65",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11378,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11377,
                        "mutability": "mutable",
                        "name": "job",
                        "nameLocation": "601:3:65",
                        "nodeType": "VariableDeclaration",
                        "scope": 11387,
                        "src": "593:11:65",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11376,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "593:7:65",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "592:13:65"
                  },
                  "returnParameters": {
                    "id": 11379,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "615:0:65"
                  },
                  "scope": 11388,
                  "src": "577:63:65",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 11389,
              "src": "140:502:65",
              "usedErrors": [
                12792,
                12834,
                12837,
                12840,
                12993,
                12996,
                13594,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:611:65"
        },
        "id": 65
      },
      "solidity/interfaces/IKeep3r.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/IKeep3r.sol",
          "exportedSymbols": {
            "IBaseErrors": [
              12793
            ],
            "IKeep3r": [
              11407
            ],
            "IKeep3rAccountance": [
              12997
            ],
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ],
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ],
            "IKeep3rParameters": [
              13858
            ],
            "IKeep3rRoles": [
              13940
            ]
          },
          "id": 11408,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11390,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:66"
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rJobs.sol",
              "file": "./peripherals/IKeep3rJobs.sol",
              "id": 11391,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11408,
              "sourceUnit": 13571,
              "src": "65:39:66",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rKeepers.sol",
              "file": "./peripherals/IKeep3rKeepers.sol",
              "id": 11392,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11408,
              "sourceUnit": 13664,
              "src": "105:42:66",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rAccountance.sol",
              "file": "./peripherals/IKeep3rAccountance.sol",
              "id": 11393,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11408,
              "sourceUnit": 12998,
              "src": "148:46:66",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rRoles.sol",
              "file": "./peripherals/IKeep3rRoles.sol",
              "id": 11394,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11408,
              "sourceUnit": 13941,
              "src": "195:40:66",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IKeep3rParameters.sol",
              "file": "./peripherals/IKeep3rParameters.sol",
              "id": 11395,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11408,
              "sourceUnit": 13859,
              "src": "236:45:66",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 11397,
                    "name": "IKeep3rJobs",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13570,
                    "src": "448:11:66"
                  },
                  "id": 11398,
                  "nodeType": "InheritanceSpecifier",
                  "src": "448:11:66"
                },
                {
                  "baseName": {
                    "id": 11399,
                    "name": "IKeep3rKeepers",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13663,
                    "src": "461:14:66"
                  },
                  "id": 11400,
                  "nodeType": "InheritanceSpecifier",
                  "src": "461:14:66"
                },
                {
                  "baseName": {
                    "id": 11401,
                    "name": "IKeep3rAccountance",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 12997,
                    "src": "477:18:66"
                  },
                  "id": 11402,
                  "nodeType": "InheritanceSpecifier",
                  "src": "477:18:66"
                },
                {
                  "baseName": {
                    "id": 11403,
                    "name": "IKeep3rRoles",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13940,
                    "src": "497:12:66"
                  },
                  "id": 11404,
                  "nodeType": "InheritanceSpecifier",
                  "src": "497:12:66"
                },
                {
                  "baseName": {
                    "id": 11405,
                    "name": "IKeep3rParameters",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13858,
                    "src": "511:17:66"
                  },
                  "id": 11406,
                  "nodeType": "InheritanceSpecifier",
                  "src": "511:17:66"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 11396,
                "nodeType": "StructuredDocumentation",
                "src": "329:98:66",
                "text": "@title Keep3rV2 contract\n @notice This contract inherits all the functionality of Keep3rV2"
              },
              "fullyImplemented": false,
              "id": 11407,
              "linearizedBaseContracts": [
                11407,
                13858,
                12793,
                13940,
                12997,
                13663,
                13659,
                13570,
                13400,
                13326,
                13505,
                13559,
                13305,
                13100,
                13456
              ],
              "name": "IKeep3r",
              "nameLocation": "437:7:66",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 11408,
              "src": "427:106:66",
              "usedErrors": [
                12792,
                12993,
                12996,
                13061,
                13064,
                13067,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13316,
                13319,
                13348,
                13351,
                13422,
                13425,
                13474,
                13477,
                13480,
                13535,
                13538,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797,
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:502:66"
        },
        "id": 66
      },
      "solidity/interfaces/IKeep3rHelper.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/IKeep3rHelper.sol",
          "exportedSymbols": {
            "IKeep3rHelper": [
              11525
            ]
          },
          "id": 11526,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11409,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:67"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 11410,
                "nodeType": "StructuredDocumentation",
                "src": "65:116:67",
                "text": "@title Keep3rHelper contract\n @notice Contains all the helper functions used throughout the different files."
              },
              "fullyImplemented": false,
              "id": 11525,
              "linearizedBaseContracts": [
                11525
              ],
              "name": "IKeep3rHelper",
              "nameLocation": "192:13:67",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 11411,
                    "nodeType": "StructuredDocumentation",
                    "src": "223:72:67",
                    "text": "@notice Throws when none of the tokens in the liquidity pair is KP3R"
                  },
                  "id": 11413,
                  "name": "LiquidityPairInvalid",
                  "nameLocation": "304:20:67",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 11412,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "324:2:67"
                  },
                  "src": "298:29:67"
                },
                {
                  "documentation": {
                    "id": 11414,
                    "nodeType": "StructuredDocumentation",
                    "src": "385:300:67",
                    "text": "@notice Calculates the amount of KP3R that corresponds to the ETH passed into the function\n @dev This function allows us to calculate how much KP3R we should pay to a keeper for things expressed in ETH, like gas\n @param _eth The amount of ETH\n @return _amountOut The amount of KP3R"
                  },
                  "functionSelector": "ed1bd76c",
                  "id": 11421,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quote",
                  "nameLocation": "697:5:67",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11417,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11416,
                        "mutability": "mutable",
                        "name": "_eth",
                        "nameLocation": "711:4:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11421,
                        "src": "703:12:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11415,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "703:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "702:14:67"
                  },
                  "returnParameters": {
                    "id": 11420,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11419,
                        "mutability": "mutable",
                        "name": "_amountOut",
                        "nameLocation": "748:10:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11421,
                        "src": "740:18:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11418,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "740:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "739:20:67"
                  },
                  "scope": 11525,
                  "src": "688:72:67",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11422,
                    "nodeType": "StructuredDocumentation",
                    "src": "764:185:67",
                    "text": "@notice Returns the amount of KP3R the keeper has bonded\n @param _keeper The address of the keeper to check\n @return _amountBonded The amount of KP3R the keeper has bonded"
                  },
                  "functionSelector": "fe10d774",
                  "id": 11429,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bonds",
                  "nameLocation": "961:5:67",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11425,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11424,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "975:7:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11429,
                        "src": "967:15:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11423,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "967:7:67",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "966:17:67"
                  },
                  "returnParameters": {
                    "id": 11428,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11427,
                        "mutability": "mutable",
                        "name": "_amountBonded",
                        "nameLocation": "1015:13:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11429,
                        "src": "1007:21:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11426,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1007:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1006:23:67"
                  },
                  "scope": 11525,
                  "src": "952:78:67",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11430,
                    "nodeType": "StructuredDocumentation",
                    "src": "1034:285:67",
                    "text": "@notice Calculates the reward (in KP3R) that corresponds to a keeper for using gas\n @param _keeper The address of the keeper to check\n @param _gasUsed The amount of gas used that will be rewarded\n @return _kp3r The amount of KP3R that should be awarded to the keeper"
                  },
                  "functionSelector": "2248e82d",
                  "id": 11439,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRewardAmountFor",
                  "nameLocation": "1331:18:67",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11435,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11432,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1358:7:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11439,
                        "src": "1350:15:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11431,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1350:7:67",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11434,
                        "mutability": "mutable",
                        "name": "_gasUsed",
                        "nameLocation": "1375:8:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11439,
                        "src": "1367:16:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11433,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1367:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1349:35:67"
                  },
                  "returnParameters": {
                    "id": 11438,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11437,
                        "mutability": "mutable",
                        "name": "_kp3r",
                        "nameLocation": "1416:5:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11439,
                        "src": "1408:13:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11436,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1408:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1407:15:67"
                  },
                  "scope": 11525,
                  "src": "1322:101:67",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11440,
                    "nodeType": "StructuredDocumentation",
                    "src": "1427:257:67",
                    "text": "@notice Calculates the boost in the reward given to a keeper based on the amount of KP3R that keeper has bonded\n @param _bonds The amount of KP3R tokens bonded by the keeper\n @return _rewardBoost The reward boost that corresponds to the keeper"
                  },
                  "functionSelector": "516c3323",
                  "id": 11447,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRewardBoostFor",
                  "nameLocation": "1696:17:67",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11443,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11442,
                        "mutability": "mutable",
                        "name": "_bonds",
                        "nameLocation": "1722:6:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11447,
                        "src": "1714:14:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11441,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1714:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1713:16:67"
                  },
                  "returnParameters": {
                    "id": 11446,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11445,
                        "mutability": "mutable",
                        "name": "_rewardBoost",
                        "nameLocation": "1761:12:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11447,
                        "src": "1753:20:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11444,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1753:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1752:22:67"
                  },
                  "scope": 11525,
                  "src": "1687:88:67",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11448,
                    "nodeType": "StructuredDocumentation",
                    "src": "1779:231:67",
                    "text": "@notice Calculates the reward (in KP3R) that corresponds to tx.origin for using gas\n @param _gasUsed The amount of gas used that will be rewarded\n @return _amount The amount of KP3R that should be awarded to tx.origin"
                  },
                  "functionSelector": "c84993af",
                  "id": 11455,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRewardAmount",
                  "nameLocation": "2022:15:67",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11451,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11450,
                        "mutability": "mutable",
                        "name": "_gasUsed",
                        "nameLocation": "2046:8:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11455,
                        "src": "2038:16:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11449,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2038:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2037:18:67"
                  },
                  "returnParameters": {
                    "id": 11454,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11453,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "2087:7:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11455,
                        "src": "2079:15:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11452,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2079:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2078:17:67"
                  },
                  "scope": 11525,
                  "src": "2013:83:67",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11456,
                    "nodeType": "StructuredDocumentation",
                    "src": "2100:251:67",
                    "text": "@notice Given a pool address, returns the underlying tokens of the pair\n @param _pool Address of the correspondant pool\n @return _token0 Address of the first token of the pair\n @return _token1 Address of the second token of the pair"
                  },
                  "functionSelector": "ca4f2803",
                  "id": 11465,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPoolTokens",
                  "nameLocation": "2363:13:67",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11459,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11458,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "2385:5:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11465,
                        "src": "2377:13:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11457,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2377:7:67",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2376:15:67"
                  },
                  "returnParameters": {
                    "id": 11464,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11461,
                        "mutability": "mutable",
                        "name": "_token0",
                        "nameLocation": "2423:7:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11465,
                        "src": "2415:15:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11460,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2415:7:67",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11463,
                        "mutability": "mutable",
                        "name": "_token1",
                        "nameLocation": "2440:7:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11465,
                        "src": "2432:15:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11462,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2432:7:67",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2414:34:67"
                  },
                  "scope": 11525,
                  "src": "2354:95:67",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11466,
                    "nodeType": "StructuredDocumentation",
                    "src": "2453:213:67",
                    "text": "@notice Defines the order of the tokens in the pair for twap calculations\n @param _pool Address of the correspondant pool\n @return _isKP3RToken0 Boolean indicating the order of the tokens in the pair"
                  },
                  "functionSelector": "696a437b",
                  "id": 11473,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isKP3RToken0",
                  "nameLocation": "2678:12:67",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11469,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11468,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "2699:5:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11473,
                        "src": "2691:13:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11467,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2691:7:67",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2690:15:67"
                  },
                  "returnParameters": {
                    "id": 11472,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11471,
                        "mutability": "mutable",
                        "name": "_isKP3RToken0",
                        "nameLocation": "2734:13:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11473,
                        "src": "2729:18:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 11470,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2729:4:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2728:20:67"
                  },
                  "scope": 11525,
                  "src": "2669:80:67",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11474,
                    "nodeType": "StructuredDocumentation",
                    "src": "2753:448:67",
                    "text": "@notice Given an array of secondsAgo, returns UniswapV3 pool cumulatives at that moment\n @param _pool Address of the pool to observe\n @param _secondsAgo Array with time references to observe\n @return _tickCumulative1 Cummulative sum of ticks until first time reference\n @return _tickCumulative2 Cummulative sum of ticks until second time reference\n @return _success Boolean indicating if the observe call was succesfull"
                  },
                  "functionSelector": "dc686d91",
                  "id": 11488,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "observe",
                  "nameLocation": "3213:7:67",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11480,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11476,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "3229:5:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11488,
                        "src": "3221:13:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11475,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3221:7:67",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11479,
                        "mutability": "mutable",
                        "name": "_secondsAgo",
                        "nameLocation": "3252:11:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11488,
                        "src": "3236:27:67",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 11477,
                            "name": "uint32",
                            "nodeType": "ElementaryTypeName",
                            "src": "3236:6:67",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "id": 11478,
                          "nodeType": "ArrayTypeName",
                          "src": "3236:8:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                            "typeString": "uint32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3220:44:67"
                  },
                  "returnParameters": {
                    "id": 11487,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11482,
                        "mutability": "mutable",
                        "name": "_tickCumulative1",
                        "nameLocation": "3313:16:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11488,
                        "src": "3307:22:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 11481,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "3307:5:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11484,
                        "mutability": "mutable",
                        "name": "_tickCumulative2",
                        "nameLocation": "3343:16:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11488,
                        "src": "3337:22:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 11483,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "3337:5:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11486,
                        "mutability": "mutable",
                        "name": "_success",
                        "nameLocation": "3372:8:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11488,
                        "src": "3367:13:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 11485,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3367:4:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3299:87:67"
                  },
                  "scope": 11525,
                  "src": "3204:183:67",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11489,
                    "nodeType": "StructuredDocumentation",
                    "src": "3391:400:67",
                    "text": "@notice Get multiplier, quote, and extra, in order to calculate keeper payment\n @param _bonds Amount of bonded KP3R owned by the keeper\n @return _boost Multiplier per gas unit. Takes into account the base fee and the amount of bonded KP3R\n @return _oneEthQuote Amount of KP3R tokens equivalent to 1 ETH\n @return _extra Amount of extra gas that should be added to the gas spent"
                  },
                  "functionSelector": "435b21c1",
                  "id": 11500,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPaymentParams",
                  "nameLocation": "3803:16:67",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11492,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11491,
                        "mutability": "mutable",
                        "name": "_bonds",
                        "nameLocation": "3828:6:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11500,
                        "src": "3820:14:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11490,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3820:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3819:16:67"
                  },
                  "returnParameters": {
                    "id": 11499,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11494,
                        "mutability": "mutable",
                        "name": "_boost",
                        "nameLocation": "3886:6:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11500,
                        "src": "3878:14:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11493,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3878:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11496,
                        "mutability": "mutable",
                        "name": "_oneEthQuote",
                        "nameLocation": "3908:12:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11500,
                        "src": "3900:20:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11495,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3900:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11498,
                        "mutability": "mutable",
                        "name": "_extra",
                        "nameLocation": "3936:6:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11500,
                        "src": "3928:14:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11497,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3928:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3870:78:67"
                  },
                  "scope": 11525,
                  "src": "3794:155:67",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11501,
                    "nodeType": "StructuredDocumentation",
                    "src": "3953:368:67",
                    "text": "@notice Given a tick and a liquidity amount, calculates the underlying KP3R tokens\n @param _liquidityAmount Amount of liquidity to be converted\n @param _tickDifference Tick value used to calculate the quote\n @param _timeInterval Time value used to calculate the quote\n @return _kp3rAmount Amount of KP3R tokens underlying on the given liquidity"
                  },
                  "functionSelector": "a0d27107",
                  "id": 11512,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getKP3RsAtTick",
                  "nameLocation": "4333:14:67",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11508,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11503,
                        "mutability": "mutable",
                        "name": "_liquidityAmount",
                        "nameLocation": "4361:16:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11512,
                        "src": "4353:24:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11502,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4353:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11505,
                        "mutability": "mutable",
                        "name": "_tickDifference",
                        "nameLocation": "4389:15:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11512,
                        "src": "4383:21:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 11504,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "4383:5:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11507,
                        "mutability": "mutable",
                        "name": "_timeInterval",
                        "nameLocation": "4418:13:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11512,
                        "src": "4410:21:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11506,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4410:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4347:88:67"
                  },
                  "returnParameters": {
                    "id": 11511,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11510,
                        "mutability": "mutable",
                        "name": "_kp3rAmount",
                        "nameLocation": "4467:11:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11512,
                        "src": "4459:19:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11509,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4459:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4458:21:67"
                  },
                  "scope": 11525,
                  "src": "4324:156:67",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11513,
                    "nodeType": "StructuredDocumentation",
                    "src": "4484:371:67",
                    "text": "@notice Given a tick and a token amount, calculates the output in correspondant token\n @param _baseAmount Amount of token to be converted\n @param _tickDifference Tick value used to calculate the quote\n @param _timeInterval Time value used to calculate the quote\n @return _quoteAmount Amount of credits deserved for the baseAmount at the tick value"
                  },
                  "functionSelector": "ab8cedc5",
                  "id": 11524,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getQuoteAtTick",
                  "nameLocation": "4867:14:67",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11520,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11515,
                        "mutability": "mutable",
                        "name": "_baseAmount",
                        "nameLocation": "4895:11:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11524,
                        "src": "4887:19:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 11514,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "4887:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11517,
                        "mutability": "mutable",
                        "name": "_tickDifference",
                        "nameLocation": "4918:15:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11524,
                        "src": "4912:21:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 11516,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "4912:5:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11519,
                        "mutability": "mutable",
                        "name": "_timeInterval",
                        "nameLocation": "4947:13:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11524,
                        "src": "4939:21:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11518,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4939:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4881:83:67"
                  },
                  "returnParameters": {
                    "id": 11523,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11522,
                        "mutability": "mutable",
                        "name": "_quoteAmount",
                        "nameLocation": "4996:12:67",
                        "nodeType": "VariableDeclaration",
                        "scope": 11524,
                        "src": "4988:20:67",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11521,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4988:7:67",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4987:22:67"
                  },
                  "scope": 11525,
                  "src": "4858:152:67",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 11526,
              "src": "182:4830:67",
              "usedErrors": [
                11413
              ]
            }
          ],
          "src": "32:4981:67"
        },
        "id": 67
      },
      "solidity/interfaces/IKeep3rHelperParameters.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/IKeep3rHelperParameters.sol",
          "exportedSymbols": {
            "IKeep3rHelperParameters": [
              11672
            ]
          },
          "id": 11673,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11527,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:68"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 11528,
                "nodeType": "StructuredDocumentation",
                "src": "65:126:68",
                "text": "@title Keep3rHelperParameters contract\n @notice Contains all the helper functions used throughout the different files."
              },
              "fullyImplemented": false,
              "id": 11672,
              "linearizedBaseContracts": [
                11672
              ],
              "name": "IKeep3rHelperParameters",
              "nameLocation": "201:23:68",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "IKeep3rHelperParameters.Kp3rWethPool",
                  "id": 11533,
                  "members": [
                    {
                      "constant": false,
                      "id": 11530,
                      "mutability": "mutable",
                      "name": "poolAddress",
                      "nameLocation": "410:11:68",
                      "nodeType": "VariableDeclaration",
                      "scope": 11533,
                      "src": "402:19:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 11529,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "402:7:68",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 11532,
                      "mutability": "mutable",
                      "name": "isKP3RToken0",
                      "nameLocation": "432:12:68",
                      "nodeType": "VariableDeclaration",
                      "scope": 11533,
                      "src": "427:17:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 11531,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "427:4:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Kp3rWethPool",
                  "nameLocation": "383:12:68",
                  "nodeType": "StructDefinition",
                  "scope": 11672,
                  "src": "376:73:68",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 11534,
                    "nodeType": "StructuredDocumentation",
                    "src": "466:68:68",
                    "text": "@notice Throws when pool does not have KP3R as token0 nor token1"
                  },
                  "id": 11536,
                  "name": "InvalidKp3rPool",
                  "nameLocation": "543:15:68",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 11535,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "558:2:68"
                  },
                  "src": "537:24:68"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 11537,
                    "nodeType": "StructuredDocumentation",
                    "src": "578:214:68",
                    "text": "@notice Emitted when the kp3r weth pool is changed\n @param _address Address of the new kp3r weth pool\n @param _isKP3RToken0 True if calling the token0 method of the pool returns the KP3R token address"
                  },
                  "id": 11543,
                  "name": "Kp3rWethPoolChange",
                  "nameLocation": "801:18:68",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11542,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11539,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_address",
                        "nameLocation": "828:8:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11543,
                        "src": "820:16:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11538,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "820:7:68",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11541,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_isKP3RToken0",
                        "nameLocation": "843:13:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11543,
                        "src": "838:18:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 11540,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "838:4:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "819:38:68"
                  },
                  "src": "795:63:68"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 11544,
                    "nodeType": "StructuredDocumentation",
                    "src": "862:116:68",
                    "text": "@notice Emitted when the minimum boost multiplier is changed\n @param _minBoost The minimum boost multiplier"
                  },
                  "id": 11548,
                  "name": "MinBoostChange",
                  "nameLocation": "987:14:68",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11547,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11546,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_minBoost",
                        "nameLocation": "1010:9:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11548,
                        "src": "1002:17:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11545,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1002:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1001:19:68"
                  },
                  "src": "981:40:68"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 11549,
                    "nodeType": "StructuredDocumentation",
                    "src": "1025:116:68",
                    "text": "@notice Emitted when the maximum boost multiplier is changed\n @param _maxBoost The maximum boost multiplier"
                  },
                  "id": 11553,
                  "name": "MaxBoostChange",
                  "nameLocation": "1150:14:68",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11552,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11551,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_maxBoost",
                        "nameLocation": "1173:9:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11553,
                        "src": "1165:17:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11550,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1165:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1164:19:68"
                  },
                  "src": "1144:40:68"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 11554,
                    "nodeType": "StructuredDocumentation",
                    "src": "1188:106:68",
                    "text": "@notice Emitted when the target bond amount is changed\n @param _targetBond The target bond amount"
                  },
                  "id": 11558,
                  "name": "TargetBondChange",
                  "nameLocation": "1303:16:68",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11557,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11556,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_targetBond",
                        "nameLocation": "1328:11:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11558,
                        "src": "1320:19:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11555,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1320:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1319:21:68"
                  },
                  "src": "1297:44:68"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 11559,
                    "nodeType": "StructuredDocumentation",
                    "src": "1345:105:68",
                    "text": "@notice Emitted when the Keep3r V2 address is changed\n @param _keep3rV2 The address of Keep3r V2"
                  },
                  "id": 11563,
                  "name": "Keep3rV2Change",
                  "nameLocation": "1459:14:68",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11562,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11561,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_keep3rV2",
                        "nameLocation": "1482:9:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11563,
                        "src": "1474:17:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11560,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1474:7:68",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1473:19:68"
                  },
                  "src": "1453:40:68"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 11564,
                    "nodeType": "StructuredDocumentation",
                    "src": "1497:107:68",
                    "text": "@notice Emitted when the work extra gas amount is changed\n @param _workExtraGas The work extra gas"
                  },
                  "id": 11568,
                  "name": "WorkExtraGasChange",
                  "nameLocation": "1613:18:68",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11567,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11566,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_workExtraGas",
                        "nameLocation": "1640:13:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11568,
                        "src": "1632:21:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11565,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1632:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1631:23:68"
                  },
                  "src": "1607:48:68"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 11569,
                    "nodeType": "StructuredDocumentation",
                    "src": "1659:109:68",
                    "text": "@notice Emitted when the quote twap time is changed\n @param _quoteTwapTime The twap time for quoting"
                  },
                  "id": 11573,
                  "name": "QuoteTwapTimeChange",
                  "nameLocation": "1777:19:68",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11572,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11571,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_quoteTwapTime",
                        "nameLocation": "1804:14:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11573,
                        "src": "1797:21:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 11570,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1797:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1796:23:68"
                  },
                  "src": "1771:49:68"
                },
                {
                  "documentation": {
                    "id": 11574,
                    "nodeType": "StructuredDocumentation",
                    "src": "1840:75:68",
                    "text": "@notice Address of KP3R token\n @return _kp3r Address of KP3R token"
                  },
                  "functionSelector": "05e0b9a0",
                  "id": 11579,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "KP3R",
                  "nameLocation": "1968:4:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11575,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1972:2:68"
                  },
                  "returnParameters": {
                    "id": 11578,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11577,
                        "mutability": "mutable",
                        "name": "_kp3r",
                        "nameLocation": "2006:5:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11579,
                        "src": "1998:13:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11576,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1998:7:68",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1997:15:68"
                  },
                  "scope": 11672,
                  "src": "1959:54:68",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11580,
                    "nodeType": "StructuredDocumentation",
                    "src": "2017:119:68",
                    "text": "@notice The boost base used to calculate the boost rewards for the keeper\n @return _base The boost base number"
                  },
                  "functionSelector": "25f09e61",
                  "id": 11585,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "BOOST_BASE",
                  "nameLocation": "2148:10:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11581,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2158:2:68"
                  },
                  "returnParameters": {
                    "id": 11584,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11583,
                        "mutability": "mutable",
                        "name": "_base",
                        "nameLocation": "2192:5:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11585,
                        "src": "2184:13:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11582,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2184:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2183:15:68"
                  },
                  "scope": 11672,
                  "src": "2139:60:68",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11586,
                    "nodeType": "StructuredDocumentation",
                    "src": "2203:205:68",
                    "text": "@notice KP3R-WETH pool that is being used as oracle\n @return poolAddress Address of the pool\n @return isKP3RToken0 True if calling the token0 method of the pool returns the KP3R token address"
                  },
                  "functionSelector": "7b40c913",
                  "id": 11593,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "kp3rWethPool",
                  "nameLocation": "2420:12:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11587,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2432:2:68"
                  },
                  "returnParameters": {
                    "id": 11592,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11589,
                        "mutability": "mutable",
                        "name": "poolAddress",
                        "nameLocation": "2466:11:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11593,
                        "src": "2458:19:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11588,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2458:7:68",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11591,
                        "mutability": "mutable",
                        "name": "isKP3RToken0",
                        "nameLocation": "2484:12:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11593,
                        "src": "2479:17:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 11590,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2479:4:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2457:40:68"
                  },
                  "scope": 11672,
                  "src": "2411:87:68",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11594,
                    "nodeType": "StructuredDocumentation",
                    "src": "2502:309:68",
                    "text": "@notice The minimum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job\n         For example: if the quoted gas used is 1000, then the minimum amount to be paid will be 1000 * minBoost / BOOST_BASE\n @return _multiplier The minimum boost multiplier"
                  },
                  "functionSelector": "8561579c",
                  "id": 11599,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "minBoost",
                  "nameLocation": "2823:8:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11595,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2831:2:68"
                  },
                  "returnParameters": {
                    "id": 11598,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11597,
                        "mutability": "mutable",
                        "name": "_multiplier",
                        "nameLocation": "2865:11:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11599,
                        "src": "2857:19:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11596,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2857:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2856:21:68"
                  },
                  "scope": 11672,
                  "src": "2814:64:68",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11600,
                    "nodeType": "StructuredDocumentation",
                    "src": "2882:309:68",
                    "text": "@notice The maximum multiplier used to calculate the amount of gas paid to the Keeper for the gas used to perform a job\n         For example: if the quoted gas used is 1000, then the maximum amount to be paid will be 1000 * maxBoost / BOOST_BASE\n @return _multiplier The maximum boost multiplier"
                  },
                  "functionSelector": "37090c2f",
                  "id": 11605,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "maxBoost",
                  "nameLocation": "3203:8:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11601,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3211:2:68"
                  },
                  "returnParameters": {
                    "id": 11604,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11603,
                        "mutability": "mutable",
                        "name": "_multiplier",
                        "nameLocation": "3245:11:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11605,
                        "src": "3237:19:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11602,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3237:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3236:21:68"
                  },
                  "scope": 11672,
                  "src": "3194:64:68",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11606,
                    "nodeType": "StructuredDocumentation",
                    "src": "3262:386:68",
                    "text": "@notice The targeted amount of bonded KP3Rs to max-up reward multiplier\n         For example: if the amount of KP3R the keeper has bonded is targetBond or more, then the keeper will get\n                      the maximum boost possible in his rewards, if it's less, the reward boost will be proportional\n @return _target The amount of KP3R that comforms the targetBond"
                  },
                  "functionSelector": "2742b9e7",
                  "id": 11611,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "targetBond",
                  "nameLocation": "3660:10:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11607,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3670:2:68"
                  },
                  "returnParameters": {
                    "id": 11610,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11609,
                        "mutability": "mutable",
                        "name": "_target",
                        "nameLocation": "3704:7:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11611,
                        "src": "3696:15:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11608,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3696:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3695:17:68"
                  },
                  "scope": 11672,
                  "src": "3651:62:68",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11612,
                    "nodeType": "StructuredDocumentation",
                    "src": "3717:146:68",
                    "text": "@notice The amount of unaccounted gas that is going to be added to keeper payments\n @return _workExtraGas The work unaccounted gas amount"
                  },
                  "functionSelector": "3facf242",
                  "id": 11617,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "workExtraGas",
                  "nameLocation": "3875:12:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11613,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3887:2:68"
                  },
                  "returnParameters": {
                    "id": 11616,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11615,
                        "mutability": "mutable",
                        "name": "_workExtraGas",
                        "nameLocation": "3921:13:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11617,
                        "src": "3913:21:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11614,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3913:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3912:23:68"
                  },
                  "scope": 11672,
                  "src": "3866:70:68",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11618,
                    "nodeType": "StructuredDocumentation",
                    "src": "3940:80:68",
                    "text": "@notice The twap time for quoting\n @return _quoteTwapTime The twap time"
                  },
                  "functionSelector": "9aaad679",
                  "id": 11623,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteTwapTime",
                  "nameLocation": "4032:13:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11619,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4045:2:68"
                  },
                  "returnParameters": {
                    "id": 11622,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11621,
                        "mutability": "mutable",
                        "name": "_quoteTwapTime",
                        "nameLocation": "4078:14:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11623,
                        "src": "4071:21:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 11620,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4071:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4070:23:68"
                  },
                  "scope": 11672,
                  "src": "4023:71:68",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11624,
                    "nodeType": "StructuredDocumentation",
                    "src": "4098:77:68",
                    "text": "@notice Address of Keep3r V2\n @return _keep3rV2 Address of Keep3r V2"
                  },
                  "functionSelector": "117cfc1b",
                  "id": 11629,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "keep3rV2",
                  "nameLocation": "4187:8:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11625,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4195:2:68"
                  },
                  "returnParameters": {
                    "id": 11628,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11627,
                        "mutability": "mutable",
                        "name": "_keep3rV2",
                        "nameLocation": "4229:9:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11629,
                        "src": "4221:17:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11626,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4221:7:68",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4220:19:68"
                  },
                  "scope": 11672,
                  "src": "4178:62:68",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11630,
                    "nodeType": "StructuredDocumentation",
                    "src": "4258:91:68",
                    "text": "@notice Sets KP3R-WETH pool\n @param _poolAddress The address of the KP3R-WETH pool"
                  },
                  "functionSelector": "160e1e31",
                  "id": 11635,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKp3rWethPool",
                  "nameLocation": "4361:15:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11633,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11632,
                        "mutability": "mutable",
                        "name": "_poolAddress",
                        "nameLocation": "4385:12:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11635,
                        "src": "4377:20:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11631,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4377:7:68",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4376:22:68"
                  },
                  "returnParameters": {
                    "id": 11634,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4407:0:68"
                  },
                  "scope": 11672,
                  "src": "4352:56:68",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11636,
                    "nodeType": "StructuredDocumentation",
                    "src": "4412:97:68",
                    "text": "@notice Sets the minimum boost multiplier\n @param _minBoost The minimum boost multiplier"
                  },
                  "functionSelector": "0c525835",
                  "id": 11641,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setMinBoost",
                  "nameLocation": "4521:11:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11639,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11638,
                        "mutability": "mutable",
                        "name": "_minBoost",
                        "nameLocation": "4541:9:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11641,
                        "src": "4533:17:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11637,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4533:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4532:19:68"
                  },
                  "returnParameters": {
                    "id": 11640,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4560:0:68"
                  },
                  "scope": 11672,
                  "src": "4512:49:68",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11642,
                    "nodeType": "StructuredDocumentation",
                    "src": "4565:97:68",
                    "text": "@notice Sets the maximum boost multiplier\n @param _maxBoost The maximum boost multiplier"
                  },
                  "functionSelector": "b2e0df96",
                  "id": 11647,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setMaxBoost",
                  "nameLocation": "4674:11:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11645,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11644,
                        "mutability": "mutable",
                        "name": "_maxBoost",
                        "nameLocation": "4694:9:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11647,
                        "src": "4686:17:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11643,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4686:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4685:19:68"
                  },
                  "returnParameters": {
                    "id": 11646,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4713:0:68"
                  },
                  "scope": 11672,
                  "src": "4665:49:68",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11648,
                    "nodeType": "StructuredDocumentation",
                    "src": "4718:87:68",
                    "text": "@notice Sets the target bond amount\n @param _targetBond The target bond amount"
                  },
                  "functionSelector": "ab5dce00",
                  "id": 11653,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setTargetBond",
                  "nameLocation": "4817:13:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11651,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11650,
                        "mutability": "mutable",
                        "name": "_targetBond",
                        "nameLocation": "4839:11:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11653,
                        "src": "4831:19:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11649,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4831:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4830:21:68"
                  },
                  "returnParameters": {
                    "id": 11652,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4860:0:68"
                  },
                  "scope": 11672,
                  "src": "4808:53:68",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11654,
                    "nodeType": "StructuredDocumentation",
                    "src": "4865:86:68",
                    "text": "@notice Sets the Keep3r V2 address\n @param _keep3rV2 The address of Keep3r V2"
                  },
                  "functionSelector": "3cc7ab30",
                  "id": 11659,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKeep3rV2",
                  "nameLocation": "4963:11:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11657,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11656,
                        "mutability": "mutable",
                        "name": "_keep3rV2",
                        "nameLocation": "4983:9:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11659,
                        "src": "4975:17:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11655,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4975:7:68",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4974:19:68"
                  },
                  "returnParameters": {
                    "id": 11658,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5002:0:68"
                  },
                  "scope": 11672,
                  "src": "4954:49:68",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11660,
                    "nodeType": "StructuredDocumentation",
                    "src": "5007:88:68",
                    "text": "@notice Sets the work extra gas amount\n @param _workExtraGas The work extra gas"
                  },
                  "functionSelector": "289adb44",
                  "id": 11665,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setWorkExtraGas",
                  "nameLocation": "5107:15:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11663,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11662,
                        "mutability": "mutable",
                        "name": "_workExtraGas",
                        "nameLocation": "5131:13:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11665,
                        "src": "5123:21:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11661,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5123:7:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5122:23:68"
                  },
                  "returnParameters": {
                    "id": 11664,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5154:0:68"
                  },
                  "scope": 11672,
                  "src": "5098:57:68",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11666,
                    "nodeType": "StructuredDocumentation",
                    "src": "5159:90:68",
                    "text": "@notice Sets the quote twap time\n @param _quoteTwapTime The twap time for quoting"
                  },
                  "functionSelector": "b93f5af0",
                  "id": 11671,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setQuoteTwapTime",
                  "nameLocation": "5261:16:68",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11669,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11668,
                        "mutability": "mutable",
                        "name": "_quoteTwapTime",
                        "nameLocation": "5285:14:68",
                        "nodeType": "VariableDeclaration",
                        "scope": 11671,
                        "src": "5278:21:68",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 11667,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5278:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5277:23:68"
                  },
                  "returnParameters": {
                    "id": 11670,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5309:0:68"
                  },
                  "scope": 11672,
                  "src": "5252:58:68",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 11673,
              "src": "191:5121:68",
              "usedErrors": [
                11536
              ]
            }
          ],
          "src": "32:5281:68"
        },
        "id": 68
      },
      "solidity/interfaces/IPairManager.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/IPairManager.sol",
          "exportedSymbols": {
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IPairManager": [
              11703
            ]
          },
          "id": 11704,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11674,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:69"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
              "file": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
              "id": 11675,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11704,
              "sourceUnit": 689,
              "src": "65:75:69",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 11677,
                    "name": "IERC20Metadata",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 688,
                    "src": "266:14:69"
                  },
                  "id": 11678,
                  "nodeType": "InheritanceSpecifier",
                  "src": "266:14:69"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 11676,
                "nodeType": "StructuredDocumentation",
                "src": "142:98:69",
                "text": "@title  Pair Manager interface\n @notice Generic interface for Keep3r liquidity pools (kLP)"
              },
              "fullyImplemented": false,
              "id": 11703,
              "linearizedBaseContracts": [
                11703,
                688,
                663
              ],
              "name": "IPairManager",
              "nameLocation": "250:12:69",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 11679,
                    "nodeType": "StructuredDocumentation",
                    "src": "285:136:69",
                    "text": "@notice Address of the factory from which the pair manager was created\n @return _factory The address of the PairManager Factory"
                  },
                  "functionSelector": "c45a0155",
                  "id": 11684,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factory",
                  "nameLocation": "433:7:69",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11680,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "440:2:69"
                  },
                  "returnParameters": {
                    "id": 11683,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11682,
                        "mutability": "mutable",
                        "name": "_factory",
                        "nameLocation": "474:8:69",
                        "nodeType": "VariableDeclaration",
                        "scope": 11684,
                        "src": "466:16:69",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11681,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "466:7:69",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "465:18:69"
                  },
                  "scope": 11703,
                  "src": "424:60:69",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11685,
                    "nodeType": "StructuredDocumentation",
                    "src": "488:129:69",
                    "text": "@notice Address of the pool from which the Keep3r pair manager will interact with\n @return _pool The address of the pool"
                  },
                  "functionSelector": "16f0115b",
                  "id": 11690,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pool",
                  "nameLocation": "629:4:69",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11686,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "633:2:69"
                  },
                  "returnParameters": {
                    "id": 11689,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11688,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "667:5:69",
                        "nodeType": "VariableDeclaration",
                        "scope": 11690,
                        "src": "659:13:69",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11687,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "659:7:69",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "658:15:69"
                  },
                  "scope": 11703,
                  "src": "620:54:69",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11691,
                    "nodeType": "StructuredDocumentation",
                    "src": "678:74:69",
                    "text": "@notice Token0 of the pool\n @return _token0 The address of token0"
                  },
                  "functionSelector": "0dfe1681",
                  "id": 11696,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "token0",
                  "nameLocation": "764:6:69",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11692,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "770:2:69"
                  },
                  "returnParameters": {
                    "id": 11695,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11694,
                        "mutability": "mutable",
                        "name": "_token0",
                        "nameLocation": "804:7:69",
                        "nodeType": "VariableDeclaration",
                        "scope": 11696,
                        "src": "796:15:69",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11693,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "796:7:69",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "795:17:69"
                  },
                  "scope": 11703,
                  "src": "755:58:69",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11697,
                    "nodeType": "StructuredDocumentation",
                    "src": "817:74:69",
                    "text": "@notice Token1 of the pool\n @return _token1 The address of token1"
                  },
                  "functionSelector": "d21220a7",
                  "id": 11702,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "token1",
                  "nameLocation": "903:6:69",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11698,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "909:2:69"
                  },
                  "returnParameters": {
                    "id": 11701,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11700,
                        "mutability": "mutable",
                        "name": "_token1",
                        "nameLocation": "943:7:69",
                        "nodeType": "VariableDeclaration",
                        "scope": 11702,
                        "src": "935:15:69",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11699,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "935:7:69",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "934:17:69"
                  },
                  "scope": 11703,
                  "src": "894:58:69",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 11704,
              "src": "240:714:69",
              "usedErrors": []
            }
          ],
          "src": "32:923:69"
        },
        "id": 69
      },
      "solidity/interfaces/IPairManagerFactory.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/IPairManagerFactory.sol",
          "exportedSymbols": {
            "IGovernable": [
              12863
            ],
            "IPairManagerFactory": [
              11739
            ]
          },
          "id": 11740,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11705,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:70"
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IGovernable.sol",
              "file": "./peripherals/IGovernable.sol",
              "id": 11706,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11740,
              "sourceUnit": 12864,
              "src": "65:39:70",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 11708,
                    "name": "IGovernable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 12863,
                    "src": "227:11:70"
                  },
                  "id": 11709,
                  "nodeType": "InheritanceSpecifier",
                  "src": "227:11:70"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 11707,
                "nodeType": "StructuredDocumentation",
                "src": "106:88:70",
                "text": "@title Factory of Pair Managers\n @notice This contract creates new pair managers"
              },
              "fullyImplemented": false,
              "id": 11739,
              "linearizedBaseContracts": [
                11739,
                12863
              ],
              "name": "IPairManagerFactory",
              "nameLocation": "204:19:70",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 11710,
                    "nodeType": "StructuredDocumentation",
                    "src": "259:332:70",
                    "text": "@notice Maps the address of a Uniswap pool, to the address of the corresponding PairManager\n         For example, the uniswap address of DAI-WETH, will return the Keep3r/DAI-WETH pair manager address\n @param _pool The address of the Uniswap pool\n @return _pairManager The address of the corresponding pair manager"
                  },
                  "functionSelector": "9cd7bef0",
                  "id": 11717,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pairManagers",
                  "nameLocation": "603:12:70",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11713,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11712,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "624:5:70",
                        "nodeType": "VariableDeclaration",
                        "scope": 11717,
                        "src": "616:13:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11711,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "616:7:70",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "615:15:70"
                  },
                  "returnParameters": {
                    "id": 11716,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11715,
                        "mutability": "mutable",
                        "name": "_pairManager",
                        "nameLocation": "662:12:70",
                        "nodeType": "VariableDeclaration",
                        "scope": 11717,
                        "src": "654:20:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11714,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "654:7:70",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "653:22:70"
                  },
                  "scope": 11739,
                  "src": "594:82:70",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 11718,
                    "nodeType": "StructuredDocumentation",
                    "src": "693:190:70",
                    "text": "@notice Emitted when a new pair manager is created\n @param _pool The address of the corresponding Uniswap pool\n @param _pairManager The address of the just-created pair manager"
                  },
                  "id": 11724,
                  "name": "PairCreated",
                  "nameLocation": "892:11:70",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11723,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11720,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "912:5:70",
                        "nodeType": "VariableDeclaration",
                        "scope": 11724,
                        "src": "904:13:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11719,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "904:7:70",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11722,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_pairManager",
                        "nameLocation": "927:12:70",
                        "nodeType": "VariableDeclaration",
                        "scope": 11724,
                        "src": "919:20:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11721,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "919:7:70",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "903:37:70"
                  },
                  "src": "886:55:70"
                },
                {
                  "documentation": {
                    "id": 11725,
                    "nodeType": "StructuredDocumentation",
                    "src": "958:70:70",
                    "text": "@notice Throws an error if the pair manager is already initialized"
                  },
                  "id": 11727,
                  "name": "AlreadyInitialized",
                  "nameLocation": "1037:18:70",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 11726,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1055:2:70"
                  },
                  "src": "1031:27:70"
                },
                {
                  "documentation": {
                    "id": 11728,
                    "nodeType": "StructuredDocumentation",
                    "src": "1062:58:70",
                    "text": "@notice Throws an error if the caller is not the owner"
                  },
                  "id": 11730,
                  "name": "OnlyOwner",
                  "nameLocation": "1129:9:70",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 11729,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1138:2:70"
                  },
                  "src": "1123:18:70"
                },
                {
                  "documentation": {
                    "id": 11731,
                    "nodeType": "StructuredDocumentation",
                    "src": "1159:331:70",
                    "text": "@notice Creates a new pair manager based on the address of a Uniswap pool\n         For example, the uniswap address of DAI-WETH, will create the Keep3r/DAI-WETH pool\n @param _pool The address of the Uniswap pool the pair manager will be based of\n @return _pairManager The address of the just-created pair manager"
                  },
                  "functionSelector": "869fb514",
                  "id": 11738,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createPairManager",
                  "nameLocation": "1502:17:70",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11734,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11733,
                        "mutability": "mutable",
                        "name": "_pool",
                        "nameLocation": "1528:5:70",
                        "nodeType": "VariableDeclaration",
                        "scope": 11738,
                        "src": "1520:13:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11732,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1520:7:70",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1519:15:70"
                  },
                  "returnParameters": {
                    "id": 11737,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11736,
                        "mutability": "mutable",
                        "name": "_pairManager",
                        "nameLocation": "1561:12:70",
                        "nodeType": "VariableDeclaration",
                        "scope": 11738,
                        "src": "1553:20:70",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11735,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1553:7:70",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1552:22:70"
                  },
                  "scope": 11739,
                  "src": "1493:82:70",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 11740,
              "src": "194:1383:70",
              "usedErrors": [
                11727,
                11730,
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "32:1546:70"
        },
        "id": 70
      },
      "solidity/interfaces/IUniV3PairManager.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/IUniV3PairManager.sol",
          "exportedSymbols": {
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IGovernable": [
              12863
            ],
            "IPairManager": [
              11703
            ],
            "IUniV3PairManager": [
              11866
            ],
            "PoolAddress": [
              4650
            ]
          },
          "id": 11867,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11741,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:71"
            },
            {
              "absolutePath": "solidity/interfaces/IPairManager.sol",
              "file": "./IPairManager.sol",
              "id": 11742,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11867,
              "sourceUnit": 11704,
              "src": "65:28:71",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/contracts/libraries/PoolAddress.sol",
              "file": "../contracts/libraries/PoolAddress.sol",
              "id": 11743,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11867,
              "sourceUnit": 4651,
              "src": "94:48:71",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
              "file": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
              "id": 11744,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11867,
              "sourceUnit": 689,
              "src": "143:75:71",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IGovernable.sol",
              "file": "./peripherals/IGovernable.sol",
              "id": 11745,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 11867,
              "sourceUnit": 12864,
              "src": "219:39:71",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 11747,
                    "name": "IGovernable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 12863,
                    "src": "468:11:71"
                  },
                  "id": 11748,
                  "nodeType": "InheritanceSpecifier",
                  "src": "468:11:71"
                },
                {
                  "baseName": {
                    "id": 11749,
                    "name": "IPairManager",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 11703,
                    "src": "481:12:71"
                  },
                  "id": 11750,
                  "nodeType": "InheritanceSpecifier",
                  "src": "481:12:71"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 11746,
                "nodeType": "StructuredDocumentation",
                "src": "260:177:71",
                "text": "@title Pair Manager contract\n @notice Creates a UniswapV3 position, and tokenizes in an ERC20 manner\n         so that the user can use it as liquidity for a Keep3rJob"
              },
              "fullyImplemented": false,
              "id": 11866,
              "linearizedBaseContracts": [
                11866,
                11703,
                688,
                663,
                12863
              ],
              "name": "IUniV3PairManager",
              "nameLocation": "447:17:71",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "IUniV3PairManager.MintCallbackData",
                  "id": 11756,
                  "members": [
                    {
                      "constant": false,
                      "id": 11753,
                      "mutability": "mutable",
                      "name": "_poolKey",
                      "nameLocation": "637:8:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 11756,
                      "src": "617:28:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PoolKey_$4649_storage_ptr",
                        "typeString": "struct PoolAddress.PoolKey"
                      },
                      "typeName": {
                        "id": 11752,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 11751,
                          "name": "PoolAddress.PoolKey",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 4649,
                          "src": "617:19:71"
                        },
                        "referencedDeclaration": 4649,
                        "src": "617:19:71",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PoolKey_$4649_storage_ptr",
                          "typeString": "struct PoolAddress.PoolKey"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 11755,
                      "mutability": "mutable",
                      "name": "payer",
                      "nameLocation": "747:5:71",
                      "nodeType": "VariableDeclaration",
                      "scope": 11756,
                      "src": "739:13:71",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 11754,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "739:7:71",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "MintCallbackData",
                  "nameLocation": "594:16:71",
                  "nodeType": "StructDefinition",
                  "scope": 11866,
                  "src": "587:249:71",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 11757,
                    "nodeType": "StructuredDocumentation",
                    "src": "856:142:71",
                    "text": "@notice The fee of the Uniswap pool passed into the constructor\n @return _fee The fee of the Uniswap pool passed into the constructor"
                  },
                  "functionSelector": "ddca3f43",
                  "id": 11762,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fee",
                  "nameLocation": "1010:3:71",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11758,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1013:2:71"
                  },
                  "returnParameters": {
                    "id": 11761,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11760,
                        "mutability": "mutable",
                        "name": "_fee",
                        "nameLocation": "1046:4:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11762,
                        "src": "1039:11:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 11759,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1039:6:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1038:13:71"
                  },
                  "scope": 11866,
                  "src": "1001:51:71",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11763,
                    "nodeType": "StructuredDocumentation",
                    "src": "1056:112:71",
                    "text": "@notice Highest tick in the Uniswap's curve\n @return _tickUpper The highest tick in the Uniswap's curve"
                  },
                  "functionSelector": "55b812a8",
                  "id": 11768,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tickUpper",
                  "nameLocation": "1180:9:71",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11764,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1189:2:71"
                  },
                  "returnParameters": {
                    "id": 11767,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11766,
                        "mutability": "mutable",
                        "name": "_tickUpper",
                        "nameLocation": "1221:10:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11768,
                        "src": "1215:16:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 11765,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1215:5:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1214:18:71"
                  },
                  "scope": 11866,
                  "src": "1171:62:71",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11769,
                    "nodeType": "StructuredDocumentation",
                    "src": "1237:109:71",
                    "text": "@notice Lowest tick in the Uniswap's curve\n @return _tickLower The lower tick in the Uniswap's curve"
                  },
                  "functionSelector": "59c4f905",
                  "id": 11774,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tickLower",
                  "nameLocation": "1358:9:71",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11770,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1367:2:71"
                  },
                  "returnParameters": {
                    "id": 11773,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11772,
                        "mutability": "mutable",
                        "name": "_tickLower",
                        "nameLocation": "1399:10:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11774,
                        "src": "1393:16:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 11771,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1393:5:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1392:18:71"
                  },
                  "scope": 11866,
                  "src": "1349:62:71",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11775,
                    "nodeType": "StructuredDocumentation",
                    "src": "1415:82:71",
                    "text": "@notice The pair tick spacing\n @return _tickSpacing The pair tick spacing"
                  },
                  "functionSelector": "d0c93a7c",
                  "id": 11780,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tickSpacing",
                  "nameLocation": "1509:11:71",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11776,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1520:2:71"
                  },
                  "returnParameters": {
                    "id": 11779,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11778,
                        "mutability": "mutable",
                        "name": "_tickSpacing",
                        "nameLocation": "1552:12:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11780,
                        "src": "1546:18:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 11777,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "1546:5:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1545:20:71"
                  },
                  "scope": 11866,
                  "src": "1500:66:71",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11781,
                    "nodeType": "StructuredDocumentation",
                    "src": "1570:236:71",
                    "text": "@notice The sqrtRatioAX96 at the lowest tick (-887200) of the Uniswap pool\n @return _sqrtPriceA96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\n         at the lowest tick"
                  },
                  "functionSelector": "2ea28f5b",
                  "id": 11786,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sqrtRatioAX96",
                  "nameLocation": "1818:13:71",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11782,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1831:2:71"
                  },
                  "returnParameters": {
                    "id": 11785,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11784,
                        "mutability": "mutable",
                        "name": "_sqrtPriceA96",
                        "nameLocation": "1865:13:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11786,
                        "src": "1857:21:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 11783,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "1857:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1856:23:71"
                  },
                  "scope": 11866,
                  "src": "1809:71:71",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11787,
                    "nodeType": "StructuredDocumentation",
                    "src": "1884:238:71",
                    "text": "@notice The sqrtRatioBX96 at the highest tick (887200) of the Uniswap pool\n @return _sqrtPriceBX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)\n         at the highest tick"
                  },
                  "functionSelector": "c6275261",
                  "id": 11792,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sqrtRatioBX96",
                  "nameLocation": "2134:13:71",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11788,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2147:2:71"
                  },
                  "returnParameters": {
                    "id": 11791,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11790,
                        "mutability": "mutable",
                        "name": "_sqrtPriceBX96",
                        "nameLocation": "2181:14:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11792,
                        "src": "2173:22:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 11789,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "2173:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2172:24:71"
                  },
                  "scope": 11866,
                  "src": "2125:72:71",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11793,
                    "nodeType": "StructuredDocumentation",
                    "src": "2214:66:71",
                    "text": "@notice Throws when the caller of the function is not the pool"
                  },
                  "id": 11795,
                  "name": "OnlyPool",
                  "nameLocation": "2289:8:71",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 11794,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2297:2:71"
                  },
                  "src": "2283:17:71"
                },
                {
                  "documentation": {
                    "id": 11796,
                    "nodeType": "StructuredDocumentation",
                    "src": "2304:78:71",
                    "text": "@notice Throws when the slippage exceeds what the user is comfortable with"
                  },
                  "id": 11798,
                  "name": "ExcessiveSlippage",
                  "nameLocation": "2391:17:71",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 11797,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2408:2:71"
                  },
                  "src": "2385:26:71"
                },
                {
                  "documentation": {
                    "id": 11799,
                    "nodeType": "StructuredDocumentation",
                    "src": "2415:50:71",
                    "text": "@notice Throws when a transfer is unsuccessful"
                  },
                  "id": 11801,
                  "name": "UnsuccessfulTransfer",
                  "nameLocation": "2474:20:71",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 11800,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2494:2:71"
                  },
                  "src": "2468:29:71"
                },
                {
                  "documentation": {
                    "id": 11802,
                    "nodeType": "StructuredDocumentation",
                    "src": "2515:507:71",
                    "text": "@notice This function is called after a user calls IUniV3PairManager#mint function\n         It ensures that any tokens owed to the pool are paid by the msg.sender of IUniV3PairManager#mint function\n @param amount0Owed The amount of token0 due to the pool for the minted liquidity\n @param amount1Owed The amount of token1 due to the pool for the minted liquidity\n @param data The encoded token0, token1, fee (_poolKey) and the payer (msg.sender) of the IUniV3PairManager#mint function"
                  },
                  "functionSelector": "d3487997",
                  "id": 11811,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "uniswapV3MintCallback",
                  "nameLocation": "3034:21:71",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11809,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11804,
                        "mutability": "mutable",
                        "name": "amount0Owed",
                        "nameLocation": "3069:11:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11811,
                        "src": "3061:19:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11803,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3061:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11806,
                        "mutability": "mutable",
                        "name": "amount1Owed",
                        "nameLocation": "3094:11:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11811,
                        "src": "3086:19:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11805,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3086:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11808,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3126:4:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11811,
                        "src": "3111:19:71",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 11807,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3111:5:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3055:79:71"
                  },
                  "returnParameters": {
                    "id": 11810,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3143:0:71"
                  },
                  "scope": 11866,
                  "src": "3025:119:71",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11812,
                    "nodeType": "StructuredDocumentation",
                    "src": "3148:624:71",
                    "text": "@notice Mints kLP tokens to an address according to the liquidity the msg.sender provides to the UniswapV3 pool\n @dev Triggers UniV3PairManager#uniswapV3MintCallback\n @param amount0Desired The amount of token0 we would like to provide\n @param amount1Desired The amount of token1 we would like to provide\n @param amount0Min The minimum amount of token0 we want to provide\n @param amount1Min The minimum amount of token1 we want to provide\n @param to The address to which the kLP tokens are going to be minted to\n @return liquidity kLP tokens sent in exchange for the provision of tokens"
                  },
                  "functionSelector": "a3e6dc28",
                  "id": 11827,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nameLocation": "3784:4:71",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11823,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11814,
                        "mutability": "mutable",
                        "name": "amount0Desired",
                        "nameLocation": "3802:14:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11827,
                        "src": "3794:22:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11813,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3794:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11816,
                        "mutability": "mutable",
                        "name": "amount1Desired",
                        "nameLocation": "3830:14:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11827,
                        "src": "3822:22:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11815,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3822:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11818,
                        "mutability": "mutable",
                        "name": "amount0Min",
                        "nameLocation": "3858:10:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11827,
                        "src": "3850:18:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11817,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3850:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11820,
                        "mutability": "mutable",
                        "name": "amount1Min",
                        "nameLocation": "3882:10:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11827,
                        "src": "3874:18:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11819,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3874:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11822,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "3906:2:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11827,
                        "src": "3898:10:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11821,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3898:7:71",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3788:124:71"
                  },
                  "returnParameters": {
                    "id": 11826,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11825,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "3939:9:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11827,
                        "src": "3931:17:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 11824,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "3931:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3930:19:71"
                  },
                  "scope": 11866,
                  "src": "3775:175:71",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11828,
                    "nodeType": "StructuredDocumentation",
                    "src": "3954:622:71",
                    "text": "@notice Returns the pair manager's position in the corresponding UniswapV3 pool\n @return liquidity The amount of liquidity provided to the UniswapV3 pool by the pair manager\n @return feeGrowthInside0LastX128 The fee growth of token0 as of the last action on the individual position\n @return feeGrowthInside1LastX128 The fee growth of token1 as of the last action on the individual position\n @return tokensOwed0 The uncollected amount of token0 owed to the position as of the last computation\n @return tokensOwed1 The uncollected amount of token1 owed to the position as of the last computation"
                  },
                  "functionSelector": "09218e91",
                  "id": 11841,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "position",
                  "nameLocation": "4588:8:71",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11829,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4596:2:71"
                  },
                  "returnParameters": {
                    "id": 11840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11831,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "4649:9:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11841,
                        "src": "4641:17:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 11830,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "4641:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11833,
                        "mutability": "mutable",
                        "name": "feeGrowthInside0LastX128",
                        "nameLocation": "4674:24:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11841,
                        "src": "4666:32:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11832,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4666:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11835,
                        "mutability": "mutable",
                        "name": "feeGrowthInside1LastX128",
                        "nameLocation": "4714:24:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11841,
                        "src": "4706:32:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11834,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4706:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11837,
                        "mutability": "mutable",
                        "name": "tokensOwed0",
                        "nameLocation": "4754:11:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11841,
                        "src": "4746:19:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 11836,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "4746:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11839,
                        "mutability": "mutable",
                        "name": "tokensOwed1",
                        "nameLocation": "4781:11:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11841,
                        "src": "4773:19:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 11838,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "4773:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4633:165:71"
                  },
                  "scope": 11866,
                  "src": "4579:220:71",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11842,
                    "nodeType": "StructuredDocumentation",
                    "src": "5017:176:71",
                    "text": "@dev The collected fees will be sent to governance\n @return amount0 The amount of fees collected in token0\n @return amount1 The amount of fees collected in token1"
                  },
                  "functionSelector": "e5225381",
                  "id": 11849,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collect",
                  "nameLocation": "5205:7:71",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11843,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5212:2:71"
                  },
                  "returnParameters": {
                    "id": 11848,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11845,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "5241:7:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11849,
                        "src": "5233:15:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11844,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5233:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11847,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "5258:7:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11849,
                        "src": "5250:15:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11846,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5250:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5232:34:71"
                  },
                  "scope": 11866,
                  "src": "5196:71:71",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 11850,
                    "nodeType": "StructuredDocumentation",
                    "src": "5422:476:71",
                    "text": "@param liquidity The amount of liquidity to be burned\n @param amount0Min The minimum amount of token0 we want to send to the recipient (to)\n @param amount1Min The minimum amount of token1 we want to send to the recipient (to)\n @param to The address that will receive the due fees\n @return amount0 The calculated amount of token0 that will be sent to the recipient\n @return amount1 The calculated amount of token1 that will be sent to the recipient"
                  },
                  "functionSelector": "cf51148d",
                  "id": 11865,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nameLocation": "5910:4:71",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 11859,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11852,
                        "mutability": "mutable",
                        "name": "liquidity",
                        "nameLocation": "5928:9:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11865,
                        "src": "5920:17:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 11851,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "5920:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11854,
                        "mutability": "mutable",
                        "name": "amount0Min",
                        "nameLocation": "5951:10:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11865,
                        "src": "5943:18:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11853,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5943:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11856,
                        "mutability": "mutable",
                        "name": "amount1Min",
                        "nameLocation": "5975:10:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11865,
                        "src": "5967:18:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11855,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5967:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11858,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "5999:2:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11865,
                        "src": "5991:10:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11857,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5991:7:71",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5914:91:71"
                  },
                  "returnParameters": {
                    "id": 11864,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11861,
                        "mutability": "mutable",
                        "name": "amount0",
                        "nameLocation": "6032:7:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11865,
                        "src": "6024:15:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11860,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6024:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11863,
                        "mutability": "mutable",
                        "name": "amount1",
                        "nameLocation": "6049:7:71",
                        "nodeType": "VariableDeclaration",
                        "scope": 11865,
                        "src": "6041:15:71",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11862,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6041:7:71",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6023:34:71"
                  },
                  "scope": 11866,
                  "src": "5901:157:71",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 11867,
              "src": "437:5623:71",
              "usedErrors": [
                11795,
                11798,
                11801,
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "32:6029:71"
        },
        "id": 71
      },
      "solidity/interfaces/external/IKeep3rV1.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/external/IKeep3rV1.sol",
          "exportedSymbols": {
            "IERC20": [
              663
            ],
            "IERC20Metadata": [
              688
            ],
            "IKeep3rV1": [
              12600
            ]
          },
          "id": 12601,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 11868,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:72"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 11869,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 12601,
              "sourceUnit": 664,
              "src": "65:56:72",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
              "file": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
              "id": 11870,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 12601,
              "sourceUnit": 689,
              "src": "122:75:72",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 11871,
                    "name": "IERC20",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 663,
                    "src": "261:6:72"
                  },
                  "id": 11872,
                  "nodeType": "InheritanceSpecifier",
                  "src": "261:6:72"
                },
                {
                  "baseName": {
                    "id": 11873,
                    "name": "IERC20Metadata",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 688,
                    "src": "269:14:72"
                  },
                  "id": 11874,
                  "nodeType": "InheritanceSpecifier",
                  "src": "269:14:72"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 12600,
              "linearizedBaseContracts": [
                12600,
                688,
                663
              ],
              "name": "IKeep3rV1",
              "nameLocation": "248:9:72",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "IKeep3rV1.Checkpoint",
                  "id": 11879,
                  "members": [
                    {
                      "constant": false,
                      "id": 11876,
                      "mutability": "mutable",
                      "name": "fromBlock",
                      "nameLocation": "332:9:72",
                      "nodeType": "VariableDeclaration",
                      "scope": 11879,
                      "src": "325:16:72",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 11875,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "325:6:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 11878,
                      "mutability": "mutable",
                      "name": "votes",
                      "nameLocation": "355:5:72",
                      "nodeType": "VariableDeclaration",
                      "scope": 11879,
                      "src": "347:13:72",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11877,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "347:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Checkpoint",
                  "nameLocation": "308:10:72",
                  "nodeType": "StructDefinition",
                  "scope": 12600,
                  "src": "301:64:72",
                  "visibility": "public"
                },
                {
                  "anonymous": false,
                  "id": 11887,
                  "name": "DelegateChanged",
                  "nameLocation": "387:15:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11886,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11881,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_delegator",
                        "nameLocation": "419:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11887,
                        "src": "403:26:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11880,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "403:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11883,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_fromDelegate",
                        "nameLocation": "447:13:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11887,
                        "src": "431:29:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11882,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "431:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11885,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_toDelegate",
                        "nameLocation": "478:11:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11887,
                        "src": "462:27:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11884,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "462:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "402:88:72"
                  },
                  "src": "381:110:72"
                },
                {
                  "anonymous": false,
                  "id": 11895,
                  "name": "DelegateVotesChanged",
                  "nameLocation": "500:20:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11894,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11889,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_delegate",
                        "nameLocation": "537:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11895,
                        "src": "521:25:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11888,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "521:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11891,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_previousBalance",
                        "nameLocation": "556:16:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11895,
                        "src": "548:24:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11890,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "548:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11893,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_newBalance",
                        "nameLocation": "582:11:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11895,
                        "src": "574:19:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11892,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "574:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "520:74:72"
                  },
                  "src": "494:101:72"
                },
                {
                  "anonymous": false,
                  "id": 11907,
                  "name": "SubmitJob",
                  "nameLocation": "604:9:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11906,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11897,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "630:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11907,
                        "src": "614:20:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11896,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "614:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11899,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "652:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11907,
                        "src": "636:26:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11898,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "636:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11901,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_provider",
                        "nameLocation": "680:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11907,
                        "src": "664:25:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11900,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "664:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11903,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "699:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11907,
                        "src": "691:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11902,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "691:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11905,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_credit",
                        "nameLocation": "715:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11907,
                        "src": "707:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11904,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "707:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "613:110:72"
                  },
                  "src": "598:126:72"
                },
                {
                  "anonymous": false,
                  "id": 11919,
                  "name": "ApplyCredit",
                  "nameLocation": "733:11:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11918,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11909,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "761:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11919,
                        "src": "745:20:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11908,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "745:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11911,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "783:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11919,
                        "src": "767:26:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11910,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "767:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11913,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_provider",
                        "nameLocation": "811:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11919,
                        "src": "795:25:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11912,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "795:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11915,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "830:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11919,
                        "src": "822:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11914,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "822:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11917,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_credit",
                        "nameLocation": "846:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11919,
                        "src": "838:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11916,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "838:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "744:110:72"
                  },
                  "src": "727:128:72"
                },
                {
                  "anonymous": false,
                  "id": 11931,
                  "name": "RemoveJob",
                  "nameLocation": "864:9:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11930,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11921,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "890:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11931,
                        "src": "874:20:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11920,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "874:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11923,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "912:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11931,
                        "src": "896:26:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11922,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "896:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11925,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_provider",
                        "nameLocation": "940:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11931,
                        "src": "924:25:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11924,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "924:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11927,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "959:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11931,
                        "src": "951:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11926,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "951:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11929,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_credit",
                        "nameLocation": "975:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11931,
                        "src": "967:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11928,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "967:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "873:110:72"
                  },
                  "src": "858:126:72"
                },
                {
                  "anonymous": false,
                  "id": 11943,
                  "name": "UnbondJob",
                  "nameLocation": "993:9:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11942,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11933,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1019:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11943,
                        "src": "1003:20:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11932,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1003:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11935,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "1041:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11943,
                        "src": "1025:26:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11934,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1025:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11937,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_provider",
                        "nameLocation": "1069:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11943,
                        "src": "1053:25:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11936,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1053:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11939,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "1088:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11943,
                        "src": "1080:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11938,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1080:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11941,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_credit",
                        "nameLocation": "1104:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11943,
                        "src": "1096:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11940,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1096:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1002:110:72"
                  },
                  "src": "987:126:72"
                },
                {
                  "anonymous": false,
                  "id": 11951,
                  "name": "JobAdded",
                  "nameLocation": "1122:8:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11950,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11945,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1147:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11951,
                        "src": "1131:20:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11944,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1131:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11947,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "1161:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11951,
                        "src": "1153:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11946,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1153:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11949,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "1177:11:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11951,
                        "src": "1169:19:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11948,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1169:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1130:59:72"
                  },
                  "src": "1116:74:72"
                },
                {
                  "anonymous": false,
                  "id": 11959,
                  "name": "JobRemoved",
                  "nameLocation": "1199:10:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11958,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11953,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1226:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11959,
                        "src": "1210:20:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11952,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1210:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11955,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "1240:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11959,
                        "src": "1232:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11954,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1232:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11957,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "1256:11:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11959,
                        "src": "1248:19:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11956,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1248:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1209:59:72"
                  },
                  "src": "1193:76:72"
                },
                {
                  "anonymous": false,
                  "id": 11971,
                  "name": "KeeperWorked",
                  "nameLocation": "1278:12:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11970,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11961,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_credit",
                        "nameLocation": "1307:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11971,
                        "src": "1291:23:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11960,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1291:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11963,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1332:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11971,
                        "src": "1316:20:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11962,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1316:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11965,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1354:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11971,
                        "src": "1338:23:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11964,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1338:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11967,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "1371:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11971,
                        "src": "1363:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11966,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1363:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11969,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1387:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11971,
                        "src": "1379:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11968,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1379:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1290:105:72"
                  },
                  "src": "1272:124:72"
                },
                {
                  "anonymous": false,
                  "id": 11981,
                  "name": "KeeperBonding",
                  "nameLocation": "1405:13:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11980,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11973,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1435:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11981,
                        "src": "1419:23:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11972,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1419:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11975,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "1452:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11981,
                        "src": "1444:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11974,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1444:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11977,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_active",
                        "nameLocation": "1468:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11981,
                        "src": "1460:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11976,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1460:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11979,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_bond",
                        "nameLocation": "1485:5:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11981,
                        "src": "1477:13:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11978,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1477:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1418:73:72"
                  },
                  "src": "1399:93:72"
                },
                {
                  "anonymous": false,
                  "id": 11991,
                  "name": "KeeperBonded",
                  "nameLocation": "1501:12:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 11990,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11983,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1530:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11991,
                        "src": "1514:23:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11982,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1514:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11985,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "1547:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11991,
                        "src": "1539:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11984,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1539:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11987,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_activated",
                        "nameLocation": "1563:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11991,
                        "src": "1555:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11986,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1555:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11989,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_bond",
                        "nameLocation": "1583:5:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 11991,
                        "src": "1575:13:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11988,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1575:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1513:76:72"
                  },
                  "src": "1495:95:72"
                },
                {
                  "anonymous": false,
                  "id": 12001,
                  "name": "KeeperUnbonding",
                  "nameLocation": "1599:15:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12000,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11993,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1631:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12001,
                        "src": "1615:23:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11992,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1615:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11995,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "1648:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12001,
                        "src": "1640:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11994,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1640:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11997,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_deactive",
                        "nameLocation": "1664:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12001,
                        "src": "1656:17:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11996,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1656:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11999,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_bond",
                        "nameLocation": "1683:5:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12001,
                        "src": "1675:13:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11998,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1675:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1614:75:72"
                  },
                  "src": "1593:97:72"
                },
                {
                  "anonymous": false,
                  "id": 12011,
                  "name": "KeeperUnbound",
                  "nameLocation": "1699:13:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12010,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12003,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1729:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12011,
                        "src": "1713:23:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12002,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1713:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12005,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "1746:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12011,
                        "src": "1738:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12004,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1738:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12007,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_deactivated",
                        "nameLocation": "1762:12:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12011,
                        "src": "1754:20:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12006,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1754:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12009,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_bond",
                        "nameLocation": "1784:5:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12011,
                        "src": "1776:13:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12008,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1776:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1712:78:72"
                  },
                  "src": "1693:98:72"
                },
                {
                  "anonymous": false,
                  "id": 12021,
                  "name": "KeeperSlashed",
                  "nameLocation": "1800:13:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12020,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12013,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1830:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12021,
                        "src": "1814:23:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12012,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1814:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12015,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_slasher",
                        "nameLocation": "1855:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12021,
                        "src": "1839:24:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12014,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1839:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12017,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "1873:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12021,
                        "src": "1865:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12016,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1865:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12019,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_slash",
                        "nameLocation": "1889:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12021,
                        "src": "1881:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12018,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1881:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1813:83:72"
                  },
                  "src": "1794:103:72"
                },
                {
                  "anonymous": false,
                  "id": 12027,
                  "name": "KeeperDispute",
                  "nameLocation": "1906:13:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12026,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12023,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1936:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12027,
                        "src": "1920:23:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12022,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1920:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12025,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "1953:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12027,
                        "src": "1945:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12024,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1945:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1919:41:72"
                  },
                  "src": "1900:61:72"
                },
                {
                  "anonymous": false,
                  "id": 12033,
                  "name": "KeeperResolved",
                  "nameLocation": "1970:14:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12032,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12029,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "2001:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12033,
                        "src": "1985:23:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12028,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1985:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12031,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "2018:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12033,
                        "src": "2010:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12030,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2010:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1984:41:72"
                  },
                  "src": "1964:62:72"
                },
                {
                  "anonymous": false,
                  "id": 12045,
                  "name": "TokenCreditAddition",
                  "nameLocation": "2035:19:72",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12044,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12035,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_credit",
                        "nameLocation": "2071:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12045,
                        "src": "2055:23:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12034,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2055:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12037,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "2096:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12045,
                        "src": "2080:20:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12036,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2080:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12039,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_creditor",
                        "nameLocation": "2118:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12045,
                        "src": "2102:25:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12038,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2102:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12041,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_block",
                        "nameLocation": "2137:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12045,
                        "src": "2129:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12040,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2129:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12043,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "2153:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12045,
                        "src": "2145:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12042,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2145:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2054:107:72"
                  },
                  "src": "2029:133:72"
                },
                {
                  "functionSelector": "09aff02b",
                  "id": 12050,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "KPRH",
                  "nameLocation": "2190:4:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12046,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2194:2:72"
                  },
                  "returnParameters": {
                    "id": 12049,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12048,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12050,
                        "src": "2215:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12047,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2215:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2214:9:72"
                  },
                  "scope": 12600,
                  "src": "2181:43:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "587cde1e",
                  "id": 12057,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "delegates",
                  "nameLocation": "2237:9:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12053,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12052,
                        "mutability": "mutable",
                        "name": "_delegator",
                        "nameLocation": "2255:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12057,
                        "src": "2247:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12051,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2247:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2246:20:72"
                  },
                  "returnParameters": {
                    "id": 12056,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12055,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12057,
                        "src": "2290:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12054,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2290:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2289:9:72"
                  },
                  "scope": 12600,
                  "src": "2228:71:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "f1127ed8",
                  "id": 12067,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "checkpoints",
                  "nameLocation": "2312:11:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12062,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12059,
                        "mutability": "mutable",
                        "name": "_account",
                        "nameLocation": "2332:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12067,
                        "src": "2324:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12058,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2324:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12061,
                        "mutability": "mutable",
                        "name": "_checkpoint",
                        "nameLocation": "2349:11:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12067,
                        "src": "2342:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 12060,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2342:6:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2323:38:72"
                  },
                  "returnParameters": {
                    "id": 12066,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12065,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12067,
                        "src": "2385:17:72",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$11879_memory_ptr",
                          "typeString": "struct IKeep3rV1.Checkpoint"
                        },
                        "typeName": {
                          "id": 12064,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 12063,
                            "name": "Checkpoint",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 11879,
                            "src": "2385:10:72"
                          },
                          "referencedDeclaration": 11879,
                          "src": "2385:10:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Checkpoint_$11879_storage_ptr",
                            "typeString": "struct IKeep3rV1.Checkpoint"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2384:19:72"
                  },
                  "scope": 12600,
                  "src": "2303:101:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "6fcfff45",
                  "id": 12074,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "numCheckpoints",
                  "nameLocation": "2417:14:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12070,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12069,
                        "mutability": "mutable",
                        "name": "_account",
                        "nameLocation": "2440:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12074,
                        "src": "2432:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12068,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2432:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2431:18:72"
                  },
                  "returnParameters": {
                    "id": 12073,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12072,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12074,
                        "src": "2473:6:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 12071,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2473:6:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2472:8:72"
                  },
                  "scope": 12600,
                  "src": "2408:73:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "20606b70",
                  "id": 12079,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "DOMAIN_TYPEHASH",
                  "nameLocation": "2494:15:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12075,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2509:2:72"
                  },
                  "returnParameters": {
                    "id": 12078,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12077,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12079,
                        "src": "2530:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 12076,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2530:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2529:9:72"
                  },
                  "scope": 12600,
                  "src": "2485:54:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "1778e29c",
                  "id": 12084,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "DOMAINSEPARATOR",
                  "nameLocation": "2552:15:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12080,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2567:2:72"
                  },
                  "returnParameters": {
                    "id": 12083,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12082,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12084,
                        "src": "2588:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 12081,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2588:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2587:9:72"
                  },
                  "scope": 12600,
                  "src": "2543:54:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "e7a324dc",
                  "id": 12089,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "DELEGATION_TYPEHASH",
                  "nameLocation": "2610:19:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12085,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2629:2:72"
                  },
                  "returnParameters": {
                    "id": 12088,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12087,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12089,
                        "src": "2650:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 12086,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2650:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2649:9:72"
                  },
                  "scope": 12600,
                  "src": "2601:58:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "30adf81f",
                  "id": 12094,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "PERMIT_TYPEHASH",
                  "nameLocation": "2672:15:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12090,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2687:2:72"
                  },
                  "returnParameters": {
                    "id": 12093,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12092,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12094,
                        "src": "2708:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 12091,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2708:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2707:9:72"
                  },
                  "scope": 12600,
                  "src": "2663:54:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "7ecebe00",
                  "id": 12101,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "nonces",
                  "nameLocation": "2730:6:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12097,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12096,
                        "mutability": "mutable",
                        "name": "_user",
                        "nameLocation": "2745:5:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12101,
                        "src": "2737:13:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12095,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2737:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2736:15:72"
                  },
                  "returnParameters": {
                    "id": 12100,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12099,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12101,
                        "src": "2775:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12098,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2775:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2774:9:72"
                  },
                  "scope": 12600,
                  "src": "2721:63:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "c1c1d218",
                  "id": 12106,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "BOND",
                  "nameLocation": "2797:4:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12102,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2801:2:72"
                  },
                  "returnParameters": {
                    "id": 12105,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12104,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12106,
                        "src": "2822:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12103,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2822:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2821:9:72"
                  },
                  "scope": 12600,
                  "src": "2788:43:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "603b4d14",
                  "id": 12111,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "UNBOND",
                  "nameLocation": "2844:6:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12107,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2850:2:72"
                  },
                  "returnParameters": {
                    "id": 12110,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12109,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12111,
                        "src": "2871:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12108,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2871:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2870:9:72"
                  },
                  "scope": 12600,
                  "src": "2835:45:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "1df0de13",
                  "id": 12116,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "LIQUIDITYBOND",
                  "nameLocation": "2893:13:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12112,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2906:2:72"
                  },
                  "returnParameters": {
                    "id": 12115,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12114,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12116,
                        "src": "2927:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12113,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2927:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2926:9:72"
                  },
                  "scope": 12600,
                  "src": "2884:52:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "c57981b5",
                  "id": 12121,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "FEE",
                  "nameLocation": "2949:3:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12117,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2952:2:72"
                  },
                  "returnParameters": {
                    "id": 12120,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12119,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12121,
                        "src": "2973:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12118,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2973:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2972:9:72"
                  },
                  "scope": 12600,
                  "src": "2940:42:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "ec342ad0",
                  "id": 12126,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "BASE",
                  "nameLocation": "2995:4:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12122,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2999:2:72"
                  },
                  "returnParameters": {
                    "id": 12125,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12124,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12126,
                        "src": "3020:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12123,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3020:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3019:9:72"
                  },
                  "scope": 12600,
                  "src": "2986:43:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "8322fff2",
                  "id": 12131,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ETH",
                  "nameLocation": "3042:3:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12127,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3045:2:72"
                  },
                  "returnParameters": {
                    "id": 12130,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12129,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12131,
                        "src": "3066:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12128,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3066:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3065:9:72"
                  },
                  "scope": 12600,
                  "src": "3033:42:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "37feca84",
                  "id": 12140,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bondings",
                  "nameLocation": "3088:8:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12136,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12133,
                        "mutability": "mutable",
                        "name": "_user",
                        "nameLocation": "3105:5:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12140,
                        "src": "3097:13:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12132,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3097:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12135,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "3120:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12140,
                        "src": "3112:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12134,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3112:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3096:33:72"
                  },
                  "returnParameters": {
                    "id": 12139,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12138,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12140,
                        "src": "3153:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12137,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3153:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3152:9:72"
                  },
                  "scope": 12600,
                  "src": "3079:83:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "07b435c2",
                  "id": 12149,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "canWithdrawAfter",
                  "nameLocation": "3175:16:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12145,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12142,
                        "mutability": "mutable",
                        "name": "_user",
                        "nameLocation": "3200:5:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12149,
                        "src": "3192:13:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12141,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3192:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12144,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "3215:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12149,
                        "src": "3207:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12143,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3207:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3191:33:72"
                  },
                  "returnParameters": {
                    "id": 12148,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12147,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12149,
                        "src": "3248:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12146,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3248:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3247:9:72"
                  },
                  "scope": 12600,
                  "src": "3166:91:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "21040b01",
                  "id": 12158,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pendingUnbonds",
                  "nameLocation": "3270:14:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12154,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12151,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3293:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12158,
                        "src": "3285:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12150,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3285:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12153,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "3310:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12158,
                        "src": "3302:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12152,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3302:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3284:35:72"
                  },
                  "returnParameters": {
                    "id": 12157,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12156,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12158,
                        "src": "3343:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12155,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3343:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3342:9:72"
                  },
                  "scope": 12600,
                  "src": "3261:91:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "deac3541",
                  "id": 12167,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pendingbonds",
                  "nameLocation": "3365:12:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12163,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12160,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3386:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12167,
                        "src": "3378:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12159,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3378:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12162,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "3403:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12167,
                        "src": "3395:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12161,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3395:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3377:35:72"
                  },
                  "returnParameters": {
                    "id": 12166,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12165,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12167,
                        "src": "3436:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12164,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3436:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3435:9:72"
                  },
                  "scope": 12600,
                  "src": "3356:89:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "a39744b5",
                  "id": 12176,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bonds",
                  "nameLocation": "3458:5:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12172,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12169,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3472:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12176,
                        "src": "3464:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12168,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3464:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12171,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "3489:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12176,
                        "src": "3481:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12170,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3481:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3463:35:72"
                  },
                  "returnParameters": {
                    "id": 12175,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12174,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12176,
                        "src": "3522:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12173,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3522:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3521:9:72"
                  },
                  "scope": 12600,
                  "src": "3449:82:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "d8bff5a5",
                  "id": 12183,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "votes",
                  "nameLocation": "3544:5:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12179,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12178,
                        "mutability": "mutable",
                        "name": "_delegator",
                        "nameLocation": "3558:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12183,
                        "src": "3550:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12177,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3550:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3549:20:72"
                  },
                  "returnParameters": {
                    "id": 12182,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12181,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12183,
                        "src": "3593:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12180,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3593:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3592:9:72"
                  },
                  "scope": 12600,
                  "src": "3535:67:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "e326ac43",
                  "id": 12190,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "firstSeen",
                  "nameLocation": "3615:9:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12186,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12185,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3633:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12190,
                        "src": "3625:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12184,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3625:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3624:17:72"
                  },
                  "returnParameters": {
                    "id": 12189,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12188,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12190,
                        "src": "3665:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12187,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3665:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3664:9:72"
                  },
                  "scope": 12600,
                  "src": "3606:68:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "b0103b1a",
                  "id": 12197,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "disputes",
                  "nameLocation": "3687:8:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12193,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12192,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3704:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12197,
                        "src": "3696:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12191,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3696:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3695:17:72"
                  },
                  "returnParameters": {
                    "id": 12196,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12195,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12197,
                        "src": "3736:4:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 12194,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3736:4:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3735:6:72"
                  },
                  "scope": 12600,
                  "src": "3678:64:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "d454019d",
                  "id": 12204,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastJob",
                  "nameLocation": "3755:7:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12200,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12199,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3771:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12204,
                        "src": "3763:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12198,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3763:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3762:17:72"
                  },
                  "returnParameters": {
                    "id": 12203,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12202,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12204,
                        "src": "3803:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12201,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3803:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3802:9:72"
                  },
                  "scope": 12600,
                  "src": "3746:66:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "1b44555e",
                  "id": 12211,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "workCompleted",
                  "nameLocation": "3825:13:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12207,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12206,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3847:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12211,
                        "src": "3839:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12205,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3839:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3838:17:72"
                  },
                  "returnParameters": {
                    "id": 12210,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12209,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12211,
                        "src": "3879:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12208,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3879:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3878:9:72"
                  },
                  "scope": 12600,
                  "src": "3816:72:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "3d1f0bb9",
                  "id": 12218,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobs",
                  "nameLocation": "3901:4:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12214,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12213,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "3914:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12218,
                        "src": "3906:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12212,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3906:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3905:14:72"
                  },
                  "returnParameters": {
                    "id": 12217,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12216,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12218,
                        "src": "3943:4:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 12215,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3943:4:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3942:6:72"
                  },
                  "scope": 12600,
                  "src": "3892:57:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "637cd7f0",
                  "id": 12227,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "credits",
                  "nameLocation": "3962:7:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12223,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12220,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "3978:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12227,
                        "src": "3970:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12219,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3970:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12222,
                        "mutability": "mutable",
                        "name": "_credit",
                        "nameLocation": "3992:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12227,
                        "src": "3984:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12221,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3984:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3969:31:72"
                  },
                  "returnParameters": {
                    "id": 12226,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12225,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12227,
                        "src": "4024:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12224,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4024:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4023:9:72"
                  },
                  "scope": 12600,
                  "src": "3953:80:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "def70844",
                  "id": 12238,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityProvided",
                  "nameLocation": "4046:17:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12234,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12229,
                        "mutability": "mutable",
                        "name": "_provider",
                        "nameLocation": "4077:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12238,
                        "src": "4069:17:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12228,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4069:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12231,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "4100:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12238,
                        "src": "4092:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12230,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4092:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12233,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "4124:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12238,
                        "src": "4116:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12232,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4116:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4063:69:72"
                  },
                  "returnParameters": {
                    "id": 12237,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12236,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12238,
                        "src": "4156:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12235,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4156:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4155:9:72"
                  },
                  "scope": 12600,
                  "src": "4037:128:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "bb49096d",
                  "id": 12249,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityUnbonding",
                  "nameLocation": "4178:18:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12245,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12240,
                        "mutability": "mutable",
                        "name": "_provider",
                        "nameLocation": "4210:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12249,
                        "src": "4202:17:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12239,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4202:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12242,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "4233:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12249,
                        "src": "4225:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12241,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4225:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12244,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "4257:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12249,
                        "src": "4249:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12243,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4249:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4196:69:72"
                  },
                  "returnParameters": {
                    "id": 12248,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12247,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12249,
                        "src": "4289:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12246,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4289:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4288:9:72"
                  },
                  "scope": 12600,
                  "src": "4169:129:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "83baa693",
                  "id": 12260,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAmountsUnbonding",
                  "nameLocation": "4311:25:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12256,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12251,
                        "mutability": "mutable",
                        "name": "_provider",
                        "nameLocation": "4350:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12260,
                        "src": "4342:17:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12250,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4342:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12253,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "4373:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12260,
                        "src": "4365:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12252,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4365:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12255,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "4397:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12260,
                        "src": "4389:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12254,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4389:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4336:69:72"
                  },
                  "returnParameters": {
                    "id": 12259,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12258,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12260,
                        "src": "4429:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12257,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4429:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4428:9:72"
                  },
                  "scope": 12600,
                  "src": "4302:136:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "7724ff68",
                  "id": 12267,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobProposalDelay",
                  "nameLocation": "4451:16:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12263,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12262,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "4476:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12267,
                        "src": "4468:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12261,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4468:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4467:14:72"
                  },
                  "returnParameters": {
                    "id": 12266,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12265,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12267,
                        "src": "4505:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12264,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4505:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4504:9:72"
                  },
                  "scope": 12600,
                  "src": "4442:72:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "fede7008",
                  "id": 12278,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityApplied",
                  "nameLocation": "4527:16:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12274,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12269,
                        "mutability": "mutable",
                        "name": "_provider",
                        "nameLocation": "4557:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12278,
                        "src": "4549:17:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12268,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4549:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12271,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "4580:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12278,
                        "src": "4572:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12270,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4572:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12273,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "4604:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12278,
                        "src": "4596:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12272,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4596:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4543:69:72"
                  },
                  "returnParameters": {
                    "id": 12277,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12276,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12278,
                        "src": "4636:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12275,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4636:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4635:9:72"
                  },
                  "scope": 12600,
                  "src": "4518:127:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "1992d206",
                  "id": 12289,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAmount",
                  "nameLocation": "4658:15:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12285,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12280,
                        "mutability": "mutable",
                        "name": "_provider",
                        "nameLocation": "4687:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12289,
                        "src": "4679:17:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12279,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4679:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12282,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "4710:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12289,
                        "src": "4702:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12281,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4702:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12284,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "4734:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12289,
                        "src": "4726:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12283,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4726:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4673:69:72"
                  },
                  "returnParameters": {
                    "id": 12288,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12287,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12289,
                        "src": "4766:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12286,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4766:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4765:9:72"
                  },
                  "scope": 12600,
                  "src": "4649:126:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "3bbd64bc",
                  "id": 12296,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "keepers",
                  "nameLocation": "4788:7:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12292,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12291,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "4804:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12296,
                        "src": "4796:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12290,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4796:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4795:17:72"
                  },
                  "returnParameters": {
                    "id": 12295,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12294,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12296,
                        "src": "4836:4:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 12293,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4836:4:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4835:6:72"
                  },
                  "scope": 12600,
                  "src": "4779:63:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "f9f92be4",
                  "id": 12303,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "blacklist",
                  "nameLocation": "4855:9:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12299,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12298,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "4873:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12303,
                        "src": "4865:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12297,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4865:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4864:17:72"
                  },
                  "returnParameters": {
                    "id": 12302,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12301,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12303,
                        "src": "4905:4:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 12300,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4905:4:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4904:6:72"
                  },
                  "scope": 12600,
                  "src": "4846:65:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "ec4515dd",
                  "id": 12310,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "keeperList",
                  "nameLocation": "4924:10:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12306,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12305,
                        "mutability": "mutable",
                        "name": "_index",
                        "nameLocation": "4943:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12310,
                        "src": "4935:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12304,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4935:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4934:16:72"
                  },
                  "returnParameters": {
                    "id": 12309,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12308,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12310,
                        "src": "4974:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12307,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4974:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4973:9:72"
                  },
                  "scope": 12600,
                  "src": "4915:68:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "0c33c522",
                  "id": 12317,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobList",
                  "nameLocation": "4996:7:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12313,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12312,
                        "mutability": "mutable",
                        "name": "_index",
                        "nameLocation": "5012:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12317,
                        "src": "5004:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12311,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5004:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5003:16:72"
                  },
                  "returnParameters": {
                    "id": 12316,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12315,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12317,
                        "src": "5043:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12314,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5043:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5042:9:72"
                  },
                  "scope": 12600,
                  "src": "4987:65:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "5aa6e675",
                  "id": 12322,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "governance",
                  "nameLocation": "5065:10:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12318,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5075:2:72"
                  },
                  "returnParameters": {
                    "id": 12321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12320,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12322,
                        "src": "5096:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12319,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5096:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5095:9:72"
                  },
                  "scope": 12600,
                  "src": "5056:49:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "f39c38a0",
                  "id": 12327,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pendingGovernance",
                  "nameLocation": "5118:17:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12323,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5135:2:72"
                  },
                  "returnParameters": {
                    "id": 12326,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12325,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12327,
                        "src": "5156:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12324,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5156:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5155:9:72"
                  },
                  "scope": 12600,
                  "src": "5109:56:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "eb421f3b",
                  "id": 12334,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAccepted",
                  "nameLocation": "5178:17:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12330,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12329,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "5204:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12334,
                        "src": "5196:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12328,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5196:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5195:20:72"
                  },
                  "returnParameters": {
                    "id": 12333,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12332,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12334,
                        "src": "5239:4:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 12331,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5239:4:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5238:6:72"
                  },
                  "scope": 12600,
                  "src": "5169:76:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "1b7a1fb2",
                  "id": 12341,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityPairs",
                  "nameLocation": "5258:14:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12337,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12336,
                        "mutability": "mutable",
                        "name": "_index",
                        "nameLocation": "5281:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12341,
                        "src": "5273:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12335,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5273:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5272:16:72"
                  },
                  "returnParameters": {
                    "id": 12340,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12339,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12341,
                        "src": "5312:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12338,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5312:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5311:9:72"
                  },
                  "scope": 12600,
                  "src": "5249:72:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "b4b5ea57",
                  "id": 12348,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getCurrentVotes",
                  "nameLocation": "5347:15:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12344,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12343,
                        "mutability": "mutable",
                        "name": "_account",
                        "nameLocation": "5371:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12348,
                        "src": "5363:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12342,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5363:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5362:18:72"
                  },
                  "returnParameters": {
                    "id": 12347,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12346,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12348,
                        "src": "5404:7:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12345,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5404:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5403:9:72"
                  },
                  "scope": 12600,
                  "src": "5338:75:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "6dab5dcf",
                  "id": 12353,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addCreditETH",
                  "nameLocation": "5426:12:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12351,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12350,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "5447:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12353,
                        "src": "5439:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12349,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5439:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5438:14:72"
                  },
                  "returnParameters": {
                    "id": 12352,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5469:0:72"
                  },
                  "scope": 12600,
                  "src": "5417:53:72",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "88b4ac83",
                  "id": 12362,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addCredit",
                  "nameLocation": "5483:9:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12360,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12355,
                        "mutability": "mutable",
                        "name": "_credit",
                        "nameLocation": "5506:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12362,
                        "src": "5498:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12354,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5498:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12357,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "5527:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12362,
                        "src": "5519:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12356,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5519:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12359,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "5545:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12362,
                        "src": "5537:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12358,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5537:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5492:64:72"
                  },
                  "returnParameters": {
                    "id": 12361,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5565:0:72"
                  },
                  "scope": 12600,
                  "src": "5474:92:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "de63298d",
                  "id": 12369,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addVotes",
                  "nameLocation": "5579:8:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12367,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12364,
                        "mutability": "mutable",
                        "name": "_voter",
                        "nameLocation": "5596:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12369,
                        "src": "5588:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12363,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5588:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12366,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "5612:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12369,
                        "src": "5604:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12365,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5604:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5587:33:72"
                  },
                  "returnParameters": {
                    "id": 12368,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5629:0:72"
                  },
                  "scope": 12600,
                  "src": "5570:60:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "ce6a0880",
                  "id": 12376,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "removeVotes",
                  "nameLocation": "5643:11:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12374,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12371,
                        "mutability": "mutable",
                        "name": "_voter",
                        "nameLocation": "5663:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12376,
                        "src": "5655:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12370,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5655:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12373,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "5679:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12376,
                        "src": "5671:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12372,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5671:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5654:33:72"
                  },
                  "returnParameters": {
                    "id": 12375,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5696:0:72"
                  },
                  "scope": 12600,
                  "src": "5634:63:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "d8ae6faf",
                  "id": 12383,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addKPRCredit",
                  "nameLocation": "5710:12:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12381,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12378,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "5731:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12383,
                        "src": "5723:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12377,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5723:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12380,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "5745:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12383,
                        "src": "5737:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12379,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5737:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5722:31:72"
                  },
                  "returnParameters": {
                    "id": 12382,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5762:0:72"
                  },
                  "scope": 12600,
                  "src": "5701:62:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "b600702a",
                  "id": 12388,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approveLiquidity",
                  "nameLocation": "5776:16:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12386,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12385,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "5801:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12388,
                        "src": "5793:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12384,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5793:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5792:20:72"
                  },
                  "returnParameters": {
                    "id": 12387,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5821:0:72"
                  },
                  "scope": 12600,
                  "src": "5767:55:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "64bb43ee",
                  "id": 12393,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "revokeLiquidity",
                  "nameLocation": "5835:15:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12391,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12390,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "5859:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12393,
                        "src": "5851:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12389,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5851:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5850:20:72"
                  },
                  "returnParameters": {
                    "id": 12392,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5879:0:72"
                  },
                  "scope": 12600,
                  "src": "5826:54:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "ffb0a4a0",
                  "id": 12399,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pairs",
                  "nameLocation": "5893:5:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12394,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5898:2:72"
                  },
                  "returnParameters": {
                    "id": 12398,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12397,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12399,
                        "src": "5924:16:72",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 12395,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5924:7:72",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 12396,
                          "nodeType": "ArrayTypeName",
                          "src": "5924:9:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5923:18:72"
                  },
                  "scope": 12600,
                  "src": "5884:58:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "52a4de29",
                  "id": 12408,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addLiquidityToJob",
                  "nameLocation": "5955:17:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12406,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12401,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "5986:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12408,
                        "src": "5978:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12400,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5978:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12403,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "6010:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12408,
                        "src": "6002:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12402,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6002:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12405,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "6028:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12408,
                        "src": "6020:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12404,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6020:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5972:67:72"
                  },
                  "returnParameters": {
                    "id": 12407,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6048:0:72"
                  },
                  "scope": 12600,
                  "src": "5946:103:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "4395d8ba",
                  "id": 12417,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "applyCreditToJob",
                  "nameLocation": "6062:16:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12415,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12410,
                        "mutability": "mutable",
                        "name": "_provider",
                        "nameLocation": "6092:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12417,
                        "src": "6084:17:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12409,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6084:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12412,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "6115:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12417,
                        "src": "6107:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12411,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6107:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12414,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "6139:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12417,
                        "src": "6131:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12413,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6131:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6078:69:72"
                  },
                  "returnParameters": {
                    "id": 12416,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6156:0:72"
                  },
                  "scope": 12600,
                  "src": "6053:104:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "1101eb41",
                  "id": 12426,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unbondLiquidityFromJob",
                  "nameLocation": "6170:22:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12424,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12419,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "6206:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12426,
                        "src": "6198:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12418,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6198:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12421,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "6230:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12426,
                        "src": "6222:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12420,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6222:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12423,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "6248:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12426,
                        "src": "6240:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12422,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6240:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6192:67:72"
                  },
                  "returnParameters": {
                    "id": 12425,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6268:0:72"
                  },
                  "scope": 12600,
                  "src": "6161:108:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "603c6860",
                  "id": 12433,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "removeLiquidityFromJob",
                  "nameLocation": "6282:22:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12431,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12428,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "6313:10:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12433,
                        "src": "6305:18:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12427,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6305:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12430,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "6333:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12433,
                        "src": "6325:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12429,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6325:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6304:34:72"
                  },
                  "returnParameters": {
                    "id": 12432,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6347:0:72"
                  },
                  "scope": 12600,
                  "src": "6273:75:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "a0712d68",
                  "id": 12438,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nameLocation": "6361:4:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12436,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12435,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "6374:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12438,
                        "src": "6366:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12434,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6366:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6365:17:72"
                  },
                  "returnParameters": {
                    "id": 12437,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6391:0:72"
                  },
                  "scope": 12600,
                  "src": "6352:40:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "42966c68",
                  "id": 12443,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nameLocation": "6405:4:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12441,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12440,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "6418:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12443,
                        "src": "6410:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12439,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6410:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6409:17:72"
                  },
                  "returnParameters": {
                    "id": 12442,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6435:0:72"
                  },
                  "scope": 12600,
                  "src": "6396:40:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "5feeb794",
                  "id": 12448,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "worked",
                  "nameLocation": "6449:6:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12446,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12445,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "6464:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12448,
                        "src": "6456:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12444,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6456:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6455:17:72"
                  },
                  "returnParameters": {
                    "id": 12447,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6481:0:72"
                  },
                  "scope": 12600,
                  "src": "6440:42:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "8d9acd2e",
                  "id": 12457,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "receipt",
                  "nameLocation": "6495:7:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12455,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12450,
                        "mutability": "mutable",
                        "name": "_credit",
                        "nameLocation": "6516:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12457,
                        "src": "6508:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12449,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6508:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12452,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "6537:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12457,
                        "src": "6529:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12451,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6529:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12454,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "6558:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12457,
                        "src": "6550:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12453,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6550:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6502:67:72"
                  },
                  "returnParameters": {
                    "id": 12456,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6578:0:72"
                  },
                  "scope": 12600,
                  "src": "6486:93:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "2119a62a",
                  "id": 12464,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "receiptETH",
                  "nameLocation": "6592:10:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12462,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12459,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "6611:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12464,
                        "src": "6603:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12458,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6603:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12461,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "6628:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12464,
                        "src": "6620:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12460,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6620:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6602:34:72"
                  },
                  "returnParameters": {
                    "id": 12463,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6645:0:72"
                  },
                  "scope": 12600,
                  "src": "6583:63:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "c5198abc",
                  "id": 12469,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addJob",
                  "nameLocation": "6659:6:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12467,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12466,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "6674:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12469,
                        "src": "6666:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12465,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6666:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6665:14:72"
                  },
                  "returnParameters": {
                    "id": 12468,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6688:0:72"
                  },
                  "scope": 12600,
                  "src": "6650:39:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "68581ebd",
                  "id": 12475,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getJobs",
                  "nameLocation": "6702:7:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12470,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6709:2:72"
                  },
                  "returnParameters": {
                    "id": 12474,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12473,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12475,
                        "src": "6735:16:72",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 12471,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6735:7:72",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 12472,
                          "nodeType": "ArrayTypeName",
                          "src": "6735:9:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6734:18:72"
                  },
                  "scope": 12600,
                  "src": "6693:60:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "80711989",
                  "id": 12480,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "removeJob",
                  "nameLocation": "6766:9:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12478,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12477,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "6784:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12480,
                        "src": "6776:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12476,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6776:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6775:14:72"
                  },
                  "returnParameters": {
                    "id": 12479,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6798:0:72"
                  },
                  "scope": 12600,
                  "src": "6757:42:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "72da828a",
                  "id": 12485,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKeep3rHelper",
                  "nameLocation": "6812:15:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12483,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12482,
                        "mutability": "mutable",
                        "name": "_keep3rHelper",
                        "nameLocation": "6836:13:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12485,
                        "src": "6828:21:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12481,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6828:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6827:23:72"
                  },
                  "returnParameters": {
                    "id": 12484,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6859:0:72"
                  },
                  "scope": 12600,
                  "src": "6803:57:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "ab033ea9",
                  "id": 12490,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setGovernance",
                  "nameLocation": "6873:13:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12488,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12487,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "6895:11:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12490,
                        "src": "6887:19:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12486,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6887:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6886:21:72"
                  },
                  "returnParameters": {
                    "id": 12489,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6916:0:72"
                  },
                  "scope": 12600,
                  "src": "6864:53:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "238efcbc",
                  "id": 12493,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "acceptGovernance",
                  "nameLocation": "6930:16:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12491,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6946:2:72"
                  },
                  "returnParameters": {
                    "id": 12492,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6957:0:72"
                  },
                  "scope": 12600,
                  "src": "6921:37:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "6ba42aaa",
                  "id": 12500,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isKeeper",
                  "nameLocation": "6971:8:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12496,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12495,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "6988:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12500,
                        "src": "6980:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12494,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6980:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6979:17:72"
                  },
                  "returnParameters": {
                    "id": 12499,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12498,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12500,
                        "src": "7015:4:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 12497,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7015:4:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7014:6:72"
                  },
                  "scope": 12600,
                  "src": "6962:59:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "1ff5f3da",
                  "id": 12513,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isMinKeeper",
                  "nameLocation": "7034:11:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12509,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12502,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "7059:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12513,
                        "src": "7051:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12501,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7051:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12504,
                        "mutability": "mutable",
                        "name": "_minBond",
                        "nameLocation": "7080:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12513,
                        "src": "7072:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12503,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7072:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12506,
                        "mutability": "mutable",
                        "name": "_earned",
                        "nameLocation": "7102:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12513,
                        "src": "7094:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12505,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7094:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12508,
                        "mutability": "mutable",
                        "name": "_age",
                        "nameLocation": "7123:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12513,
                        "src": "7115:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12507,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7115:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7045:86:72"
                  },
                  "returnParameters": {
                    "id": 12512,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12511,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12513,
                        "src": "7150:4:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 12510,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7150:4:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7149:6:72"
                  },
                  "scope": 12600,
                  "src": "7025:131:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "f9d46cf2",
                  "id": 12528,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isBondedKeeper",
                  "nameLocation": "7169:14:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12524,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12515,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "7197:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12528,
                        "src": "7189:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12514,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7189:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12517,
                        "mutability": "mutable",
                        "name": "_bond",
                        "nameLocation": "7218:5:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12528,
                        "src": "7210:13:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12516,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7210:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12519,
                        "mutability": "mutable",
                        "name": "_minBond",
                        "nameLocation": "7237:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12528,
                        "src": "7229:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12518,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7229:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12521,
                        "mutability": "mutable",
                        "name": "_earned",
                        "nameLocation": "7259:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12528,
                        "src": "7251:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12520,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7251:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12523,
                        "mutability": "mutable",
                        "name": "_age",
                        "nameLocation": "7280:4:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12528,
                        "src": "7272:12:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12522,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7272:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7183:105:72"
                  },
                  "returnParameters": {
                    "id": 12527,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12526,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12528,
                        "src": "7307:4:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 12525,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7307:4:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7306:6:72"
                  },
                  "scope": 12600,
                  "src": "7160:153:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "a515366a",
                  "id": 12535,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bond",
                  "nameLocation": "7326:4:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12533,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12530,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "7339:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12535,
                        "src": "7331:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12529,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7331:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12532,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "7357:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12535,
                        "src": "7349:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12531,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7349:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7330:35:72"
                  },
                  "returnParameters": {
                    "id": 12534,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7374:0:72"
                  },
                  "scope": 12600,
                  "src": "7317:58:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "b105e39f",
                  "id": 12541,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getKeepers",
                  "nameLocation": "7388:10:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12536,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7398:2:72"
                  },
                  "returnParameters": {
                    "id": 12540,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12539,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12541,
                        "src": "7424:16:72",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 12537,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7424:7:72",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 12538,
                          "nodeType": "ArrayTypeName",
                          "src": "7424:9:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7423:18:72"
                  },
                  "scope": 12600,
                  "src": "7379:63:72",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "1c5a9d9c",
                  "id": 12546,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "activate",
                  "nameLocation": "7455:8:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12544,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12543,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "7472:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12546,
                        "src": "7464:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12542,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7464:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7463:18:72"
                  },
                  "returnParameters": {
                    "id": 12545,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7490:0:72"
                  },
                  "scope": 12600,
                  "src": "7446:45:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "a5d059ca",
                  "id": 12553,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unbond",
                  "nameLocation": "7504:6:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12551,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12548,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "7519:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12553,
                        "src": "7511:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12547,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7511:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12550,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "7537:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12553,
                        "src": "7529:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12549,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7529:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7510:35:72"
                  },
                  "returnParameters": {
                    "id": 12552,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7554:0:72"
                  },
                  "scope": 12600,
                  "src": "7495:60:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "e74f8239",
                  "id": 12562,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "slash",
                  "nameLocation": "7568:5:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12560,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12555,
                        "mutability": "mutable",
                        "name": "_bonded",
                        "nameLocation": "7587:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12562,
                        "src": "7579:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12554,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7579:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12557,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "7608:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12562,
                        "src": "7600:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12556,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7600:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12559,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "7629:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12562,
                        "src": "7621:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12558,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7621:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7573:67:72"
                  },
                  "returnParameters": {
                    "id": 12561,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7649:0:72"
                  },
                  "scope": 12600,
                  "src": "7559:91:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "51cff8d9",
                  "id": 12567,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nameLocation": "7663:8:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12565,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12564,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "7680:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12567,
                        "src": "7672:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12563,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7672:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7671:18:72"
                  },
                  "returnParameters": {
                    "id": 12566,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7698:0:72"
                  },
                  "scope": 12600,
                  "src": "7654:45:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "f75f9f7b",
                  "id": 12572,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "dispute",
                  "nameLocation": "7712:7:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12570,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12569,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "7728:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12572,
                        "src": "7720:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12568,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7720:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7719:17:72"
                  },
                  "returnParameters": {
                    "id": 12571,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7745:0:72"
                  },
                  "scope": 12600,
                  "src": "7703:43:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "74a8f103",
                  "id": 12577,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "revoke",
                  "nameLocation": "7759:6:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12575,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12574,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "7774:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12577,
                        "src": "7766:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12573,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7766:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7765:17:72"
                  },
                  "returnParameters": {
                    "id": 12576,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7791:0:72"
                  },
                  "scope": 12600,
                  "src": "7750:42:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "55ea6c47",
                  "id": 12582,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "resolve",
                  "nameLocation": "7805:7:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12580,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12579,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "7821:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12582,
                        "src": "7813:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12578,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7813:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7812:17:72"
                  },
                  "returnParameters": {
                    "id": 12581,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7838:0:72"
                  },
                  "scope": 12600,
                  "src": "7796:43:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "d505accf",
                  "id": 12599,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "permit",
                  "nameLocation": "7852:6:72",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12597,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12584,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nameLocation": "7872:6:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12599,
                        "src": "7864:14:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12583,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7864:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12586,
                        "mutability": "mutable",
                        "name": "_spender",
                        "nameLocation": "7892:8:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12599,
                        "src": "7884:16:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12585,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7884:7:72",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12588,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "7914:7:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12599,
                        "src": "7906:15:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12587,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7906:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12590,
                        "mutability": "mutable",
                        "name": "_deadline",
                        "nameLocation": "7935:9:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12599,
                        "src": "7927:17:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12589,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7927:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12592,
                        "mutability": "mutable",
                        "name": "_v",
                        "nameLocation": "7956:2:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12599,
                        "src": "7950:8:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 12591,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "7950:5:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12594,
                        "mutability": "mutable",
                        "name": "_r",
                        "nameLocation": "7972:2:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12599,
                        "src": "7964:10:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 12593,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "7964:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12596,
                        "mutability": "mutable",
                        "name": "_s",
                        "nameLocation": "7988:2:72",
                        "nodeType": "VariableDeclaration",
                        "scope": 12599,
                        "src": "7980:10:72",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 12595,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "7980:7:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7858:136:72"
                  },
                  "returnParameters": {
                    "id": 12598,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8003:0:72"
                  },
                  "scope": 12600,
                  "src": "7843:161:72",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 12601,
              "src": "238:7768:72",
              "usedErrors": []
            }
          ],
          "src": "32:7975:72"
        },
        "id": 72
      },
      "solidity/interfaces/external/IKeep3rV1Proxy.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/external/IKeep3rV1Proxy.sol",
          "exportedSymbols": {
            "IGovernable": [
              12863
            ],
            "IKeep3rV1Proxy": [
              12773
            ]
          },
          "id": 12774,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 12602,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:73"
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IGovernable.sol",
              "file": "../peripherals/IGovernable.sol",
              "id": 12603,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 12774,
              "sourceUnit": 12864,
              "src": "65:40:73",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 12604,
                    "name": "IGovernable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 12863,
                    "src": "135:11:73"
                  },
                  "id": 12605,
                  "nodeType": "InheritanceSpecifier",
                  "src": "135:11:73"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 12773,
              "linearizedBaseContracts": [
                12773,
                12863
              ],
              "name": "IKeep3rV1Proxy",
              "nameLocation": "117:14:73",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "IKeep3rV1Proxy.Recipient",
                  "id": 12610,
                  "members": [
                    {
                      "constant": false,
                      "id": 12607,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nameLocation": "195:9:73",
                      "nodeType": "VariableDeclaration",
                      "scope": 12610,
                      "src": "187:17:73",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 12606,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "187:7:73",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 12609,
                      "mutability": "mutable",
                      "name": "caps",
                      "nameLocation": "218:4:73",
                      "nodeType": "VariableDeclaration",
                      "scope": 12610,
                      "src": "210:12:73",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 12608,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "210:7:73",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Recipient",
                  "nameLocation": "171:9:73",
                  "nodeType": "StructDefinition",
                  "scope": 12773,
                  "src": "164:63:73",
                  "visibility": "public"
                },
                {
                  "functionSelector": "1ef94b91",
                  "id": 12615,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "keep3rV1",
                  "nameLocation": "255:8:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12611,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "263:2:73"
                  },
                  "returnParameters": {
                    "id": 12614,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12613,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12615,
                        "src": "289:7:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12612,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "289:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "288:9:73"
                  },
                  "scope": 12773,
                  "src": "246:52:73",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "07546172",
                  "id": 12620,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "minter",
                  "nameLocation": "311:6:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12616,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "317:2:73"
                  },
                  "returnParameters": {
                    "id": 12619,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12618,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12620,
                        "src": "343:7:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12617,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "343:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "342:9:73"
                  },
                  "scope": 12773,
                  "src": "302:50:73",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "ab73e316",
                  "id": 12627,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "next",
                  "nameLocation": "365:4:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12623,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12622,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12627,
                        "src": "370:7:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12621,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "370:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "369:9:73"
                  },
                  "returnParameters": {
                    "id": 12626,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12625,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12627,
                        "src": "402:7:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12624,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "402:7:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "401:9:73"
                  },
                  "scope": 12773,
                  "src": "356:55:73",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "66d97b21",
                  "id": 12634,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "caps",
                  "nameLocation": "424:4:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12630,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12629,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12634,
                        "src": "429:7:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12628,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "429:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "428:9:73"
                  },
                  "returnParameters": {
                    "id": 12633,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12632,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12634,
                        "src": "461:7:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12631,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "461:7:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "460:9:73"
                  },
                  "scope": 12773,
                  "src": "415:55:73",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "0e57d4ce",
                  "id": 12640,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recipients",
                  "nameLocation": "483:10:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12635,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "493:2:73"
                  },
                  "returnParameters": {
                    "id": 12639,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12638,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12640,
                        "src": "519:16:73",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 12636,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "519:7:73",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 12637,
                          "nodeType": "ArrayTypeName",
                          "src": "519:9:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "518:18:73"
                  },
                  "scope": 12773,
                  "src": "474:63:73",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "ba9b4d65",
                  "id": 12647,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recipientsCaps",
                  "nameLocation": "550:14:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12641,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "564:2:73"
                  },
                  "returnParameters": {
                    "id": 12646,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12645,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12647,
                        "src": "590:18:73",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Recipient_$12610_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct IKeep3rV1Proxy.Recipient[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 12643,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 12642,
                              "name": "Recipient",
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 12610,
                              "src": "590:9:73"
                            },
                            "referencedDeclaration": 12610,
                            "src": "590:9:73",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Recipient_$12610_storage_ptr",
                              "typeString": "struct IKeep3rV1Proxy.Recipient"
                            }
                          },
                          "id": 12644,
                          "nodeType": "ArrayTypeName",
                          "src": "590:11:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Recipient_$12610_storage_$dyn_storage_ptr",
                            "typeString": "struct IKeep3rV1Proxy.Recipient[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "589:20:73"
                  },
                  "scope": 12773,
                  "src": "541:69:73",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "id": 12649,
                  "name": "Cooldown",
                  "nameLocation": "632:8:73",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 12648,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "640:2:73"
                  },
                  "src": "626:17:73"
                },
                {
                  "id": 12651,
                  "name": "NoDrawableAmount",
                  "nameLocation": "652:16:73",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 12650,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "668:2:73"
                  },
                  "src": "646:25:73"
                },
                {
                  "id": 12653,
                  "name": "ZeroAddress",
                  "nameLocation": "680:11:73",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 12652,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "691:2:73"
                  },
                  "src": "674:20:73"
                },
                {
                  "id": 12655,
                  "name": "OnlyMinter",
                  "nameLocation": "703:10:73",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 12654,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "713:2:73"
                  },
                  "src": "697:19:73"
                },
                {
                  "functionSelector": "f7982243",
                  "id": 12662,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addRecipient",
                  "nameLocation": "742:12:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12660,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12657,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "763:9:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12662,
                        "src": "755:17:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12656,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "755:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12659,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "782:6:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12662,
                        "src": "774:14:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12658,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "774:7:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "754:35:73"
                  },
                  "returnParameters": {
                    "id": 12661,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "798:0:73"
                  },
                  "scope": 12773,
                  "src": "733:66:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "12a29198",
                  "id": 12667,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "removeRecipient",
                  "nameLocation": "812:15:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12665,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12664,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "836:9:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12667,
                        "src": "828:17:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12663,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "828:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "827:19:73"
                  },
                  "returnParameters": {
                    "id": 12666,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "855:0:73"
                  },
                  "scope": 12773,
                  "src": "803:53:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "0eecae21",
                  "id": 12672,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "draw",
                  "nameLocation": "869:4:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12668,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "873:2:73"
                  },
                  "returnParameters": {
                    "id": 12671,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12670,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "902:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12672,
                        "src": "894:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12669,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "894:7:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "893:17:73"
                  },
                  "scope": 12773,
                  "src": "860:51:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "ec00cdfc",
                  "id": 12677,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKeep3rV1",
                  "nameLocation": "924:11:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12675,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12674,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "944:9:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12677,
                        "src": "936:17:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12673,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "936:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "935:19:73"
                  },
                  "returnParameters": {
                    "id": 12676,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "963:0:73"
                  },
                  "scope": 12773,
                  "src": "915:49:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "fca3b5aa",
                  "id": 12682,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setMinter",
                  "nameLocation": "977:9:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12680,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12679,
                        "mutability": "mutable",
                        "name": "_minter",
                        "nameLocation": "995:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12682,
                        "src": "987:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12678,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "987:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "986:17:73"
                  },
                  "returnParameters": {
                    "id": 12681,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1012:0:73"
                  },
                  "scope": 12773,
                  "src": "968:45:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "a0712d68",
                  "id": 12687,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nameLocation": "1026:4:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12685,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12684,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1039:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12687,
                        "src": "1031:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12683,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1031:7:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1030:17:73"
                  },
                  "returnParameters": {
                    "id": 12686,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1056:0:73"
                  },
                  "scope": 12773,
                  "src": "1017:40:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "40c10f19",
                  "id": 12694,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nameLocation": "1070:4:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12692,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12689,
                        "mutability": "mutable",
                        "name": "_account",
                        "nameLocation": "1083:8:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12694,
                        "src": "1075:16:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12688,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1075:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12691,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1101:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12694,
                        "src": "1093:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12690,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1093:7:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1074:35:73"
                  },
                  "returnParameters": {
                    "id": 12693,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1118:0:73"
                  },
                  "scope": 12773,
                  "src": "1061:58:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "0770f809",
                  "id": 12699,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKeep3rV1Governance",
                  "nameLocation": "1132:21:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12697,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12696,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "1162:11:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12699,
                        "src": "1154:19:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12695,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1154:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1153:21:73"
                  },
                  "returnParameters": {
                    "id": 12698,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1183:0:73"
                  },
                  "scope": 12773,
                  "src": "1123:61:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "3619cb72",
                  "id": 12702,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "acceptKeep3rV1Governance",
                  "nameLocation": "1197:24:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12700,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1221:2:73"
                  },
                  "returnParameters": {
                    "id": 12701,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1232:0:73"
                  },
                  "scope": 12773,
                  "src": "1188:45:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "f75f9f7b",
                  "id": 12707,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "dispute",
                  "nameLocation": "1246:7:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12705,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12704,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1262:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12707,
                        "src": "1254:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12703,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1254:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1253:17:73"
                  },
                  "returnParameters": {
                    "id": 12706,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1279:0:73"
                  },
                  "scope": 12773,
                  "src": "1237:43:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "e74f8239",
                  "id": 12716,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "slash",
                  "nameLocation": "1293:5:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12714,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12709,
                        "mutability": "mutable",
                        "name": "_bonded",
                        "nameLocation": "1312:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12716,
                        "src": "1304:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12708,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1304:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12711,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1333:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12716,
                        "src": "1325:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12710,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1325:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12713,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1354:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12716,
                        "src": "1346:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12712,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1346:7:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1298:67:73"
                  },
                  "returnParameters": {
                    "id": 12715,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1374:0:73"
                  },
                  "scope": 12773,
                  "src": "1284:91:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "74a8f103",
                  "id": 12721,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "revoke",
                  "nameLocation": "1388:6:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12719,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12718,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1403:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12721,
                        "src": "1395:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12717,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1395:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1394:17:73"
                  },
                  "returnParameters": {
                    "id": 12720,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1420:0:73"
                  },
                  "scope": 12773,
                  "src": "1379:42:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "55ea6c47",
                  "id": 12726,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "resolve",
                  "nameLocation": "1434:7:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12724,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12723,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1450:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12726,
                        "src": "1442:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12722,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1442:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1441:17:73"
                  },
                  "returnParameters": {
                    "id": 12725,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1467:0:73"
                  },
                  "scope": 12773,
                  "src": "1425:43:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "c5198abc",
                  "id": 12731,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addJob",
                  "nameLocation": "1481:6:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12729,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12728,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1496:4:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12731,
                        "src": "1488:12:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12727,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1488:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1487:14:73"
                  },
                  "returnParameters": {
                    "id": 12730,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1510:0:73"
                  },
                  "scope": 12773,
                  "src": "1472:39:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "80711989",
                  "id": 12736,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "removeJob",
                  "nameLocation": "1524:9:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12734,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12733,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1542:4:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12736,
                        "src": "1534:12:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12732,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1534:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1533:14:73"
                  },
                  "returnParameters": {
                    "id": 12735,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1556:0:73"
                  },
                  "scope": 12773,
                  "src": "1515:42:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "d8ae6faf",
                  "id": 12743,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addKPRCredit",
                  "nameLocation": "1570:12:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12741,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12738,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1591:4:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12743,
                        "src": "1583:12:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12737,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1583:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12740,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1605:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12743,
                        "src": "1597:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12739,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1597:7:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1582:31:73"
                  },
                  "returnParameters": {
                    "id": 12742,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1622:0:73"
                  },
                  "scope": 12773,
                  "src": "1561:62:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "b600702a",
                  "id": 12748,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approveLiquidity",
                  "nameLocation": "1636:16:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12746,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12745,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "1661:10:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12748,
                        "src": "1653:18:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12744,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1653:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1652:20:73"
                  },
                  "returnParameters": {
                    "id": 12747,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1681:0:73"
                  },
                  "scope": 12773,
                  "src": "1627:55:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "64bb43ee",
                  "id": 12753,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "revokeLiquidity",
                  "nameLocation": "1695:15:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12751,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12750,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "1719:10:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12753,
                        "src": "1711:18:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12749,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1711:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1710:20:73"
                  },
                  "returnParameters": {
                    "id": 12752,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1739:0:73"
                  },
                  "scope": 12773,
                  "src": "1686:54:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "72da828a",
                  "id": 12758,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKeep3rHelper",
                  "nameLocation": "1753:15:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12756,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12755,
                        "mutability": "mutable",
                        "name": "_keep3rHelper",
                        "nameLocation": "1777:13:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12758,
                        "src": "1769:21:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12754,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1769:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1768:23:73"
                  },
                  "returnParameters": {
                    "id": 12757,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1800:0:73"
                  },
                  "scope": 12773,
                  "src": "1744:57:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "de63298d",
                  "id": 12765,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addVotes",
                  "nameLocation": "1814:8:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12763,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12760,
                        "mutability": "mutable",
                        "name": "_voter",
                        "nameLocation": "1831:6:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12765,
                        "src": "1823:14:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12759,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1823:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12762,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1847:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12765,
                        "src": "1839:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12761,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1839:7:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1822:33:73"
                  },
                  "returnParameters": {
                    "id": 12764,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1864:0:73"
                  },
                  "scope": 12773,
                  "src": "1805:60:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "ce6a0880",
                  "id": 12772,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "removeVotes",
                  "nameLocation": "1878:11:73",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12770,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12767,
                        "mutability": "mutable",
                        "name": "_voter",
                        "nameLocation": "1898:6:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12772,
                        "src": "1890:14:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12766,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1890:7:73",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12769,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1914:7:73",
                        "nodeType": "VariableDeclaration",
                        "scope": 12772,
                        "src": "1906:15:73",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12768,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1906:7:73",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1889:33:73"
                  },
                  "returnParameters": {
                    "id": 12771,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1931:0:73"
                  },
                  "scope": 12773,
                  "src": "1869:63:73",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 12774,
              "src": "107:1827:73",
              "usedErrors": [
                12649,
                12651,
                12653,
                12655,
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "32:1903:73"
        },
        "id": 73
      },
      "solidity/interfaces/external/IWeth9.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/external/IWeth9.sol",
          "exportedSymbols": {
            "IERC20": [
              663
            ],
            "IWeth9": [
              12787
            ]
          },
          "id": 12788,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 12775,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:74"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
              "id": 12776,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 12788,
              "sourceUnit": 664,
              "src": "65:56:74",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 12777,
                    "name": "IERC20",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 663,
                    "src": "143:6:74"
                  },
                  "id": 12778,
                  "nodeType": "InheritanceSpecifier",
                  "src": "143:6:74"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 12787,
              "linearizedBaseContracts": [
                12787,
                663
              ],
              "name": "IWeth9",
              "nameLocation": "133:6:74",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "functionSelector": "d0e30db0",
                  "id": 12781,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deposit",
                  "nameLocation": "163:7:74",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12779,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "170:2:74"
                  },
                  "returnParameters": {
                    "id": 12780,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "189:0:74"
                  },
                  "scope": 12787,
                  "src": "154:36:74",
                  "stateMutability": "payable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "functionSelector": "2e1a7d4d",
                  "id": 12786,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nameLocation": "203:8:74",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12784,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12783,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 12786,
                        "src": "212:7:74",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12782,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "212:7:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "211:9:74"
                  },
                  "returnParameters": {
                    "id": 12785,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "229:0:74"
                  },
                  "scope": 12787,
                  "src": "194:36:74",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 12788,
              "src": "123:109:74",
              "usedErrors": []
            }
          ],
          "src": "32:201:74"
        },
        "id": 74
      },
      "solidity/interfaces/peripherals/IBaseErrors.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/peripherals/IBaseErrors.sol",
          "exportedSymbols": {
            "IBaseErrors": [
              12793
            ]
          },
          "id": 12794,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 12789,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:31:75"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": true,
              "id": 12793,
              "linearizedBaseContracts": [
                12793
              ],
              "name": "IBaseErrors",
              "nameLocation": "76:11:75",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 12790,
                    "nodeType": "StructuredDocumentation",
                    "src": "92:64:75",
                    "text": "@notice Throws if a variable is assigned to the zero address"
                  },
                  "id": 12792,
                  "name": "ZeroAddress",
                  "nameLocation": "165:11:75",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 12791,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "176:2:75"
                  },
                  "src": "159:20:75"
                }
              ],
              "scope": 12794,
              "src": "66:115:75",
              "usedErrors": [
                12792
              ]
            }
          ],
          "src": "33:149:75"
        },
        "id": 75
      },
      "solidity/interfaces/peripherals/IDustCollector.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/peripherals/IDustCollector.sol",
          "exportedSymbols": {
            "IBaseErrors": [
              12793
            ],
            "IDustCollector": [
              12818
            ]
          },
          "id": 12819,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 12795,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:31:76"
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IBaseErrors.sol",
              "file": "./IBaseErrors.sol",
              "id": 12796,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 12819,
              "sourceUnit": 12794,
              "src": "66:27:76",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 12797,
                    "name": "IBaseErrors",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 12793,
                    "src": "123:11:76"
                  },
                  "id": 12798,
                  "nodeType": "InheritanceSpecifier",
                  "src": "123:11:76"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 12818,
              "linearizedBaseContracts": [
                12818,
                12793
              ],
              "name": "IDustCollector",
              "nameLocation": "105:14:76",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 12799,
                    "nodeType": "StructuredDocumentation",
                    "src": "139:220:76",
                    "text": "@notice Emitted when dust is sent\n @param _token The token that will be transferred\n @param _amount The amount of the token that will be transferred\n @param _to The address which will receive the funds"
                  },
                  "id": 12807,
                  "name": "DustSent",
                  "nameLocation": "368:8:76",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12806,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12801,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "385:6:76",
                        "nodeType": "VariableDeclaration",
                        "scope": 12807,
                        "src": "377:14:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12800,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "377:7:76",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12803,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "401:7:76",
                        "nodeType": "VariableDeclaration",
                        "scope": 12807,
                        "src": "393:15:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12802,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "393:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12805,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_to",
                        "nameLocation": "418:3:76",
                        "nodeType": "VariableDeclaration",
                        "scope": 12807,
                        "src": "410:11:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12804,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "410:7:76",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "376:46:76"
                  },
                  "src": "362:61:76"
                },
                {
                  "documentation": {
                    "id": 12808,
                    "nodeType": "StructuredDocumentation",
                    "src": "427:292:76",
                    "text": "@notice Allows an authorized user to transfer the tokens or eth that may have been left in a contract\n @param _token The token that will be transferred\n @param _amount The amount of the token that will be transferred\n @param _to The address that will receive the idle funds"
                  },
                  "functionSelector": "966abd00",
                  "id": 12817,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sendDust",
                  "nameLocation": "731:8:76",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12815,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12810,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "753:6:76",
                        "nodeType": "VariableDeclaration",
                        "scope": 12817,
                        "src": "745:14:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12809,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "745:7:76",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12812,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "773:7:76",
                        "nodeType": "VariableDeclaration",
                        "scope": 12817,
                        "src": "765:15:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12811,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "765:7:76",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12814,
                        "mutability": "mutable",
                        "name": "_to",
                        "nameLocation": "794:3:76",
                        "nodeType": "VariableDeclaration",
                        "scope": 12817,
                        "src": "786:11:76",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12813,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "786:7:76",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "739:62:76"
                  },
                  "returnParameters": {
                    "id": 12816,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "810:0:76"
                  },
                  "scope": 12818,
                  "src": "722:89:76",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 12819,
              "src": "95:718:76",
              "usedErrors": [
                12792
              ]
            }
          ],
          "src": "33:781:76"
        },
        "id": 76
      },
      "solidity/interfaces/peripherals/IGovernable.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/peripherals/IGovernable.sol",
          "exportedSymbols": {
            "IGovernable": [
              12863
            ]
          },
          "id": 12864,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 12820,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:77"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 12821,
                "nodeType": "StructuredDocumentation",
                "src": "65:71:77",
                "text": "@title Governable contract\n @notice Manages the governance role"
              },
              "fullyImplemented": false,
              "id": 12863,
              "linearizedBaseContracts": [
                12863
              ],
              "name": "IGovernable",
              "nameLocation": "146:11:77",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 12822,
                    "nodeType": "StructuredDocumentation",
                    "src": "175:122:77",
                    "text": "@notice Emitted when pendingGovernance accepts to be governance\n @param _governance Address of the new governance"
                  },
                  "id": 12826,
                  "name": "GovernanceSet",
                  "nameLocation": "306:13:77",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12825,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12824,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "328:11:77",
                        "nodeType": "VariableDeclaration",
                        "scope": 12826,
                        "src": "320:19:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12823,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "320:7:77",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "319:21:77"
                  },
                  "src": "300:41:77"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 12827,
                    "nodeType": "StructuredDocumentation",
                    "src": "345:135:77",
                    "text": "@notice Emitted when a new governance is proposed\n @param _pendingGovernance Address that is proposed to be the new governance"
                  },
                  "id": 12831,
                  "name": "GovernanceProposal",
                  "nameLocation": "489:18:77",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12830,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12829,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_pendingGovernance",
                        "nameLocation": "516:18:77",
                        "nodeType": "VariableDeclaration",
                        "scope": 12831,
                        "src": "508:26:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12828,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "508:7:77",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "507:28:77"
                  },
                  "src": "483:53:77"
                },
                {
                  "documentation": {
                    "id": 12832,
                    "nodeType": "StructuredDocumentation",
                    "src": "553:66:77",
                    "text": "@notice Throws if the caller of the function is not governance"
                  },
                  "id": 12834,
                  "name": "OnlyGovernance",
                  "nameLocation": "628:14:77",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 12833,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "642:2:77"
                  },
                  "src": "622:23:77"
                },
                {
                  "documentation": {
                    "id": 12835,
                    "nodeType": "StructuredDocumentation",
                    "src": "649:73:77",
                    "text": "@notice Throws if the caller of the function is not pendingGovernance"
                  },
                  "id": 12837,
                  "name": "OnlyPendingGovernance",
                  "nameLocation": "731:21:77",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 12836,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "752:2:77"
                  },
                  "src": "725:30:77"
                },
                {
                  "documentation": {
                    "id": 12838,
                    "nodeType": "StructuredDocumentation",
                    "src": "759:62:77",
                    "text": "@notice Throws if trying to set governance to zero address"
                  },
                  "id": 12840,
                  "name": "NoGovernanceZeroAddress",
                  "nameLocation": "830:23:77",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 12839,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "853:2:77"
                  },
                  "src": "824:32:77"
                },
                {
                  "documentation": {
                    "id": 12841,
                    "nodeType": "StructuredDocumentation",
                    "src": "876:91:77",
                    "text": "@notice Stores the governance address\n @return _governance The governance addresss"
                  },
                  "functionSelector": "5aa6e675",
                  "id": 12846,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "governance",
                  "nameLocation": "979:10:77",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12842,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "989:2:77"
                  },
                  "returnParameters": {
                    "id": 12845,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12844,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "1023:11:77",
                        "nodeType": "VariableDeclaration",
                        "scope": 12846,
                        "src": "1015:19:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12843,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1015:7:77",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1014:21:77"
                  },
                  "scope": 12863,
                  "src": "970:66:77",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12847,
                    "nodeType": "StructuredDocumentation",
                    "src": "1040:112:77",
                    "text": "@notice Stores the pendingGovernance address\n @return _pendingGovernance The pendingGovernance addresss"
                  },
                  "functionSelector": "f39c38a0",
                  "id": 12852,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pendingGovernance",
                  "nameLocation": "1164:17:77",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12848,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1181:2:77"
                  },
                  "returnParameters": {
                    "id": 12851,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12850,
                        "mutability": "mutable",
                        "name": "_pendingGovernance",
                        "nameLocation": "1215:18:77",
                        "nodeType": "VariableDeclaration",
                        "scope": 12852,
                        "src": "1207:26:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12849,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1207:7:77",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1206:28:77"
                  },
                  "scope": 12863,
                  "src": "1155:80:77",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12853,
                    "nodeType": "StructuredDocumentation",
                    "src": "1253:125:77",
                    "text": "@notice Proposes a new address to be governance\n @param _governance The address being proposed as the new governance"
                  },
                  "functionSelector": "ab033ea9",
                  "id": 12858,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setGovernance",
                  "nameLocation": "1390:13:77",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12856,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12855,
                        "mutability": "mutable",
                        "name": "_governance",
                        "nameLocation": "1412:11:77",
                        "nodeType": "VariableDeclaration",
                        "scope": 12858,
                        "src": "1404:19:77",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12854,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1404:7:77",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1403:21:77"
                  },
                  "returnParameters": {
                    "id": 12857,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1433:0:77"
                  },
                  "scope": 12863,
                  "src": "1381:53:77",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12859,
                    "nodeType": "StructuredDocumentation",
                    "src": "1438:97:77",
                    "text": "@notice Changes the governance from the current governance to the previously proposed address"
                  },
                  "functionSelector": "238efcbc",
                  "id": 12862,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "acceptGovernance",
                  "nameLocation": "1547:16:77",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12860,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1563:2:77"
                  },
                  "returnParameters": {
                    "id": 12861,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1574:0:77"
                  },
                  "scope": 12863,
                  "src": "1538:37:77",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 12864,
              "src": "136:1441:77",
              "usedErrors": [
                12834,
                12837,
                12840
              ]
            }
          ],
          "src": "32:1546:77"
        },
        "id": 77
      },
      "solidity/interfaces/peripherals/IKeep3rAccountance.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/peripherals/IKeep3rAccountance.sol",
          "exportedSymbols": {
            "IKeep3rAccountance": [
              12997
            ]
          },
          "id": 12998,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 12865,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:78"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 12866,
                "nodeType": "StructuredDocumentation",
                "src": "65:203:78",
                "text": "@title Keep3rDisputable contract\n @notice Disputes keepers, or if they're already disputed, it can resolve the case\n @dev Argument `bonding` can be the address of either a token or a liquidity"
              },
              "fullyImplemented": false,
              "id": 12997,
              "linearizedBaseContracts": [
                12997
              ],
              "name": "IKeep3rAccountance",
              "nameLocation": "278:18:78",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 12867,
                    "nodeType": "StructuredDocumentation",
                    "src": "314:245:78",
                    "text": "@notice Emitted when the bonding process of a new keeper begins\n @param _keeper The caller of Keep3rKeeperFundable#bond function\n @param _bonding The asset the keeper has bonded\n @param _amount The amount the keeper has bonded"
                  },
                  "id": 12875,
                  "name": "Bonding",
                  "nameLocation": "568:7:78",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12874,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12869,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "592:7:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12875,
                        "src": "576:23:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12868,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "576:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12871,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "617:8:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12875,
                        "src": "601:24:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12870,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "601:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12873,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "635:7:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12875,
                        "src": "627:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12872,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "627:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "575:68:78"
                  },
                  "src": "562:82:78"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 12876,
                    "nodeType": "StructuredDocumentation",
                    "src": "648:282:78",
                    "text": "@notice Emitted when a keeper or job begins the unbonding process to withdraw the funds\n @param _keeperOrJob The keeper or job that began the unbonding process\n @param _unbonding The liquidity pair or asset being unbonded\n @param _amount The amount being unbonded"
                  },
                  "id": 12884,
                  "name": "Unbonding",
                  "nameLocation": "939:9:78",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12883,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12878,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeperOrJob",
                        "nameLocation": "965:12:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12884,
                        "src": "949:28:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12877,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "949:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12880,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_unbonding",
                        "nameLocation": "995:10:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12884,
                        "src": "979:26:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12879,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "979:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12882,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1015:7:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12884,
                        "src": "1007:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12881,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1007:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "948:75:78"
                  },
                  "src": "933:91:78"
                },
                {
                  "documentation": {
                    "id": 12885,
                    "nodeType": "StructuredDocumentation",
                    "src": "1044:212:78",
                    "text": "@notice Tracks the total KP3R earnings of a keeper since it started working\n @param _keeper The address of the keeper\n @return _workCompleted Total KP3R earnings of a keeper since it started working"
                  },
                  "functionSelector": "1b44555e",
                  "id": 12892,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "workCompleted",
                  "nameLocation": "1268:13:78",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12888,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12887,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1290:7:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12892,
                        "src": "1282:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12886,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1282:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1281:17:78"
                  },
                  "returnParameters": {
                    "id": 12891,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12890,
                        "mutability": "mutable",
                        "name": "_workCompleted",
                        "nameLocation": "1330:14:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12892,
                        "src": "1322:22:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12889,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1322:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1321:24:78"
                  },
                  "scope": 12997,
                  "src": "1259:87:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12893,
                    "nodeType": "StructuredDocumentation",
                    "src": "1350:174:78",
                    "text": "@notice Tracks when a keeper was first registered\n @param _keeper The address of the keeper\n @return timestamp The time at which the keeper was first registered"
                  },
                  "functionSelector": "e326ac43",
                  "id": 12900,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "firstSeen",
                  "nameLocation": "1536:9:78",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12896,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12895,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "1554:7:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12900,
                        "src": "1546:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12894,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1546:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1545:17:78"
                  },
                  "returnParameters": {
                    "id": 12899,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12898,
                        "mutability": "mutable",
                        "name": "timestamp",
                        "nameLocation": "1594:9:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12900,
                        "src": "1586:17:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12897,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1586:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1585:19:78"
                  },
                  "scope": 12997,
                  "src": "1527:78:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12901,
                    "nodeType": "StructuredDocumentation",
                    "src": "1609:188:78",
                    "text": "@notice Tracks if a keeper or job has a pending dispute\n @param _keeperOrJob The address of the keeper or job\n @return _disputed Whether a keeper or job has a pending dispute"
                  },
                  "functionSelector": "b0103b1a",
                  "id": 12908,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "disputes",
                  "nameLocation": "1809:8:78",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12904,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12903,
                        "mutability": "mutable",
                        "name": "_keeperOrJob",
                        "nameLocation": "1826:12:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12908,
                        "src": "1818:20:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12902,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1818:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1817:22:78"
                  },
                  "returnParameters": {
                    "id": 12907,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12906,
                        "mutability": "mutable",
                        "name": "_disputed",
                        "nameLocation": "1868:9:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12908,
                        "src": "1863:14:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 12905,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1863:4:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1862:16:78"
                  },
                  "scope": 12997,
                  "src": "1800:79:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12909,
                    "nodeType": "StructuredDocumentation",
                    "src": "1883:242:78",
                    "text": "@notice Tracks how much a keeper has bonded of a certain token\n @param _keeper The address of the keeper\n @param _bond The address of the token being bonded\n @return _bonds Amount of a certain token that a keeper has bonded"
                  },
                  "functionSelector": "a39744b5",
                  "id": 12918,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bonds",
                  "nameLocation": "2137:5:78",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12914,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12911,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "2151:7:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12918,
                        "src": "2143:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12910,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2143:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12913,
                        "mutability": "mutable",
                        "name": "_bond",
                        "nameLocation": "2168:5:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12918,
                        "src": "2160:13:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12912,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2160:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2142:32:78"
                  },
                  "returnParameters": {
                    "id": 12917,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12916,
                        "mutability": "mutable",
                        "name": "_bonds",
                        "nameLocation": "2206:6:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12918,
                        "src": "2198:14:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12915,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2198:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2197:16:78"
                  },
                  "scope": 12997,
                  "src": "2128:86:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12919,
                    "nodeType": "StructuredDocumentation",
                    "src": "2218:220:78",
                    "text": "@notice The current token credits available for a job\n @param _job The address of the job\n @param _token The address of the token bonded\n @return _amount The amount of token credits available for a job"
                  },
                  "functionSelector": "168f92e7",
                  "id": 12928,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobTokenCredits",
                  "nameLocation": "2450:15:78",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12924,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12921,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "2474:4:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12928,
                        "src": "2466:12:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12920,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2466:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12923,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "2488:6:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12928,
                        "src": "2480:14:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12922,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2480:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2465:30:78"
                  },
                  "returnParameters": {
                    "id": 12927,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12926,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "2527:7:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12928,
                        "src": "2519:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12925,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2519:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2518:17:78"
                  },
                  "scope": 12997,
                  "src": "2441:95:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12929,
                    "nodeType": "StructuredDocumentation",
                    "src": "2540:250:78",
                    "text": "@notice Tracks the amount of assets deposited in pending bonds\n @param _keeper The address of the keeper\n @param _bonding The address of the token being bonded\n @return _pendingBonds Amount of a certain asset a keeper has unbonding"
                  },
                  "functionSelector": "15006b82",
                  "id": 12938,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pendingBonds",
                  "nameLocation": "2802:12:78",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12934,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12931,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "2823:7:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12938,
                        "src": "2815:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12930,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2815:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12933,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "2840:8:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12938,
                        "src": "2832:16:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12932,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2832:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2814:35:78"
                  },
                  "returnParameters": {
                    "id": 12937,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12936,
                        "mutability": "mutable",
                        "name": "_pendingBonds",
                        "nameLocation": "2881:13:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12938,
                        "src": "2873:21:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12935,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2873:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2872:23:78"
                  },
                  "scope": 12997,
                  "src": "2793:103:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12939,
                    "nodeType": "StructuredDocumentation",
                    "src": "2900:251:78",
                    "text": "@notice Tracks when a bonding for a keeper can be activated\n @param _keeper The address of the keeper\n @param _bonding The address of the token being bonded\n @return _timestamp Time at which the bonding for a keeper can be activated"
                  },
                  "functionSelector": "cd22af1b",
                  "id": 12948,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "canActivateAfter",
                  "nameLocation": "3163:16:78",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12944,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12941,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3188:7:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12948,
                        "src": "3180:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12940,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3180:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12943,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "3205:8:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12948,
                        "src": "3197:16:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12942,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3197:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3179:35:78"
                  },
                  "returnParameters": {
                    "id": 12947,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12946,
                        "mutability": "mutable",
                        "name": "_timestamp",
                        "nameLocation": "3246:10:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12948,
                        "src": "3238:18:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12945,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3238:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3237:20:78"
                  },
                  "scope": 12997,
                  "src": "3154:104:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12949,
                    "nodeType": "StructuredDocumentation",
                    "src": "3262:253:78",
                    "text": "@notice Tracks when keeper bonds are ready to be withdrawn\n @param _keeper The address of the keeper\n @param _bonding The address of the token being unbonded\n @return _timestamp Time at which the keeper bonds are ready to be withdrawn"
                  },
                  "functionSelector": "07b435c2",
                  "id": 12958,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "canWithdrawAfter",
                  "nameLocation": "3527:16:78",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12954,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12951,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3552:7:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12958,
                        "src": "3544:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12950,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3544:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12953,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "3569:8:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12958,
                        "src": "3561:16:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12952,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3561:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3543:35:78"
                  },
                  "returnParameters": {
                    "id": 12957,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12956,
                        "mutability": "mutable",
                        "name": "_timestamp",
                        "nameLocation": "3610:10:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12958,
                        "src": "3602:18:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12955,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3602:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3601:20:78"
                  },
                  "scope": 12997,
                  "src": "3518:104:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12959,
                    "nodeType": "StructuredDocumentation",
                    "src": "3626:251:78",
                    "text": "@notice Tracks how much keeper bonds are to be withdrawn\n @param _keeper The address of the keeper\n @param _bonding The address of the token being unbonded\n @return _pendingUnbonds The amount of keeper bonds that are to be withdrawn"
                  },
                  "functionSelector": "21040b01",
                  "id": 12968,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pendingUnbonds",
                  "nameLocation": "3889:14:78",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12964,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12961,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3912:7:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12968,
                        "src": "3904:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12960,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3904:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 12963,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "3929:8:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12968,
                        "src": "3921:16:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12962,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3921:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3903:35:78"
                  },
                  "returnParameters": {
                    "id": 12967,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12966,
                        "mutability": "mutable",
                        "name": "_pendingUnbonds",
                        "nameLocation": "3970:15:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12968,
                        "src": "3962:23:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 12965,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3962:7:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3961:25:78"
                  },
                  "scope": 12997,
                  "src": "3880:107:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12969,
                    "nodeType": "StructuredDocumentation",
                    "src": "3991:180:78",
                    "text": "@notice Checks whether the address has ever bonded an asset\n @param _keeper The address of the keeper\n @return _hasBonded Whether the address has ever bonded an asset"
                  },
                  "functionSelector": "8cb22b76",
                  "id": 12976,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "hasBonded",
                  "nameLocation": "4183:9:78",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12972,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12971,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "4201:7:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12976,
                        "src": "4193:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 12970,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4193:7:78",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4192:17:78"
                  },
                  "returnParameters": {
                    "id": 12975,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12974,
                        "mutability": "mutable",
                        "name": "_hasBonded",
                        "nameLocation": "4238:10:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12976,
                        "src": "4233:15:78",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 12973,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4233:4:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4232:17:78"
                  },
                  "scope": 12997,
                  "src": "4174:76:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12977,
                    "nodeType": "StructuredDocumentation",
                    "src": "4268:82:78",
                    "text": "@notice Lists all jobs\n @return _jobList Array with all the jobs in _jobs"
                  },
                  "functionSelector": "7c8fce23",
                  "id": 12983,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobs",
                  "nameLocation": "4362:4:78",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12978,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4366:2:78"
                  },
                  "returnParameters": {
                    "id": 12982,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12981,
                        "mutability": "mutable",
                        "name": "_jobList",
                        "nameLocation": "4409:8:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12983,
                        "src": "4392:25:78",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 12979,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4392:7:78",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 12980,
                          "nodeType": "ArrayTypeName",
                          "src": "4392:9:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4391:27:78"
                  },
                  "scope": 12997,
                  "src": "4353:66:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12984,
                    "nodeType": "StructuredDocumentation",
                    "src": "4423:94:78",
                    "text": "@notice Lists all keepers\n @return _keeperList Array with all the keepers in _keepers"
                  },
                  "functionSelector": "951dc22c",
                  "id": 12990,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "keepers",
                  "nameLocation": "4529:7:78",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 12985,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4536:2:78"
                  },
                  "returnParameters": {
                    "id": 12989,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12988,
                        "mutability": "mutable",
                        "name": "_keeperList",
                        "nameLocation": "4579:11:78",
                        "nodeType": "VariableDeclaration",
                        "scope": 12990,
                        "src": "4562:28:78",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 12986,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4562:7:78",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 12987,
                          "nodeType": "ArrayTypeName",
                          "src": "4562:9:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4561:30:78"
                  },
                  "scope": 12997,
                  "src": "4520:72:78",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 12991,
                    "nodeType": "StructuredDocumentation",
                    "src": "4609:84:78",
                    "text": "@notice Throws when an address is passed as a job, but that address is not a job"
                  },
                  "id": 12993,
                  "name": "JobUnavailable",
                  "nameLocation": "4702:14:78",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 12992,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4716:2:78"
                  },
                  "src": "4696:23:78"
                },
                {
                  "documentation": {
                    "id": 12994,
                    "nodeType": "StructuredDocumentation",
                    "src": "4723:94:78",
                    "text": "@notice Throws when an action that requires an undisputed job is applied on a disputed job"
                  },
                  "id": 12996,
                  "name": "JobDisputed",
                  "nameLocation": "4826:11:78",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 12995,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4837:2:78"
                  },
                  "src": "4820:20:78"
                }
              ],
              "scope": 12998,
              "src": "268:4574:78",
              "usedErrors": [
                12993,
                12996
              ]
            }
          ],
          "src": "32:4811:78"
        },
        "id": 78
      },
      "solidity/interfaces/peripherals/IKeep3rDisputable.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/peripherals/IKeep3rDisputable.sol",
          "exportedSymbols": {
            "IKeep3rDisputable": [
              13033
            ]
          },
          "id": 13034,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 12999,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:79"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13000,
                "nodeType": "StructuredDocumentation",
                "src": "65:315:79",
                "text": "@title Keep3rDisputable contract\n @notice Creates/resolves disputes for jobs or keepers\n         A disputed keeper is slashable and is not able to bond, activate, withdraw or receive direct payments\n         A disputed job is slashable and is not able to pay the keepers, withdraw tokens or to migrate"
              },
              "fullyImplemented": false,
              "id": 13033,
              "linearizedBaseContracts": [
                13033
              ],
              "name": "IKeep3rDisputable",
              "nameLocation": "390:17:79",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13001,
                    "nodeType": "StructuredDocumentation",
                    "src": "412:200:79",
                    "text": "@notice Emitted when a keeper or a job is disputed\n @param _jobOrKeeper The address of the disputed keeper/job\n @param _disputer The user that called the function and disputed the keeper"
                  },
                  "id": 13007,
                  "name": "Dispute",
                  "nameLocation": "621:7:79",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13006,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13003,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_jobOrKeeper",
                        "nameLocation": "645:12:79",
                        "nodeType": "VariableDeclaration",
                        "scope": 13007,
                        "src": "629:28:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13002,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "629:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13005,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_disputer",
                        "nameLocation": "675:9:79",
                        "nodeType": "VariableDeclaration",
                        "scope": 13007,
                        "src": "659:25:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13004,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "659:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "628:57:79"
                  },
                  "src": "615:71:79"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13008,
                    "nodeType": "StructuredDocumentation",
                    "src": "690:193:79",
                    "text": "@notice Emitted when a dispute is resolved\n @param _jobOrKeeper The address of the disputed keeper/job\n @param _resolver The user that called the function and resolved the dispute"
                  },
                  "id": 13014,
                  "name": "Resolve",
                  "nameLocation": "892:7:79",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13013,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13010,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_jobOrKeeper",
                        "nameLocation": "916:12:79",
                        "nodeType": "VariableDeclaration",
                        "scope": 13014,
                        "src": "900:28:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13009,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "900:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13012,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_resolver",
                        "nameLocation": "946:9:79",
                        "nodeType": "VariableDeclaration",
                        "scope": 13014,
                        "src": "930:25:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13011,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "930:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "899:57:79"
                  },
                  "src": "886:71:79"
                },
                {
                  "documentation": {
                    "id": 13015,
                    "nodeType": "StructuredDocumentation",
                    "src": "961:59:79",
                    "text": "@notice Throws when a job or keeper is already disputed"
                  },
                  "id": 13017,
                  "name": "AlreadyDisputed",
                  "nameLocation": "1029:15:79",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13016,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1044:2:79"
                  },
                  "src": "1023:24:79"
                },
                {
                  "documentation": {
                    "id": 13018,
                    "nodeType": "StructuredDocumentation",
                    "src": "1051:96:79",
                    "text": "@notice Throws when a job or keeper is not disputed and someone tries to resolve the dispute"
                  },
                  "id": 13020,
                  "name": "NotDisputed",
                  "nameLocation": "1156:11:79",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13019,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1167:2:79"
                  },
                  "src": "1150:20:79"
                },
                {
                  "documentation": {
                    "id": 13021,
                    "nodeType": "StructuredDocumentation",
                    "src": "1174:121:79",
                    "text": "@notice Allows governance to create a dispute for a given keeper/job\n @param _jobOrKeeper The address in dispute"
                  },
                  "functionSelector": "f75f9f7b",
                  "id": 13026,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "dispute",
                  "nameLocation": "1307:7:79",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13024,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13023,
                        "mutability": "mutable",
                        "name": "_jobOrKeeper",
                        "nameLocation": "1323:12:79",
                        "nodeType": "VariableDeclaration",
                        "scope": 13026,
                        "src": "1315:20:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13022,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1315:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1314:22:79"
                  },
                  "returnParameters": {
                    "id": 13025,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1345:0:79"
                  },
                  "scope": 13033,
                  "src": "1298:48:79",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13027,
                    "nodeType": "StructuredDocumentation",
                    "src": "1350:112:79",
                    "text": "@notice Allows governance to resolve a dispute on a keeper/job\n @param _jobOrKeeper The address cleared"
                  },
                  "functionSelector": "55ea6c47",
                  "id": 13032,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "resolve",
                  "nameLocation": "1474:7:79",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13030,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13029,
                        "mutability": "mutable",
                        "name": "_jobOrKeeper",
                        "nameLocation": "1490:12:79",
                        "nodeType": "VariableDeclaration",
                        "scope": 13032,
                        "src": "1482:20:79",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13028,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1482:7:79",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1481:22:79"
                  },
                  "returnParameters": {
                    "id": 13031,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1512:0:79"
                  },
                  "scope": 13033,
                  "src": "1465:48:79",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 13034,
              "src": "380:1135:79",
              "usedErrors": [
                13017,
                13020
              ]
            }
          ],
          "src": "32:1484:79"
        },
        "id": 79
      },
      "solidity/interfaces/peripherals/IKeep3rJobs.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/peripherals/IKeep3rJobs.sol",
          "exportedSymbols": {
            "IKeep3rJobDisputable": [
              13559
            ],
            "IKeep3rJobFundableCredits": [
              13100
            ],
            "IKeep3rJobFundableLiquidity": [
              13305
            ],
            "IKeep3rJobManager": [
              13326
            ],
            "IKeep3rJobMigration": [
              13505
            ],
            "IKeep3rJobOwnership": [
              13456
            ],
            "IKeep3rJobWorkable": [
              13400
            ],
            "IKeep3rJobs": [
              13570
            ]
          },
          "id": 13571,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 13035,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:80"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13036,
                "nodeType": "StructuredDocumentation",
                "src": "65:115:80",
                "text": "@title Keep3rJobFundableCredits contract\n @notice Handles the addition and withdrawal of credits from a job"
              },
              "fullyImplemented": false,
              "id": 13100,
              "linearizedBaseContracts": [
                13100
              ],
              "name": "IKeep3rJobFundableCredits",
              "nameLocation": "190:25:80",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13037,
                    "nodeType": "StructuredDocumentation",
                    "src": "233:317:80",
                    "text": "@notice Emitted when Keep3rJobFundableCredits#addTokenCreditsToJob is called\n @param _job The address of the job being credited\n @param _token The address of the token being provided\n @param _provider The user that calls the function\n @param _amount The amount of credit being added to the job"
                  },
                  "id": 13047,
                  "name": "TokenCreditAddition",
                  "nameLocation": "559:19:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13046,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13039,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "595:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13047,
                        "src": "579:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13038,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "579:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13041,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "617:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13047,
                        "src": "601:22:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13040,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "601:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13043,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_provider",
                        "nameLocation": "641:9:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13047,
                        "src": "625:25:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13042,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "625:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13045,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "660:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13047,
                        "src": "652:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13044,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "652:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "578:90:80"
                  },
                  "src": "553:116:80"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13048,
                    "nodeType": "StructuredDocumentation",
                    "src": "673:334:80",
                    "text": "@notice Emitted when Keep3rJobFundableCredits#withdrawTokenCreditsFromJob is called\n @param _job The address of the job from which the credits are withdrawn\n @param _token The credit being withdrawn from the job\n @param _receiver The user that receives the tokens\n @param _amount The amount of credit withdrawn"
                  },
                  "id": 13058,
                  "name": "TokenCreditWithdrawal",
                  "nameLocation": "1016:21:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13057,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13050,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1054:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13058,
                        "src": "1038:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13049,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1038:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13052,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "1076:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13058,
                        "src": "1060:22:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13051,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1060:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13054,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_receiver",
                        "nameLocation": "1100:9:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13058,
                        "src": "1084:25:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13053,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1084:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13056,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1119:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13058,
                        "src": "1111:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13055,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1111:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1037:90:80"
                  },
                  "src": "1010:118:80"
                },
                {
                  "documentation": {
                    "id": 13059,
                    "nodeType": "StructuredDocumentation",
                    "src": "1145:93:80",
                    "text": "@notice Throws when the token is KP3R, as it should not be used for direct token payments"
                  },
                  "id": 13061,
                  "name": "TokenUnallowed",
                  "nameLocation": "1247:14:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13060,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1261:2:80"
                  },
                  "src": "1241:23:80"
                },
                {
                  "documentation": {
                    "id": 13062,
                    "nodeType": "StructuredDocumentation",
                    "src": "1268:70:80",
                    "text": "@notice Throws when the token withdraw cooldown has not yet passed"
                  },
                  "id": 13064,
                  "name": "JobTokenCreditsLocked",
                  "nameLocation": "1347:21:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13063,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1368:2:80"
                  },
                  "src": "1341:30:80"
                },
                {
                  "documentation": {
                    "id": 13065,
                    "nodeType": "StructuredDocumentation",
                    "src": "1375:74:80",
                    "text": "@notice Throws when the user tries to withdraw more tokens than it has"
                  },
                  "id": 13067,
                  "name": "InsufficientJobTokenCredits",
                  "nameLocation": "1458:27:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13066,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1485:2:80"
                  },
                  "src": "1452:36:80"
                },
                {
                  "documentation": {
                    "id": 13068,
                    "nodeType": "StructuredDocumentation",
                    "src": "1508:236:80",
                    "text": "@notice Last block where tokens were added to the job\n @param _job The address of the job credited\n @param _token The address of the token credited\n @return _timestamp The last block where tokens were added to the job"
                  },
                  "functionSelector": "b440027f",
                  "id": 13077,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobTokenCreditsAddedAt",
                  "nameLocation": "1756:22:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13073,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13070,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "1787:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13077,
                        "src": "1779:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13069,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1779:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13072,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "1801:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13077,
                        "src": "1793:14:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13071,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1793:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1778:30:80"
                  },
                  "returnParameters": {
                    "id": 13076,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13075,
                        "mutability": "mutable",
                        "name": "_timestamp",
                        "nameLocation": "1840:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13077,
                        "src": "1832:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13074,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1832:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1831:20:80"
                  },
                  "scope": 13100,
                  "src": "1747:105:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13078,
                    "nodeType": "StructuredDocumentation",
                    "src": "1870:225:80",
                    "text": "@notice Add credit to a job to be paid out for work\n @param _job The address of the job being credited\n @param _token The address of the token being credited\n @param _amount The amount of credit being added"
                  },
                  "functionSelector": "575288bf",
                  "id": 13087,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addTokenCreditsToJob",
                  "nameLocation": "2107:20:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13085,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13080,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "2141:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13087,
                        "src": "2133:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13079,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2133:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13082,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "2159:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13087,
                        "src": "2151:14:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13081,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2151:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13084,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "2179:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13087,
                        "src": "2171:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13083,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2171:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2127:63:80"
                  },
                  "returnParameters": {
                    "id": 13086,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2199:0:80"
                  },
                  "scope": 13100,
                  "src": "2098:102:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13088,
                    "nodeType": "StructuredDocumentation",
                    "src": "2204:291:80",
                    "text": "@notice Withdraw credit from a job\n @param _job The address of the job from which the credits are withdrawn\n @param _token The address of the token being withdrawn\n @param _amount The amount of token to be withdrawn\n @param _receiver The user that will receive tokens"
                  },
                  "functionSelector": "d55995fe",
                  "id": 13099,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawTokenCreditsFromJob",
                  "nameLocation": "2507:27:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13097,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13090,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "2548:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13099,
                        "src": "2540:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13089,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2540:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13092,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "2566:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13099,
                        "src": "2558:14:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13091,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2558:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13094,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "2586:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13099,
                        "src": "2578:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13093,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2578:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13096,
                        "mutability": "mutable",
                        "name": "_receiver",
                        "nameLocation": "2607:9:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13099,
                        "src": "2599:17:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13095,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2599:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2534:86:80"
                  },
                  "returnParameters": {
                    "id": 13098,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2629:0:80"
                  },
                  "scope": 13100,
                  "src": "2498:132:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 13571,
              "src": "180:2452:80",
              "usedErrors": [
                13061,
                13064,
                13067
              ]
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13101,
                "nodeType": "StructuredDocumentation",
                "src": "2634:121:80",
                "text": "@title  Keep3rJobFundableLiquidity contract\n @notice Handles the funding of jobs through specific liquidity pairs"
              },
              "fullyImplemented": false,
              "id": 13305,
              "linearizedBaseContracts": [
                13305
              ],
              "name": "IKeep3rJobFundableLiquidity",
              "nameLocation": "2765:27:80",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13102,
                    "nodeType": "StructuredDocumentation",
                    "src": "2810:160:80",
                    "text": "@notice Emitted when Keep3rJobFundableLiquidity#approveLiquidity function is called\n @param _liquidity The address of the liquidity pair being approved"
                  },
                  "id": 13106,
                  "name": "LiquidityApproval",
                  "nameLocation": "2979:17:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13105,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13104,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "3005:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13106,
                        "src": "2997:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13103,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2997:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2996:20:80"
                  },
                  "src": "2973:44:80"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13107,
                    "nodeType": "StructuredDocumentation",
                    "src": "3021:158:80",
                    "text": "@notice Emitted when Keep3rJobFundableLiquidity#revokeLiquidity function is called\n @param _liquidity The address of the liquidity pair being revoked"
                  },
                  "id": 13111,
                  "name": "LiquidityRevocation",
                  "nameLocation": "3188:19:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13110,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13109,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "3216:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13111,
                        "src": "3208:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13108,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3208:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3207:20:80"
                  },
                  "src": "3182:46:80"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13112,
                    "nodeType": "StructuredDocumentation",
                    "src": "3232:341:80",
                    "text": "@notice Emitted when IKeep3rJobFundableLiquidity#addLiquidityToJob function is called\n @param _job The address of the job to which liquidity will be added\n @param _liquidity The address of the liquidity being added\n @param _provider The user that calls the function\n @param _amount The amount of liquidity being added"
                  },
                  "id": 13122,
                  "name": "LiquidityAddition",
                  "nameLocation": "3582:17:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13121,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13114,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "3616:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13122,
                        "src": "3600:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13113,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3600:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13116,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "3638:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13122,
                        "src": "3622:26:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13115,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3622:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13118,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_provider",
                        "nameLocation": "3666:9:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13122,
                        "src": "3650:25:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13117,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3650:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13120,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "3685:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13122,
                        "src": "3677:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13119,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3677:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3599:94:80"
                  },
                  "src": "3576:118:80"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13123,
                    "nodeType": "StructuredDocumentation",
                    "src": "3698:382:80",
                    "text": "@notice Emitted when IKeep3rJobFundableLiquidity#withdrawLiquidityFromJob function is called\n @param _job The address of the job of which liquidity will be withdrawn from\n @param _liquidity The address of the liquidity being withdrawn\n @param _receiver The receiver of the liquidity tokens\n @param _amount The amount of liquidity being withdrawn from the job"
                  },
                  "id": 13133,
                  "name": "LiquidityWithdrawal",
                  "nameLocation": "4089:19:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13132,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13125,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "4125:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13133,
                        "src": "4109:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13124,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4109:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13127,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "4147:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13133,
                        "src": "4131:26:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13126,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4131:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13129,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_receiver",
                        "nameLocation": "4175:9:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13133,
                        "src": "4159:25:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13128,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4159:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13131,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "4194:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13133,
                        "src": "4186:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13130,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4186:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4108:94:80"
                  },
                  "src": "4083:120:80"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13134,
                    "nodeType": "StructuredDocumentation",
                    "src": "4207:362:80",
                    "text": "@notice Emitted when Keep3rJobFundableLiquidity#addLiquidityToJob function is called\n @param _job The address of the job whose credits will be updated\n @param _rewardedAt The time at which the job was last rewarded\n @param _currentCredits The current credits of the job\n @param _periodCredits The credits of the job for the current period"
                  },
                  "id": 13144,
                  "name": "LiquidityCreditsReward",
                  "nameLocation": "4578:22:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13143,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13136,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "4617:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13144,
                        "src": "4601:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13135,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4601:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13138,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_rewardedAt",
                        "nameLocation": "4631:11:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13144,
                        "src": "4623:19:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13137,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4623:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13140,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_currentCredits",
                        "nameLocation": "4652:15:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13144,
                        "src": "4644:23:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13139,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4644:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13142,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_periodCredits",
                        "nameLocation": "4677:14:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13144,
                        "src": "4669:22:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13141,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4669:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4600:92:80"
                  },
                  "src": "4572:121:80"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13145,
                    "nodeType": "StructuredDocumentation",
                    "src": "4697:297:80",
                    "text": "@notice Emitted when Keep3rJobFundableLiquidity#forceLiquidityCreditsToJob function is called\n @param _job The address of the job whose credits will be updated\n @param _rewardedAt The time at which the job was last rewarded\n @param _currentCredits The current credits of the job"
                  },
                  "id": 13153,
                  "name": "LiquidityCreditsForced",
                  "nameLocation": "5003:22:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13152,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13147,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "5042:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13153,
                        "src": "5026:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13146,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5026:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13149,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_rewardedAt",
                        "nameLocation": "5056:11:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13153,
                        "src": "5048:19:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13148,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5048:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13151,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_currentCredits",
                        "nameLocation": "5077:15:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13153,
                        "src": "5069:23:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13150,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5069:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5025:68:80"
                  },
                  "src": "4997:97:80"
                },
                {
                  "documentation": {
                    "id": 13154,
                    "nodeType": "StructuredDocumentation",
                    "src": "5111:78:80",
                    "text": "@notice Throws when the liquidity being approved has already been approved"
                  },
                  "id": 13156,
                  "name": "LiquidityPairApproved",
                  "nameLocation": "5198:21:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13155,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5219:2:80"
                  },
                  "src": "5192:30:80"
                },
                {
                  "documentation": {
                    "id": 13157,
                    "nodeType": "StructuredDocumentation",
                    "src": "5226:73:80",
                    "text": "@notice Throws when the liquidity being removed has not been approved"
                  },
                  "id": 13159,
                  "name": "LiquidityPairUnexistent",
                  "nameLocation": "5308:23:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13158,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5331:2:80"
                  },
                  "src": "5302:32:80"
                },
                {
                  "documentation": {
                    "id": 13160,
                    "nodeType": "StructuredDocumentation",
                    "src": "5338:69:80",
                    "text": "@notice Throws when trying to add liquidity to an unapproved pool"
                  },
                  "id": 13162,
                  "name": "LiquidityPairUnapproved",
                  "nameLocation": "5416:23:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13161,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5439:2:80"
                  },
                  "src": "5410:32:80"
                },
                {
                  "documentation": {
                    "id": 13163,
                    "nodeType": "StructuredDocumentation",
                    "src": "5446:68:80",
                    "text": "@notice Throws when the job doesn't have the requested liquidity"
                  },
                  "id": 13165,
                  "name": "JobLiquidityUnexistent",
                  "nameLocation": "5523:22:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13164,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5545:2:80"
                  },
                  "src": "5517:31:80"
                },
                {
                  "documentation": {
                    "id": 13166,
                    "nodeType": "StructuredDocumentation",
                    "src": "5552:72:80",
                    "text": "@notice Throws when trying to remove more liquidity than the job has"
                  },
                  "id": 13168,
                  "name": "JobLiquidityInsufficient",
                  "nameLocation": "5633:24:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13167,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5657:2:80"
                  },
                  "src": "5627:33:80"
                },
                {
                  "documentation": {
                    "id": 13169,
                    "nodeType": "StructuredDocumentation",
                    "src": "5664:88:80",
                    "text": "@notice Throws when trying to add less liquidity than the minimum liquidity required"
                  },
                  "id": 13171,
                  "name": "JobLiquidityLessThanMin",
                  "nameLocation": "5761:23:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13170,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5784:2:80"
                  },
                  "src": "5755:32:80"
                },
                {
                  "canonicalName": "IKeep3rJobFundableLiquidity.TickCache",
                  "id": 13178,
                  "members": [
                    {
                      "constant": false,
                      "id": 13173,
                      "mutability": "mutable",
                      "name": "current",
                      "nameLocation": "5909:7:80",
                      "nodeType": "VariableDeclaration",
                      "scope": 13178,
                      "src": "5903:13:80",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int56",
                        "typeString": "int56"
                      },
                      "typeName": {
                        "id": 13172,
                        "name": "int56",
                        "nodeType": "ElementaryTypeName",
                        "src": "5903:5:80",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 13175,
                      "mutability": "mutable",
                      "name": "difference",
                      "nameLocation": "5955:10:80",
                      "nodeType": "VariableDeclaration",
                      "scope": 13178,
                      "src": "5949:16:80",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int56",
                        "typeString": "int56"
                      },
                      "typeName": {
                        "id": 13174,
                        "name": "int56",
                        "nodeType": "ElementaryTypeName",
                        "src": "5949:5:80",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 13177,
                      "mutability": "mutable",
                      "name": "period",
                      "nameLocation": "6047:6:80",
                      "nodeType": "VariableDeclaration",
                      "scope": 13178,
                      "src": "6039:14:80",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13176,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6039:7:80",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "TickCache",
                  "nameLocation": "5887:9:80",
                  "nodeType": "StructDefinition",
                  "scope": 13305,
                  "src": "5880:238:80",
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 13179,
                    "nodeType": "StructuredDocumentation",
                    "src": "6138:113:80",
                    "text": "@notice Lists liquidity pairs\n @return _list An array of addresses with all the approved liquidity pairs"
                  },
                  "functionSelector": "0c620bce",
                  "id": 13185,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approvedLiquidities",
                  "nameLocation": "6263:19:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13180,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6282:2:80"
                  },
                  "returnParameters": {
                    "id": 13184,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13183,
                        "mutability": "mutable",
                        "name": "_list",
                        "nameLocation": "6325:5:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13185,
                        "src": "6308:22:80",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 13181,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6308:7:80",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 13182,
                          "nodeType": "ArrayTypeName",
                          "src": "6308:9:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6307:24:80"
                  },
                  "scope": 13305,
                  "src": "6254:78:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13186,
                    "nodeType": "StructuredDocumentation",
                    "src": "6336:237:80",
                    "text": "@notice Amount of liquidity in a specified job\n @param _job The address of the job being checked\n @param _liquidity The address of the liquidity we are checking\n @return _amount Amount of liquidity in the specified job"
                  },
                  "functionSelector": "694798e6",
                  "id": 13195,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAmount",
                  "nameLocation": "6585:15:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13191,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13188,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "6609:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13195,
                        "src": "6601:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13187,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6601:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13190,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "6623:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13195,
                        "src": "6615:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13189,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6615:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6600:34:80"
                  },
                  "returnParameters": {
                    "id": 13194,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13193,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "6666:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13195,
                        "src": "6658:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13192,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6658:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6657:17:80"
                  },
                  "scope": 13305,
                  "src": "6576:99:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13196,
                    "nodeType": "StructuredDocumentation",
                    "src": "6679:206:80",
                    "text": "@notice Last time the job was rewarded liquidity credits\n @param _job The address of the job being checked\n @return _timestamp Timestamp of the last time the job was rewarded liquidity credits"
                  },
                  "functionSelector": "a676f9ff",
                  "id": 13203,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "rewardedAt",
                  "nameLocation": "6897:10:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13199,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13198,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "6916:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13203,
                        "src": "6908:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13197,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6908:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6907:14:80"
                  },
                  "returnParameters": {
                    "id": 13202,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13201,
                        "mutability": "mutable",
                        "name": "_timestamp",
                        "nameLocation": "6953:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13203,
                        "src": "6945:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13200,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6945:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6944:20:80"
                  },
                  "scope": 13305,
                  "src": "6888:77:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13204,
                    "nodeType": "StructuredDocumentation",
                    "src": "6969:166:80",
                    "text": "@notice Last time the job was worked\n @param _job The address of the job being checked\n @return _timestamp Timestamp of the last time the job was worked"
                  },
                  "functionSelector": "f136a09d",
                  "id": 13211,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "workedAt",
                  "nameLocation": "7147:8:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13207,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13206,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "7164:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13211,
                        "src": "7156:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13205,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7156:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7155:14:80"
                  },
                  "returnParameters": {
                    "id": 13210,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13209,
                        "mutability": "mutable",
                        "name": "_timestamp",
                        "nameLocation": "7201:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13211,
                        "src": "7193:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13208,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7193:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7192:20:80"
                  },
                  "scope": 13305,
                  "src": "7138:75:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13212,
                    "nodeType": "StructuredDocumentation",
                    "src": "7231:203:80",
                    "text": "@notice Returns the liquidity credits of a given job\n @param _job The address of the job of which we want to know the liquidity credits\n @return _amount The liquidity credits of a given job"
                  },
                  "functionSelector": "8bb6dfa8",
                  "id": 13219,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobLiquidityCredits",
                  "nameLocation": "7446:19:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13215,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13214,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "7474:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13219,
                        "src": "7466:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13213,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7466:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7465:14:80"
                  },
                  "returnParameters": {
                    "id": 13218,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13217,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "7511:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13219,
                        "src": "7503:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13216,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7503:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7502:17:80"
                  },
                  "scope": 13305,
                  "src": "7437:83:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13220,
                    "nodeType": "StructuredDocumentation",
                    "src": "7524:228:80",
                    "text": "@notice Returns the credits of a given job for the current period\n @param _job The address of the job of which we want to know the period credits\n @return _amount The credits the given job has at the current period"
                  },
                  "functionSelector": "6cf262bc",
                  "id": 13227,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobPeriodCredits",
                  "nameLocation": "7764:16:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13223,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13222,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "7789:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13227,
                        "src": "7781:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13221,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7781:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7780:14:80"
                  },
                  "returnParameters": {
                    "id": 13226,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13225,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "7826:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13227,
                        "src": "7818:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13224,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7818:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7817:17:80"
                  },
                  "scope": 13305,
                  "src": "7755:80:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13228,
                    "nodeType": "StructuredDocumentation",
                    "src": "7839:196:80",
                    "text": "@notice Calculates the total credits of a given job\n @param _job The address of the job of which we want to know the total credits\n @return _amount The total credits of the given job"
                  },
                  "functionSelector": "034d4c61",
                  "id": 13235,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalJobCredits",
                  "nameLocation": "8047:15:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13231,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13230,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "8071:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13235,
                        "src": "8063:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13229,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8063:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8062:14:80"
                  },
                  "returnParameters": {
                    "id": 13234,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13233,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "8108:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13235,
                        "src": "8100:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13232,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8100:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8099:17:80"
                  },
                  "scope": 13305,
                  "src": "8038:79:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13236,
                    "nodeType": "StructuredDocumentation",
                    "src": "8121:417:80",
                    "text": "@notice Calculates how many credits should be rewarded periodically for a given liquidity amount\n @dev _periodCredits = underlying KP3Rs for given liquidity amount * rewardPeriod / inflationPeriod\n @param _liquidity The address of the liquidity to provide\n @param _amount The amount of liquidity to provide\n @return _periodCredits The amount of KP3R periodically minted for the given liquidity"
                  },
                  "functionSelector": "0d6a1f87",
                  "id": 13245,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "quoteLiquidity",
                  "nameLocation": "8550:14:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13241,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13238,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "8573:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13245,
                        "src": "8565:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13237,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8565:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13240,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "8593:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13245,
                        "src": "8585:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13239,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8585:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8564:37:80"
                  },
                  "returnParameters": {
                    "id": 13244,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13243,
                        "mutability": "mutable",
                        "name": "_periodCredits",
                        "nameLocation": "8633:14:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13245,
                        "src": "8625:22:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13242,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8625:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8624:24:80"
                  },
                  "scope": 13305,
                  "src": "8541:108:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13246,
                    "nodeType": "StructuredDocumentation",
                    "src": "8653:238:80",
                    "text": "@notice Observes the current state of the liquidity pair being observed and updates TickCache with the information\n @param _liquidity The address of the liquidity pair being observed\n @return _tickCache The updated TickCache"
                  },
                  "functionSelector": "165e62e7",
                  "id": 13254,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "observeLiquidity",
                  "nameLocation": "8903:16:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13249,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13248,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "8928:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13254,
                        "src": "8920:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13247,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8920:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8919:20:80"
                  },
                  "returnParameters": {
                    "id": 13253,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13252,
                        "mutability": "mutable",
                        "name": "_tickCache",
                        "nameLocation": "8980:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13254,
                        "src": "8963:27:80",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TickCache_$13178_memory_ptr",
                          "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                        },
                        "typeName": {
                          "id": 13251,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 13250,
                            "name": "TickCache",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 13178,
                            "src": "8963:9:80"
                          },
                          "referencedDeclaration": 13178,
                          "src": "8963:9:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TickCache_$13178_storage_ptr",
                            "typeString": "struct IKeep3rJobFundableLiquidity.TickCache"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8962:29:80"
                  },
                  "scope": 13305,
                  "src": "8894:98:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13255,
                    "nodeType": "StructuredDocumentation",
                    "src": "8996:173:80",
                    "text": "@notice Gifts liquidity credits to the specified job\n @param _job The address of the job being credited\n @param _amount The amount of liquidity credits to gift"
                  },
                  "functionSelector": "fe75bc46",
                  "id": 13262,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "forceLiquidityCreditsToJob",
                  "nameLocation": "9181:26:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13260,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13257,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "9216:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13262,
                        "src": "9208:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13256,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9208:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13259,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "9230:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13262,
                        "src": "9222:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13258,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9222:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9207:31:80"
                  },
                  "returnParameters": {
                    "id": 13261,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9247:0:80"
                  },
                  "scope": 13305,
                  "src": "9172:76:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13263,
                    "nodeType": "StructuredDocumentation",
                    "src": "9252:127:80",
                    "text": "@notice Approve a liquidity pair for being accepted in future\n @param _liquidity The address of the liquidity accepted"
                  },
                  "functionSelector": "b600702a",
                  "id": 13268,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approveLiquidity",
                  "nameLocation": "9391:16:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13266,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13265,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "9416:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13268,
                        "src": "9408:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13264,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9408:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9407:20:80"
                  },
                  "returnParameters": {
                    "id": 13267,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9436:0:80"
                  },
                  "scope": 13305,
                  "src": "9382:55:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13269,
                    "nodeType": "StructuredDocumentation",
                    "src": "9441:122:80",
                    "text": "@notice Revoke a liquidity pair from being accepted in future\n @param _liquidity The liquidity no longer accepted"
                  },
                  "functionSelector": "64bb43ee",
                  "id": 13274,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "revokeLiquidity",
                  "nameLocation": "9575:15:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13272,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13271,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "9599:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13274,
                        "src": "9591:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13270,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9591:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9590:20:80"
                  },
                  "returnParameters": {
                    "id": 13273,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9619:0:80"
                  },
                  "scope": 13305,
                  "src": "9566:54:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13275,
                    "nodeType": "StructuredDocumentation",
                    "src": "9624:227:80",
                    "text": "@notice Allows anyone to fund a job with liquidity\n @param _job The address of the job to assign liquidity to\n @param _liquidity The liquidity being added\n @param _amount The amount of liquidity tokens to add"
                  },
                  "functionSelector": "52a4de29",
                  "id": 13284,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addLiquidityToJob",
                  "nameLocation": "9863:17:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13282,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13277,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "9894:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13284,
                        "src": "9886:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13276,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9886:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13279,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "9912:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13284,
                        "src": "9904:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13278,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9904:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13281,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "9936:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13284,
                        "src": "9928:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13280,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9928:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9880:67:80"
                  },
                  "returnParameters": {
                    "id": 13283,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9956:0:80"
                  },
                  "scope": 13305,
                  "src": "9854:103:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13285,
                    "nodeType": "StructuredDocumentation",
                    "src": "9961:260:80",
                    "text": "@notice Unbond liquidity for a job\n @dev Can only be called by the job's owner\n @param _job The address of the job being unbonded from\n @param _liquidity The liquidity being unbonded\n @param _amount The amount of liquidity being removed"
                  },
                  "functionSelector": "1101eb41",
                  "id": 13294,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unbondLiquidityFromJob",
                  "nameLocation": "10233:22:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13292,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13287,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "10269:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13294,
                        "src": "10261:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13286,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10261:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13289,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "10287:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13294,
                        "src": "10279:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13288,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10279:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13291,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "10311:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13294,
                        "src": "10303:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13290,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10303:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10255:67:80"
                  },
                  "returnParameters": {
                    "id": 13293,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10331:0:80"
                  },
                  "scope": 13305,
                  "src": "10224:108:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13295,
                    "nodeType": "StructuredDocumentation",
                    "src": "10336:234:80",
                    "text": "@notice Withdraw liquidity from a job\n @param _job The address of the job being withdrawn from\n @param _liquidity The liquidity being withdrawn\n @param _receiver The address that will receive the withdrawn liquidity"
                  },
                  "functionSelector": "a2145809",
                  "id": 13304,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawLiquidityFromJob",
                  "nameLocation": "10582:24:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13302,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13297,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "10620:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13304,
                        "src": "10612:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13296,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10612:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13299,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "10638:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13304,
                        "src": "10630:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13298,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10630:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13301,
                        "mutability": "mutable",
                        "name": "_receiver",
                        "nameLocation": "10662:9:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13304,
                        "src": "10654:17:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13300,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10654:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10606:69:80"
                  },
                  "returnParameters": {
                    "id": 13303,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10684:0:80"
                  },
                  "scope": 13305,
                  "src": "10573:112:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 13571,
              "src": "2755:7932:80",
              "usedErrors": [
                13156,
                13159,
                13162,
                13165,
                13168,
                13171
              ]
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13306,
                "nodeType": "StructuredDocumentation",
                "src": "10689:107:80",
                "text": "@title Keep3rJobManager contract\n @notice Handles the addition and withdrawal of credits from a job"
              },
              "fullyImplemented": false,
              "id": 13326,
              "linearizedBaseContracts": [
                13326
              ],
              "name": "IKeep3rJobManager",
              "nameLocation": "10806:17:80",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13307,
                    "nodeType": "StructuredDocumentation",
                    "src": "10841:145:80",
                    "text": "@notice Emitted when Keep3rJobManager#addJob is called\n @param _job The address of the job to add\n @param _jobOwner The job's owner"
                  },
                  "id": 13313,
                  "name": "JobAddition",
                  "nameLocation": "10995:11:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13312,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13309,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "11023:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13313,
                        "src": "11007:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13308,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11007:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13311,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_jobOwner",
                        "nameLocation": "11045:9:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13313,
                        "src": "11029:25:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13310,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11029:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11006:49:80"
                  },
                  "src": "10989:67:80"
                },
                {
                  "documentation": {
                    "id": 13314,
                    "nodeType": "StructuredDocumentation",
                    "src": "11073:71:80",
                    "text": "@notice Throws when trying to add a job that has already been added"
                  },
                  "id": 13316,
                  "name": "JobAlreadyAdded",
                  "nameLocation": "11153:15:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13315,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11168:2:80"
                  },
                  "src": "11147:24:80"
                },
                {
                  "documentation": {
                    "id": 13317,
                    "nodeType": "StructuredDocumentation",
                    "src": "11175:94:80",
                    "text": "@notice Throws when the address that is trying to register as a keeper is already a keeper"
                  },
                  "id": 13319,
                  "name": "AlreadyAKeeper",
                  "nameLocation": "11278:14:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13318,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11292:2:80"
                  },
                  "src": "11272:23:80"
                },
                {
                  "documentation": {
                    "id": 13320,
                    "nodeType": "StructuredDocumentation",
                    "src": "11313:123:80",
                    "text": "@notice Allows any caller to add a new job\n @param _job Address of the contract for which work should be performed"
                  },
                  "functionSelector": "c5198abc",
                  "id": 13325,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addJob",
                  "nameLocation": "11448:6:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13323,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13322,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "11463:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13325,
                        "src": "11455:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13321,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11455:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11454:14:80"
                  },
                  "returnParameters": {
                    "id": 13324,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11477:0:80"
                  },
                  "scope": 13326,
                  "src": "11439:39:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 13571,
              "src": "10796:684:80",
              "usedErrors": [
                13316,
                13319
              ]
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13327,
                "nodeType": "StructuredDocumentation",
                "src": "11482:180:80",
                "text": "@title Keep3rJobWorkable contract\n @notice Handles the mechanisms jobs can pay keepers with along with the restrictions jobs can put on keepers before they can work on jobs"
              },
              "fullyImplemented": false,
              "id": 13400,
              "linearizedBaseContracts": [
                13400
              ],
              "name": "IKeep3rJobWorkable",
              "nameLocation": "11672:18:80",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13328,
                    "nodeType": "StructuredDocumentation",
                    "src": "11708:164:80",
                    "text": "@notice Emitted when a keeper is validated before a job\n @param _gasLeft The amount of gas that the transaction has left at the moment of keeper validation"
                  },
                  "id": 13332,
                  "name": "KeeperValidation",
                  "nameLocation": "11881:16:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13331,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13330,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_gasLeft",
                        "nameLocation": "11906:8:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13332,
                        "src": "11898:16:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13329,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11898:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11897:18:80"
                  },
                  "src": "11875:41:80"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13333,
                    "nodeType": "StructuredDocumentation",
                    "src": "11920:450:80",
                    "text": "@notice Emitted when a keeper works a job\n @param _credit The address of the asset in which the keeper is paid\n @param _job The address of the job the keeper has worked\n @param _keeper The address of the keeper that has worked the job\n @param _payment The amount that has been paid out to the keeper in exchange for working the job\n @param _gasLeft The amount of gas that the transaction has left at the moment of payment"
                  },
                  "id": 13345,
                  "name": "KeeperWork",
                  "nameLocation": "12379:10:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13344,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13335,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_credit",
                        "nameLocation": "12406:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13345,
                        "src": "12390:23:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13334,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12390:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13337,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "12431:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13345,
                        "src": "12415:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13336,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12415:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13339,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "12453:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13345,
                        "src": "12437:23:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13338,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12437:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13341,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_payment",
                        "nameLocation": "12470:8:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13345,
                        "src": "12462:16:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13340,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12462:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13343,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_gasLeft",
                        "nameLocation": "12488:8:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13345,
                        "src": "12480:16:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13342,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12480:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12389:108:80"
                  },
                  "src": "12373:125:80"
                },
                {
                  "documentation": {
                    "id": 13346,
                    "nodeType": "StructuredDocumentation",
                    "src": "12515:90:80",
                    "text": "@notice Throws if the address claiming to be a job is not in the list of approved jobs"
                  },
                  "id": 13348,
                  "name": "JobUnapproved",
                  "nameLocation": "12614:13:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13347,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12627:2:80"
                  },
                  "src": "12608:22:80"
                },
                {
                  "documentation": {
                    "id": 13349,
                    "nodeType": "StructuredDocumentation",
                    "src": "12634:129:80",
                    "text": "@notice Throws if the amount of funds in the job is less than the payment that must be paid to the keeper that works that job"
                  },
                  "id": 13351,
                  "name": "InsufficientFunds",
                  "nameLocation": "12772:17:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13350,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12789:2:80"
                  },
                  "src": "12766:26:80"
                },
                {
                  "documentation": {
                    "id": 13352,
                    "nodeType": "StructuredDocumentation",
                    "src": "12810:252:80",
                    "text": "@notice Confirms if the current keeper is registered\n @dev Can be used for general (non critical) functions\n @param _keeper The keeper being investigated\n @return _isKeeper Whether the address passed as a parameter is a keeper or not"
                  },
                  "functionSelector": "6ba42aaa",
                  "id": 13359,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isKeeper",
                  "nameLocation": "13074:8:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13355,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13354,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "13091:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13359,
                        "src": "13083:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13353,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13083:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13082:17:80"
                  },
                  "returnParameters": {
                    "id": 13358,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13357,
                        "mutability": "mutable",
                        "name": "_isKeeper",
                        "nameLocation": "13123:9:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13359,
                        "src": "13118:14:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 13356,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "13118:4:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13117:16:80"
                  },
                  "scope": 13400,
                  "src": "13065:69:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13360,
                    "nodeType": "StructuredDocumentation",
                    "src": "13138:493:80",
                    "text": "@notice Confirms if the current keeper is registered and has a minimum bond of any asset.\n @dev Should be used for protected functions\n @param _keeper The keeper to check\n @param _bond The bond token being evaluated\n @param _minBond The minimum amount of bonded tokens\n @param _earned The minimum funds earned in the keepers lifetime\n @param _age The minimum keeper age required\n @return _isBondedKeeper Whether the `_keeper` meets the given requirements"
                  },
                  "functionSelector": "f9d46cf2",
                  "id": 13375,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isBondedKeeper",
                  "nameLocation": "13643:14:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13371,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13362,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "13671:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13375,
                        "src": "13663:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13361,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13663:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13364,
                        "mutability": "mutable",
                        "name": "_bond",
                        "nameLocation": "13692:5:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13375,
                        "src": "13684:13:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13363,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13684:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13366,
                        "mutability": "mutable",
                        "name": "_minBond",
                        "nameLocation": "13711:8:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13375,
                        "src": "13703:16:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13365,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13703:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13368,
                        "mutability": "mutable",
                        "name": "_earned",
                        "nameLocation": "13733:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13375,
                        "src": "13725:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13367,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13725:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13370,
                        "mutability": "mutable",
                        "name": "_age",
                        "nameLocation": "13754:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13375,
                        "src": "13746:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13369,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13746:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13657:105:80"
                  },
                  "returnParameters": {
                    "id": 13374,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13373,
                        "mutability": "mutable",
                        "name": "_isBondedKeeper",
                        "nameLocation": "13786:15:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13375,
                        "src": "13781:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 13372,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "13781:4:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13780:22:80"
                  },
                  "scope": 13400,
                  "src": "13634:169:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13376,
                    "nodeType": "StructuredDocumentation",
                    "src": "13807:235:80",
                    "text": "@notice Implemented by jobs to show that a keeper performed work\n @dev Automatically calculates the payment for the keeper and pays the keeper with bonded KP3R\n @param _keeper Address of the keeper that performed the work"
                  },
                  "functionSelector": "5feeb794",
                  "id": 13381,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "worked",
                  "nameLocation": "14054:6:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13379,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13378,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "14069:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13381,
                        "src": "14061:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13377,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14061:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14060:17:80"
                  },
                  "returnParameters": {
                    "id": 13380,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14086:0:80"
                  },
                  "scope": 13400,
                  "src": "14045:42:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13382,
                    "nodeType": "StructuredDocumentation",
                    "src": "14091:265:80",
                    "text": "@notice Implemented by jobs to show that a keeper performed work\n @dev Pays the keeper that performs the work with KP3R\n @param _keeper Address of the keeper that performed the work\n @param _payment The reward that should be allocated for the job"
                  },
                  "functionSelector": "11466d72",
                  "id": 13389,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bondedPayment",
                  "nameLocation": "14368:13:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13387,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13384,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "14390:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13389,
                        "src": "14382:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13383,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14382:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13386,
                        "mutability": "mutable",
                        "name": "_payment",
                        "nameLocation": "14407:8:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13389,
                        "src": "14399:16:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13385,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14399:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14381:35:80"
                  },
                  "returnParameters": {
                    "id": 13388,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14425:0:80"
                  },
                  "scope": 13400,
                  "src": "14359:67:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13390,
                    "nodeType": "StructuredDocumentation",
                    "src": "14430:322:80",
                    "text": "@notice Implemented by jobs to show that a keeper performed work\n @dev Pays the keeper that performs the work with a specific token\n @param _token The asset being awarded to the keeper\n @param _keeper Address of the keeper that performed the work\n @param _amount The reward that should be allocated"
                  },
                  "functionSelector": "dd2080d6",
                  "id": 13399,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "directTokenPayment",
                  "nameLocation": "14764:18:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13397,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13392,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "14796:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13399,
                        "src": "14788:14:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13391,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14788:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13394,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "14816:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13399,
                        "src": "14808:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13393,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14808:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13396,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "14837:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13399,
                        "src": "14829:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13395,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14829:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14782:66:80"
                  },
                  "returnParameters": {
                    "id": 13398,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14857:0:80"
                  },
                  "scope": 13400,
                  "src": "14755:103:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 13571,
              "src": "11662:3198:80",
              "usedErrors": [
                13348,
                13351
              ]
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13401,
                "nodeType": "StructuredDocumentation",
                "src": "14862:85:80",
                "text": "@title Keep3rJobOwnership contract\n @notice Handles the ownership of the jobs"
              },
              "fullyImplemented": false,
              "id": 13456,
              "linearizedBaseContracts": [
                13456
              ],
              "name": "IKeep3rJobOwnership",
              "nameLocation": "14957:19:80",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13402,
                    "nodeType": "StructuredDocumentation",
                    "src": "14994:276:80",
                    "text": "@notice Emitted when Keep3rJobOwnership#changeJobOwnership is called\n @param _job The address of the job proposed to have a change of owner\n @param _owner The current owner of the job\n @param _pendingOwner The new address proposed to be the owner of the job"
                  },
                  "id": 13410,
                  "name": "JobOwnershipChange",
                  "nameLocation": "15279:18:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13409,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13404,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "15314:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13410,
                        "src": "15298:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13403,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15298:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13406,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nameLocation": "15336:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13410,
                        "src": "15320:22:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13405,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15320:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13408,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_pendingOwner",
                        "nameLocation": "15360:13:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13410,
                        "src": "15344:29:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13407,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15344:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15297:77:80"
                  },
                  "src": "15273:102:80"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13411,
                    "nodeType": "StructuredDocumentation",
                    "src": "15379:257:80",
                    "text": "@notice Emitted when Keep3rJobOwnership#JobOwnershipAssent is called\n @param _job The address of the job which the proposed owner will now own\n @param _previousOwner The previous owner of the job\n @param _newOwner The new owner of the job"
                  },
                  "id": 13419,
                  "name": "JobOwnershipAssent",
                  "nameLocation": "15645:18:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13418,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13413,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "15680:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13419,
                        "src": "15664:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13412,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15664:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13415,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_previousOwner",
                        "nameLocation": "15702:14:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13419,
                        "src": "15686:30:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13414,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15686:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13417,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_newOwner",
                        "nameLocation": "15734:9:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13419,
                        "src": "15718:25:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13416,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15718:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15663:81:80"
                  },
                  "src": "15639:106:80"
                },
                {
                  "documentation": {
                    "id": 13420,
                    "nodeType": "StructuredDocumentation",
                    "src": "15762:71:80",
                    "text": "@notice Throws when the caller of the function is not the job owner"
                  },
                  "id": 13422,
                  "name": "OnlyJobOwner",
                  "nameLocation": "15842:12:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13421,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15854:2:80"
                  },
                  "src": "15836:21:80"
                },
                {
                  "documentation": {
                    "id": 13423,
                    "nodeType": "StructuredDocumentation",
                    "src": "15861:79:80",
                    "text": "@notice Throws when the caller of the function is not the pending job owner"
                  },
                  "id": 13425,
                  "name": "OnlyPendingJobOwner",
                  "nameLocation": "15949:19:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13424,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15968:2:80"
                  },
                  "src": "15943:28:80"
                },
                {
                  "documentation": {
                    "id": 13426,
                    "nodeType": "StructuredDocumentation",
                    "src": "15991:146:80",
                    "text": "@notice Maps the job to the owner of the job\n @param _job The address of the job\n @return _owner The address of the owner of the job"
                  },
                  "functionSelector": "878c723e",
                  "id": 13433,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobOwner",
                  "nameLocation": "16149:8:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13429,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13428,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "16166:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13433,
                        "src": "16158:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13427,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16158:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16157:14:80"
                  },
                  "returnParameters": {
                    "id": 13432,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13431,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nameLocation": "16203:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13433,
                        "src": "16195:14:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13430,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16195:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16194:16:80"
                  },
                  "scope": 13456,
                  "src": "16140:71:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13434,
                    "nodeType": "StructuredDocumentation",
                    "src": "16215:158:80",
                    "text": "@notice Maps the job to its pending owner\n @param _job The address of the job\n @return _pendingOwner The address of the pending owner of the job"
                  },
                  "functionSelector": "98e90a0f",
                  "id": 13441,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "jobPendingOwner",
                  "nameLocation": "16385:15:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13437,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13436,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "16409:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13441,
                        "src": "16401:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13435,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16401:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16400:14:80"
                  },
                  "returnParameters": {
                    "id": 13440,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13439,
                        "mutability": "mutable",
                        "name": "_pendingOwner",
                        "nameLocation": "16446:13:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13441,
                        "src": "16438:21:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13438,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16438:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16437:23:80"
                  },
                  "scope": 13456,
                  "src": "16376:85:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13442,
                    "nodeType": "StructuredDocumentation",
                    "src": "16479:163:80",
                    "text": "@notice Proposes a new address to be the owner of the job\n @param _job The address of the job\n @param _newOwner The address of the proposed new owner"
                  },
                  "functionSelector": "594a3a93",
                  "id": 13449,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "changeJobOwnership",
                  "nameLocation": "16654:18:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13447,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13444,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "16681:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13449,
                        "src": "16673:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13443,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16673:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13446,
                        "mutability": "mutable",
                        "name": "_newOwner",
                        "nameLocation": "16695:9:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13449,
                        "src": "16687:17:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13445,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16687:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16672:33:80"
                  },
                  "returnParameters": {
                    "id": 13448,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16714:0:80"
                  },
                  "scope": 13456,
                  "src": "16645:70:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13450,
                    "nodeType": "StructuredDocumentation",
                    "src": "16719:108:80",
                    "text": "@notice The proposed address accepts to be the owner of the job\n @param _job The address of the job"
                  },
                  "functionSelector": "59a2255e",
                  "id": 13455,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "acceptJobOwnership",
                  "nameLocation": "16839:18:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13453,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13452,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "16866:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13455,
                        "src": "16858:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13451,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16858:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16857:14:80"
                  },
                  "returnParameters": {
                    "id": 13454,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16880:0:80"
                  },
                  "scope": 13456,
                  "src": "16830:51:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 13571,
              "src": "14947:1936:80",
              "usedErrors": [
                13422,
                13425
              ]
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13457,
                "nodeType": "StructuredDocumentation",
                "src": "16885:112:80",
                "text": "@title Keep3rJobMigration contract\n @notice Handles the migration process of jobs to different addresses"
              },
              "fullyImplemented": false,
              "id": 13505,
              "linearizedBaseContracts": [
                13505
              ],
              "name": "IKeep3rJobMigration",
              "nameLocation": "17007:19:80",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13458,
                    "nodeType": "StructuredDocumentation",
                    "src": "17044:212:80",
                    "text": "@notice Emitted when Keep3rJobMigration#migrateJob function is called\n @param _fromJob The address of the job that requests to migrate\n @param _toJob The address at which the job requests to migrate"
                  },
                  "id": 13464,
                  "name": "JobMigrationRequested",
                  "nameLocation": "17265:21:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13463,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13460,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_fromJob",
                        "nameLocation": "17303:8:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13464,
                        "src": "17287:24:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13459,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "17287:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13462,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_toJob",
                        "nameLocation": "17321:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13464,
                        "src": "17313:14:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13461,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "17313:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17286:42:80"
                  },
                  "src": "17259:70:80"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13465,
                    "nodeType": "StructuredDocumentation",
                    "src": "17333:226:80",
                    "text": "@notice Emitted when Keep3rJobMigration#acceptJobMigration function is called\n @param _fromJob The address of the job that requested to migrate\n @param _toJob The address at which the job had requested to migrate"
                  },
                  "id": 13471,
                  "name": "JobMigrationSuccessful",
                  "nameLocation": "17568:22:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13470,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13467,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_fromJob",
                        "nameLocation": "17599:8:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13471,
                        "src": "17591:16:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13466,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "17591:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13469,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_toJob",
                        "nameLocation": "17625:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13471,
                        "src": "17609:22:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13468,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "17609:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17590:42:80"
                  },
                  "src": "17562:71:80"
                },
                {
                  "documentation": {
                    "id": 13472,
                    "nodeType": "StructuredDocumentation",
                    "src": "17650:108:80",
                    "text": "@notice Throws when the address of the job that requests to migrate wants to migrate to its same address"
                  },
                  "id": 13474,
                  "name": "JobMigrationImpossible",
                  "nameLocation": "17767:22:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13473,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17789:2:80"
                  },
                  "src": "17761:31:80"
                },
                {
                  "documentation": {
                    "id": 13475,
                    "nodeType": "StructuredDocumentation",
                    "src": "17796:117:80",
                    "text": "@notice Throws when the _toJob address differs from the address being tracked in the pendingJobMigrations mapping"
                  },
                  "id": 13477,
                  "name": "JobMigrationUnavailable",
                  "nameLocation": "17922:23:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13476,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17945:2:80"
                  },
                  "src": "17916:32:80"
                },
                {
                  "documentation": {
                    "id": 13478,
                    "nodeType": "StructuredDocumentation",
                    "src": "17952:70:80",
                    "text": "@notice Throws when cooldown between migrations has not yet passed"
                  },
                  "id": 13480,
                  "name": "JobMigrationLocked",
                  "nameLocation": "18031:18:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13479,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18049:2:80"
                  },
                  "src": "18025:27:80"
                },
                {
                  "documentation": {
                    "id": 13481,
                    "nodeType": "StructuredDocumentation",
                    "src": "18072:184:80",
                    "text": "@notice Maps the jobs that have requested a migration to the address they have requested to migrate to\n @return _toJob The address to which the job has requested to migrate to"
                  },
                  "functionSelector": "ec8ca643",
                  "id": 13488,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pendingJobMigrations",
                  "nameLocation": "18268:20:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13484,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13483,
                        "mutability": "mutable",
                        "name": "_fromJob",
                        "nameLocation": "18297:8:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13488,
                        "src": "18289:16:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13482,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18289:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18288:18:80"
                  },
                  "returnParameters": {
                    "id": 13487,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13486,
                        "mutability": "mutable",
                        "name": "_toJob",
                        "nameLocation": "18338:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13488,
                        "src": "18330:14:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13485,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18330:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18329:16:80"
                  },
                  "scope": 13505,
                  "src": "18259:87:80",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13489,
                    "nodeType": "StructuredDocumentation",
                    "src": "18364:262:80",
                    "text": "@notice Initializes the migration process for a job by adding the request to the pendingJobMigrations mapping\n @param _fromJob The address of the job that is requesting to migrate\n @param _toJob The address at which the job is requesting to migrate"
                  },
                  "functionSelector": "90a4684e",
                  "id": 13496,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "migrateJob",
                  "nameLocation": "18638:10:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13494,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13491,
                        "mutability": "mutable",
                        "name": "_fromJob",
                        "nameLocation": "18657:8:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13496,
                        "src": "18649:16:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13490,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18649:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13493,
                        "mutability": "mutable",
                        "name": "_toJob",
                        "nameLocation": "18675:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13496,
                        "src": "18667:14:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13492,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18667:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18648:34:80"
                  },
                  "returnParameters": {
                    "id": 13495,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18691:0:80"
                  },
                  "scope": 13505,
                  "src": "18629:63:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13497,
                    "nodeType": "StructuredDocumentation",
                    "src": "18696:249:80",
                    "text": "@notice Completes the migration process for a job\n @dev Unbond/withdraw process doesn't get migrated\n @param _fromJob The address of the job that requested to migrate\n @param _toJob The address to which the job wants to migrate to"
                  },
                  "functionSelector": "af320e81",
                  "id": 13504,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "acceptJobMigration",
                  "nameLocation": "18957:18:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13502,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13499,
                        "mutability": "mutable",
                        "name": "_fromJob",
                        "nameLocation": "18984:8:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13504,
                        "src": "18976:16:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13498,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18976:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13501,
                        "mutability": "mutable",
                        "name": "_toJob",
                        "nameLocation": "19002:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13504,
                        "src": "18994:14:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13500,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18994:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18975:34:80"
                  },
                  "returnParameters": {
                    "id": 13503,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19018:0:80"
                  },
                  "scope": 13505,
                  "src": "18948:71:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 13571,
              "src": "16997:2024:80",
              "usedErrors": [
                13474,
                13477,
                13480
              ]
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 13507,
                    "name": "IKeep3rJobFundableCredits",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13100,
                    "src": "19165:25:80"
                  },
                  "id": 13508,
                  "nodeType": "InheritanceSpecifier",
                  "src": "19165:25:80"
                },
                {
                  "baseName": {
                    "id": 13509,
                    "name": "IKeep3rJobFundableLiquidity",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13305,
                    "src": "19192:27:80"
                  },
                  "id": 13510,
                  "nodeType": "InheritanceSpecifier",
                  "src": "19192:27:80"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13506,
                "nodeType": "StructuredDocumentation",
                "src": "19023:108:80",
                "text": "@title Keep3rJobDisputable contract\n @notice Handles the actions that can be taken on a disputed job"
              },
              "fullyImplemented": false,
              "id": 13559,
              "linearizedBaseContracts": [
                13559,
                13305,
                13100
              ],
              "name": "IKeep3rJobDisputable",
              "nameLocation": "19141:20:80",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13511,
                    "nodeType": "StructuredDocumentation",
                    "src": "19237:322:80",
                    "text": "@notice Emitted when Keep3rJobDisputable#slashTokenFromJob is called\n @param _job The address of the job from which the token will be slashed\n @param _token The address of the token being slashed\n @param _slasher The user that slashes the token\n @param _amount The amount of the token being slashed"
                  },
                  "id": 13521,
                  "name": "JobSlashToken",
                  "nameLocation": "19568:13:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13520,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13513,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "19598:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13521,
                        "src": "19582:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13512,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19582:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13515,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "19612:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13521,
                        "src": "19604:14:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13514,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19604:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13517,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_slasher",
                        "nameLocation": "19636:8:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13521,
                        "src": "19620:24:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13516,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19620:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13519,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "19654:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13521,
                        "src": "19646:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13518,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19646:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19581:81:80"
                  },
                  "src": "19562:101:80"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13522,
                    "nodeType": "StructuredDocumentation",
                    "src": "19667:346:80",
                    "text": "@notice Emitted when Keep3rJobDisputable#slashLiquidityFromJob is called\n @param _job The address of the job from which the liquidity will be slashed\n @param _liquidity The address of the liquidity being slashed\n @param _slasher The user that slashes the liquidity\n @param _amount The amount of the liquidity being slashed"
                  },
                  "id": 13532,
                  "name": "JobSlashLiquidity",
                  "nameLocation": "20022:17:80",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13531,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13524,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "20056:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13532,
                        "src": "20040:20:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13523,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20040:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13526,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "20070:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13532,
                        "src": "20062:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13525,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20062:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13528,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_slasher",
                        "nameLocation": "20098:8:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13532,
                        "src": "20082:24:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13527,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20082:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13530,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "20116:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13532,
                        "src": "20108:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13529,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20108:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20039:85:80"
                  },
                  "src": "20016:109:80"
                },
                {
                  "documentation": {
                    "id": 13533,
                    "nodeType": "StructuredDocumentation",
                    "src": "20142:68:80",
                    "text": "@notice Throws when the token trying to be slashed doesn't exist"
                  },
                  "id": 13535,
                  "name": "JobTokenUnexistent",
                  "nameLocation": "20219:18:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13534,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20237:2:80"
                  },
                  "src": "20213:27:80"
                },
                {
                  "documentation": {
                    "id": 13536,
                    "nodeType": "StructuredDocumentation",
                    "src": "20244:75:80",
                    "text": "@notice Throws when someone tries to slash more tokens than the job has"
                  },
                  "id": 13538,
                  "name": "JobTokenInsufficient",
                  "nameLocation": "20328:20:80",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13537,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20348:2:80"
                  },
                  "src": "20322:29:80"
                },
                {
                  "documentation": {
                    "id": 13539,
                    "nodeType": "StructuredDocumentation",
                    "src": "20369:280:80",
                    "text": "@notice Allows governance or slasher to slash a job specific token\n @param _job The address of the job from which the token will be slashed\n @param _token The address of the token that will be slashed\n @param _amount The amount of the token that will be slashed"
                  },
                  "functionSelector": "f25e311b",
                  "id": 13548,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "slashTokenFromJob",
                  "nameLocation": "20661:17:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13546,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13541,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "20692:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13548,
                        "src": "20684:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13540,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20684:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13543,
                        "mutability": "mutable",
                        "name": "_token",
                        "nameLocation": "20710:6:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13548,
                        "src": "20702:14:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13542,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20702:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13545,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "20730:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13548,
                        "src": "20722:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13544,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20722:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20678:63:80"
                  },
                  "returnParameters": {
                    "id": 13547,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20750:0:80"
                  },
                  "scope": 13559,
                  "src": "20652:99:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13549,
                    "nodeType": "StructuredDocumentation",
                    "src": "20755:256:80",
                    "text": "@notice Allows governance or a slasher to slash liquidity from a job\n @param _job The address being slashed\n @param _liquidity The address of the liquidity that will be slashed\n @param _amount The amount of liquidity that will be slashed"
                  },
                  "functionSelector": "6e2a9ca6",
                  "id": 13558,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "slashLiquidityFromJob",
                  "nameLocation": "21023:21:80",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13556,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13551,
                        "mutability": "mutable",
                        "name": "_job",
                        "nameLocation": "21058:4:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13558,
                        "src": "21050:12:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13550,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "21050:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13553,
                        "mutability": "mutable",
                        "name": "_liquidity",
                        "nameLocation": "21076:10:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13558,
                        "src": "21068:18:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13552,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "21068:7:80",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13555,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "21100:7:80",
                        "nodeType": "VariableDeclaration",
                        "scope": 13558,
                        "src": "21092:15:80",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13554,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21092:7:80",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "21044:67:80"
                  },
                  "returnParameters": {
                    "id": 13557,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21120:0:80"
                  },
                  "scope": 13559,
                  "src": "21014:107:80",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 13571,
              "src": "19131:1992:80",
              "usedErrors": [
                13061,
                13064,
                13067,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13535,
                13538
              ]
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 13560,
                    "name": "IKeep3rJobOwnership",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13456,
                    "src": "21195:19:80"
                  },
                  "id": 13561,
                  "nodeType": "InheritanceSpecifier",
                  "src": "21195:19:80"
                },
                {
                  "baseName": {
                    "id": 13562,
                    "name": "IKeep3rJobDisputable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13559,
                    "src": "21216:20:80"
                  },
                  "id": 13563,
                  "nodeType": "InheritanceSpecifier",
                  "src": "21216:20:80"
                },
                {
                  "baseName": {
                    "id": 13564,
                    "name": "IKeep3rJobMigration",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13505,
                    "src": "21238:19:80"
                  },
                  "id": 13565,
                  "nodeType": "InheritanceSpecifier",
                  "src": "21238:19:80"
                },
                {
                  "baseName": {
                    "id": 13566,
                    "name": "IKeep3rJobManager",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13326,
                    "src": "21259:17:80"
                  },
                  "id": 13567,
                  "nodeType": "InheritanceSpecifier",
                  "src": "21259:17:80"
                },
                {
                  "baseName": {
                    "id": 13568,
                    "name": "IKeep3rJobWorkable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13400,
                    "src": "21278:18:80"
                  },
                  "id": 13569,
                  "nodeType": "InheritanceSpecifier",
                  "src": "21278:18:80"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "fullyImplemented": false,
              "id": 13570,
              "linearizedBaseContracts": [
                13570,
                13400,
                13326,
                13505,
                13559,
                13305,
                13100,
                13456
              ],
              "name": "IKeep3rJobs",
              "nameLocation": "21180:11:80",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 13571,
              "src": "21170:131:80",
              "usedErrors": [
                13061,
                13064,
                13067,
                13156,
                13159,
                13162,
                13165,
                13168,
                13171,
                13316,
                13319,
                13348,
                13351,
                13422,
                13425,
                13474,
                13477,
                13480,
                13535,
                13538
              ]
            }
          ],
          "src": "32:21270:80"
        },
        "id": 80
      },
      "solidity/interfaces/peripherals/IKeep3rKeepers.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/peripherals/IKeep3rKeepers.sol",
          "exportedSymbols": {
            "IKeep3rKeeperDisputable": [
              13659
            ],
            "IKeep3rKeeperFundable": [
              13623
            ],
            "IKeep3rKeepers": [
              13663
            ]
          },
          "id": 13664,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 13572,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:81"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13573,
                "nodeType": "StructuredDocumentation",
                "src": "65:101:81",
                "text": "@title Keep3rKeeperFundable contract\n @notice Handles the actions required to become a keeper"
              },
              "fullyImplemented": false,
              "id": 13623,
              "linearizedBaseContracts": [
                13623
              ],
              "name": "IKeep3rKeeperFundable",
              "nameLocation": "176:21:81",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13574,
                    "nodeType": "StructuredDocumentation",
                    "src": "215:238:81",
                    "text": "@notice Emitted when Keep3rKeeperFundable#activate is called\n @param _keeper The keeper that has been activated\n @param _bond The asset the keeper has bonded\n @param _amount The amount of the asset the keeper has bonded"
                  },
                  "id": 13582,
                  "name": "Activation",
                  "nameLocation": "462:10:81",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13581,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13576,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "489:7:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13582,
                        "src": "473:23:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13575,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "473:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13578,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_bond",
                        "nameLocation": "514:5:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13582,
                        "src": "498:21:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13577,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "498:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13580,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "529:7:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13582,
                        "src": "521:15:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13579,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "521:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "472:65:81"
                  },
                  "src": "456:82:81"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13583,
                    "nodeType": "StructuredDocumentation",
                    "src": "542:252:81",
                    "text": "@notice Emitted when Keep3rKeeperFundable#withdraw is called\n @param _keeper The caller of Keep3rKeeperFundable#withdraw function\n @param _bond The asset to withdraw from the bonding pool\n @param _amount The amount of funds withdrawn"
                  },
                  "id": 13591,
                  "name": "Withdrawal",
                  "nameLocation": "803:10:81",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13590,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13585,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "830:7:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13591,
                        "src": "814:23:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13584,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "814:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13587,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_bond",
                        "nameLocation": "855:5:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13591,
                        "src": "839:21:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13586,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "839:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13589,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "870:7:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13591,
                        "src": "862:15:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13588,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "862:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "813:65:81"
                  },
                  "src": "797:82:81"
                },
                {
                  "documentation": {
                    "id": 13592,
                    "nodeType": "StructuredDocumentation",
                    "src": "896:88:81",
                    "text": "@notice Throws when the address that is trying to register as a job is already a job"
                  },
                  "id": 13594,
                  "name": "AlreadyAJob",
                  "nameLocation": "993:11:81",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13593,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1004:2:81"
                  },
                  "src": "987:20:81"
                },
                {
                  "documentation": {
                    "id": 13595,
                    "nodeType": "StructuredDocumentation",
                    "src": "1025:151:81",
                    "text": "@notice Beginning of the bonding process\n @param _bonding The asset being bonded\n @param _amount The amount of bonding asset being bonded"
                  },
                  "functionSelector": "a515366a",
                  "id": 13602,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bond",
                  "nameLocation": "1188:4:81",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13600,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13597,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "1201:8:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13602,
                        "src": "1193:16:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13596,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1193:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13599,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1219:7:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13602,
                        "src": "1211:15:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13598,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1211:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1192:35:81"
                  },
                  "returnParameters": {
                    "id": 13601,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1236:0:81"
                  },
                  "scope": 13623,
                  "src": "1179:58:81",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13603,
                    "nodeType": "StructuredDocumentation",
                    "src": "1241:143:81",
                    "text": "@notice Beginning of the unbonding process\n @param _bonding The asset being unbonded\n @param _amount Allows for partial unbonding"
                  },
                  "functionSelector": "a5d059ca",
                  "id": 13610,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unbond",
                  "nameLocation": "1396:6:81",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13608,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13605,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "1411:8:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13610,
                        "src": "1403:16:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13604,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1403:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13607,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "1429:7:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13610,
                        "src": "1421:15:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13606,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1421:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1402:35:81"
                  },
                  "returnParameters": {
                    "id": 13609,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1446:0:81"
                  },
                  "scope": 13623,
                  "src": "1387:60:81",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13611,
                    "nodeType": "StructuredDocumentation",
                    "src": "1451:135:81",
                    "text": "@notice End of the bonding process after bonding time has passed\n @param _bonding The asset being activated as bond collateral"
                  },
                  "functionSelector": "1c5a9d9c",
                  "id": 13616,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "activate",
                  "nameLocation": "1598:8:81",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13614,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13613,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "1615:8:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13616,
                        "src": "1607:16:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13612,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1607:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1606:18:81"
                  },
                  "returnParameters": {
                    "id": 13615,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1633:0:81"
                  },
                  "scope": 13623,
                  "src": "1589:45:81",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13617,
                    "nodeType": "StructuredDocumentation",
                    "src": "1638:121:81",
                    "text": "@notice Withdraw funds after unbonding has finished\n @param _bonding The asset to withdraw from the bonding pool"
                  },
                  "functionSelector": "51cff8d9",
                  "id": 13622,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nameLocation": "1771:8:81",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13620,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13619,
                        "mutability": "mutable",
                        "name": "_bonding",
                        "nameLocation": "1788:8:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13622,
                        "src": "1780:16:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13618,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1780:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1779:18:81"
                  },
                  "returnParameters": {
                    "id": 13621,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1806:0:81"
                  },
                  "scope": 13623,
                  "src": "1762:45:81",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 13664,
              "src": "166:1643:81",
              "usedErrors": [
                13594
              ]
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13624,
                "nodeType": "StructuredDocumentation",
                "src": "1811:114:81",
                "text": "@title Keep3rKeeperDisputable contract\n @notice Handles the actions that can be taken on a disputed keeper"
              },
              "fullyImplemented": false,
              "id": 13659,
              "linearizedBaseContracts": [
                13659
              ],
              "name": "IKeep3rKeeperDisputable",
              "nameLocation": "1935:23:81",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13625,
                    "nodeType": "StructuredDocumentation",
                    "src": "1976:257:81",
                    "text": "@notice Emitted when Keep3rKeeperDisputable#slash is called\n @param _keeper The address of the slashed keeper\n @param _slasher The user that called Keep3rKeeperDisputable#slash\n @param _amount The amount of credits slashed from the keeper"
                  },
                  "id": 13633,
                  "name": "KeeperSlash",
                  "nameLocation": "2242:11:81",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13632,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13627,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "2270:7:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13633,
                        "src": "2254:23:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13626,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2254:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13629,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_slasher",
                        "nameLocation": "2295:8:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13633,
                        "src": "2279:24:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13628,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2279:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13631,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "2313:7:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13633,
                        "src": "2305:15:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13630,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2305:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2253:68:81"
                  },
                  "src": "2236:86:81"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13634,
                    "nodeType": "StructuredDocumentation",
                    "src": "2326:192:81",
                    "text": "@notice Emitted when Keep3rKeeperDisputable#revoke is called\n @param _keeper The address of the revoked keeper\n @param _slasher The user that called Keep3rKeeperDisputable#revoke"
                  },
                  "id": 13640,
                  "name": "KeeperRevoke",
                  "nameLocation": "2527:12:81",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13639,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13636,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "2556:7:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13640,
                        "src": "2540:23:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13635,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2540:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13638,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "_slasher",
                        "nameLocation": "2581:8:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13640,
                        "src": "2565:24:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13637,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2565:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2539:51:81"
                  },
                  "src": "2521:70:81"
                },
                {
                  "documentation": {
                    "id": 13641,
                    "nodeType": "StructuredDocumentation",
                    "src": "2609:282:81",
                    "text": "@notice Allows governance to slash a keeper based on a dispute\n @param _keeper The address being slashed\n @param _bonded The asset being slashed\n @param _bondAmount The bonded amount being slashed\n @param _unbondAmount The pending unbond amount being slashed"
                  },
                  "functionSelector": "c20297f0",
                  "id": 13652,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "slash",
                  "nameLocation": "2903:5:81",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13650,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13643,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "2922:7:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13652,
                        "src": "2914:15:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13642,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2914:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13645,
                        "mutability": "mutable",
                        "name": "_bonded",
                        "nameLocation": "2943:7:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13652,
                        "src": "2935:15:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13644,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2935:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13647,
                        "mutability": "mutable",
                        "name": "_bondAmount",
                        "nameLocation": "2964:11:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13652,
                        "src": "2956:19:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13646,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2956:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 13649,
                        "mutability": "mutable",
                        "name": "_unbondAmount",
                        "nameLocation": "2989:13:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13652,
                        "src": "2981:21:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13648,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2981:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2908:98:81"
                  },
                  "returnParameters": {
                    "id": 13651,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3015:0:81"
                  },
                  "scope": 13659,
                  "src": "2894:122:81",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13653,
                    "nodeType": "StructuredDocumentation",
                    "src": "3020:112:81",
                    "text": "@notice Blacklists a keeper from participating in the network\n @param _keeper The address being slashed"
                  },
                  "functionSelector": "74a8f103",
                  "id": 13658,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "revoke",
                  "nameLocation": "3144:6:81",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13656,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13655,
                        "mutability": "mutable",
                        "name": "_keeper",
                        "nameLocation": "3159:7:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 13658,
                        "src": "3151:15:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13654,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3151:7:81",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3150:17:81"
                  },
                  "returnParameters": {
                    "id": 13657,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3176:0:81"
                  },
                  "scope": 13659,
                  "src": "3135:42:81",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 13664,
              "src": "1925:1254:81",
              "usedErrors": []
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 13661,
                    "name": "IKeep3rKeeperDisputable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 13659,
                    "src": "3289:23:81"
                  },
                  "id": 13662,
                  "nodeType": "InheritanceSpecifier",
                  "src": "3289:23:81"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13660,
                "nodeType": "StructuredDocumentation",
                "src": "3227:34:81",
                "text": "@title Keep3rKeepers contract"
              },
              "fullyImplemented": false,
              "id": 13663,
              "linearizedBaseContracts": [
                13663,
                13659
              ],
              "name": "IKeep3rKeepers",
              "nameLocation": "3271:14:81",
              "nodeType": "ContractDefinition",
              "nodes": [],
              "scope": 13664,
              "src": "3261:56:81",
              "usedErrors": []
            }
          ],
          "src": "32:3286:81"
        },
        "id": 81
      },
      "solidity/interfaces/peripherals/IKeep3rParameters.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/peripherals/IKeep3rParameters.sol",
          "exportedSymbols": {
            "IBaseErrors": [
              12793
            ],
            "IKeep3rParameters": [
              13858
            ]
          },
          "id": 13859,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 13665,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:82"
            },
            {
              "absolutePath": "solidity/interfaces/peripherals/IBaseErrors.sol",
              "file": "./IBaseErrors.sol",
              "id": 13666,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 13859,
              "sourceUnit": 12794,
              "src": "65:27:82",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 13668,
                    "name": "IBaseErrors",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 12793,
                    "src": "231:11:82"
                  },
                  "id": 13669,
                  "nodeType": "InheritanceSpecifier",
                  "src": "231:11:82"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13667,
                "nodeType": "StructuredDocumentation",
                "src": "94:105:82",
                "text": "@title Keep3rParameters contract\n @notice Handles and sets all the required parameters for Keep3r"
              },
              "fullyImplemented": false,
              "id": 13858,
              "linearizedBaseContracts": [
                13858,
                12793
              ],
              "name": "IKeep3rParameters",
              "nameLocation": "210:17:82",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13670,
                    "nodeType": "StructuredDocumentation",
                    "src": "260:126:82",
                    "text": "@notice Emitted when the Keep3rHelper address is changed\n @param _keep3rHelper The address of Keep3rHelper's contract"
                  },
                  "id": 13674,
                  "name": "Keep3rHelperChange",
                  "nameLocation": "395:18:82",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13673,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13672,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_keep3rHelper",
                        "nameLocation": "422:13:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13674,
                        "src": "414:21:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13671,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "414:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "413:23:82"
                  },
                  "src": "389:48:82"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13675,
                    "nodeType": "StructuredDocumentation",
                    "src": "441:114:82",
                    "text": "@notice Emitted when the Keep3rV1 address is changed\n @param _keep3rV1 The address of Keep3rV1's contract"
                  },
                  "id": 13679,
                  "name": "Keep3rV1Change",
                  "nameLocation": "564:14:82",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13678,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13677,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "587:9:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13679,
                        "src": "579:17:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13676,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "579:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "578:19:82"
                  },
                  "src": "558:40:82"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13680,
                    "nodeType": "StructuredDocumentation",
                    "src": "602:129:82",
                    "text": "@notice Emitted when the Keep3rV1Proxy address is changed\n @param _keep3rV1Proxy The address of Keep3rV1Proxy's contract"
                  },
                  "id": 13684,
                  "name": "Keep3rV1ProxyChange",
                  "nameLocation": "740:19:82",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13683,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13682,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "768:14:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13684,
                        "src": "760:22:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13681,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "760:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "759:24:82"
                  },
                  "src": "734:50:82"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13685,
                    "nodeType": "StructuredDocumentation",
                    "src": "788:123:82",
                    "text": "@notice Emitted when the KP3R-WETH pool address is changed\n @param _kp3rWethPool The address of the KP3R-WETH pool"
                  },
                  "id": 13689,
                  "name": "Kp3rWethPoolChange",
                  "nameLocation": "920:18:82",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13688,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13687,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "947:13:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13689,
                        "src": "939:21:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13686,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "939:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "938:23:82"
                  },
                  "src": "914:48:82"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13690,
                    "nodeType": "StructuredDocumentation",
                    "src": "966:84:82",
                    "text": "@notice Emitted when bondTime is changed\n @param _bondTime The new bondTime"
                  },
                  "id": 13694,
                  "name": "BondTimeChange",
                  "nameLocation": "1059:14:82",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13693,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13692,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_bondTime",
                        "nameLocation": "1082:9:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13694,
                        "src": "1074:17:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13691,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1074:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1073:19:82"
                  },
                  "src": "1053:40:82"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13695,
                    "nodeType": "StructuredDocumentation",
                    "src": "1097:110:82",
                    "text": "@notice Emitted when _liquidityMinimum is changed\n @param _liquidityMinimum The new _liquidityMinimum"
                  },
                  "id": 13699,
                  "name": "LiquidityMinimumChange",
                  "nameLocation": "1216:22:82",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13698,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13697,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_liquidityMinimum",
                        "nameLocation": "1247:17:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13699,
                        "src": "1239:25:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13696,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1239:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1238:27:82"
                  },
                  "src": "1210:56:82"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13700,
                    "nodeType": "StructuredDocumentation",
                    "src": "1270:92:82",
                    "text": "@notice Emitted when _unbondTime is changed\n @param _unbondTime The new _unbondTime"
                  },
                  "id": 13704,
                  "name": "UnbondTimeChange",
                  "nameLocation": "1371:16:82",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13703,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13702,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_unbondTime",
                        "nameLocation": "1396:11:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13704,
                        "src": "1388:19:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13701,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1388:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1387:21:82"
                  },
                  "src": "1365:44:82"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13705,
                    "nodeType": "StructuredDocumentation",
                    "src": "1413:110:82",
                    "text": "@notice Emitted when _rewardPeriodTime is changed\n @param _rewardPeriodTime The new _rewardPeriodTime"
                  },
                  "id": 13709,
                  "name": "RewardPeriodTimeChange",
                  "nameLocation": "1532:22:82",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13708,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13707,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_rewardPeriodTime",
                        "nameLocation": "1563:17:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13709,
                        "src": "1555:25:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13706,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1555:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1554:27:82"
                  },
                  "src": "1526:56:82"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13710,
                    "nodeType": "StructuredDocumentation",
                    "src": "1586:109:82",
                    "text": "@notice Emitted when the inflationPeriod is changed\n @param _inflationPeriod The new inflationPeriod"
                  },
                  "id": 13714,
                  "name": "InflationPeriodChange",
                  "nameLocation": "1704:21:82",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13713,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13712,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_inflationPeriod",
                        "nameLocation": "1734:16:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13714,
                        "src": "1726:24:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13711,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1726:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1725:26:82"
                  },
                  "src": "1698:54:82"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13715,
                    "nodeType": "StructuredDocumentation",
                    "src": "1756:87:82",
                    "text": "@notice Emitted when the fee is changed\n @param _fee The new token credits fee"
                  },
                  "id": 13719,
                  "name": "FeeChange",
                  "nameLocation": "1852:9:82",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13718,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13717,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_fee",
                        "nameLocation": "1870:4:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13719,
                        "src": "1862:12:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13716,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1862:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1861:14:82"
                  },
                  "src": "1846:30:82"
                },
                {
                  "documentation": {
                    "id": 13720,
                    "nodeType": "StructuredDocumentation",
                    "src": "1896:113:82",
                    "text": "@notice Address of Keep3rHelper's contract\n @return _keep3rHelper The address of Keep3rHelper's contract"
                  },
                  "functionSelector": "f11a1d1a",
                  "id": 13725,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "keep3rHelper",
                  "nameLocation": "2021:12:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13721,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2033:2:82"
                  },
                  "returnParameters": {
                    "id": 13724,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13723,
                        "mutability": "mutable",
                        "name": "_keep3rHelper",
                        "nameLocation": "2067:13:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13725,
                        "src": "2059:21:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13722,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2059:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2058:23:82"
                  },
                  "scope": 13858,
                  "src": "2012:70:82",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13726,
                    "nodeType": "StructuredDocumentation",
                    "src": "2086:101:82",
                    "text": "@notice Address of Keep3rV1's contract\n @return _keep3rV1 The address of Keep3rV1's contract"
                  },
                  "functionSelector": "1ef94b91",
                  "id": 13731,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "keep3rV1",
                  "nameLocation": "2199:8:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13727,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2207:2:82"
                  },
                  "returnParameters": {
                    "id": 13730,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13729,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "2241:9:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13731,
                        "src": "2233:17:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13728,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2233:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2232:19:82"
                  },
                  "scope": 13858,
                  "src": "2190:62:82",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13732,
                    "nodeType": "StructuredDocumentation",
                    "src": "2256:116:82",
                    "text": "@notice Address of Keep3rV1Proxy's contract\n @return _keep3rV1Proxy The address of Keep3rV1Proxy's contract"
                  },
                  "functionSelector": "c7ae40d0",
                  "id": 13737,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "keep3rV1Proxy",
                  "nameLocation": "2384:13:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13733,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2397:2:82"
                  },
                  "returnParameters": {
                    "id": 13736,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13735,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "2431:14:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13737,
                        "src": "2423:22:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13734,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2423:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2422:24:82"
                  },
                  "scope": 13858,
                  "src": "2375:72:82",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13738,
                    "nodeType": "StructuredDocumentation",
                    "src": "2451:99:82",
                    "text": "@notice Address of the KP3R-WETH pool\n @return _kp3rWethPool The address of KP3R-WETH pool"
                  },
                  "functionSelector": "7b40c913",
                  "id": 13743,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "kp3rWethPool",
                  "nameLocation": "2562:12:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13739,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2574:2:82"
                  },
                  "returnParameters": {
                    "id": 13742,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13741,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "2608:13:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13743,
                        "src": "2600:21:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13740,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2600:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2599:23:82"
                  },
                  "scope": 13858,
                  "src": "2553:70:82",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13744,
                    "nodeType": "StructuredDocumentation",
                    "src": "2627:160:82",
                    "text": "@notice The amount of time required to pass after a keeper has bonded assets for it to be able to activate\n @return _days The required bondTime in days"
                  },
                  "functionSelector": "5ebe23f0",
                  "id": 13749,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bondTime",
                  "nameLocation": "2799:8:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13745,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2807:2:82"
                  },
                  "returnParameters": {
                    "id": 13748,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13747,
                        "mutability": "mutable",
                        "name": "_days",
                        "nameLocation": "2841:5:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13749,
                        "src": "2833:13:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13746,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2833:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2832:15:82"
                  },
                  "scope": 13858,
                  "src": "2790:58:82",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13750,
                    "nodeType": "StructuredDocumentation",
                    "src": "2852:145:82",
                    "text": "@notice The amount of time required to pass before a keeper can unbond what he has bonded\n @return _days The required unbondTime in days"
                  },
                  "functionSelector": "a7d2e784",
                  "id": 13755,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unbondTime",
                  "nameLocation": "3009:10:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13751,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3019:2:82"
                  },
                  "returnParameters": {
                    "id": 13754,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13753,
                        "mutability": "mutable",
                        "name": "_days",
                        "nameLocation": "3053:5:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13755,
                        "src": "3045:13:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13752,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3045:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3044:15:82"
                  },
                  "scope": 13858,
                  "src": "3000:60:82",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13756,
                    "nodeType": "StructuredDocumentation",
                    "src": "3064:142:82",
                    "text": "@notice The minimum amount of liquidity required to fund a job per liquidity\n @return _amount The minimum amount of liquidity in KP3R"
                  },
                  "functionSelector": "633fb68f",
                  "id": 13761,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityMinimum",
                  "nameLocation": "3218:16:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13757,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3234:2:82"
                  },
                  "returnParameters": {
                    "id": 13760,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13759,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "3268:7:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13761,
                        "src": "3260:15:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13758,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3260:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3259:17:82"
                  },
                  "scope": 13858,
                  "src": "3209:68:82",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13762,
                    "nodeType": "StructuredDocumentation",
                    "src": "3281:129:82",
                    "text": "@notice The amount of time between each scheduled credits reward given to a job\n @return _days The reward period in days"
                  },
                  "functionSelector": "768b5d90",
                  "id": 13767,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "rewardPeriodTime",
                  "nameLocation": "3422:16:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13763,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3438:2:82"
                  },
                  "returnParameters": {
                    "id": 13766,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13765,
                        "mutability": "mutable",
                        "name": "_days",
                        "nameLocation": "3472:5:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13767,
                        "src": "3464:13:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13764,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3464:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3463:15:82"
                  },
                  "scope": 13858,
                  "src": "3413:66:82",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13768,
                    "nodeType": "StructuredDocumentation",
                    "src": "3483:165:82",
                    "text": "@notice The inflation period is the denominator used to regulate the emission of KP3R\n @return _period The denominator used to regulate the emission of KP3R"
                  },
                  "functionSelector": "fc253d2b",
                  "id": 13773,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "inflationPeriod",
                  "nameLocation": "3660:15:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13769,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3675:2:82"
                  },
                  "returnParameters": {
                    "id": 13772,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13771,
                        "mutability": "mutable",
                        "name": "_period",
                        "nameLocation": "3709:7:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13773,
                        "src": "3701:15:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13770,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3701:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3700:17:82"
                  },
                  "scope": 13858,
                  "src": "3651:67:82",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13774,
                    "nodeType": "StructuredDocumentation",
                    "src": "3722:178:82",
                    "text": "@notice The fee to be sent to governance when a user adds liquidity to a job\n @return _amount The fee amount to be sent to governance when a user adds liquidity to a job"
                  },
                  "functionSelector": "ddca3f43",
                  "id": 13779,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fee",
                  "nameLocation": "3912:3:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13775,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3915:2:82"
                  },
                  "returnParameters": {
                    "id": 13778,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13777,
                        "mutability": "mutable",
                        "name": "_amount",
                        "nameLocation": "3949:7:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13779,
                        "src": "3941:15:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13776,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3941:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3940:17:82"
                  },
                  "scope": 13858,
                  "src": "3903:55:82",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13780,
                    "nodeType": "StructuredDocumentation",
                    "src": "3975:83:82",
                    "text": "@notice Throws if the reward period is less than the minimum reward period time"
                  },
                  "id": 13782,
                  "name": "MinRewardPeriod",
                  "nameLocation": "4067:15:82",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13781,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4082:2:82"
                  },
                  "src": "4061:24:82"
                },
                {
                  "documentation": {
                    "id": 13783,
                    "nodeType": "StructuredDocumentation",
                    "src": "4089:58:82",
                    "text": "@notice Throws if either a job or a keeper is disputed"
                  },
                  "id": 13785,
                  "name": "Disputed",
                  "nameLocation": "4156:8:82",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13784,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4164:2:82"
                  },
                  "src": "4150:17:82"
                },
                {
                  "documentation": {
                    "id": 13786,
                    "nodeType": "StructuredDocumentation",
                    "src": "4171:48:82",
                    "text": "@notice Throws if there are no bonded assets"
                  },
                  "id": 13788,
                  "name": "BondsUnexistent",
                  "nameLocation": "4228:15:82",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13787,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4243:2:82"
                  },
                  "src": "4222:24:82"
                },
                {
                  "documentation": {
                    "id": 13789,
                    "nodeType": "StructuredDocumentation",
                    "src": "4250:75:82",
                    "text": "@notice Throws if the time required to bond an asset has not passed yet"
                  },
                  "id": 13791,
                  "name": "BondsLocked",
                  "nameLocation": "4334:11:82",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13790,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4345:2:82"
                  },
                  "src": "4328:20:82"
                },
                {
                  "documentation": {
                    "id": 13792,
                    "nodeType": "StructuredDocumentation",
                    "src": "4352:52:82",
                    "text": "@notice Throws if there are no bonds to withdraw"
                  },
                  "id": 13794,
                  "name": "UnbondsUnexistent",
                  "nameLocation": "4413:17:82",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13793,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4430:2:82"
                  },
                  "src": "4407:26:82"
                },
                {
                  "documentation": {
                    "id": 13795,
                    "nodeType": "StructuredDocumentation",
                    "src": "4437:80:82",
                    "text": "@notice Throws if the time required to withdraw the bonds has not passed yet"
                  },
                  "id": 13797,
                  "name": "UnbondsLocked",
                  "nameLocation": "4526:13:82",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13796,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4539:2:82"
                  },
                  "src": "4520:22:82"
                },
                {
                  "documentation": {
                    "id": 13798,
                    "nodeType": "StructuredDocumentation",
                    "src": "4560:93:82",
                    "text": "@notice Sets the Keep3rHelper address\n @param _keep3rHelper The Keep3rHelper address"
                  },
                  "functionSelector": "72da828a",
                  "id": 13803,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKeep3rHelper",
                  "nameLocation": "4665:15:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13801,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13800,
                        "mutability": "mutable",
                        "name": "_keep3rHelper",
                        "nameLocation": "4689:13:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13803,
                        "src": "4681:21:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13799,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4681:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4680:23:82"
                  },
                  "returnParameters": {
                    "id": 13802,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4712:0:82"
                  },
                  "scope": 13858,
                  "src": "4656:57:82",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13804,
                    "nodeType": "StructuredDocumentation",
                    "src": "4717:81:82",
                    "text": "@notice Sets the Keep3rV1 address\n @param _keep3rV1 The Keep3rV1 address"
                  },
                  "functionSelector": "ec00cdfc",
                  "id": 13809,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKeep3rV1",
                  "nameLocation": "4810:11:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13807,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13806,
                        "mutability": "mutable",
                        "name": "_keep3rV1",
                        "nameLocation": "4830:9:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13809,
                        "src": "4822:17:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13805,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4822:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4821:19:82"
                  },
                  "returnParameters": {
                    "id": 13808,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4849:0:82"
                  },
                  "scope": 13858,
                  "src": "4801:49:82",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13810,
                    "nodeType": "StructuredDocumentation",
                    "src": "4854:96:82",
                    "text": "@notice Sets the Keep3rV1Proxy address\n @param _keep3rV1Proxy The Keep3rV1Proxy address"
                  },
                  "functionSelector": "cb4be2bb",
                  "id": 13815,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKeep3rV1Proxy",
                  "nameLocation": "4962:16:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13813,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13812,
                        "mutability": "mutable",
                        "name": "_keep3rV1Proxy",
                        "nameLocation": "4987:14:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13815,
                        "src": "4979:22:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13811,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4979:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4978:24:82"
                  },
                  "returnParameters": {
                    "id": 13814,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5011:0:82"
                  },
                  "scope": 13858,
                  "src": "4953:59:82",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13816,
                    "nodeType": "StructuredDocumentation",
                    "src": "5016:97:82",
                    "text": "@notice Sets the KP3R-WETH pool address\n @param _kp3rWethPool The KP3R-WETH pool address"
                  },
                  "functionSelector": "160e1e31",
                  "id": 13821,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setKp3rWethPool",
                  "nameLocation": "5125:15:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13819,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13818,
                        "mutability": "mutable",
                        "name": "_kp3rWethPool",
                        "nameLocation": "5149:13:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13821,
                        "src": "5141:21:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13817,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5141:7:82",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5140:23:82"
                  },
                  "returnParameters": {
                    "id": 13820,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5172:0:82"
                  },
                  "scope": 13858,
                  "src": "5116:57:82",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13822,
                    "nodeType": "StructuredDocumentation",
                    "src": "5177:100:82",
                    "text": "@notice Sets the bond time required to activate as a keeper\n @param _bond The new bond time"
                  },
                  "functionSelector": "b7e77340",
                  "id": 13827,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setBondTime",
                  "nameLocation": "5289:11:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13825,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13824,
                        "mutability": "mutable",
                        "name": "_bond",
                        "nameLocation": "5309:5:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13827,
                        "src": "5301:13:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13823,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5301:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5300:15:82"
                  },
                  "returnParameters": {
                    "id": 13826,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5324:0:82"
                  },
                  "scope": 13858,
                  "src": "5280:45:82",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13828,
                    "nodeType": "StructuredDocumentation",
                    "src": "5329:110:82",
                    "text": "@notice Sets the unbond time required unbond what has been bonded\n @param _unbond The new unbond time"
                  },
                  "functionSelector": "8fe204dd",
                  "id": 13833,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setUnbondTime",
                  "nameLocation": "5451:13:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13831,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13830,
                        "mutability": "mutable",
                        "name": "_unbond",
                        "nameLocation": "5473:7:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13833,
                        "src": "5465:15:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13829,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5465:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5464:17:82"
                  },
                  "returnParameters": {
                    "id": 13832,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5490:0:82"
                  },
                  "scope": 13858,
                  "src": "5442:49:82",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13834,
                    "nodeType": "StructuredDocumentation",
                    "src": "5495:138:82",
                    "text": "@notice Sets the minimum amount of liquidity required to fund a job\n @param _liquidityMinimum The new minimum amount of liquidity"
                  },
                  "functionSelector": "ebbb6194",
                  "id": 13839,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLiquidityMinimum",
                  "nameLocation": "5645:19:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13837,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13836,
                        "mutability": "mutable",
                        "name": "_liquidityMinimum",
                        "nameLocation": "5673:17:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13839,
                        "src": "5665:25:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13835,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5665:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5664:27:82"
                  },
                  "returnParameters": {
                    "id": 13838,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5700:0:82"
                  },
                  "scope": 13858,
                  "src": "5636:65:82",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13840,
                    "nodeType": "StructuredDocumentation",
                    "src": "5705:154:82",
                    "text": "@notice Sets the time required to pass between rewards for jobs\n @param _rewardPeriodTime The new amount of time required to pass between rewards"
                  },
                  "functionSelector": "cb54694d",
                  "id": 13845,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setRewardPeriodTime",
                  "nameLocation": "5871:19:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13843,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13842,
                        "mutability": "mutable",
                        "name": "_rewardPeriodTime",
                        "nameLocation": "5899:17:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13845,
                        "src": "5891:25:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13841,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5891:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5890:27:82"
                  },
                  "returnParameters": {
                    "id": 13844,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5926:0:82"
                  },
                  "scope": 13858,
                  "src": "5862:65:82",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13846,
                    "nodeType": "StructuredDocumentation",
                    "src": "5931:96:82",
                    "text": "@notice Sets the new inflation period\n @param _inflationPeriod The new inflation period"
                  },
                  "functionSelector": "b2392233",
                  "id": 13851,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setInflationPeriod",
                  "nameLocation": "6039:18:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13849,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13848,
                        "mutability": "mutable",
                        "name": "_inflationPeriod",
                        "nameLocation": "6066:16:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13851,
                        "src": "6058:24:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13847,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6058:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6057:26:82"
                  },
                  "returnParameters": {
                    "id": 13850,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6092:0:82"
                  },
                  "scope": 13858,
                  "src": "6030:63:82",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13852,
                    "nodeType": "StructuredDocumentation",
                    "src": "6097:58:82",
                    "text": "@notice Sets the new fee\n @param _fee The new fee"
                  },
                  "functionSelector": "69fe0e2d",
                  "id": 13857,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setFee",
                  "nameLocation": "6167:6:82",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13855,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13854,
                        "mutability": "mutable",
                        "name": "_fee",
                        "nameLocation": "6182:4:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 13857,
                        "src": "6174:12:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13853,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6174:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6173:14:82"
                  },
                  "returnParameters": {
                    "id": 13856,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6196:0:82"
                  },
                  "scope": 13858,
                  "src": "6158:39:82",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 13859,
              "src": "200:5999:82",
              "usedErrors": [
                12792,
                13782,
                13785,
                13788,
                13791,
                13794,
                13797
              ]
            }
          ],
          "src": "32:6168:82"
        },
        "id": 82
      },
      "solidity/interfaces/peripherals/IKeep3rRoles.sol": {
        "ast": {
          "absolutePath": "solidity/interfaces/peripherals/IKeep3rRoles.sol",
          "exportedSymbols": {
            "IKeep3rRoles": [
              13940
            ]
          },
          "id": 13941,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 13860,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4",
                "<",
                "0.9",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "32:31:83"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 13861,
                "nodeType": "StructuredDocumentation",
                "src": "65:78:83",
                "text": "@title Keep3rRoles contract\n @notice Manages the Keep3r specific roles"
              },
              "fullyImplemented": false,
              "id": 13940,
              "linearizedBaseContracts": [
                13940
              ],
              "name": "IKeep3rRoles",
              "nameLocation": "153:12:83",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13862,
                    "nodeType": "StructuredDocumentation",
                    "src": "183:94:83",
                    "text": "@notice Emitted when a slasher is added\n @param _slasher Address of the added slasher"
                  },
                  "id": 13866,
                  "name": "SlasherAdded",
                  "nameLocation": "286:12:83",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13865,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13864,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_slasher",
                        "nameLocation": "307:8:83",
                        "nodeType": "VariableDeclaration",
                        "scope": 13866,
                        "src": "299:16:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13863,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "299:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "298:18:83"
                  },
                  "src": "280:37:83"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13867,
                    "nodeType": "StructuredDocumentation",
                    "src": "321:98:83",
                    "text": "@notice Emitted when a slasher is removed\n @param _slasher Address of the removed slasher"
                  },
                  "id": 13871,
                  "name": "SlasherRemoved",
                  "nameLocation": "428:14:83",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13870,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13869,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_slasher",
                        "nameLocation": "451:8:83",
                        "nodeType": "VariableDeclaration",
                        "scope": 13871,
                        "src": "443:16:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13868,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "443:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "442:18:83"
                  },
                  "src": "422:39:83"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13872,
                    "nodeType": "StructuredDocumentation",
                    "src": "465:97:83",
                    "text": "@notice Emitted when a disputer is added\n @param _disputer Address of the added disputer"
                  },
                  "id": 13876,
                  "name": "DisputerAdded",
                  "nameLocation": "571:13:83",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13875,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13874,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_disputer",
                        "nameLocation": "593:9:83",
                        "nodeType": "VariableDeclaration",
                        "scope": 13876,
                        "src": "585:17:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13873,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "585:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "584:19:83"
                  },
                  "src": "565:39:83"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 13877,
                    "nodeType": "StructuredDocumentation",
                    "src": "608:101:83",
                    "text": "@notice Emitted when a disputer is removed\n @param _disputer Address of the removed disputer"
                  },
                  "id": 13881,
                  "name": "DisputerRemoved",
                  "nameLocation": "718:15:83",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 13880,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13879,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "_disputer",
                        "nameLocation": "742:9:83",
                        "nodeType": "VariableDeclaration",
                        "scope": 13881,
                        "src": "734:17:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13878,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "734:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "733:19:83"
                  },
                  "src": "712:41:83"
                },
                {
                  "documentation": {
                    "id": 13882,
                    "nodeType": "StructuredDocumentation",
                    "src": "773:180:83",
                    "text": "@notice Tracks whether the address is a slasher or not\n @param _slasher Address being checked as a slasher\n @return _isSlasher Whether the address is a slasher or not"
                  },
                  "functionSelector": "b87fcbff",
                  "id": 13889,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "slashers",
                  "nameLocation": "965:8:83",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13885,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13884,
                        "mutability": "mutable",
                        "name": "_slasher",
                        "nameLocation": "982:8:83",
                        "nodeType": "VariableDeclaration",
                        "scope": 13889,
                        "src": "974:16:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13883,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "974:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "973:18:83"
                  },
                  "returnParameters": {
                    "id": 13888,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13887,
                        "mutability": "mutable",
                        "name": "_isSlasher",
                        "nameLocation": "1020:10:83",
                        "nodeType": "VariableDeclaration",
                        "scope": 13889,
                        "src": "1015:15:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 13886,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1015:4:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1014:17:83"
                  },
                  "scope": 13940,
                  "src": "956:76:83",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13890,
                    "nodeType": "StructuredDocumentation",
                    "src": "1036:185:83",
                    "text": "@notice Tracks whether the address is a disputer or not\n @param _disputer Address being checked as a disputer\n @return _isDisputer Whether the address is a disputer or not"
                  },
                  "functionSelector": "274a8db4",
                  "id": 13897,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "disputers",
                  "nameLocation": "1233:9:83",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13893,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13892,
                        "mutability": "mutable",
                        "name": "_disputer",
                        "nameLocation": "1251:9:83",
                        "nodeType": "VariableDeclaration",
                        "scope": 13897,
                        "src": "1243:17:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13891,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1243:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1242:19:83"
                  },
                  "returnParameters": {
                    "id": 13896,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13895,
                        "mutability": "mutable",
                        "name": "_isDisputer",
                        "nameLocation": "1290:11:83",
                        "nodeType": "VariableDeclaration",
                        "scope": 13897,
                        "src": "1285:16:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 13894,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1285:4:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1284:18:83"
                  },
                  "scope": 13940,
                  "src": "1224:79:83",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13898,
                    "nodeType": "StructuredDocumentation",
                    "src": "1320:65:83",
                    "text": "@notice Throws if the address is already a registered slasher"
                  },
                  "id": 13900,
                  "name": "SlasherExistent",
                  "nameLocation": "1394:15:83",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13899,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1409:2:83"
                  },
                  "src": "1388:24:83"
                },
                {
                  "documentation": {
                    "id": 13901,
                    "nodeType": "StructuredDocumentation",
                    "src": "1416:56:83",
                    "text": "@notice Throws if caller is not a registered slasher"
                  },
                  "id": 13903,
                  "name": "SlasherUnexistent",
                  "nameLocation": "1481:17:83",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13902,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1498:2:83"
                  },
                  "src": "1475:26:83"
                },
                {
                  "documentation": {
                    "id": 13904,
                    "nodeType": "StructuredDocumentation",
                    "src": "1505:66:83",
                    "text": "@notice Throws if the address is already a registered disputer"
                  },
                  "id": 13906,
                  "name": "DisputerExistent",
                  "nameLocation": "1580:16:83",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13905,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1596:2:83"
                  },
                  "src": "1574:25:83"
                },
                {
                  "documentation": {
                    "id": 13907,
                    "nodeType": "StructuredDocumentation",
                    "src": "1603:57:83",
                    "text": "@notice Throws if caller is not a registered disputer"
                  },
                  "id": 13909,
                  "name": "DisputerUnexistent",
                  "nameLocation": "1669:18:83",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13908,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1687:2:83"
                  },
                  "src": "1663:27:83"
                },
                {
                  "documentation": {
                    "id": 13910,
                    "nodeType": "StructuredDocumentation",
                    "src": "1694:84:83",
                    "text": "@notice Throws if the msg.sender is not a slasher or is not a part of governance"
                  },
                  "id": 13912,
                  "name": "OnlySlasher",
                  "nameLocation": "1787:11:83",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13911,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1798:2:83"
                  },
                  "src": "1781:20:83"
                },
                {
                  "documentation": {
                    "id": 13913,
                    "nodeType": "StructuredDocumentation",
                    "src": "1805:85:83",
                    "text": "@notice Throws if the msg.sender is not a disputer or is not a part of governance"
                  },
                  "id": 13915,
                  "name": "OnlyDisputer",
                  "nameLocation": "1899:12:83",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 13914,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1911:2:83"
                  },
                  "src": "1893:21:83"
                },
                {
                  "documentation": {
                    "id": 13916,
                    "nodeType": "StructuredDocumentation",
                    "src": "1932:64:83",
                    "text": "@notice Registers a slasher by updating the slashers mapping"
                  },
                  "functionSelector": "68a9f19c",
                  "id": 13921,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addSlasher",
                  "nameLocation": "2008:10:83",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13919,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13918,
                        "mutability": "mutable",
                        "name": "_slasher",
                        "nameLocation": "2027:8:83",
                        "nodeType": "VariableDeclaration",
                        "scope": 13921,
                        "src": "2019:16:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13917,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2019:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2018:18:83"
                  },
                  "returnParameters": {
                    "id": 13920,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2045:0:83"
                  },
                  "scope": 13940,
                  "src": "1999:47:83",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13922,
                    "nodeType": "StructuredDocumentation",
                    "src": "2050:62:83",
                    "text": "@notice Removes a slasher by updating the slashers mapping"
                  },
                  "functionSelector": "aac6aa9c",
                  "id": 13927,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "removeSlasher",
                  "nameLocation": "2124:13:83",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13925,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13924,
                        "mutability": "mutable",
                        "name": "_slasher",
                        "nameLocation": "2146:8:83",
                        "nodeType": "VariableDeclaration",
                        "scope": 13927,
                        "src": "2138:16:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13923,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2138:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2137:18:83"
                  },
                  "returnParameters": {
                    "id": 13926,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2164:0:83"
                  },
                  "scope": 13940,
                  "src": "2115:50:83",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13928,
                    "nodeType": "StructuredDocumentation",
                    "src": "2169:66:83",
                    "text": "@notice Registers a disputer by updating the disputers mapping"
                  },
                  "functionSelector": "9d5c33d8",
                  "id": 13933,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "addDisputer",
                  "nameLocation": "2247:11:83",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13931,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13930,
                        "mutability": "mutable",
                        "name": "_disputer",
                        "nameLocation": "2267:9:83",
                        "nodeType": "VariableDeclaration",
                        "scope": 13933,
                        "src": "2259:17:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13929,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2259:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2258:19:83"
                  },
                  "returnParameters": {
                    "id": 13932,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2286:0:83"
                  },
                  "scope": 13940,
                  "src": "2238:49:83",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 13934,
                    "nodeType": "StructuredDocumentation",
                    "src": "2291:64:83",
                    "text": "@notice Removes a disputer by updating the disputers mapping"
                  },
                  "functionSelector": "f0f346b9",
                  "id": 13939,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "removeDisputer",
                  "nameLocation": "2367:14:83",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 13937,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 13936,
                        "mutability": "mutable",
                        "name": "_disputer",
                        "nameLocation": "2390:9:83",
                        "nodeType": "VariableDeclaration",
                        "scope": 13939,
                        "src": "2382:17:83",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13935,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2382:7:83",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2381:19:83"
                  },
                  "returnParameters": {
                    "id": 13938,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2409:0:83"
                  },
                  "scope": 13940,
                  "src": "2358:52:83",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 13941,
              "src": "143:2269:83",
              "usedErrors": [
                13900,
                13903,
                13906,
                13909,
                13912,
                13915
              ]
            }
          ],
          "src": "32:2381:83"
        },
        "id": 83
      }
    }
  }
}
